- ベストアンサー
Matlabのinline関数
ネットでダウンロードしたMファイルに f = inline('x^2 + y^2') という記述があるのですが、このinline関数というものがなんなのかが良くわかりません。 ネットで調べたところ、inline関数はオーバーヘッドを避けることができるとか、オリジナル関数を定義するときに使うとかという表現を見たのですが、上の記述は単に'x^2 + y^2という関数を定義しているだけなのでしょうか。関数Mファイルを作成するのと同義なのでしょうか。その場合、inline関数を使用する利点等がなんなのか教えていただきたいと思います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
プログラムでは、基本的に複数箇所で同一の処理を行う場合、サブルーチン化を行います。MATLABでいえばM-ファイルの作成ですね。 サブルーチンの処理を行う場合、普通はそのサブルーチンを呼び出すわけですが、何か特段の事情(主に処理の高速化)がある場合、呼出元のプログラムにサブルーチンのプログラムを展開することがあります。この展開されたコードを、インライン・コードといいます。 インラインコードの利点は、サブルーチンの呼び出しに必要なシステム負荷(オーバーヘッド)を無くし、処理を高速化することができることです。ですが、同じコードを複数箇所に記述するため、プログラムサイズが大きくなる、メンテナンスや保守がしにくくなるといったデメリットもあります。 以上のことを踏まえて、MATLABのinline関数を使用する利点ですが、 (1)M-ファイルにするほどではないが、複数回使用する必要のある処理をサブルーチン化できる (2)オーバーヘッドがないという訳ではないでしょうが、M-ファイルの呼び出しに比べると軽減でき、処理が高速になる。 といったところだと思います。特に処理速度の遅いMATLABでは、(2)は死活問題になる場合もありますしね。 ※インライン・コード http://www.atmarkit.co.jp/icd/root/91/5784291.html ※オーバーヘッド http://www.nifty.com/webapp/digitalword/word/009/00931.htm
その他の回答 (1)
- rabbit_cat
- ベストアンサー率40% (829/2062)
matlabのインライン関数は、(おそらく)オーバーヘッドとか効率はM-ファイルと全然変わらないと思いますよ。(むしろ中間言語にコンパイルされてないような感じなんで、M-ファイルより遅い可能性もあるかも) もともと、効率を上げるためにあるものではないです。 使いみちは、fzeroとか、fminsearchとか、quadとか、引数として関数を要求するコマンドで、そのためだけにわざわざM-ファイル新しく書くのは面倒なんで、その場で簡単に関数を定義できると便利、っていうことです。 http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/fzero.shtml http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/fminbnd.shtml http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/quad.shtml
お礼
ありがとうございました。Mファイルをつくるほどではない場合に私も使用してみたいと思います。
お礼
ありがとうございました。よくわかりました。