CVXPY奇异平方的平方根

Behrooz Ns

我需要为奇异正半定矩阵C建模sqrt(x ^ TC x)。在这里,建议使用norm(Q * x),其中Q是从C的Cholesky分解获得的。

如何在CVXPY中取quad_form输出的平方根?

但是,np。/ scipy.linalg.cholskey不适用于奇异矩阵。

PS,使用SVD或特征值分解对于我的应用程序来说太慢了。

PS2,此帖子Numpy Cholesky分解LinAlgError没有帮助,因为它没有提供解决方案。同样,问题中的矩阵似乎具有负特征值(而不是奇异)。

Behrooz Ns

我找到了使用ldl分解的解决方案

    L,d,_ = scipy.linalg.ldl(C)
    d = np.diag(d).copy()
    inds = d >= d.max()*1e-8

    d = d[inds]
    d = np.sqrt(d)
    d.shape = (-1,1)
    Q = d * L.T[inds]


    loss = cp.norm(cp.matmul(Q, x))

LDL分解需要scipy> = 1.1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章