Я в настоящее время практикует простую оптимизацию функции в Matlab и надеюсь, что вы могли бы обеспечить небольшой помощи/разъяснение по следующей ошибки:MatLab @fminunc задача оптимизации функции
%quadramin.m
function z=quadramin(param,data);
z=data.*(param(1).^2 - param(2).^3)+3;
%quadramin_lik.m
function quadlik = quadramin_lik(param,data);
%pseudo/ad-hoc log-likelihood function
quadlik = quadramin(param,data)- 10;
%script.m
data=trnd(5,6,1);
param0=[2,3];
[param_eq,exitflag,output,grad,hessian] = ...
fminunc(@(param) quadramin_lik(param,data),param0)
выход после выполнения% script.m: Ошибка при использовании fminunc (строка 333) Пользовательская целевая функция должна возвращать скалярное значение.
ps: Это парадоксально, поскольку пользовательские функции quadramin & & quadramin_lik do возвращают значения.
Благодаря
Обе ваши функции возвращают вектор значений, тогда как 'fminunc' требует, чтобы функция возвращала значение ** скалярное/одиночное **. Ошибка довольно ясна. Функция 'fminunc' пытается найти лучшее решение, которое минимизирует функцию затрат, поэтому то, что вам нужно, является функцией стоимости. Поэтому, возможно, попробуйте суммировать результаты в каждой функции, прежде чем возвращать их .... но это не гарантирует глобального минимума, потому что 'fminunc' предполагает, что ваша функция стоимости выпукла. – rayryeng
, выполняющий функцию псевдо-логарифмического подобия, чтобы вернуть скалярное/одиночное значение. Спасибо за комментарии. Наконец, если я хотел бы использовать @fmincon, я бы правильно установил 'lb = [0,2], ub = [0, + inf]', если '0 <= x (1) <= 2' и' x (2) 'принадлежит R +? в паразите 'param_eq = fmincon (@ (param) quadramin_lik (param, data), param0, [], [], [], [], [0,2], [0, inf])'? Cheers – owner
Я понятия не имею, как настроена ваша линейная программа, поэтому я не могу прокомментировать то, что вы правильно закодировали. – rayryeng