Matlab的fmincon和线性案例的quadprog案例的区别

时间:2017-10-03 15:00:33

标签: matlab linear-programming quadratic-programming quadprog

我正在尝试将我的quadprog线性二次问题转换为fmincon,以便稍后我可以添加非线性约束。当我使用两种方法(对于同样的问题)比较我的解决方案时,我遇到了困难。奇怪的是,当我获得几乎相同的x值时,我获得了非常不同的成本输出。下面是我的代码没有约束的简化案例。

这里,我的目标函数是

  

cost = a + b*x(1) + c*x(1)^{2} + d + e*x(2) + f*x(2)^{2}

%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 个答案:

答案 0 :(得分:1)

在quadprog公式中,不考虑常数项ad

param(1)+param(4) = 1 + 4 = 5

结果的差异也是5