我正在尝试在matlab中解决以下问题但面临一些困难。
Min t
,0 <=λ_j<= 1
的 s.t。
t> =0.0538λ_2 - 0.7071λ_1
t> =λ_1 - 0.3827λ_2
其中对于j = 1,2
这是我到目前为止所做的:
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()
中指定我想使用单纯形法。
答案 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。抱歉我的英文。