2017-05-30 12 views
3

私はoptimoptions関数を使用しています。変数の各繰り返しの後に残差を保存したいと思います。今度は、次のコードの最初の行に反復を表示することを選択した場合、私はコンソールでそれらを見ることができますが、それをベクトル変数として保存することはできますか?私は2行目に残余出力を得ようとしましたが、最後の反復の結果しか得られません。ありがとうございました。matlab optimoptionsは残差を変数に保存します

options = optimoptions(@lsqnonlin,'Algorithm','Levenberg-Marquardt','Display','iter','StepTolerance',1e-4); 
[params,resnorm,residual_opt,exitflag,output,lambda,jacobian] = lsqnonlin(@minDistance,params0,[],[],options); 
angles = params(1:3); 
R = euler2mat(angles); 
T = params(4:6); 
end 

ここでは反復の表示です。私は3番目の列を使いたいだけです。

         First-Order     Norm of 
Iteration Func-count Residual  optimality  Lambda   step 
    0   7  5.4943e+09  3.84e+10   0.01 
    1   14  7.39183e+08  8.74e+09  0.001  6.32624 
    2   21  4.56928e+07   1.1e+09  0.0001  2.59042 
    3   28  2.41748e+06  1.21e+08  1e-05  2.61414 
    4   35   135873  1.39e+07  1e-06  1.45824 
    5   42   8031.22  1.65e+06  1e-07  0.743095 
    6   49   487.971   2e+05  1e-08  0.372708 
    7   56   30.0687  2.47e+04  1e-09  0.186396 
    8   63   1.86599  3.07e+03  1e-10  0.0931815 
    9   70  0.116209    382  1e-11  0.0465832 
    10   77  0.00724993   47.7  1e-12  0.0232892 
    11   84  0.000452687   5.96  1e-13  0.011644 
    12   91  2.82764e-05   0.744  1e-14  0.00582186 
+0

あなたが残差とはどのように過ごしたいですか? – Bentoy13

+0

私は自分のプロットウィンドウの図にプロットしたいと思います。 – jiayi

答えて

1

私はこれをテストするために利用可能な最適化ツールボックスを持っていませんが、各反復と呼ばれるoutput functionを定義することで、各反復での残差を得ることができる必要があります。

最適化オプションでは、関数ハンドルを'OutputFctn', @myOutputFunctionとして追加します。この関数では、残りの値にアクセスして値をプロットするか、ファイルに保存することができます。

function stop = myOutputFunction(x,optimValues,state) 

% Do not use the user defined function to determine when to stop 
stop = false; 

% The following should be the value you are looking for in the 
% current iteration. 
currentResidual = optimValues.residual; 

end 
1

機能のコードを変更せずにすべての残差を直接取得することはできません。

ただし、すべての反復の残差をプロットするには、オプション 'PlotFcn'に値 '@optimplotfval'を追加してください。詳細については、documentation, Optimization optionsを参照してください。既存のプロット関数に基づいて独自のプロット関数を作成することもできます。

--Hint--

たとえばoptimplotfvalのために、そのうちの一つから開始する、カスタムプロットを構築します。コードを新しいファイルに貼り付けて、関数の名前を変更することができます。タイトルを変更するなど、有用でないコマンドを削除します。 vararginから、使用する軸のハンドルである余分なパラメータを取得し、すべてのプロット関数で使用します。

このカスタムプロットを使用するために、カスタムプロットに閉鎖します

'PlotFcn', @(x,optimValues,state)mycustomplot(x,optimValues,state, hMyAxis) 
+0

はい私はこのオプションを見ましたが、別のウィンドウではなく、他のプロットで私のウィンドウにプロットすることができますか? – jiayi

+0

@jiayiそのためにいくつかのヒントが追加されました。 – Bentoy13

関連する問題