How to call objective function in outputfcn or plotfcn during optimization?

1 回表示 (過去 30 日間)
Michael Stollenwerk
Michael Stollenwerk 2021 年 5 月 3 日
コメント済み: Matt J 2021 年 5 月 3 日
I want to minimize a complicated objective function. It returns 1. objective function value and 2. some fit data (like the fitted line from a ls regression). I want to use the 'OutputFcn' or 'PlotFcn' argument to draw the fitted line given the paramters at the current iteration. Unfortunately the fields in optimValues do not contain the obj_function, so I don't know how to do it. Can anyone help?
As a MWE consider the code below which does the least squares regression numerically.
%% Random Data
x = 1:.1:20;
x = x';
e = randn(numel(x),1)*10;
y = 1 + 3*x + e;
%% Optimization
eparam = fminunc(@(param) obj_fun(param, x, y), [0 0]);
%% Plot I want drawn at every iteration
[sum_of_squared_residuals,y_pred] = obj_fun(eparam,x,y);
plot(x,y)
hold on
plot(x, y_pred)
%% Objective function
function [sum_of_squared_residuals,y_pred] = obj_fun(param,x,y)
intrcpt = param(1);
slope = param(2);
y_pred = intrcpt + slope*x;
squared_residuals = (y-y_pred).^2;
sum_of_squared_residuals = sum(squared_residuals);
end

採用された回答

Matt J
Matt J 2021 年 5 月 3 日
Unfortunately the fields in optimValues do not contain the obj_function
It does. It's the fval field.
  6 件のコメント
Michael Stollenwerk
Michael Stollenwerk 2021 年 5 月 3 日
Perfect, thanks! This works.
Matt J
Matt J 2021 年 5 月 3 日
You're welcome, but please Accept-click the answer to indicate so.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOptimization についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by