Vous êtes sur la page 1sur 13

ENSIL : Analyse numrique

Travaux Pratiques - Sance 1


Recommendations
Contrle des connaissances
Ce TP se pratique en binme et est not. Une partie de la note est lie votre activit
pendant le TP (qui ne correspond pas au nombre de fois o vous appelez lenseignant) et
lautre partie au compte-rendu que vous avez rendre. Cette note compte ensuite pour 25 %
de votre note danalyse numrique.
Compte-Rendu
Vous devez rendre un compte-rendu par binme. Le compte-rendu doit tre un dossier in-
formatique compress contenant les chiers matlab que vous avez raliss et un chier texte
.pdf dans lequel vous rpondez aux questions poses en justiant vos rponses. Noubliez pas
dindiquer vos noms sur le chier texte ! Le compte-rendu porte sur le travail faire partir
de la Section 2. Il doit tre envoy cluzeau@ensil.unilim.fr. Pour permettre votre
enseignant qui reoit des milliers de messages lectroniques de trier ces comptes-rendus, le
mail doit imprativement avoir pour objet CR

TP

AN

GrTD o GrTD est le numro de votre


groupe de TD. Par exemple tous les comptes-rendus du groupe de TD 1 doivent arriver dans
la bote mail de M. Cluzeau avec pour objet CR

TP

AN

1. Le compte-rendu doit arriver au


