非線形関数の演算
関数ハンドル
任意の MATLAB® 関数にハンドルを作成し、関数を参照するための手段としてそのハンドルを使用することができます。関数ハンドルは、一般に、他の関数に引数リストの中で渡され、そこで、ハンドルを使った関数を実行したり "計算" します。
MATLAB の中で、関数ハンドルは、関数名の前に符号 @
を使って作成します。次の例は、関数 sin
に対する関数ハンドルを作成し、それに、変数 fhandle
を割り当てたものです。
fhandle = @sin;
関数名で関数を呼び出すのと同じ方法で、関数ハンドルによって関数を呼び出すことができます。その構文は次のとおりです。
fhandle(arg1, arg2, ...);
以下に示す関数 plot_fhandle
は関数ハンドルとデータを受け取り、その関数ハンドルを使って y 軸のデータを生成しプロットします。
function plot_fhandle(fhandle, data) plot(data, fhandle(data))
下に示す関数 sin
へのハンドルと引数と共に plot_fhandle
を呼び出すと、計算結果は正弦波プロットとして表示されます。
plot_fhandle(@sin, -pi:0.01:pi)
関数を引数とする関数
「関数を引数とする関数」と呼ばれる関数クラスは、スカラー変数の非線形関数と共に機能します。すなわち、1 つの関数が他の関数上で機能するものです。次のような事柄を含んでいます。
零点の検出
最適化
求積
常微分方程式
MATLAB では、非線形関数を、それを定義するファイルによって表します。たとえば、matlab/demos
フォルダーに含まれている関数 humps
の簡単なバージョンを以下に示します。
function y = humps(x) y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;
区間 0 ≤ x
≤ 1 で、この関数を計算します。
x = 0:.002:1; y = humps(x);
そして、関数をプロットします。
plot(x,y)
グラフは、関数が x = 0.6 近傍で局所的最小値をもつことを示しています。関数 fminsearch
は、関数の最小値をもつ x の値、"最小点" を探索します。fminsearch
への最初の引数は、最小化される関数の関数ハンドル、2 番目の引数は最小値の位置のラフな推定値です。
p = fminsearch(@humps,.5) p = 0.6370
最小点で、関数を計算するには、
humps(p) ans = 11.2528
数値解析は、定積分の数値的近似と常微分方程式の数値積分とを区別するため "求積" と "積分" の項を使います。MATLAB の求積法は、quad
と quadl
です。ステートメント
Q = quadl(@humps,0,1)
は、グラフ曲線の下の領域を計算し、その結果を出力します。
Q = 29.8583
最終的に、グラフは、関数がこの区間で 0 にならないことを示しています。それで、次のステートメントで 0 の位置を探索します。
z = fzero(@humps,.5)
結果、区間の外に見つかりました。
z = -0.1316