我想最小化,其中是一个矩阵变量维数为,是一个已知矩阵。我尝试了以下代码:
cvx_begin
variable x(d,d)
minimize(trace(sqrt(sum_square_abs(x))*A))
subject to
x(sp_index) == M(sp_index)
cvx_end
但是,仍然存在以下错误:
Error using cvx/sqrt (line 61)
Disciplined convex programming error:
Illegal operation: sqrt( {convex} ).
Error in Test_CVX_Iterative_Optimal (line 34)
minimize(trace(sqrt(sum_square_abs(x))*A))
那么我应该如何通过CVX解决这个问题呢?期待你的答复!我还在 CVX 论坛 http://ask.cvxr.com/question/2894上问了同样的问题, 但还没有解决。希望这里的任何人都能够提供帮助!
更新:感谢@DavidKetcheson,我应该使用sqrtm()而不是sqrt. 为了表示我应该使用. 但是,我需要表示,我不知道如何用有效的 CVX 表达式来表示它.trace_sqrtm(sum_square_abs(x))
我试过了
minimize(trace(sqrtm(sum_square_abs(x))*A))
替换sqrt原来的,但我收到以下错误
Undefined function 'schur' for input arguments of type 'cvx'.
Error in sqrtm (line 32)
[Q, T] = schur(A,'complex'); % T is complex Schur form.
Error in Test_WeightNucNorm (line 35)
minimize(trace(sqrtm(sum_square_abs(x))*A))
我现在明白这个sqrtm()函数没有在 CVX 中实现,所以我有错误'未定义的函数'schur'对于'cvx'类型的输入参数。'。但是我的问题仍然没有解决。
我想我应该使用:
minimize(trace_sqrtm(sum_square_abs(x))*A)
但我仍然收到错误:
Error using cvx/trace_sqrtm (line 9)
Input must be affine.
Error in Test_WeightNucNorm (line 40)
minimize(trace_sqrtm(sum_square_abs(x))*A)
---------- 重要更新感谢@k20,我犯了一个错误!!这不是矩阵的加权迹!现在我的问题变成了:如何表示矩阵的加权核范数,其中是 CVX 变量,是对角权重矩阵。 我试图找到一个 CVX 函数,它给我变量的所有奇异值,但我还没有找到这样的函数。