我想确定给定的3x3矩阵是否是正半定的。为此,我在YALMIP中编写以下SDP
v=0.2;
a=sdpvar(1);
b=sdpvar(1);
M=[1 a -v/4 ; b 1 0 ; -v/4 0 0.25];
x=sdpvar(1);
optimize([M+x*eye(3)>=0],x,sdpsettings('solver','sedumi'))
这个程序给了我错误"发现双重不可行,原始改善方向"。对于区间(0,1)中的任何v值,都会发生这种情况。
鉴于这个问题易于处理,我直接对矩阵进行了对角化,得到三个特征值是以下多项式的三个根
16*t^3 - 36*t^2 + (24 - 16*a*b - v^2)*t + (-4 + 4*a*b + v^2)
以数字方式计算三个根的值我看到它们中的三个对于符号(a)=符号(b)是正的(除了a,b = + - 1附近的小区域),因此,SDP应该没有问题地运行并且输出x的负值而没有进一步的复杂化。
为了让事情变得更有趣,我使用以下矩阵运行相同的代码
M=[1 a v/4 ; b 1 0 ; v/4 0 0.25];
这个矩阵具有与前一个矩阵相同的特征值,在这种情况下,程序运行没有任何问题,确认矩阵确实是正半定的。
我真的很好奇这个问题的本质,任何帮助都会非常感激。
编辑:我也尝试过SDPT3求解器,结果非常相似。实际上,对于+ v的情况,程序运行平稳,但是当我放一个减号时,我得到以下错误'Unknown problem in solver (Turn on 'debug' in sdpsettings) (Error using & …'
此外,当我对变量添加一些限制时,即我运行以下命令
optimize([total+w*eye(3)>=0,-1<=a<=1,-1<=b<=1],w,sdpsettings('solver','sdpt3'))
然后错误变成了“不可行的问题”。错误。
答案 0 :(得分:1)
迟到的答案,但无论如何。您指定的矩阵不对称。半定规划是关于对称正半正定矩阵集的优化。
当您在YALMIP中定义此非对称矩阵约束时,它只被解释为一组9个线性元素约束,对于该线性程序,最佳x是无界的。