有纪律的凸规划错误:在 MATLAB 的 CVX 中只能指定标量二次形式

计算科学 优化 简历
2021-11-29 19:51:00

我想最小化

Wtr([AYpie][AYpie]T)+λA,
但是,我遇到以下问题:

Disciplined convex programming error: Only scalar quadratic forms can be specified in CVX.

请问您要解决这个问题吗?谢谢!

Ypie=T*Y; % Y is k*n matrix,T is k*k matrix  ,W is a n*k matrix 

lamda=0.01;

cvx_begin

      variable A(K,n)

      minimize (W.*trace((A-Ypie)*(A-Ypie)')+lamda*norm_nuc(A))

cvx_end
1个回答

CVX 不是符号分析引擎。您构造的每个子表达式都必须满足DCP 规则集它甚至不尝试全局考虑整个表达式。

因此,在您的情况下,一旦 CVX 看到(A-Ypie)*(A-Ypie)',它就会声明 DCP 错误。这是正确的行为,即使这个量的轨迹确实是凸的。毕竟,只有这个表达式的对角元素是凸的;其余的都是非凸的。永远不允许在 CVX 中构造非凸(或非凹)表达式,即使最终将其丢弃。

要解决这个问题,您必须认识到这个痕量实际上是 的 Frobenius 范数的平方A-Ypiesum_square(A(:)-Ypie(:))也将如此square_pos(norm(A-Ypie,'fro'))或者(仅在 CVX 3.0 beta 中)norm(A-Ypie,'fro')^2

当然,Johan 的评论也是完全正确的,一旦您将模型固定为标量目标,这些建议很可能都不适用。