Je suis en train de pré-conditionner une matrice en utilisant spilu, cependant, pour passer ce préconditionneur en cg (la méthode intégrée du gradient conjugué) il est nécessaire d'utiliser la fonction LinearOperator, quelqu'un peut-il m'expliquer? le paramètre matvec, et pourquoi je dois l'utiliser. Ci-dessous mon code actuelScipy LinearOperator Fonction utilisée dans Conjugate Gradient
Ainv=scla.spilu(A,drop_tol= 1e-7)
Ainv=scla.LinearOperator(Ainv.shape,matvec=Ainv)
scla.cg(A,b,maxiter=maxIterations, M = Ainv)
Toutefois, ce travail ne marche pas et je me donne l'erreur TypeError: objet « SuperLU » est pas appelable. J'ai joué autour et essayé
Ainv=scla.LinearOperator(Ainv.shape,matvec=Ainv.solve)
à la place. Cela semble fonctionner mais je veux savoir pourquoi matvec a besoin d'Ainv.solve plutôt que d'Ainv, et est-ce la bonne chose de nourrir LinearOperator?
Merci pour votre temps