В Matlab вы делаете численный оптимизация. Это означает, что вам не нужно беспокоиться об аналитической форме вашей целевой функции. Вместо этого вам нужно написать объективную функцию, которая создает с использованием параметров оптимизации для каждого значения x
ваших данных значение y
, которое вы можете сравнить с вашими входными данными.
С линейными и нелинейными ограничениями вы можете использовать FMINCON, чтобы решить вашу проблему.
Я не совсем уверен, что понимаю, что вы хотите оптимизировать (извините, это немного рано), но, ради примера, позвольте мне предположить, что у вас есть вектор с x-значениями xdata
и vectory с y-значениями ydata
, которым вы хотите соответствовать «лестничной функции». Вы знаете, сколько шагов есть, но вы не знаете, где они размещены. Кроме того, вы знаете, что сумма шагов должна быть равна 5 (ограничение линейного равенства).
Вы начинаете с написания своей целевой функции, выход которой вы хотите получить как можно ближе к 0. Это может быть квадратная сумма остатков (т. Е. Разница между реальными значениями y и оцененными значениями y). Для моего удобства я не буду определять местоположения шагов через линейные уравнения, но я их установлю прямо.
function out = objFun(loc,xdata,ydata)
%#OBJFUN calculates the squared sum of residuals for a stair-step approximation to ydata
%# The stair-step locations are defined in the vector loc
%# create the stairs. Make sure xdata is n-by-1, and loc is 1-by-k
%# bsxfun creates an n-by-k array with 1's in column k wherever x>loc(k)
%# sum sums up the rows
yhat = sum(bsxfun(@gt,xdata(:),loc(:)'),2); %'# SO formatting
%# sum of squares of the residuals
out = sum((ydata(:)-yhat).^2);
Сохраните эту функцию как objFun.m
в вашем пути Matlab. Затем вы определяете xdata
и ydata
(или загрузить его из файла), сделать начальное предположение для loc
(к-на-1 массив), и массив Aeq
для линейного contstraint равенства таким образом, что Aeq*loc==beq
(Aeq
в случае [1 1 1]
у вас есть 3 шаги) и напишите
locEst = fmincon(@(u)objFun(u,xdata,ydata),locInitialGuess,[],[],Aeq,5);
Это оценит расположение этапов. Вместо двух пустых скобок вы можете добавить ограничения неравенства, а 5 - потому, что я предположил, что ограничение равенства равно 5.
* fmincon * из панели инструментов оптимизации * http://www.mathworks.com/help/toolbox/optim/ug/fmincon.html может помочь вам в решении этой задачи. – zellus