Vous êtes sur la page 1sur 9

Nom : Date :

Prnom :

Facult des sciences et ingnierie (Toulouse III) Anne scolaire


Dpartement de mathmatiques L3 MMESI 2011-2012
Analyse numrique I
TP no 3 Pivot de Gauss et dcomposition LU

Aller dans le dossier L3_analyseNumerique et crer le dossier TP03, dans lequel


seront placs les fichiers relatifs ce TP.

1 Dcouverte de matlab (3) : les fonctions


Nous voyons maintenant une nouvelle fonctionnalit : crer de nouvelles com-
mandes, qui sutiliseront de la mme manire que les autres commandes prdfinies
de matlab vues dans les deux prcdents TP.
Une fonction matlab, cest comme un script mais en mieux : on peut donner des
entres et on peut affecter le rsultat renvoy dans une variable (ce qui nest pas possible
avec un script). Une fonction se comporte comme une vraie commande matlab. Pour
comprendre, il suffit de faire lanalogie avec une fonction mathmatique :
dans y = f (x), x est la variable dentre, y est la sortie et f est le nom de la fonc-
tion ;
dans A=eye(5), 5 est lentre, A est la sortie 1 et eye est le nom de la fonction.
Une fonction peut sutiliser partout : en ligne de commande, dans un script et mme
dans une autre fonction ; la condition bien sr que le rpertoire de travail soit le
dossier o est enregistre cette fonction !
Exemple 1. Cet exemple dcrit deux manires de calculer la somme des lments dun
vecteur v Rn : tel quon sait le faire depuis le TP2, avec un script ; tel quon sait le faire
maintenant, avec une fonction.
1. Avec un script :

Dfinir v v= . . .
n = longueur de v n=length ( v ) ;
S =0 S=0;
Pour i =1 n , faire f o r i =1:n
S = S +vi S=S+v ( i ) ;
Fin end
Afficher S
S

1. Plus prcisment : la valeur de la sortie est stocke dans la variable A.

1
Pour lutiliser, il faut alors dfinir un vecteur dans la variable globale v ( lint-
rieur du fichier .m par exemple) puis revenir en ligne de commande pour lancer
le script ; noter quil nest pas possible daffecter le rsultat du script dans une
variable.
2. Avec une fonction :
Nom : somme
Entre : v ( vecteur )
function S=somme( v )
Sortie : S ( scalaire ) %C a l c u l e l a somme des c o e f f de v
--> somme des coeff de v
n=length ( v ) ;
n = longueur de v S=0;
Initialisation de S 0 f o r i =1:n
Pour i =1 n , faire S=S+v ( i ) ;
S = S +vi
end
Fin

Lutilisation est intgralement en ligne de commande (inutile de modifier le fi-


chier .m lorsque le vecteur change) :
somme ( [ 1 , 2 , 3 , 4 , 5 ] )
ou
v =[1 ,2 ,3 ,4 ,5];
somme( v )
Il est bien sr possible daffecter le rsultat dune fonction dans une variable :
v =[1 ,2 ,3 ,4 ,5];
nombre=somme( v )

Exercice 1. Crer une fonction matlab (nomme produit) prenant en entre un vecteur
v et renvoyant en sortie le produit P des lments de v.

2
Exercice 2. Nous allons crer, de deux manires, une fonction renvoyant la somme et
le produit des lments dun vecteur v Rn .
1. Mthode 1 : avec les fonctions somme et produit prcdemment vues. Donner les
entres et les sorties de la fonction suivante :
function [ S , P ]= somProd1 ( v )
%C a l c u l e somme e t p r o d u i t des c o e f f

S=somme( v ) ;
P= p r o d u i t ( v ) ;

2. Mthode 2 : avec une seule boucle parcourant les lments du vecteur v. Program-
mer une telle fonction (nomme somProd2) :

3. Laquelle de ces deux mthodes vous semble la plus efficace ; pourquoi ?

4. Indiquer en face de chaque ligne ce que donne les commandes suivantes :


1 v =1:1:5;
2 somProd2 ( v )
3 [ a , b ]= somProd2 ( v )

4 c=somProd2 ( v ) ;

5 c

Attention ! Les arguments de sortie sont crits entre crochets dans lentte de la fonc-
tion mais cest une syntaxe matlab qui na rien voir avec lusage habituel des crochets
(i.e. dfinition de vecteur). Autrement dit, [S,P] ne signifie en aucun cas renvoyer le
vecteur compos de S et P ; cest simplement : renvoyer les deux objets S et P (ce qui
autorise ces objets avoir des tailles diffrentes ou mme tre de type diffrent).

3
2 Pivot de Gauss
Rappels Lalgorithme du pivot de Gauss consiste transformer un systme linaire en
un systme triangulaire suprieur qui lui est quivalent ; une fois cette transformation
faite, il est ais de le rsoudre : il suffit dutiliser lalgorithme de remonte vu au TP2.
Autrement dit (vision matricielle), lalgorithme du pivot transforme le systme Ax =
b avec A quelconque, en le systme quivalent U x = v avec U triangulaire suprieure.
Rappelons pour finir lalgorithme, tel quil a t prsent dans le cours :
Algorithme du pivot de Gauss
n = taille de A
Initialiser U A
Initialiser v b
Pour j allant de 1 n -1 , faire
Pour i allant de j +1 n , faire
vi =vi (uij /ujj )vj
Pour k allant de j +1 n , faire
uik =uik (uij /ujj )ujk
Fin k
uij =0
Fin i
Fin j

