2017-08-11 4 views
1

私はlsqnonlinを私の最適化ルーチンとして使用しています。すべての以前の値を表示しながら各反復でコスト関数をプロットする必要があります。だから私はthisのようなものを見せたい:lsqnonlinを使用してすべての反復中に関数値の進化をプロットする

enter image description here

しかし、lsqnonlinを使用して、私は唯一の現在の繰り返しで、コスト関数の値をプロットすることができました。

options   = optimset('TolFun', 1e-5, 'TolX',1e-5, 'MaxFunEvals', 10000, 'PlotFcns', @optimplotfval,'Display','iter') 

私は上に示した図のように何かを得ることlsqnonlinなどのオプションを設定する方法はあります:これらのオプションを使用していますか? fminsearchあなたが客観/コスト関数値のプロットを取得します、例えば、そうで

% STOP = OPTIMPLOTFVAL(X,OPTIMVALUES,STATE) plots OPTIMVALUES.fval. If 
% the function value is not scalar, a bar plot of the elements at the 
% current iteration is displayed. If the OPTIMVALUES.fval field does not 
% exist, the OPTIMVALUES.residual field is used. 

:あなたはMATLABの端末に(optimplotfval.mのためのプログラムに見れば

答えて

2

を使用すると、次のコメントが表示されますedit optimplotfval.mを入力します。他にoptimplotfval.m反復回数対が、lsqnonlinの場合には、あなたが所与の反復での残留値のバープロットを得ているようだ。

修正することですoptimplotfval.mをもとに、独自のプロット関数を作ることです。コピー&ペーストファイル(例:あなたはoptimplotfval.mと呼ばれるのと同じ方法で、この新しい関数を呼び出すことができ

stop = false; 
switch state 
    case 'iter' 
     if isfield(optimValues,'fval') 
      if isscalar(optimValues.fval) 
       plotscalar(optimValues.iteration,optimValues.fval); 
      else 
       plotvector(optimValues.iteration,optimValues.fval); 
      end 
     else 
      % Plot the squared norm of residuals as a function of iteration number instead of bar plot of residual values at current iteration 
      fval = norm(optimValues.residual)^2; 
      % Call the scalar function instead 
      plotscalar(optimValues.iteration,fval);  
end 

:私の場合は

options = optimoptions('lsqnonlin','Display','iter','PlotFcns',@my_opt_plot); 
[x,resnorm,residual,exitflag,output] = lsqnonlin(@simple_fun,xc0,[],[],options); 

simple_funが基づいたmy_opt_plot.mは、プログラムの最初の部分の残留オプションを変更しますlsqnonlinのためのMATLABのdocエントリーからの例:

function f = simple_fun(xc) 
    x = [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3]; 
    y = [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5]; 

    f = xc(1)*exp(xc(2)*x)-y; 
end 

あなたがものをプロットした目的関数の値を比較した場合の広報彼らは実際に一致します。

+0

ありがとう、それは私が欲しかったものです。あなたはあなたよりもより良く、より正確な答えを得ることを望むことはできません。 –

+0

助けてくれてうれしい、あなたのことは良い質問だった、私は将来解決策が必要になるだろう:) – atru

関連する問題