1
我使用spilu預處理矩陣,但是,要將此預處理器傳入cg(內置共軛梯度法),需要使用LinearOperator函數,有人可以向我解釋參數matvec,以及爲什麼我需要使用它。下面是我現在的代碼Scipy線性代數LinearOperator函數用於共軛梯度
Ainv=scla.spilu(A,drop_tol= 1e-7)
Ainv=scla.LinearOperator(Ainv.shape,matvec=Ainv)
scla.cg(A,b,maxiter=maxIterations, M = Ainv)
但是這不起作用,我得到錯誤TypeError:'SuperLU'對象不可調用。我玩過並試過
Ainv=scla.LinearOperator(Ainv.shape,matvec=Ainv.solve)
改爲。這似乎工作,但我想知道爲什麼matvec需要Ainv.solve而不是僅僅Ainv,並且餵給LinearOperator是否正確?
感謝您的時間