使用带有 diagind 函数的凸包的 Julia 错误
Julia error using convex package with diagind function
我正在尝试解决问题
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: no method matching diagind(::Convex.Variable)
我只是通过约束矩阵中的对角线元素来解决最优问题,但是这里的 diagind 函数似乎不起作用,我该如何解决这个问题。
我认为以下内容符合您的要求:
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
是否支持。
我正在尝试解决问题
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: no method matching diagind(::Convex.Variable)
我只是通过约束矩阵中的对角线元素来解决最优问题,但是这里的 diagind 函数似乎不起作用,我该如何解决这个问题。
我认为以下内容符合您的要求:
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
是否支持。