1

我在 Matlab 中使用 cvx 解决了以下线性矩阵不等式 (LMI) 问题:

Lhs = [19.467593196, 1.82394007, 0.1625838, 0.01685267, 0.002495194;
1.823940068, 1.78664305, 0.9845668, 0.32951706, 0.010431878;
0.162583843, 0.98456679, 1.2333818, 0.92276329, 0.132643463;
0.016852668, 0.32951706, 0.9227633, 1.55698000, 0.848190932;
0.002495194, 0.01043188, 0.1326435, 0.84819093, 0.638889503];

S = [0.001, -0.001, 0, 0, 0;
-0.001, 0.001, 0, 0, 0;
0, 0, 0, 0, 0;
0, 0, 0, 0.001 -0.001;
0, 0, 0, -0.001,  0.001];


cvx_begin sdp
   variable t;
   minimize t;
   Lhs+t*S >= 0;
cvx_end

结果是有道理的。

我需要在R中解决同样的问题。据我了解,它不能用CVXR表示为LMI。因此,我利用对偶公式将问题写为

cvx_begin sdp
    variable X(5,5) symmetric;
    maximize -trace(Lhs*X);
    trace(S*X) == 1;
    X >= 0;
cvx_end

正如预期的那样,Matlab 中的结果与原始公式中的结果相同。

但是,如果我解决 R 中的对偶问题:

Lhs = matrix(c(19.467593196, 1.82394007, 0.1625838, 0.01685267, 0.002495194,
1.823940068, 1.78664305, 0.9845668, 0.32951706, 0.010431878,
0.162583843, 0.98456679, 1.2333818, 0.92276329, 0.132643463,
0.016852668, 0.32951706, 0.9227633, 1.55698000, 0.848190932,
0.002495194, 0.01043188, 0.1326435, 0.84819093, 0.638889503), ncol = 5, byrow = T)

S = matrix(c(0.001, -0.001, 0, 0, 0,
-0.001, 0.001, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0.001, -0.001,
0, 0, 0, -0.001,  0.001), ncol = 5, byrow = T)

X = Variable(k, k, PSD = T)
constr = list(matrix_trace(S%*%X) == 1,
             X >= 0)
prob = Problem(Maximize(-matrix_trace(Lhs%*%X)), constr)

结果是完全错误的。错误在哪里?

4

0 回答 0