1

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)

私の機能に何か問題がありますか?他のコマンドで入力関数として使用したいときはいつでもエラーが発生します。

4

2 に答える 2

3

使い方に困って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てください。

于 2015-06-03T21:38:24.307 に答える
1

これはまさに Matlab が伝えていることです: 関数は 3 つの引数を必要とします。あなたは1つだけを通過しています。

それ以外の

[x, val] = fminsearch(f,0)

あなたはそれを次のように呼ぶべきです

[x, val] = fminsearch(f,[0,0,0])

f3 次元ベクトルを入力としてのみ受け入れるように関数を定義するためです。

の仕様の詳細については、http : //mathworks.com/help/matlab/ref/fminsearch.htmlfminsearchのオンライン ドキュメントを参照してください。

x = fminsearch(fun,x0) は点 x0 から開始し、fun で記述された関数の局所最小化である値 x を返します。x0 は、スカラー、ベクトル、または行列にすることができます。fun は function_handle です。

于 2015-06-03T21:23:47.513 に答える