2016-09-12 11 views
0

問題は数学理論に関連しているかもしれないし、そうでないかもしれないが、私はここで依頼したいと思う。私は次のように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も派生していません。状況の下では、それらは同等でなければならない。

+0

コードブロックのブロックコードの書式を使用して、構文の強調表示を有効にしてください。 – Adriaan

答えて

0

fminsearchfminuncは異なる派生自由なアルゴリズムを使用します。fminsearchsimplex search方法のいくつかの種類を使用して、fminuncline searchを使用しています。適切に選択された下降方向fminuncの結果 は、2回の反復で最小値を求め:

Iteration Func-count  f(x)  Step-size  optimality 
0   3    14        6 
1   6    9  0.166667    4 
2   9    5    1    0 

シンプレックス法は、この場合、非常に最適ではありません。 fminsearchのための最適化の詳細は以下の通りです:

Iteration Func-count  min f(x)   Procedure 
0   1    14   
1   3    14   initial simplex 
2   5   11.25   expand 
3   6   11.25   reflect 
4   8    7.25   expand 
5   9    7.25   reflect 
6   11    5.25   reflect 
7   12    5.25   reflect 
8   14    5   contract outside 
9   15    5   reflect 
10   17    5   contract inside 
11   19    5   contract inside 
12   21    5   contract inside 
13   23    5   contract inside 
14   25    5   contract inside 
15   27    5   contract inside 
16   29    5   contract inside 
17   31    5   contract inside 
18   33    5   contract inside 
19   35    5   contract inside 
20   37    5   contract inside 
21   39    5   contract inside 
22   41    5   contract inside 
23   43    5   contract inside 
24   45    5   contract inside 
25   47    5   contract inside 
26   49    5   contract inside 
27   51    5   contract inside 
28   53    5   contract inside 
29   55    5   contract inside 
30   57    5   contract inside 
31   59    5   contract inside 
32   61    5   contract inside 
33   63    5   contract inside 
34   65    5   contract inside 
35   69    5   shrink 
36   73    5   shrink 
37   77    5   shrink 
38   81    5   shrink 
39   85    5   shrink 
40   89    5   shrink 
41   93    5   shrink 
42   97    5   shrink 
43   101    5   shrink 
44   105    5   shrink 
45   109    5   shrink 

それはfminsearchの結果が正確に2.0000 3.9000である理由を言うのは本当に難しいです。最小への道は簡単ではありませんでした。

関連する問題