あなたはfunction handlesとanonymous functionsを使用することができます。
a = @(x) x^2 + c1;
b = @cos;
c = @(x) sqrt(x - c2);
d = @exp;
b
とd
は、既存の機能へのハンドルです。 b(...)
またはd(...)
を使用してそれらを通常の関数として呼び出すことができます。 a
とc
は匿名関数です。それらは代入の引数リストとハンドルの定義を提供します。Pythonのlambdasにいくらか似ています。あなたはb = @(x) cos(x)
のようなことをすることができますが、追加の操作が必要ないので、本当に意味がありません。
今、あなたは、代替私はあなたが避けたいと仮定していた、機能ごとに別々のM-ファイルを書くことである
z = @(x, y) a(x) + b(x) + c(y) + d(y) + c3;
を行うことができます。
たとえば偏微分を取るなどの関数を使用すると、かなり簡単になります。楽しみのためだけに、私は、Red Hat 6.5にオクターブ3.4.3を使用して(次のスクリプトを実行した
更新
(z(x + delta, y) - z(x - delta, y))/(2 * delta)
:関数ハンドルは、他の組み込みまたはm-ファイルに定義された関数のように呼ばれています):
octave:1> c1 = -100;
octave:2> c2 = -10;
octave:3> c3 = 42;
octave:4> a = @(x) x^2 + c1;
octave:5> b = @cos;
octave:6> c = @(x) sqrt(x - c2);
octave:7> d = @exp;
octave:8> z = @(x, y) a(x) + b(x) + c(y) + d(y) + c3;
octave:9> [X, Y] = meshgrid([-10:0.1:10], [-10:0.1:10]);
octave:10> surf(X, Y, z(X, Y));
結果は特に興味深いものではありませんが、それはこの技術の有効性を実証します:
ここにはIDEOneのリンクがあります。
シンボリック部分派生または有限差分はOKですか? –
私は、Javaの勾配降下アルゴリズムで最小化される複雑な方程式をテストするためにOctaveを使用しているので、有限の違いのように思われます。また、Octaveはそれを行うためのツールですか、私はMatlabに転送する必要がありますか? – borgmater
Octaveは間違いなく追いついていますが、MATLABは少し速くなるでしょう。個人的には、Pythonに比べると少し厄介なことが分かります。 –