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

2 visualizaciones (últimos 30 días)
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

Respuesta aceptada

Matt J
Matt J el 3 de Mayo de 2021
Unfortunately the fields in optimValues do not contain the obj_function
It does. It's the fval field.
  6 comentarios
Matt J
Matt J el 3 de Mayo de 2021
You're welcome, but please Accept-click the answer to indicate so.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Solver Outputs and Iterative Display en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by