How to call objective function in outputfcn or plotfcn during optimization?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Michael Stollenwerk
am 3 Mai 2021
Kommentiert: Matt J
am 3 Mai 2021
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
0 Kommentare
Akzeptierte Antwort
Matt J
am 3 Mai 2021
Unfortunately the fields in optimValues do not contain the obj_function
It does. It's the fval field.
6 Kommentare
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!