如何在Python 2.7中实现GMRES的ILU预处理器?

时间:2016-05-03 03:27:06

标签: python python-2.7 scipy

我试图比较有和没有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

1 个答案:

答案 0 :(得分:5)

预处理器需要使用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