Statut : Non résoluResolution de l'equation lineaire Ax=b par 3
rahmani01, le mardi 5 décembre 2006 à 21:42:05 bonjour
je vous prie de bien vouloir m'aider pour pouvoir obtenir un programme sous matlabe qui resoud et compart les troix methodes iteratives Gauss-eidel et acobie et celle de SOR
lj'ai construit le programme principal qui appel troix fonction , le probleme consiste comment modifier mon programme pour afficher a la fin la meilleure solution
voicie mon programme:
%Programme principal de comparaison entre
% méthodes ithératives: J, Gs, Sor (avec w=w0
n=input('donner la taille de la matrice');
A=input('Donner la matrice A : \n');
b=input('Donner le vecteur b : \n');
epsilon=input('donner epsilon\n');
max=input('donner le nombre maximal d iteration\n');
w=input('donner omega\n')
%methode jacobi
disp('debut de jacobi');
n1=n;A1=A,b1=b;eps=epsilon;max1=max;
[X,k]=fjac(A1,b1,eps,n1,max1)
disp('fin de jacobi')
%methode de Gauss_Seidel
disp('debut de Gauss_Seidel')
n1=n;A1=A,b1=b;eps=epsilon;max1=max;
[X,k]=fGS(A1,b1,eps,n1,max1)
disp('fin de Gauss_Seidel');
%methode de SOR
disp('debut SOR ');
n1=n;A1=A,b1=b;eps=epsilon;max1=max;w1=w;
[X,k]=fsor(A1,b1,eps,n1,max1,w1)
disp('fin SOR ');%methode de Gauss_Seidel de resolution de l equation Ax=b
function [X,k]=fGS(A,b,epsilon,n,max);
D=diag(diag(A));
E=-tril(A,-1);
F=-triu(A,1);
C=inv(D-E)*b;
L=inv(D-E)*F;
x(:,1)=zeros(n,1);
err=1;
k=1;
while(err>epsilon)&(k<max)
x(:,k+1)=L*x(:,k)+C;
err=norm(x(:,k+1)-x(:,k));
k=k+1;
end
k
x(:,k)methode de jacobi de resolution de l equation Ax=b
function [X,k]=fjac(A,b,epsilon,n,max);
D=diag(diag(A));
N=D-A;
x(:,1)=zeros(n,1);
for k=1:max
x(:,k+1)=inv(D)*(N*x(:,k)+b);
erreur=norm(x(:,k+1)-x(:,k));
if erreur<epsilon
break
end
end
k
x(:,k)
%methode de SOR de resolution de l equation Ax=b
function [X,k3]=fsor(A,b,epsilon,n,max,w)
D=diag(diag(A));
E=-tril(A,-1);
F=-triu(A,1);
C=w*inv(D-w*E)*b;
L=inv(D-w*E)*F;
J=[(1-w)*D+w*F];
L=L*J;
x(:,1)=zeros(n,1);
err=1;
k=1;
while(err>epsilon)&(k<max)
x(:,k+1)=L*x(:,k)+C;
err=norm(x(:,k+1)-x(:,k));
k=k+1;
end
k
x=x(:,k)