0

私はMatlabでプログラムを書いていて、このように関数を定義しています。

sum (i=1...100) (a*x(i) + b*y(i) + c)

xyはわかっていますが、a、b、c はわかっていません。関数の合計値が最小になるように、それらの値を見つける必要があります。問題に対する追加の制約はありません。

この最小化問題を解決するために fminsearch を使用することを考えましたが、Mathworks から、fminsearch に適した入力である関数が次のように定義されていることがわかります (例):

square = @(x) x.^2

したがって、私の場合、p=[a, b, c]最小化する値としてベクトルを使用できますが、関数の残りの部分を定義する方法がわかりません。ご覧のとおり、インデックス i の可能な値の数は膨大であるため、単純にすべてを明示的に合計することはできませんが、何らかの方法で合計を表す必要があります。関数を別の場所に記述すると、a、b、c にシンボリック計算を使用することを余儀なくされ (syms で宣言する)、fminsearch がそれを受け入れるかどうかわかりません。

私に何ができる?もちろん、私の状況では fminsearch が実行不可能であることが判明した場合は、別のものを使用するためのリンクを受け入れます。

4

1 に答える 1

1

最も一般的な解決策は、目的関数の定義でxandを使用することです。y

>> objfun = @(p) sum( p(1).*x + p(2).*y + p(3) );
>> optp = fminsearch( objfun, po, ... );
于 2013-08-04T19:11:31.113 に答える