线性编程 - 最小化t

时间:2015-03-15 10:58:38

标签: matlab linear-programming

我正在尝试在matlab中解决以下问题但面临一些困难。

  

Min t
      的 s.t。
      t> =0.0538λ_2 - 0.7071λ_1
           t> =λ_1 - 0.3827λ_2
       其中对于j = 1,2

,0 <=λ_j<= 1

这是我到目前为止所做的:

f=[0;0;1]  
A=[-0.7071 0.0538 -1;
1 -0.3827 -1]  
B=[0;0]  
ub=zeros(2,1)  
lb=zeros(2,1)  
linprog(f,A,B,[],[],lb,ub);

该问题来自研究论文,并且作者解决了上述问题并发现了t = -0.12698的最佳值。我的实现没有得到正确的答案。有谁可以帮助我吗。另外,我如何在linprog()中指定我想使用单纯形法。

2 个答案:

答案 0 :(得分:2)

这应该会给你正确的结果:

f=[1;0;0];  
A=[-1 -0.7071 0.0538;
-1 1 -0.3827]  ;
B=[0;0]  ;
ub=[inf 1 1]  ;
lb=[-inf 0 0]  ;
options = optimset('Algorithm','simplex');
xres = linprog(f,A,B,[],[],lb,ub,[],options);

请注意,linprog期望您的输入格式为:

min x

s.t。 Ax&lt; = b

我在此处所做的是设置向量x = [t l1 l2],因此结果向量xres中的第一个条目与t对应。您可以使用optimset函数设置算法。

另外,你只为3个变量中的2个设置下限和上限,所以matlab在这方面给了我一些警告。为了安全起见,通常最好设置“假”。无限制变量的限制(即在此我将t的上限设置为inf,将下限设置为-inf)。这样,您可以确保正确的边界适用于正确的变量。

答案 1 :(得分:0)

矩阵A设置不正确。 你需要确定哪些变量应该在哪里。

A=[-0.7071 0.0538 -1;
  1 -0.3827 -1]  

P.S。抱歉我的英文。