CVXPY квадратный корень из единственного квадратичного - PullRequest
0 голосов
/ 14 ноября 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 14 ноября 2018

Я нашел решение, используя разложение 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.

...