0

我想确定给定的 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)

以数字方式计算三个根的值我看到它们三个对于 sign(a)=sign(b) 是正的(除了 a,b=+-1 附近的一个小区域),对于任何值v. 因此,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'))

然后错误变成“不可行的问题”错误。

4

1 回答 1

2

迟到的答案,但无论如何。您指定的矩阵不是对称的。半定规划是关于对对称正半定矩阵集的优化。

当您在 YALMIP 中定义此非对称矩阵约束时,它被简单地解释为一组 9 个线性元素约束,并且对于该线性程序,最优 x 是无界的。

于 2016-09-13T12:29:34.037 回答