Bonjour
Je dois programmer la méthode de Gauss Seidel en python, j'ai réussi à le faire sur matlab et j'obtiens de bons résultats mais sur Python, il n'y a rien à y faire, je n'arrive pas à obtenir les bons résultats.
Mon programme matlab est celui-ci :
Alors j'ai essayé de faire pareil sur python, et j'ai écrit ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function x=GS(A,b,xo,itmax) % n = length(b); x = xo; for it=1:itmax for i=1:n x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x(i+1:n))/A(i,i); end end end
Normalement en exécutant mon programme je devrais obtenir les mêmes résultats que le linalg.solve mais ce n'est pas le cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 from math import * from numpy import * def gs(A,b,x0,kmax): n=size(b) x=x0 for k in range(1,kmax+1): for i in range(0,n): x[i]=(b[i]-A[i,0:i-1]*x[0:i-1]-A[i,i+1:n]*x[i+1:n])/A[i,i] return x
Pour linalg.solve, on doit faire :
Par exemple si je prends
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 A=mat('[16.,3.;7.,-11.)'] b=mat('[11.,13.]')(ne pas oublier les points surtout)
Code : Sélectionner tout - Visualiser dans une fenêtre à part x0=mat('[1.;1.]')
et donc on obtient alors
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 D=diag(diag(A)) L=-tril(A,-1) U=-triu(A,1) M=D-L N=U linalg.solve((M-N),b)
comme on le devrait (http://en.wikipedia.org/wiki/Gauss%E...3Seidel_method)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [0.81218274] [-0.66497462]
mais pour mon programme python, je n'ai pas ces résultats-là, j'ai changé plusieurs fois les indices, je n'arrive pas à retomber sur le même résultat
Si quelqu'un pouvait me donner un petit coup de main, il serait vraiment le bienvenu. Merci d'avance à ceux qui essayeront de m'aider.
Partager