факторная ошибка - PullRequest
       5

факторная ошибка

1 голос
/ 29 марта 2012

Я использую 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

Любая помощь?

1 Ответ

1 голос
/ 29 марта 2012

Кажется, у вас есть ошибка в:

b=rand(500,1)

это должно быть:

b=rand(500)

иначе массив становится слишком глубокимНадеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...