• ベストアンサー

Matlabのinline関数

sgwjnの回答

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

プログラムでは、基本的に複数箇所で同一の処理を行う場合、サブルーチン化を行います。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

phy0
質問者

お礼

ありがとうございました。よくわかりました。

関連するQ&A

  • 関数について。

    関数について。 『y=f(x)を単に関数f(x)ともいう。』 という記述があります。 y=f(x)=(xの式)があれば、f(x)=(xの式)を抽出すれば、y=f(x)は関数f(x)とも言えますね。(a=b=0⇒a=0,b=0が言えるように、 y=f(x)=(xの式)⇒y=(xの式),f(x)=(xの式)が言えますよね。このf(x)=(xの式)が関数f(x)である。) しかし関数f(x)だけが与えられれば、y=f(x)とは限りません。u=f(x)やz=f(x)かもしれません。ですが、yと等しくないなら、u=f(x)とかz=f(x)とか与えられるはずですね。 でも、問題を解くとき、それをグラフにつなげたいなら自分でy=f(x)と定義しますね。 つまり、一般的にはxy平面で考えるから、 関数f(x)⇒y=f(x) は言えますよね?

  • Matlabで自作関数をオーバーロード

    Matlabの組み込み関数の中には、引数の数や戻り値の数に応じて異なる作用をするものが沢山あると思います。 例えば組み込みのmax関数だと y=max(x) ならxの第一次元にについての最大値を返しますし、 [y,i]=max(x) なら、さらに i に最大値のindexを代入、 一方 x=max(x,y) ならx,yの各要素について大きい方を取った行列を、 x=max(x,[],d) ならxのd次元についての最大化をしてくれます。 質問ですが、そういう関数を自分で作ることは可能ですか? function [z,w]=f(x,y) という風に関数を定義してしまうと、たとえyを関数中で利用しない場合でも、引数yを指定しなければエラーになってしまいます。同じ関数名でも呼び方に応じて異なった操作をさせることはできないでしょうか?

  • MATLABにて場合分け関数を定義したい

    MATLABの超初心者です. 関数f(x)を定義域により,違う関数で定義したいと考えています. つまり, f(x)= f1(x) if x<=5 = f2(x) if x>5 という感じです.なにぶん初心者のため,何を調べればよいのやら途方に暮れています.アドバイスお願いします

  • 関数の表記について、ちょっとした質問です。

    関数の表記について、ちょっとした質問です。 『yがxの関数であることをy=f(x)で表す。また、この関数を単に関数f(x)ともいう。』 と教科書にあります。 "この関数"とは、yがxの関数であること、つまりy=f(x)のことを単に関数f(x)というのでしょうか? または、"xの関数"という部分を関数f(x)というのでしょうか? 関数f(x)とだけ書いてあっても、yと等しいとは限らないので、自分は下が正しいと思いますが。 まあ、教科書の記述では、y=f(x)と事前に書いてあるから、関数f(x)=yと表せると思いますが。

  • 陰関数の微分について

    陰関数の微分についてよくわからないところがあるので質問します。 R^2の開集合U上で陰関数f(x,y)=0 (f:R^2→RでfはU上C^1級)が与えられているとする。 両辺の微分を取ると、(∂f/∂x)dx+(∂f/∂y)dy=0となる。という記述がありますが、いまいち理解できません。なぜなら、f(x,y)はU上定義されている関数で微分を取ることはわかりますが、右辺の0はここでは U上恒等的に0、すなわち関数として0という意味ではないので, 右辺の微分を取って等式とするのは変だと思ったからです。 ここを納得するにはどう考えればよいのでしょうか。

  • 凸関数

    R^nにあるx,yの内積を<x,y>=x´yとする。 ここでR^nの凸集合Cについて 関数f=sup{<x,y>|y∈C} とすると fが凸関数であることを凸関数の定義を使っても できません。 解けるにはどうやればいいのでしょうか?

  • コーシーの関数方程式の解き方

    閲覧ありがとうございます。 実数R上で定義された連続関数fが f(x+y)=f(x)+f(y) を満たすとき、fはどんな問題になるか調べよ。 という問題、所謂「コーシーの関数方程式」の解き方なのですが、この解き方の中でm、nが整数のとき f(n)=f( (n/m) × m)=mf(n/m) という変形がなされていたのですが、どうしてこれが成り立つのでしょうか? どなたか分かる方解答よろしくお願いします。お待ちしています。

  • yがxの関数でない時の微分の定義

    y=f(x)のときdy/dxの定義は, dy/dx=lim[Δx→0]{f(x+Δx)-f(x)}/Δx ですよね? これは,yがxの関数(一つのxに対してyが一つ)だから定義できます. では,yがxの関数でないとき(一つのxに対してyが二つ以上のとき),例えばx=y^2のとき,dy/dxの定義はどうなるんですか?

  • 二次関数について質問です。

    関数 f(x) (0≦x≦4) を以下のように定義するとき、次の関数のグラフを書け。 f(x)= 2x (0≦x<2)   8-2x (2≦x≦4) (ァ) y=f(f(x)) この問題について どの範囲ではどんな関数になるのか 教えて下さい。

  • 関数方程式 恒等式型

    関数f(x)はすべての実数x,yに対してf(x+y)=f(x)e^y+f(y)e^xを満たし、さらにx=0では微分可能でf'(0)=1とする。 (1)f(0)を求めよ。 (2)lim【h→0】f(h)/hを求めよ。 (3)関数f(x)はすべてのxで微分可能であることを、微分の定義にしたがって示せ。さらにf'(x)をf(x)を用いて 表せ。 (4)関数g(x)をg(x)=f(x)e^(-x)で定める。g'(x)を計算して関数f(x)を求めよ。 すみませんが、お願いします。