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

2 views (last 30 days)
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

Accepted Answer

Matt J
Matt J on 3 May 2021
Unfortunately the fields in optimValues do not contain the obj_function
It does. It's the fval field.
  6 Comments

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!