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 :
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
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
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
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.

Pour linalg.solve, on doit faire :
Par exemple si je prends
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
A=mat('[16.,3.;7.,-11.)']
b=mat('[11.,13.]')
et (ne pas oublier les points surtout)

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)
et donc on obtient alors
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[0.81218274]
[-0.66497462]
comme on le devrait (http://en.wikipedia.org/wiki/Gauss%E...3Seidel_method)

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.