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 .