問題は数学理論に関連しているかもしれないし、そうでないかもしれないが、私はここで依頼したいと思う。私は次のようにTESTCase.m
を持っている:最適化を行うときにfminsearchとfminuncが異なる答えを返すのはなぜですか?
function ret=TESTCase(Input,k)
if k==1
if Input(2)~=1
Input(2)=1;
ret=(Input(1)-2).^2+5.*Input(2).^2;
end
else if k~=1
ret=(Input(1)-2).^2+(Input(2)-Input(1)).^2;
end
end
その後、私はfminuncのを使用して、次のように関数fminsearchしよう:
[email protected](x)TESTCase(x,1); fminsearch(TEST,[5,3]); fminunc(TEST,[5,3]);
私はそれぞれ2つの答えを得る: 2.0000 3.9000
(関数fminsearchを使用)、2.0000 3.0000
(使用しますfminunc)
私の定義した関数では2つの答えが正しいことが分かりましたが、fminsearch
を使用すると2番目の値が変わるのはなぜですか? fminunc
。それは私には奇妙です。また、関数fminsearchを使用した場合、メッセージは表示されませんが、fminuncのを使用して、次のメッセージが表示されます。
Warning: Gradient must be provided for trust-region algorithm;
using line-search algorithm instead.
In fminunc at 382
Local minimum found.
Optimization completed because the size of the gradient is less than
the default value of the function tolerance.
<stopping criteria details>
。違いは何ですか?私はfminsearch
が派生自由であり、fminunc
ではないことを知っていますが、メッセージが出力された場合は、fminunc
も派生していません。状況の下では、それらは同等でなければならない。
コードブロックのブロックコードの書式を使用して、構文の強調表示を有効にしてください。 – Adriaan