Le sujet TpSyst_Lin

publicité
Université de Nantes
Département de Mathématiques
Année 2008-2009
Licence de mathématiques - S22M030
Analyse Numérique
TP : systèmes linéaires
1. Les matrices sous Matlab
Une matrice A , n × m peut être saisie à l'écran, entre 2 crochets droits, par ses lignes, les lignes
sont séparées par un point virgule, deux coecients successifs d'une même ligne sont séparés par un blanc
(espace) ou une virgule : exemple
A=[1 2 3 4 ; 2 3 4 1 ; 3 4 1 2 ; 4 1 2 3]
ou
 A=[1, 2, 3, 4; 2, 3, 4, 1 ; 3, 4, 1, 2 ; 4, 1, 2, 3]
1
 2
represente la matrice A = 
 3
4
On peut aussi dénir A de la
2
3
4
1
3
4
1
2
4
1 
 .
2 
3
façon suivante :
f or i = 1 : 4, f or j = 1 : 4, s = i+j−1; A(i, j) = i+j−1; if (A(i, j) > 4), A(i, j) = A(i, j)−4; end, end, end
Si M est une matrice n × m , v = size(M ) est alors le vecteur ligne v = [n, m] .
B = M 0 est la matrice transposée de M .
Si 1 ≤ i ≤ n et si 1 ≤ j ≤ m , u = M (i, :) est alors le vecteur ligne, ieme ligne de M ,
et w = M (:, j) est le vecteur colonne, j eme colonne de M .
c = M (i, j) est le coecient Mij .
Vériez que v0 = linspace(0.5, 1.7, 6) est un vecteur ligne (size(v0) = [1, 6]), et v00 est un vecteur
colonne (size(v00 ) = [6, 1]).
Faites la même vérication avec v1 = 0.5 : (1.7 − 0.5)/5 : 1.7
Si a est un réel ou un nombre complexe, (size(a) = [1, 1]), alors a ∗ M et M/a , (si a 6= 0), sont des
matrices de même type que M .
Si N est une matrice de même type que M , alors M + N et M − N sont de même type que M .
Si N est une matrice m × k , alors M ∗ N est la matrice n × k bien dénie (mathématiquement
parlant).
Si A est une matrice carrée d'ordre n , d = det(A) est son déterminant.
Si de plus A est inversible B=A^(-1) est sa matrice inverse.
On peut aussi écrire B = inv(A)
On rappelle que E = M (i1 : i2, j1 : j2) est la matrice extraite de M , d'ordre (i2−i1+1)×(j2−j1+1) :
E = (Mij ) i1 ≤ i ≤ i2 .
j1 ≤ j ≤ j2
Si M est une matrice n × m et si N est une matrice n × k , alors
T = [M ; N ] est une matrice n × (m + k) .
Par contre si Q est une matrice k × m , alors
Z = [M Q] est une matrice (n + k) × m .
Si M est une matrice n × m et si y est un vecteur colonne d'ordre n alors x = M \ y est un vecteur
colonne d'ordre m , solution de y = M ∗ x
Quelques matrices de Matlab
zeros(n, m) ;
ones(n, m) ;
eye(n) ;
eye(n, m) ;
hilb(n) ;
vander(v) ;
toeplitz(v) ,
invhilb(n)
(n et m sont des entiers et v est un vecteur ligne).
Si A = hilb(n) alors Aij = 1/(i + j − 1) et son inverse, dont les méthodes d'inversion ne donnent pas
toujours des bons résultats, est invhilb(n) .
Si S = toeplitz(v) alors S est symétrique, les élément de sa diagonale sont tous égaux à v(1) , plus
généralement S(i, j) = v(abs(j − i) + 1) : une matrice M dont les coecients M (i, j) ne dépendent que de
j − i est appelée une matrice de Toplitz. (Elle n'est pas forcement symetrique).
A connaitre aussi M = diag(v) (matrice diagonale, dont la diagonale est v)
et v = diag(A) (vecteur représentant la diagonale de la matrice A .)
2. Le TP
Familiarisez-vous avec les matrices.
Ecrire une fonction Matlab
f unction testeLU (A)
qui teste si une matrice carrée A admet une décomposition LU.
0n rappelle que A = (Aij )1≤i,j≤n admet une décomposition LU si et seulement si
∀k, 1≤k<n,
det ((Aij )1≤i,j≤k ) 6= 0 .
Dans ce cas, si la matrice est de plus inversible, les pivots simples pour la résolution de la méthode Gauss,
sont les n det ((Aij )1≤i,j≤k ) , k = 1, . . . , n .
La fonction Matlab doit donner aussi le pivot de plus petit module, et celui de grand module.
Ecrire une fonction Matlab
f unction matrice(n)
qui permet de saisir à l'écran une matrice carrée A d'ordre n , (2 ≤ n ≤ 5) , qui ache sont détrminant, son
inverse quand il existe, et ses valeurs propres.
Ecrire une fonction Matlab
f unction x = sysu(U, v)
qui résoud le système U.x = v quand U est une matrice triangulaire supérieure.
Ecrire une fonction Matlab
f unction x = sysl(L, v)
qui résoud le système L.x = v quand L est une matrice triangulaire inférieure.
Familiarisez vous avec la fonction matlab lu qui donne la décomposition PLU d'une matrice.
Ecrire une fonction Matlab
f unction [L, U ] = mylu(A)
qui donne la décomposition LU d'une matrice A .
3. Devoirs maison
Ecrire une fonction Matlab
f unction y = mydet(A)
qui donne le déterminant de A en utilisant la méthode des pivots partiels.
Ecrire une fonction Matlab
f unction x = sys(A, v)
qui résoud le système A.x = v avec la méthode des pivots partiels.
Ecrire une fonction Matlab
f unction [P, L, U ] = myplu(A)
qui donne la décomposition PLU d'une matrice A .
Téléchargement