我正在尝试比较使用和不使用ILU预处理器的GMRES求解器。当未应用预调节器(x=[1,1,1])时,它将运行并提供正确的答案。但是,我似乎找不到正确应用预处理器的方法。

我如何才能使这段代码与ILU预调节器一起运行?

import numpy as np
import scipy.sparse.linalg as spla

A = np.array([[ 0.4445,  0.4444, -0.2222],
              [ 0.4444,  0.4445, -0.2222],
              [-0.2222, -0.2222,  0.1112]])

b = np.array([[ 0.6667],
              [ 0.6667],
              [-0.3332]])

M2 = spla.spilu(A)

x = spla.gmres(A,b,M=M2)

print x

最佳答案

预处理器需要使用solve方法进行一些处理:

import numpy as np
import scipy.sparse.linalg as spla

A = np.array([[ 0.4445,  0.4444, -0.2222],
              [ 0.4444,  0.4445, -0.2222],
              [-0.2222, -0.2222,  0.1112]])

b = np.array([[ 0.6667],
              [ 0.6667],
              [-0.3332]])

M2 = spla.spilu(A)
M_x = lambda x: M2.solve(x)
M = spla.LinearOperator((3,3), M_x)

x = spla.gmres(A,b,M=M)

print x

10-06 07:13