MathWorks社のMATLAB - MATLAB関数の研究は、13ノート一緒に学びます
13_2無名関数
一緒に相互学習を議論することを歓迎し、便利な検索- フォローミー
参考
https://ww2.mathworks.cn/help/matlab/matlab_prog/anonymous-functions.html?searchHighlight=%E5%8C%BF%E5%90%8D%E5%87%BD%E6%95%B0&s_tid = doc_srchtitle
匿名関数とは何ですか
- 匿名関数は、プログラムファイルに格納されていないが、データのタイプに関連する変数function_handleの関数です。匿名関数は、入力を受け入れ、ちょうど標準機能のように、出力を返すことができます。しかし、彼らは唯一の実行可能文が含まれていてもよいです。
- 例えば、正方形のハンドルの数を計算するために使用された無名関数を作成します。
sqr = @(x) x.^2;
- 変数SQRは、関数ハンドルです。バックの入力パラメータを含む括弧演算子()@、ハンドルを作成するには、@演算子。匿名関数は、単一の入力xを受け付け、明示的なリターンは、単一の出力、すなわち、xの二乗値の大きさが同じ配列を含有します。
- この値の2乗の計算がハンドルとして機能するように特定の値(5)によって送信され、標準として関数への入力パラメータを渡します。
a = sqr(5)
a =
25
- 関数が値の特定範囲内で計算することができるように、多くのMATLAB(登録商標)関数は、入力の関数ハンドルとして受け入れます。あなたは匿名関数やプログラムファイル用の関数ハンドルを作成することができます。匿名関数を使用することの利点は、ファイルを編集し、維持するだけの短い定義関数を必要とする必要はありません。
- 伝達関数が関数に不可欠処理によって、0〜1点からのSQR範囲を算出機能:
Q =積分(SQR、0,1)。 - 匿名関数を格納するためのワークスペース内の変数を作成する必要はありません。あなたは、このような積分関数の呼び出しとして、式の中で、一時的な関数ハンドルを作成することができます:
Q =積分(。@(X-)X- ^ 2,0,1)。
- 伝達関数が関数に不可欠処理によって、0〜1点からのSQR範囲を算出機能:
式の中の変数
- 関数ハンドルは表現だけではなく、変数のコンピューティングニーズを格納することができ、式を保存することができます。
- 例えば、関数ハンドルを作成する必要がa、b、cの無名関数を係数。
a = 1.3; b = .2; c = 30; parabola = @(x) a*x.^2 + b*x + c;
- そのための、a、b及びcは、あなたが放物線を作成するときに、関数ハンドルは、これらの値を含んで利用可能です。でもあなたの明確な変数ならば、これらの値は、まだ関数ハンドルに永続化:
clear a b c x = 1; y = parabola(x) y = 31.5000
- これらの係数の異なる値を提供するために新しい関数ハンドルを作成する必要はありません
a = -3.9; b = 52; c = 0; parabola = @(x) a*x.^2 + b*x + c; x = 1; y = parabola(1) y = 48.1000
- 関数ハンドルを保存してロード関数は、MATLABは、その後のセッションでそれらをロードし、それに関連する値のMATファイルに保存することができます。
save myfile.mat parabola
注:匿名関数を構築する場合にのみ、明示的な変数を使用してください。匿名アクセス任意の関数や変数入れ子関数が明示的にパラメータリストや体の中で参照されていない場合は、関数を呼び出すとき、MATLABはエラーをスローします。暗黙的変数と関数の呼び出しは、一般的にはeval、evalinを、assigninを、負荷および他の機能に遭遇しています。無名関数の本体で、これらの機能を使用しないでください
複数の無名関数
- 匿名関数式は、他の無名関数を含めることができます。これは、値の特定の範囲内の異なる機能計算にパラメータを渡すために使用することができます。例えば、以下の式を組み合わせ2つの匿名関数で使用され、Cの種々の値について解くことができます。
g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));
- 積分は、匿名関数として記述され、
@(x) (x.^2 + c*x + 1)
- 関数ハンドル関数によって0から1までの範囲で積分演算に伝達
integral(@(x) (x.^2 + c*x + 1),0,1)
- 匿名関数値cを提供するように構成された全体の方程式を介して、
g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));
- 最終的な関数は、Cの任意の値の方程式を解くために使用することができます。例えば:
g(2)
ans =
2.3333
入力の機能なし
- この関数は匿名関数定義内の任意の入力、入力空間を必要とし、括弧を呼び出していない場合
t = @() datestr(now);
d = t()
d =
26-Jan-2012 15:11:47
- しかし、括弧を入れていない別の関数ハンドルを作成し、間違った表現であり、かつ機能を実行しません。
d = t
d =
@() datestr(now)
入力の機能なし
- 入力匿名関数複数のコンマによって離間入力された複数の明示的な指定を必要とします。
myfunction = @(x,y) (x^2 + y^2 + x*y);
x = 1;
y = 10;
z = myfunction(x,y)
z = 111
- 機能の発現が複数の出力を返すことがあれば、関数が呼び出されたとき、あなたはそれらを要求することができ、匿名関数を作成するときしかし、それは明示的に出力パラメータを定義していません。角括弧で囲まれた出力変数の複数。
c = 10;
mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y));
[x,y] = mygrid(pi,2*pi);
無名関数の配列
- (基本的なMATLABデータ型のサポート多次元配列のほとんどが、関数ハンドルをマークする必要がありますが)(単一の要素)。それを使用することができる細胞配列または構造体の配列関数ハンドルを複数記憶します。最も一般的な方法は、例えば、細胞アレイを使用することです
f = {@(x)x.^2;
@(y)y+10;
@(x,y)x.^2+y+10};
- あなたは、細胞の配列を作成すると、MATLABは、スペースを列の区切り文字として解釈されることを覚えています。例えば、スペースの発現、または括弧で囲まれた式を省略し、上記のコードに示すように
- スペースや括弧に注意してください。
f = {@(x) (x.^2); @(y) (y + 10); @(x,y) (x.^2 + y + 10)};
- スペースや括弧に注意してください。
- 携帯コンテンツにアクセスするために、中括弧を使用してください。例えば、fは、{1}第1の機能のハンドルを返します。この機能を実行するために、中括弧の後の括弧内に入力値を渡します
x = 1;
y = 10;
f{1}(x)
f{2}(y)
f{3}(x,y)
ans =
1
ans =
20
ans =
21