fminsearch
関数の入力引数が不足しているというエラーが表示されます。
f = @(x1,x2,x3) x1.^2 + 3.*x2.^2 + 4.*x3.^2 - 2.*x1.*x2 + 5.*x1 + 3.*x2 + 2.*x3;
[x, val] = fminsearch(f,0)
私の機能に何か問題がありますか?他のコマンドで入力関数として使用したいときはいつでもエラーが発生します。
fminsearch
関数の入力引数が不足しているというエラーが表示されます。
f = @(x1,x2,x3) x1.^2 + 3.*x2.^2 + 4.*x3.^2 - 2.*x1.*x2 + 5.*x1 + 3.*x2 + 2.*x3;
[x, val] = fminsearch(f,0)
私の機能に何か問題がありますか?他のコマンドで入力関数として使用したいときはいつでもエラーが発生します。
使い方に困って
fminsearch
[…]
ここで立ち止まって、最小化しようとしている関数についてもう少し考えてみてください。
ここでは、数値最適化 (これがfminsearch
行うこと) は不要です。あなたの関数は vector の二次関数ですx
。言い換えれば、その値は次のx
ように表すことができます
x^T A x + b^T x
ここで、行列A
とベクトルb
は次のように定義されます (MATLAB 表記を使用)。
A = [ 1 -1 0;
-1 3 0;
0 0 4]
と
b = [5 3 2].'
A
は正定であるため、関数には最小値が 1 つだけあり、MATLAB で次のように計算できます。
x_sol = -0.5 * A \ b;
遭遇したエラーの原因が気になる場合は、fuesika の回答をご覧ください。しかし、できる限りなしにしfminsearch
てください。
これはまさに Matlab が伝えていることです: 関数は 3 つの引数を必要とします。あなたは1つだけを通過しています。
それ以外の
[x, val] = fminsearch(f,0)
あなたはそれを次のように呼ぶべきです
[x, val] = fminsearch(f,[0,0,0])
f
3 次元ベクトルを入力としてのみ受け入れるように関数を定義するためです。
の仕様の詳細については、http : //mathworks.com/help/matlab/ref/fminsearch.htmlfminsearch
のオンライン ドキュメントを参照してください。
x = fminsearch(fun,x0) は点 x0 から開始し、fun で記述された関数の局所最小化である値 x を返します。x0 は、スカラー、ベクトル、または行列にすることができます。fun は function_handle です。