Bonjour,
je débute à la fois en matlab et en algorithmes de résolution numériques, et j'essaye d'implémenter la méthode de Gauss-Seidel (http://fr.wikipedia.org/wiki/M%C3%A9...e_Gauss-Seidel) en matlab
Voilà mon code (qui bien sûr ne fonctionne pas) :
Quand j'essaye avec A = [ 0.0971 0.3171 0.4387 ; 0.8235 0.9502 0.3816 ; 0.6948 0.0344 0.7655 ], b = [0.8530 ; 2.1552 ; 1.4948] et precision = 0.1 par exemple, j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 function [x] = gaussSeidel( A,b,precision ) n=length(b); P=diag( diag(A) ); x0=inv(P)*b; xk=x0; xk1=x0; forcerDemarrage=1; while( norm(xk1-xk)>precision | forcerDemarrage==1 ) forcerDemarrage=0; xk=xk1; for i=1:n somme1=0; for j=1:i-1 somme1=somme1+A(i,j)*xk1(j); end somme2=0; for j=i+1:n somme2=somme2+A(i,j)*xk(j); end xk1(i)=( 1/A(i,i) )*( b(i)-somme1-somme2 ) end end x=xk1; end
ans =
-Inf
Inf
NaN
alors que je devrais trouver [1;1;1]
Pourriez-vous m'indiquer ce qui ne va pas ?
Merci beaucoup
Partager