MATLABエディター

プログラミングを行うときには「MATLABエディター」を使います。このエディターには単なるテキスト編集以上の沢山の機能が盛り込まれています。デバッグを行う際に、ブレークポイントを設定して、プログラム内の特定箇所で一時停止してプログラムの実行状態を確認したり、ステップ実行したりするようなことは、どんなプログラミング環境でもできます。MATLABではそれだけではなく、一時停止した状態から、追加でコマンド入力して計算を行ったり、ある変数を可視化して確認したりといったことが容易にできるのです。これもインタープリタ型環境の特長です。

MATLABエディターに搭載されている便利な機能を見てみましょう。

  1. セル実行
  2. コードアナライザ
  3. パブリッシュ

1. セル実行

MATLABのスクリプトファイルを部分的に実行する機能です。コメント識別文字「%」を2つ連続して行頭に記述すると、それ以降の行が1つの領域「セル」として認識され、1つのセルのみを実行することが可能となります。プログラムの途中経過を確認しながら実行したいときや、パラメータ値を変えて試行錯誤したいときなどに便利です。

2. コードアナライザ

エディターで開かれているプログラムの自動チェック機能があります。記述に問題がある箇所には警告とエラーメッセージが表示され、修正を促します。次のような場合に警告が表示されます。

  • 構文エラー。カッコの数の不一致、不要なカッコ、区切り記号が無い場合
  • 変数の行列サイズが動的に変更されるような非効率なプログラム
  • より高速な関数が使用できる場合

上図はプログラムに問題があるため、エディターの右側に赤色の警告マークが表示されています。マウスポインターを警告マークもしくは問題があるコードの上に移動すると説明が表示されます。

3. パブリッシュ

MATLABプログラムと実行結果にコメントを加えて、ドキュメントとして出力する機能です。業務の成果を提出するのに、ワードなど文書作成ソフトでレポートを書き、MATLABの実行結果をキャプチャして貼り付けている方もいるでしょう。MATLABプログラムの中に適宜書いたコメントが文書となって、PDF, Word, PowerPoint, HTML, XML, Latexなどの汎用フォーマットによる文書を自動的に作成してくれるのです。

C/C++コードの取り込みMEX機能

以前、Cコードなどのコンパイル言語と、MATLABなどのインタープリタ言語のそれぞれのメリットについて書きましたが、MATLABにCコードを取り込む機能を利用すると、その良いとこ取りができ、インタープリタ型処理の対話的、即時実行を残しながら、コンパイル型処理の高速性を両立することが出来るようになります。

プログラムには多くの場合、ボトルネックとなる処理の重い箇所が存在しています。全部Cコードで書き直すのは大変なので、ボトルネックとなっている部分のみをCコードで書くことで処理の高速化が行えます(MATLAB CoderというオプションでMATLABコードをCコードに変換する方法もあるのですが、今回はMATLAB標準機能を中心に説明して、これはまた別の機会に説明したいと思います)。

CコードをMATLABに取り込むMEX(Matlab EXecutable)機能を使用する上での注意点は2つです。

  • ゲートウェイルーチンmexfunction()をCコードに追加する(mexfunctionのテンプレートが製品ドキュメントにありますのでこれをコピーします)この関数内でユーザ関数をコールします。
  • ヘッダファイルmex.hをインクルードする

コンパイルはMATLAB上で行います。

>> mex yprime.c

カレントディレクトリには実行ファイルyprime.mex(拡張子は動作環境によって異なります)が出来ていますので、これをMATLAB関数と同じように利用することが出来ます。

>> Y =  yprime(1,1:4)
Y =
    2.0000    8.9685    4.0000   -1.0947

逆に、自分が書いたC/C++やFortranプログラムの中からMATLABのプログラムを呼び出して実行するというMATLABエンジンの機能もあります。この機能を使うことで、独自のプログラムの中にMATLABで提供されている複雑な数学関数を組み入れて処理を行ったり、MATLABの可視化の機能だけ使ったりすることが出来るようになります。C/C++開発環境をメインに使っているような人には、こちらの機能の方が使いやすいかも知れません。

ここまで、MATLABのベーシックな機能を解説しました。次回以降はオプションの機能にも足を伸ばして機能を見ていきたいと思います。

著者紹介

松本 充史(まつもと あつし)
MathWorks Japan
アプリケーションエンジニアリング部
シニアアプリケーションエンジニア
Mathworks JapanではMATLABの中でも特に信号処理やコード生成に関する機能を担当している