Académique Documents
Professionnel Documents
Culture Documents
1 Objectifs
En utilisant Matlab, résoudre un système d’équations linéaires par les méthodes directes et les
méthodes itératives\
Écrire une fonction matlab qui résout par remontée triangulaire un système linéaire U x =
b où U est une matrice triangulaire supérieure selon le prototype suivant: function
[x]=remontee(U,b)
function x=remontee(A,b)
x=zeros(size(b));
n=length(b);
x(n)=b(n)/A(n,n);
for i=n-1:-1:1
s=0;
for k=i+1:n
s=s+A(i,k)*x(k);
end
x(i)=(b(i)-s)/A(i,i);
end
end
Donner la solution du système (1) et comparer la à la solution donnée en utilisant l’opérateur de
matlab.
1
x =
-2
3
1
x =
-2
3
1
Écrire une fonction matlab qui résout par descente triangulaire un système linéaire
Lx = b où L est une matrice triangulaire inférieure selon le prototype suivant function
[x]=descente(L,b)
function x=descente(A,b)
x=zeros(size(b));
n=length(b);
x(1)=b(1)/A(1,1);
for i=2:n
s=0;
for k=1:i-1
s=s+A(i,k)*x(k);
end
x(i)=(b(i)-s)/A(i,i);
end
end
Donner la solution du système (2) et comparer la à la solution donnée en utilisant l’opérateur de
matlab.
x =
2
2
5
11
x =
0.6364
2.7273
3.7273
Écrire une fonction matlab qui résout un système linéaire Ax = b par la méthode de Gauss selon
le prototype suivant: function [x]=gauss(A,b)
On pourra utiliser les fonctions déjà créées dans les questions précédentes.
function x=gauss(A,b)
x=zeros(size(b));
n=length(b);
M=[A b];
for j=1:n
if M(j,j) == 0
iligne=j+1;
while M(iligne,j) == 0
iligne=iligne+1;
end
tmp=M(j,:);
M(j,:)=M(iligne,:);
M(iligne,:)=tmp;
end
pivot=M(j,j);
for i=j+1:n
M(i,:)=M(i,:)-(M(i,j)/pivot)*M(j,:);
end
end
x=remontee(M(:,1:n),M(:,n+1));
end
Donner la solution du système (3) et comparer la à la solution donnée en utilisant l’opérateur de
matlab.
3
[43]: A=[4 -1 1;4 -8 1;-2 1 5];
b=[7;-21;15];
x=gauss(A,b)
x=A\b
x =
2
4
3
x =
2
4
3
3. Ecrire une fonction matlab qui résout un système linéaire Ax = b par la méthode de décom-
position LU (crout) selon le prototype suivant: function [L,U,x]=crout(A,b)
function [L,U,x]=crout(A,b)
n=length(b);
x=zeros(n,1);
L=zeros(n);
U=zeros(n);
L(:,1)=A(:,1);
U(1,2:n)=A(1,2:n)/L(1,1);
for i=2:n-1
s=0;
for k=1:i-1
s=s+L(i,k)*U(k,i);
end
L(i,i)=A(i,i)-s;
for j=i+1:n
s=0;
for k=1:i-1
s=s+L(j,k)*U(k,i);
end
L(j,i)=A(j,i)-s;
s=0;
for k=1:i-1
s=s+L(i,k)*U(k,j);
end
4
U(i,j)=(A(i,j)-s)/L(i,i);
end
end
s=0;
for k=1:n-1
s=s+L(n,k)*U(k,n);
end
L(n,n)=A(n,n)-s;
y=descente(L,b);
U=U+eye(n);
x=remontee(U,y);
end
Donner la solution du système (3) et comparer le résulat à celui obtenu en utilisant la fonction {lu}
de matlab.
L =
4.0000 0 0
4.0000 -7.0000 0
-2.0000 0.5000 5.5000
U =
x =
2
4
3
x =
2
4
3
5
1.2 Méthodes itératives
1. On reprend le système (3) précédent:
4x − y + z = 7
4x − 8y + z = −21 (4)
−2x + y + 5z = 15
function [X,niter]=jacobi(A,b,X0,nmax,tol)
M=diag(diag(A));
N=M-A;
CJ=M\N;
dJ=M\b;
X=X0;
niter=0;
while (norm(A*X-b) > tol) & (niter <= nmax)
X=CJ*X+dJ;
niter=niter+1;
end
end
2. Donner la solution approchée du système (3) et comparer le nombre d’itérations
et l’erreur de cette méthode en variant les tests d’arrêt.
X =
2.0000
4.0000
3.0000
niter =
6
16
ans =
2
4
3
function [X,niter]=gseidel(A,b,X0,nmax,tol)
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
M=D-L;
N=U;
CGS=M\N;
dGS=M\b;
X=X0;
niter=0;
while (norm(A*X-b) > tol) & (niter <= nmax)
X=CGS*X+dGS;
niter=niter+1;
end
end
X =
2.0000
4.0000
3.0000
7
niter =
ans =
2
4
3
function [X,niter]=relaxation(A,b,X0,omega,nmax,tol)
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
M=D/omega-L;
N=(1-omega)*D/omega+U;
CR=M\N;
dR=M\b;
X=X0;
niter=0;
while (norm(A*X-b) > tol) & (niter <= nmax)
X=CR*X+dR;
niter=niter+1;
end
end
X =
8
2.0000
4.0000
3.0000
niter =
15
ans =
2
4
3
9
10