Разница между fmincon Matlab и quadprog для линейного случая
Я пытаюсь преобразовать мою линейную квадратичную задачу quadprog в fmincon, чтобы позже я мог добавить нелинейные ограничения. У меня возникают трудности, когда я сравниваю свои решения, используя два метода (для той же проблемы). Странно то, что я получаю очень разные затраты, когда получаю почти одинаковые значения x. Ниже приведен упрощенный пример моего кода без ограничений.
Здесь моя целевая функция
%objective function
% cost = a + b*x(1) + c*x(1)^2 + d + e*x(2) + e*x(2)^2
param = [1;2;3;4;5;6];
H = [2*param(3) 0; 0 2*param(6)];
f = [param(2); param(5)];
x0 = [0,0];
[x1,fval1] = quadprog(H,f);
[x2,fval2] = fmincon(@(x) funclinear(x,param), x0);
fval1
fval2
%% defining cost objective function
function cost = funclinear(x, param);
cost=(param(1) + param(2)*x(1) + param(3)*(x(1))^2+ param(4) +param(5)*x(2)+param(6)*(x(2))^2);
end
Мои результирующие x1 и x2
x1 =[-3.333333333305555e-01;-4.166666666649305e-01];
x2 =[-3.333333299126037e-01;-4.166666593362859e-01];
что имеет смысл, что они немного отличаются, так как они разные решатели.
Однако мои оптимизированные расходы
fval1 =-1.375000000000000e+00;
fval2 =3.625000000000001e+00;
Значит ли это, что моя целевая функция отличается от моих H и f? Любая помощь будет оценена.
1 ответ
Решение
В формулировке quadprog постоянные члены a
а также d
не рассматриваются.
param(1)+param(4) = 1 + 4 = 5
Разница ваших результатов также 5
,