Просмотр разреженной холеской факторизации с использованием CVXOPT в Python - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь написать некоторый код, который, учитывая матрицу разреженных квадратов M, вычисляет ее разреженную холесовскую декомпозицию в форме PMP '= LL' (где 'обозначает транспонирование, P - матрица перестановок, а L - нижняя треугольная), используя пакет CVXOPT в PYTHON 3.5.

По документации для CVXOPT Мне удалось сделать следующее:

import CVXOPT
from CVXOPT import cholmod

# Set the CVXOPT options so that the factorization computed is LL' not LDL'
cholmod.options['supernodal']=2

# Makes an expression describing the factorization to be computed
F=cholmod.symbolic(M) 

# Numerically compute the factorization and store the result in F
cholmod.numeric(M, F) 

# Solve LX=M to obtain L'
L=cholmod.spsolve(F, M, sys=4)

Я думал, что это выведет матрицу L (или, скорее, L '), что я и хочу получить. Однако, когда я пытаюсь проверить, является ли LL '= M, я нахожу, что моя выходная матрица не L' ...

print(L*cvxopt.spmatrix.trans(L)-M) # Should equal a matrix of zeros, but doesn't

Я действительно сбит с толку и нигде не вижу, как можно распечатать / получить матрицу L из ее символического представления, хранящегося в F. Кто-нибудь знаком с CVXOPT / может понять, что я делаю для этого неправильно? Все, что я хочу, - это матрица L (и если кто-нибудь знает, как, перестановка P также будет полезна!). Любая помощь будет принята с благодарностью.

...