使用带对角函数的凸包的Julia误差

使用带对角函数的凸包的Julia误差,julia,linear-algebra,convex-optimization,convex,Julia,Linear Algebra,Convex Optimization,Convex,我正在努力解决这个问题 d = 0.5 * ||X - \Sigma||_{Frobenius Norm} + 0.01 * ||XX||_{1}, 其中X是一个对称正定矩阵,所有的诊断元素都应该是1。XX与X相同,只是对角线矩阵为0\Sigma已知,我想要最小的d和X 我的代码如下: using Convex m = 5; A = randn(m, m); x = Semidefinite(5); xx=x; xx[diagind(xx)].=0; obj=vecnorm(A-x,2)+

我正在努力解决这个问题

d = 0.5 * ||X - \Sigma||_{Frobenius Norm} + 0.01 * ||XX||_{1}, 
其中X是一个对称正定矩阵,所有的诊断元素都应该是1。XX与X相同,只是对角线矩阵为0\Sigma已知,我想要最小的d和X

我的代码如下:

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匹配的方法(::凸面.Variable)


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

我想下面就是你想要的:

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
be
X
具有零对角线,我们从中减去
X
的对角线。为了限制
X
具有对角线
1
,我们使用
=
将其对角线与
1
进行比较


尽量保持不变的值,而不是试图修改东西,这是一个好主意。我不知道凸性是否支持这一点。

你能用数学形式添加你试图解决的优化问题吗?d=0.5*| | | X-\Sigma | | |{Frobenius Norm}+0.01*| | | | | |{1},X是一个对称正定矩阵,所有诊断元素都应该是1。XX与X相同,只是对角线矩阵为0\Sigma是已知的,我想要最小d和X。好的,我在问题中添加了这一点,请检查它是否准确。是的,你完全理解它。出于兴趣,如果你将它定义为
和(abs(XX))
,那么什么样的1-范数是
|XX | | u 1
?就我所记得的,运算符(1,1)-范数是列和的最大值,而Schatten 1-范数是奇异值的和。我是否忽略了什么?我发现还有一种方法,也许你可以用它来确保对角线的值。但是我对优化包没有任何经验。