【问题标题】:CVXPY Square root of Singular QuadraticCVXPY 奇异二次方的平方根
【发布时间】:2019-04-17 09:14:09
【问题描述】:

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

How to take the square root of quad_form output in CVXPY?

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

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

PS2,这篇文章Numpy Cholesky decomposition LinAlgError 没有帮助,因为它没有提供解决方案。此外,问题中的矩阵似乎具有负特征值(而不是奇异的)。

【问题讨论】:

标签: python square-root cvxpy


【解决方案1】:

我找到了使用 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。

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多