线性编程:最小化矢量Matlab之间的差异

时间:2014-09-15 16:58:07

标签: matlab optimization vector minimize

我希望通过将x1改为x5来最小化以下等式。

y=[(x1*a+x2*b+x3*c+x4*d+x5*e)-z]

此处a,b,c,d,ez都是向量。目标是找到a,b,c,d,e的组合,以尽可能与z匹配。这可以作为线性程序或类似的东西来完成吗?我有(x1 + x2)=0.6(x3 +x4 x5)=0.4约束使用lsqlin设置为:

       a=[1;2;3];
    b=[2;5;1];
    c=[8;1;3];
    d=[6;2;1];
    e=[5;4;3];

    C=[a,b,c,d,e];
    z=[6;5;2];
    A=[1 1 0 0 0; 
       0 0 1 1 1] ;
    bounds=[0.6; 0.4];


   lb=zeros(5,1);
       x = lsqlin(C,z,A,bounds,[],[],lb);

但是这会返回错误:

  

警告:大规模算法至少需要与方程一样多的方程式   变量       在C矩阵中;使用中等规模的算法。

     
    

在lsqlin 268优化终止。

  
     

x =

0.0000
0.5319    
-0.0000
0.5745
0.2979

这忽略了我追求的平等。

1 个答案:

答案 0 :(得分:0)

如果您只有等式约束并希望最小化均方误差,则可以使用mrdivide解决此问题。

无约束的案例是:

x = z / [a b c d e]

有了约束,你有

  

y = [(x1 * a + x2 * b + x3 * c + x4 * d + x5 * e)-z]   = [(x1 * a +(。6-x1)* b + x3 * c + x4 * d +(。4-x3-x4)* e)-z]

那样

x = [0 .6 0 0 .4] + (z -.6*b - .4*e) / [a-b c-e d-e] * [1 0 0; -1 0 0; 0 1 0; 0 0 1; 0 -1 -1]';

对于不等式约束,您需要设置二次程序并使用求解器,如Simplex或内点方法。

quadprog MATLAB函数应该有效地做到这一点。 lsqlin看起来也是一个不错的选择,并且可能更容易根据您的描述设置。