Exercice 3. Le but est de crer une fonction matlab ralisant lalgorithme de Gauss.
1. Donner les entres et les sorties dune telle fonction (leur nom, leur type, quoi
elles correspondent).

2. crire une fonction matlab correspondant cet algorithme.

4
Exercice 4 (Application). Considrons les valeurs

3 2 1 1
A = 1 3 2 et b = 2 .

2 4 6 3

Que renvoie lalgorithme de Gauss sur ces valeurs ? Que retrouve-t-on (cf. TP2) ?

3 Autour de la dcomposition LU
Il sagit de dcomposer une matrice A (qui a les bonnes hypothses, cf. cours) sous
la forme LU , avec L triangulaire infrieure possdant des 1 sur la diagonale et U trian-
gulaire suprieure 2 .

3.1 Dcomposition LU par identification des coefficients


Rappels Cette mthode consiste crire les coefficients (inconnus) de la matrice LU
et de les identifier avec les coefficients (connus) de A ; cela fonctionne bien condition
de procder dans lordre : 1re ligne, puis 1re colonne, puis 2e ligne, puis 2e colonne, etc.
Les identifications sur les lignes permettent de dduire les coefficients de U ; celles sur
les colonnes permettent de trouver L.
Lalgorithme correspondant a t vu en TD ; nous le redonnons ici :
Algorithme de dcomposition LU no 1
n = taille de A
Initialiser U
Initialiser L
Pour i allant de 1 n , faire
Pour j allant de i n , faire
Pi1
uij =aij k=1 `ik ukj
Fin j
Pour j allant de i +1 n , faire
Pi1
`ji = aji k=1 `jk uki /uii
Fin j
`ii =1
Fin i

2. L pour lower et U pour upper, en anglais.

5
Exercice 5 (Dcomposition LU no 1).
1. Donner les entres et les sorties de cet algorithme.

2. Programmer lalgorithme (sous le nom decompLU1).

3.2 Dcomposition LU par la mthode du pivot de Gauss


Rappels Lalgorithme du pivot de Gauss effectue les manipulations suivantes sur les
lignes :
Li Li + Lj . (1)
En notant Tij () la matrice
j

1
..
.
..

. ,


..
i .

1

6
alors (1) revient remplacer A par la matrice Tij ()A (produit matriciel gauche par
une matrice de transvection).

3.2.1 Manipulation sur les lignes et les colonnes


Exercice 6 (Mise en place dalgorithmes intermdiaires).
1. Programmer une fonction qui, tant donn une matrice M, effectue lopration (1)
sur M :
function M=t r a n s v e c L i g n e (M, i , j , lambda )

2. Programmer son analogue sur les colonnes


function M=t r a n s v e c C o l (M, i , j , lambda )
qui ralise lopration
Ci Ci + Cj . (2)
(Prendre garde au fait que multiplier droite par Tij () quivaut la manipula-
tion Cj Cj + Ci .)

3.2.2 Le pivot de Gauss contre-attaque


Il sagit de programmer lalgorithme du pivot de Gauss, sous une autre version que
celle vue en section 2 et en ne se proccupant que de la matrice A.

Exercice 7. Programmer lalgorithme suivant


Pivot de Gauss (version matricielle)
n = taille de A
Initialiser U A
Pour j allant de 1 n -1 , faire
pivot =ujj
Pour i allant de j +1 n , faire
=uij / pivot
pour U : Li Li Lj
Fin i
Fin j
avec lentte

7
function U=G a u s s M a t r i c i e l ( A )

3.2.3 Le retour de la dcomposition LU


Nous allons mettre en uvre une autre mthode pour obtenir la dcomposition LU,
qui sinspire de la version matricielle du pivot de Gauss.

Rappels Dans lalgorithme de Gauss matriciel ci-dessus, on effectue une succession


de multiplications gauche sur A, par des matrices de transvections. Notons Q1 , . . . , Qp
ces matrices successives ; alors lalgorithme de Gauss matriciel consiste remplacer A
par
Qp Qp1 . . . Q1 A,
| {z }
=Q

que lon note U . Ainsi, comme Q est inversible (cf. cours), on obtient

A = Q1 U .

Or Q1 est triangulaire infrieure diagonale unit (cf. cours) : cest donc la matrice L
cherche. Au final, on a donc trouv la dcomposition LU de A :

U = QA,
L = Q1 .

Remarques complmentaires :
les Qk sont de la forme Tij () ;
Q1 = Q11 Q21 . . . Qp1 ;
 1
les Qk1 sont de la forme Tij () car Tij () = Tij () ;
multiplier droite par Tij () revient faire Cj Cj + Ci .

8
Exercice 8 (Dcomposition LU no 2). En observant que
Q1 = Q11 Q21 . . . Qp1 est gal In Q11 Q21 . . . Qp1 (o In dsigne la matrice identit
de taille n) ;
lalgorithme de Gauss matriciel consiste faire une succession de multiplications
gauche sur A, pour la transformer en une matrice triangulaire infrieure,
et en utilisant les rappels ci-dessus, proposer un algorithme qui effectue la dcomposi-
tion LU de A en faisant les deux choses suivantes :
une succession de multiplications gauche sur A, pour la transformer en une
matrice triangulaire suprieure (note U ) ;
une succession de multiplications droite sur lidentit, pour la transformer en
une matrice triangulaire infrieure diagonale unit (note L).
function [ L , U]=decompLU2 ( A )

 Noubliez pas de rendre le TP,


avec vos nom et prnom
~