CVXPY квадратный корень из единственного квадратичного

Мне нужно смоделировать sqrt(x^T C x) для особой положительной полуопределенной матрицы C. Здесь предлагается использовать норму (Q*x), где Q получается из разложения Холецкого C.

Как получить квадратный корень из вывода quad_form в CVXPY?

Но np./scipy.linalg.cholskey не работает для единичных матриц.

PS, использование SVD или разложение по собственным значениям слишком медленное для моего приложения.

PS2, этот пост Numpy Cholesky разложение LinAlgError не помогает, так как не предлагает решения. Кроме того, матрица в вопросе, кажется, имеет отрицательные собственные значения (а не единственное число).

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.

Другие вопросы по тегам