2016-05-03 76 views
2

我想比較帶有和沒有ILU預處理器的GMRES求解器。當預處理器不適用時,它運行並提供正確答案(x=[1,1,1])。但是,我似乎無法找到正確應用預處理器的方法。如何在Python 2.7中實現GMRES的ILU預處理器?

我怎樣才能得到這段代碼與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 

回答

4

預處理器需要與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