0

我正在尝试解决问题

d = 0.5 * ||X - \Sigma||_{Frobenius Norm} + 0.01 * ||XX||_{1}, 

其中 X 是对称正定矩阵,所有诊断元素都应为 1。XX 与 X 相同,但对角矩阵为 0。\Sigma 已知,我想要 X 的最小 d。

我的代码如下:

using Convex
m = 5;
A = randn(m, m); 
x = Semidefinite(5);
xx=x;
xx[diagind(xx)].=0;
obj=vecnorm(A-x,2)+sumabs(xx)*0.01;
pro= minimize(obj, [x >= 0]);
pro.constraints+=[x[diagind(x)].=1];
solve!(pro)

MethodError:没有方法匹配 diagind(::Convex.Variable)

我只是通过约束矩阵中的对角元素来解决最优问题,但似乎 diagind 函数在这里不起作用,我该如何解决这个问题。

4

1 回答 1

1

我认为以下内容可以满足您的要求:

m = 5
Σ = randn(m, m)
X = Semidefinite(m)
XX = X - diagm(diag(X))
obj = 0.5 * vecnorm(X - Σ, 2) + 0.01 * sum(abs(XX))
constraints = [X >= 0, diag(X) == 1]
pro = minimize(obj, constraints)
solve!(pro)

对于操作类型:

  • diag 提取矩阵的对角线,作为向量
  • diagm 从向量构造一个对角矩阵

因此,要XX具有X零对角线,我们X从中减去对角线。为了约束X对角线1,我们其对角线与1, 使用进行比较==

尽可能保持不可变值是一个好主意,而不是尝试修改事物。我不知道是否Convex甚至支持。

于 2018-04-23T08:25:00.453 回答