plus tard 7 jours aprs la sance dans la boite mail de M. Cluzeau.
Prparation et conseils
Ce TP comporte des questions de nature thorique et dautres de nature pratique. Il
est important darriver en TP en ayant au pralable lu attentivement et en intgralit ce
document de sorte distinguer lavance quelles sont les manipulations faire pour perdre
le moins de temps possible pendant la sance. Il nest pas recommand de passer trop de
temps sur les questions thoriques pendant le TP. Il peut aussi tre utile dtre venu en
cours, davoir couter et davoir relu attentivement les chapitres 1, 2, 3 et 4 avant de venir
la sance.
1
Il est conseill de vous crer un dossier dans lequel vous mettrez tout ce que vous allez faire
en TP danalyse numrique. Dune faon gnrale, il est toujours bien de trier un maximum
tout ce quil y a sur votre compte informatique.
1 matlab crash course
Cette premire partie vous aide dcouvrir matlab. Elle est indispensable la prise
en main du logiciel mais ne doit pas apparatre dans le compte-rendu. Il est conseill dy
consacrer environ 30 minutes.
Ouverture de matlab et rpertoire courant
Pour ouvrir matlab il vous sut douvrir un terminal et de taper matlab &
1
. Aprs
quelques instants, une fentre souvre.
Commencez par vous placer dans le dossier que vous venez de crer qui contiendra tous vos
programmes des TP danalyse numrique. Pensez ensuite, ds que vous faites un programme,
bien le sauver dans ce rpertoire. Pour ceci, choisissez le en cliquant sur le bouton en
haut droite de Current Directory ou Current Folder.
Commenons doucement
Dans la fentre de commandes (Command Window) tapez unes unes les commandes sui-
vantes et regardez ce que vous obtenez (pour excuter une commande, il faut appuyer sur
Entre. La che vers le haut vous permet toujours daccder aux dernires commandes
tapes.
a = 1+1
b = 2*3 ;
c = a+b ;
c
Pour ceux qui ont utilis le logiciel maple, certaines choses sont direntes en mat-
lab! En matlab les aectations se font avec le signe = et pas :=. De plus, contrairement
maple, le ; en n de ligne vite lachage du rsultat. Ceci peut tre utile lorsque dans un
programme vous avez des objets intermdiaires normes que vous navez pas envie de voir.
Si la ligne se termine par une virgule ou rien, alors le rsultat est ach.
1. le & signie quon lance un processus o sexcute matlab puis quon libre le terminal.
2
a/2
v = [2 3 4 5]
v(1)
v(2 :3)
s = 1 :3
v(s)
v
1+v
2*v
w = [v 10 v]
M = [1 2 3 4 ;5 6 7 8]
M(2,3)
M(2,3)=10
M2 = [v ;v]
M3 = [v,v]
A = M( :,2 :3)
A + A
M*M
A*A
A.*A
M*v
3
A (-1)
b = [1 ; 1]
x= A \ b
A*x - b
diag(v)
diag(v,1)
diag(v,-1)
zeros(2)
ones(5)
ones(5,1)
fw = v. 2
plot(v,fw)
f= ceci est une chaine de caractres ;
display(f)
disp(f)
disp(v)
N = input(Entrez un nombre entier : ) ;
N
format short
pi
format long
4
pi
format short e
pi
format long e
pi
help diag
Laccs laide de matlab peut aussi se faire en cliquant sur le bouton ? dans le menu.
Cration dun chier script
Un chier script est un chier contenant une suite dinstructions.
Cliquez sur File New M-file ou Script (ou cliquez sur la feuille blanche
en haut gauche) ;
Enregistrez le chier dans le rpertoire courant (celui que vous avez cr pour vos
TP danalyse numrique) en lui donnant un nom (par exemple test.m). Les chiers
matlab se terminent toujours par .m. Comme dhabitude, viter les accents et les
caractres spciaux dans les noms de chiers et essayer de leur donner des noms par-
lant histoire de pouvoir les retrouver plus facilement ;
Saisir quelques instructions (1 seule instruction par ligne). Si vous ne voulez pas voir
le rsultat de linstruction dune ligne donne lors de lexcution du script, il sut de
placer un ; la n de la ligne en question;
Sauvez le chier ;
Pour excuter le chier (i.e., excuter les instructions crites dans le chier les unes
aprs les autres), deux possibilits : soit vous cliquez sur le bouton vert play
du menu de votre chier script, soit vous tapez le nom du chier (sans le .m) dans la
fentre matlab. Ici, on tapera tout simplement :
test
Cration dune fonction matlab
Cliquez sur File New M-file ou Script (ou cliquez sur la feuille blanche
en haut gauche) ;
Enregistrez le chier dans le rpertoire courant (celui que vous avez cr pour vos
TP danalyse numrique) en lui donnant un nom (par exemple fonctiontest.m). Les
fonctions matlab se terminent toujours par .m. Comme dhabitude, viter les accents
5
et les caractres spciaux dans les noms de chiers et essayer de leur donner des noms
parlant histoire de pouvoir les retrouver plus facilement ;
Saisir les instructions suivantes :
function y=fonctiontest(x)
y=x. 2 + 2*x+1 ;
Attention une fonction se dclare avec le mot anglais function et non fonction. La
variable y contient la sortie de la fonction. Il est fortement recommand de faire en
sorte que le nom de la fonction (ici fonctiontest) soit le mme que celui du chier .m.
On ne peut crer quune seule fonction par chier. Si vous voulez en crer une autre
ou faire un script utilisant cette fonction alors vous ouvrez un nouveau chier ;
Sauvez le chier ;
Dans la fentre de commandes, tapez :
fonctiontest(2)
v =[1 2 3]
fonctiontest(v)
t = 1 :0.25 :4
plot(t,fonctiontest(t))
2 Phnomnes de compensation
Le compte-rendu rendre concerne le travail faire partir dici.
On considre la fonction f donne par :
f(x) =
1 cos(x)
x
2
.
crire la fonction matlab suivante dans un chier script nomm f1.m :
function y = f1(x)
y=(1- cos(x)) / x 2 ;
Dans la fentre matlab, tapez :
format short e
x = 10 (-8)
f1(x)
La valeur obtenue vous semble-t-elle correcte ? Expliquez.
6
En utilisant lgalit
cos(x) = 1 2 sin
2
_
x
2
_
,
crire une deuxime fonction matlab f2 codant la mme fonction f et refaire les calculs
prcdents avec f2. Que constatez-vous ? Expliquez.
3 Algorithme mystre
crire le programme matlab suivant dans un chier script nomm algomystere.m :
clear all ;
close all ;
format long e ;
a=1 ;
while ( (1+a) > 1 )
a = a/2 ;
end ;
a=a*2
Excuter ce script. Que calcule-t-il ? (Justiez votre rponse). Vriez que cette valeur
est correcte.
4 Calculs itratifs et instabilit numrique
On considre la suite (u
n
)
nN
telle que :
u
0
= 2, u
n+1
= |log(u
n
)|.
Dans un chier script iteration.m, crire le programme matlab suivant :
clear all ;
close all ;
u(1)=2 ;
for (i=2 :1 :31)
u(i) = abs(log(u(i-1))) ;
end ;
u
Excutez ce script. Que renvoie-t-il ?
Modiez ce script pour quil ne renvoie que les valeurs de u
0
, u
5
, u
10
, u
15
, u
20
, u
24
, u
25
, u
26
,
u
30
.
7
Modiez nouveau ce script pour quil renvoie les valeurs de u
0
, u
5
, u
10
, u
15
, u
20
, u
24
, u
25
,
u
26
, u
30
pour u
0
= 2, u
0
= 2, 000000001 et u
0
= 1, 999999999. On rangera les rsultats dans
une matrice 9 lignes et 3 colonnes.
Ajouter une quatrime colonne la matrice prcdente dans laquelle, pour chaque ligne,
on calcule lcart relatif u
n
/u
n
observ entre la deuxime ou la troisime colonne et la
premire colonne. Comment volue cet cart ? Les valeurs calcules aprs u
25
sont-elles si-
gnicatives ? Justiez.
Nous allons maintenant essayer de comprendre thoriquement le phnomne prcdent.
Supposons que lon ait une erreur x sur la valeur de x. Justiez que, si f est drivable au
point x, alors lerreur f(x) sur la valeur de f(x) est donne approximativement par
f(x) = |f

(x)| x.
Le coecient damplication de lerreur est alors donn par |f

(x)|. Ici, comme souvent, il


est plus pertinent de considrer les erreurs relatives : on a alors :
f(x)
|f(x)|
=
|f

(x)| |x|
|f(x)|
x
|x|
,
de sorte que le coecient damplication de lerreur relative est
|f

(x)| |x|
|f(x)|
. Que vaut ce
coecient dans notre cas ? En dduire une explication du phnomne observ prcdemment.
5 Systmes linaires
On considre le systme linaire
Ax = b, A =
_
_
2 1 1
2 2 2
1 1 2
_
_
, b =
_
_
1
1
1
_
_
.
Rentrez A et b dans la fentre de commandes matlab.
Pour rsoudre ce systme en utilisant la mthode de Gauss, tapez :
x = A \ b
Pour calculer la factorisation LU de A, tapez :
[L,U,P] = lu(A)
8
Utiliser cette factorisation LU pour retrouver le rsultat prcdent en rsolvant deux sys-
tmes triangulaires.
Ouvrez un navigateur internet et tapez ladresse
http ://www.ensil.unilim.fr/~cluzeau/AnalyseNumerique/systemelineaire.m
pour tlcharger le script suivant :
clear all ;
close all ;
A = [2 -1 1 ; 2 2 2 ; -1 -1 2] ;
b = [1 ; 1 ; 1] ;
D = diag(diag(A)) ;
E = zeros(3) ;
E(2,1) = -A(2,1) ;
E(3,1) = -A(3,1) ;
E(3,2) = -A(3,2) ;
F = zeros(3) ;
F(1,2) = -A(1,2) ;
F(1,3) = -A(1,3) ;
F(2,3) = -A(2,3) ;
invD = D (-1) ;
B = invD*(E+F) ;
x( :, 1) = [1 ; 0 ; 1] ;
for (i=2 :1 :100)
x( :,i) = B*x( :,i-1) + invD*b ;
end ;
x( :,100)
Excutez ce script. Que fait-il ? Expliquez le rsultat obtenu. On pourra utiliser les com-
mandes Matlab eig et abs qui permettent de calculer respectivement les valeurs propres
dune matrice et le module dun (vecteur de) nombre(s) complexe(s).
Crez un nouveau chier script gaussseidel.m dans lequel vous appliquerez la mthode
de Gauss-Seidel pour rsoudre le systme Ax = b (comme dans le script prcdent, on
arrtera le calcul aprs 100 itrations). Excutez le. Que constatez-vous ? Justiez.
6 Barre mtallique
On considre une barre mtallique, assimile un segment de droite dextrmits a et
b. La barre est chaue ses deux extrmits et plonge dans une pice maintenue une
temprature constante. La temprature en un point dabscisse x de la barre sera not (x).
9
Nous souhaitons connaitre la temprature (x) en tout point x ]a, b[, sachant que (a) =
a
et (b) =
b
sont donns. La temprature ambiante sera note
amb
.
Dans ce problme, il y a une perte de chaleur due la convection de lair, que lon peut
modliser par une fonction x (x), suppose connue et positive. La temprature est
alors solution de lquation direntielle du second ordre suivante :
_
_
_

d
2
(x)
dx
2
+(x) ((x)
amb
), a < x < b,
(a) =
a
, (b) =
b
,
o dsigne un coecient de diusion thermique suppos strictement positif.
On subdivise lintervalle [a, b] en N 1 intervalles de longueur h =
b a
N 1
tels que :
x
1
= a, x
i+1
= x
i
+h, i = 1, 2, . . . , N 1, x
N
= b.
On notera
i
une approximation de la temprature (x
i
) au point x
i
.
On va maintenant discrtiser lquation direntielle par dirences nies cest--dire que
lon va approcher les termes de drivation par des quotients en utilisant la dnition de la
drive qui permet dcrire pour h assez petit :
d
dx
(x)
(x +h) (x)
h
,
d
2

dx
2
(x)
(x +h) 2 (x) +(x h)
h
2
.
Le problme approch est alors quivalent la rsolution du systme suivant :
_
_
_


h
2
(
i+1
2
i
+
i1
) +
i
(
i

amb
) = 0, i = 2, . . . , N 1,

1
=
a
,
N
=
b
.
crire le systme prcdent sous une forme matricielle A = f, o A est une matrice de
taille N 2, f est un vecteur de R
N2
et = (
2

3

N2

N1
)
T
.
crire la fonction matlab suivante dans un chier alpha.m :
function y = alpha(x)
y = 10*x.*(1-x) ;
Ouvrez un navigateur internet et tapez ladresse
http ://www.ensil.unilim.fr/~cluzeau/AnalyseNumerique/barre.m
10
pour tlcharger le script suivant :
clear all ;
close all ;
N = 10 ;
a = 0 ;
b = 1 ;
h = (b-a)/(N-1) ;
theta

a = 18 ;
theta

b = 15 ;
theta

amb = 25 ;
kappa = 0.1 ;
x = a :h :b ;
alp = alpha(x) ;
A = 2*eye(N-2)+h*h/kappa*diag(alp(2 :N-1)) ;
A = A+diag(-ones(N-3,1),-1)+diag(-ones(N-3,1),1) ;
f(1) = theta

a + h*h/kappa*alp(2)*theta

amb ;
f(2 :N-3) = h*h/kappa*alp(3 :N-2)*theta

amb ;
f(N-2) = theta

b + h*h/kappa*alp(N-1)*theta

amb ;
theta(1) = theta

a ;
theta(2 :N-1) = A \ f ;
theta(N) = theta

b ;
plot(x,theta) ;
1. Excutez ce programme et justiez le fait quil rsout bien le problme donn pour
les valeurs des paramtres dnis dans le programme. En particulier on expliquera la
construction de la matrice A du systme et celle du second membre f qui doivent
correspondre ceux de la forme matricielle trouve prcdemment ;
2. Quelle est la structure (position des lments non-nuls) de la matrice A?
3. Calculez le conditionnement de A pour les normes matricielles subordonnes aux
normes .
1
, .
2
et .

. On pourra utiliser la commande cond pour calculer les


dirents conditionnements. Commentez ;
4. Modiez le programme pour quil demande lutilisateur la valeur de N ;
5. Lancez le programme pour direntes valeurs de N et commentez les rsultats obtenus ;
6. Comment volue le conditionnement de la matrice A en fonction de N ?
7. Pour une valeur trs grande de N, la manire dont on rsout le systme linaire est-elle
la meilleure ? Justiez.
7 Factorisation QR et moindres carrs linaires
Le problme des moindres carrs linaires est le suivant : tants donns une matrice
A M
mn
(R) et un vecteur b R
m
, minimiser la quantit Ax b
2
2
.
11
Ce problme peut tre rsolu en utilisant la factorisation QR de la matrice A M
mn
(R)
en procdant comme suit : la matrice A tant rectangulaire (on supposera ici m > n), on
partitionne les matrices Q et R de la manire suivante :
A = (Q
1
Q
2
)
_
R
1
0
_
,
o Q
1
M
mn
(R), Q
2
M
m(mn)
(R) et R
1
M
nn
(R). En remplaant A par sa factori-
sation QR, on a :
Ax b
2
2
= QRx b
2
2
.
On admettra quen appliquant une transformation orthogonale au vecteur des rsidus Axb
on ne modie pas la norme euclidienne du vecteur et que le problme de minimisation conduit
au mme rsultat. On multiplie alors le rsidu par Q
T
et on est ramen minimiser
_
_
Q
T
QRx Q
T
b
_
_
2
2
=
_
_
Rx Q
T
b
_
_
2
2
=
_
_
_
_
_
R
1
0
_
x
_
Q
T
1
Q
T
2
_
b
_
_
_
_
2
2
,
ce qui revient minimiser
_
_
R
1
x Q
T
1
b
_
_
2
2
+
_
_
Q
T
2
b
_
_
2
2
.
On rsout alors le systme triangulaire R
1
x = Q
T
1
b et la somme des rsidus au carr corres-
pond
_
_
Q
T
2
b
_
_
2
2
.
Considrons le cas
A =
_
_
_
_
1 1
1 2
1 3
1 4
_
_
_
_
, b =
_
_
_
_
2
1
1
1
_
_
_
_
.
crire un script matlab appliquant la mthode dcrite ci-dessus pour rsoudre le pro-
blme des moindres carrs linaires Ax b. On calculera la solution x du problme et
d = Q
T
2
b.
Dans les problmes qui apparaissent en conomtrie ou statistique, on est aussi intress
par la matrice des variances et covariances
2
(A
T
A)
1
, o
2
=
Ax b
2
2
mn
. Pour obtenir
cette matrice, on a donc besoin dvaluer le rsidu la solution x trouve et de calculer
linverse de A
T
A. Si on possde la factorisation QR de A, alors A
T
A = R
T
Q
T
QR = R
T
R
car Q est orthogonale. On doit donc inverser la matrice R
T
R. De plus, avec les notations
prcdentes, si on note d = Q
T
2
b, on peut crire
2
=
d
T
d
mn
.
Dans le cas de lexemple prcdent, utiliser matlab pour calculer la matrice des variances
et covariances.
12
Remarque : cela nentre pas dans le cadre de ce TP mais il existe une mthode ecace
et numriquement stable pour calculer linverse de matrices de la forme A
T
A.
13

Vous aimerez peut-être aussi