Python et méthode ADI avec matrices

Bonjour,
Je dois réaliser cet exercice sur Python :
1513541616-q3.png

J'ai réussi à coder les matrices par blocs, en effet :
import numpy as np
import scipy as sp
import scipy.linalg as la

n=3
h = 1.0/(n+1)
A = np.zeros((n,))
A[:2] = (2.0/h**2, -1.0/h**2)

A = la.toeplitz(A)

AA = np.identity(n)

B = np.kron(AA,A)

I = np.identity(n)

II = np.zeros((n,))
II[:2] = (2.0/h**2, -1.0/h**2)
II = la.toeplitz(II)

C= np.kron(II,I)

Mais pour la méthode en tant que telle, franchement, je sèche. J'ai fait ça :
J=np.identity(9)
def ADI(B,C,b,Imax,eps,r,x0,y0):
    x=x0
    y=y0
    i=0
    while (i<Imax):
        y=la.solve((np.dot(r,J)+b),np.dot((np.dot(r,J)-C),x)+b)
        x=la.solve((np.dot(r,J)+C),np.dot((np.dot(r,J)-B),y)+b)
        i=i+1
    return (x,y,i)

b=np.ones((9,1))
x0=np.ones((9,1))
y0=np.ones((9,1))
print(ADI(B,C,b,1000,10**(-3),1,x0,y0))

Je ne vois vraiment pas ce qui cloche dans mon code, et pourtant, ça ne va pas.... Pouvez-vous m'aider ? Je vous en serai franchement très très reconnaissante

[Perfectinette. Évite à l'avenir d'effacer ton message quand tu as obtenu des réponses de la part d'intervenants. AD]
http://www.les-mathematiques.net/phorum/read.php?15,1580582,1580582#msg-1580582

Réponses

  • Je ne connais pas cette méthode, mais ta ligne où tu modifies ton y ne correspond pas au pdf que tu as envoyé.

    Tu as confondu je pense b et B (drôle d'idée d'ailleurs d'avoir nommé ces paramètres de la même façon à la casse près... Pour ma part je frappe mes élèves quand ils font ça).
  • (Pas de problème AD, j'y songerai à l'avenir, je modifiais mes codes pour ne pas que certaines personnes de ma classe me les piquent si elles venaient à tomber dessus mais je comprends que ce soit irrespectueux).

    Merci seb, tu as raison, là ça semble fonctionner correctement!

    Du coup je pense avoir ma 1) et 2). Par contre saurais-tu comment obtenir le résidu pour la méthode ADI. Le résidu est $r^k = Ax^k -b$ dans le cas d'une méthode classique (Jacobi, Gauss Seidel ou SOR) mais pour la méthode ADI, j'ai du mal à visualiser étant donné qu'on a un x et un y...
  • De ce que je comprends rapidement de cet algo, $y$ n'est qu'un calcul intermédiaire (qui ne devrait donc pas être renvoyé ?). Ainsi ton résidu se calculerait de la même façon que pour les autres.

    (à vérifier, comme déjà dit, je ne connais pas cette méthode).
Connectez-vous ou Inscrivez-vous pour répondre.