optimset 関数で、"PlotFcns" パラメータを使用することで可能です。
PlotFcns パラメータには、描画用の関数を各イタレーションでのコールバックとして定義します。
描画用の関数は、下記が用意されています。
optimplotx.m : 現在のパラメータ推定値
optimplotfval.m :目的関数の値
optimplotfunccount.m : 目的関数の評価回数
※Optimization Toolbox では、下記の関数も提供されています。
optimplotconstrviolation.m : 最大制約違反
optimplotfirstorderopt.m : 一次の最適性(output.firstorderopt)
optimplotresnorm.m : 残差ノルム
optimplotstepsize.m : ステップサイズ
例えば、optimplotfval.m を使用して、各繰り返し計算での目的関数の値を表示するには、以下のように実行します。
banana = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2; % 目的関数定義
options = optimset('PlotFcns',@optimplotfval); % PlotFcns の設定
[x,fval] = fminsearch(banana,[-1.2, 1],options) % 最適化
また、描画用の関数をユーザ定義で作成することも可能です。その場合、描画用の関数は、決められた関数書式で記述する必要があります。
以下の MATLABファンクションファイル myplot.m は、ユーザ定義で作成したプログラム例です。
function stop = myplot(x,optimValues,state)
% 入力引数
% x: 目的変数
% optimValues: 現在の繰り返し計算での結果を含む構造体
% state: 現在の最適化計算の状態('init','interrupt','iter','done'のいずれか)
% 出力引数
% stop: 最適化計算の継続(false)/停止(true)を決定するフラグ
stop = false;
switch state
case 'init' % 初期化時
hold on
case 'iter' % 繰り返し計算時
plot(optimValues.iteration,x,'o');
case 'done' % 計算終了時
hold off
legend('x1','x2')
otherwise
end
end
以下の URL より参考情報をご覧いただけます。
●Optimization Toolboxヘルプドキュメント(英語):Plot Functions R2024aの場合