Я использую scipy.linalg для решения матричного уравнения A * x = b
Следующий код не работает:
from scipy import *
from pylab import *
from scipy.sparse import lil_matrix
from scipy.sparse.linalg import spsolve, factorized
from numpy.random import rand
from numpy import ones
def build_matrix(n):
A_lil = lil_matrix((n, n))
A_lil.setdiag(rand(n))
A_lil.setdiag(rand(n-10), k = 10)
A_lil.setdiag(rand(n-10), k = -10)
A_csr = A_lil.tocsr()
return A_csr
A = build_matrix(500)
fsolve = factorized(A)
b = rand(500,1)
fsolve(b)
Traceback (most recent call last):
File "<pyshell#70>", line 1, in <module>
fsolve(b)
SystemError: gstrs was called with invalid arguments
(Редактировать: на самом деле консоль не говорит fsolve (b, trans), она говорит self.solve (b, trans), поэтому приведенная ниже часть, вероятно, неверна)
Если я ввожу fsolve вручную в консоль, я вижу, что fsolve требует двух аргументов 'b' и 'trans'. Это почему-то не упомянуто в документации по факторизации здесь: http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.factorized.html. Добавление в аргумент 'N' приводит к следующей ошибке
>> fsolve(b, 'N')
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
fsolve(b,'N')
SystemError: gstrs was called with invalid arguments
Любая помощь?