Vous êtes sur la page 1sur 86

INSA Toulouse

Dpartement STPI
PO ICBE 2me anne
UV3 dinformatique
2007-2008
Travaux pratiques de programmation Matlab
Arnaud Cockx
Fabrice Deluzet
Samy Gallego
Alain Huard
Alain Lin
Jean-Christophe Michelucci
Jrme Morchain
Violaine Roussier-Michon
Table des matires
1 TP dinitiation (4 sances TP) 5
1.1 Acces Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Variables et Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.1 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.2 Oprations usuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.3 Oprations sur les tableaux . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.4 Manipulations sur les matrices . . . . . . . . . . . . . . . . . . . . . 13
1.3 Boucles et tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 Fonctions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.1 Fonctions scalaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.2 Fonctions vectorielles . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.4.3 Fonctions matricielles . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5 Graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5.1 Visualisation des courbes en 2D . . . . . . . . . . . . . . . . . . . . 18
1.5.2 Visualisation des courbes en 3D . . . . . . . . . . . . . . . . . . . . . 20
1.5.3 Visualisation des surfaces . . . . . . . . . . . . . . . . . . . . . . . . 20
1.6 M-chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.1 Fichiers "scripts" ou chiers dinstructions . . . . . . . . . . . . . . . 22
1.6.2 Fichiers functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.6.3 Fichiers de sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.7 Utiliser les aides en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.7.1 La recherche par mot clef . . . . . . . . . . . . . . . . . . . . . . . . 29
1.7.2 La documentation hypertexte . . . . . . . . . . . . . . . . . . . . . . 29
1.8 Expressions et fonctions MATLAB utilises . . . . . . . . . . . . . . . . . . 29
2 TP1 : Programmation structure, tracs de courbes (4 sances TP) 31
2.1 Mthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2 Premiers pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3 Dnition de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4 Reprsentation de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.5 Dveloppement de Taylor dune fonction de plusieurs variables . . . . . . . . 35
2.6 Annotation dun trac, fonctionnalits avances . . . . . . . . . . . . . . . . 37
2.7 Expressions et fonctions MATLAB utilises . . . . . . . . . . . . . . . . . . 38
2
3 TP2 : Intgration numrique - Sensibilit la discrtisation (2 sances
TP) 39
3.1 Mthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2 Mthode du point milieu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.1 Elments thoriques . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.2 Algorithme et programmation . . . . . . . . . . . . . . . . . . . . . . 42
3.2.3 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2.4 Application numrique . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3 Mthode des trapzes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.1 Elments thoriques . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.2 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.3.3 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.3.4 Application numrique . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4 Expressions et fonctions Matlab utilises . . . . . . . . . . . . . . . . . . . 45
4 TP3 : Recherche des zros dune fonction relle variable relle (2
sances TP) 46
4.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 Mthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3 Mthode de dichotomie (sans test de bornes) . . . . . . . . . . . . . . . . . 47
4.3.1 Elments thoriques . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.2 Illustration thorique . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.3 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3.4 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3.5 Application numrique . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3.6 Contre-exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4 Mthode de dichotomie (avec test de bornes) . . . . . . . . . . . . . . . . . 51
4.4.1 Elments thoriques . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4.2 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4.3 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.4.4 Application numrique . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.5 Expressions et fonctions Matlab utilises . . . . . . . . . . . . . . . . . . . 52
4.6 Complment thorique sur la prcision de calcul . . . . . . . . . . . . . . . . 52
5 TP4 : Diagonalisation de matrices (2 sances TP) 53
5.1 Mthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2 Quelques rappels mathmatiques (*) . . . . . . . . . . . . . . . . . . . . . . 54
5.3 Position du problme physique . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.4 Programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.5 Expressions et fonctions MATLAB utilises . . . . . . . . . . . . . . . . . . 57
6 TP5 : Application de lanalyse en composantes principales des donnes
de procd de traitement biologique en lit bactrien (4 sances TP) 58
6.1 Mthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.2 Introduction au traitement biologique en lit bactrien . . . . . . . . . . . . . 59
3
6.2.1 Lits bactriens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.2.2 Systmes de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.2.3 Description de la campagne de mesures . . . . . . . . . . . . . . . . 60
6.2.4 Paramtres mesurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3 Introduction lanalyse en composantes principales (ACP) . . . . . . . . . . 61
6.3.1 Ncssit dun traitement statistique . . . . . . . . . . . . . . . . . . 61
6.3.2 Dnition gomtrique de lACP . . . . . . . . . . . . . . . . . . . . 62
6.3.3 Dnition algbrique de lACP . . . . . . . . . . . . . . . . . . . . . 63
6.4 Programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.4.1 Rception et trac des donnes de bases . . . . . . . . . . . . . . . . 64
6.4.2 Calcul des variables centres rduites . . . . . . . . . . . . . . . . . . 65
6.4.3 Composantes principales et vecteurs principaux . . . . . . . . . . . . 65
6.5 Expressions et fonctions MATLAB utilises . . . . . . . . . . . . . . . . . . 66
7 TP6 : Application des sries de Fourier ltude du violon (2 sances
TD, 2 sances libres et 4 sances TP) 67
7.1 Etude du mouvement de la corde de violon . . . . . . . . . . . . . . . . . . 68
7.1.1 Rsolution par onde progressive . . . . . . . . . . . . . . . . . . . . . 69
7.1.2 Rsolution par mthode de sparation des variables . . . . . . . . . . 70
7.2 Son produit par linstrument . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.3 Expressions et fonctions Matlab utilises . . . . . . . . . . . . . . . . . . . . 72
8 Annexe : lexique non exhaustif 73
9 Index des fonctions et expressions MATLAB utilises 81
10 Elments de programmation structure : 83
10.1 Une dmarche structure pas--pas : . . . . . . . . . . . . . . . . . . . . . . 83
10.2 Quelques ides de base de la programmation structure : . . . . . . . . . . . 83
10.3 Organigramme en programmation structure : . . . . . . . . . . . . . . . . . 84
10.4 Programmation structure avec Matlab : . . . . . . . . . . . . . . . . . . . . 84
11 Bibliographie 86
4
Chapitre 1
TP dinitiation (4 sances TP)
5
Matlab est un logiciel de calcul et de visualisation, dont les entits de base sont des
matrices : Matlab est une abrviation de Matrix Laboratory.
Matlab est un langage interprt : il propose des facilits de programmation et de vi-
sualisation, ainsi quun grand nombre de fonctions ralisant diverses mthodes numriques.
La meilleure faon dapprendre utiliser ce logiciel est de lutiliser vous mme, en
faisant des essais, en commettant des erreurs et en essayant de comprendre les messages
derreur qui vous seront renvoys. Ces messages sont en anglais !
Ce document est destin vous aider pour quelques premiers pas avec Matlab. Les
sections et sous-sections signales par (*) donnent des complments qui pourront vous tre
utiles lavenir, mais peuvent tre rserves pour une lecture ultrieure.
1.1 Acces Matlab
Les ordinateurs sur lesquels vous allez travailler sont congurs sous un environnement
Linux. Si vous pouvez en gnral naviguer dans vos dossiers de manire assez naturelle
comme sous Windows, il est important de connatre quelques commandes Unix qui vous
permettent certains raccourcis.
Pour ouvrir une session, vous devez taper votre login et votre mot de passe. Si le login
est unique pour chaque utilisateur, le mot de passe est modiable ! Pour fermer votre
session, allez dans le menu dmarrer et choisissez logoutou quittez lenvironnement(cf
gure 1.1).
Fig. 1.1 Quitter une session Linux
Pour travailler dans cet environnement Linux, soit vous naviguez avec votre souris de
manire plus ou moins intuitive, soit vous tapez des commandes Unix dans un shell (ou
fentre de commande en franais). Pour ouvrir un shell, on parcourt le menu dmarrer,
on choisit System et Terminal (Konsole) (gure 1.2). Pour quitter le shell il sut de
6
taper exit.
PSfrag replacements
Utilisateur
Serveur
Rpertoire courant
Invite de commandes
Ouverture dun shell
Fentre shell
Fig. 1.2 Ouverture dune fentre shell (konsole).
Les quelques commandes Unix connaitre sont :
1. cd : change le rpertoire de travail
2. ls : donne le contenu dun repertoire
3. rm : eace un chier
4. cp : copie un chier
5. mv : dplace un chier
6. mkdir : cre un rpertoire
7. rmdir : dtruit un rpertoite (vide)
8. man : donne le manuel daide dune commande
9. jobs : ache la liste des travaux en cours lanc depuis le shell courant
10. killn : stoppe le travail n
11. ps : liste lensemble des processus/travaux actifs
12. whoami : retourne lidentiant (login) de lutilisateur
7
13. grep : recherche un mot dans une liste
Par exemple la commande ps -Ao pid,user,comm | grep whoami retourne lensemble
des processus que lutilisateur a initi :
$ whoami
username
$ ps -Ao pid,user,comm | grep whoami
7562 username konsole
7563 username konsole
7569 username bash
7578 username bash
9776 username matlab
9777 username bash
10182 username matlab_helper
10084 username MATLAB
Le symbole | appel pipe ou tube de redirection permet denvoyer le rsultat de la com-
mande ps la commande grep. La commande ps -Ao pid,user,comm | grep whoami
recherche donc le mot username dans la liste de lensemble des processus et retroune les
lignes o il apparat.
Pour interrompre un programme en cours, on tape Ctrl C (dans le shell). Cela peut ne
pas tre susant, dans ce cas on pourra utiliser la commande kill suivie du PID (Process
IDentier). Par exemple si lon souhaite interrompre une session Matlab on utilisera :
$ ps -Ao pid,user,comm | grep whoami | grep -i matlab
10084 username MATLAB
10182 username matlab_helper
$ kill -KILL 10084
$ ps -Ao pid,user,comm | grep whoami | grep -i matlab
$
Vous aurez parfois besoin dcrire dans des chiers indpendants des lignes de com-
mandes. Il vous faudra alors un diteur de texte. Nous vous proposons dutiliser Emacs
qui se lance par le menu "dmarrer" et la rubrique "diteurs de texte". On ouvre et on
ferme un chier grce au menu "le" ou simplement en tapant la commande emacs dans
un shell. Le presse papier (copier-coller) se trouve dans le menu "edit".
Enn, pour accder au logiciel Matlab, vous pouvez utiliser le menu "dmarrer" ou
taper simplement la commande matlab dans un shell (gure 1.3). Suivant la version (plus
ou moins complte, cest dire avec ou sans lenvironnement java) que vous utiliserez, vous
aurez tout disposition dans le logiciel Matlab (lditeur de Matlab sappelle edit et est
disponible avec la version complte de la gure 1.3(a)) ou vous aurez besoin dun diteur de
texte comme Emacs extrieur Matlab. Nous vous conseillons fortement dutiliser
la version la plus lgre de Matlab et lditeur Emacs pour travailler en ICBE
lINSA. Lexprience montre que la version complte "plante" trs rgulirement.
Vous reconnaitrez la fentre de travail Matlab (gure 1.3) par le prompt :

8
(a) Version complte : matlab -jvm.
(b) Version allge : matlab -nojvm.
Fig. 1.3 Les direntes session de Matlab.
Vous pourrez quitter Matlab en tapant dans cette fentre :
quit
Dans la suite de cette sance, vous tes invits taper les instructions aches dans
ce texte aprs ce prompt. Les instructions et variables Matlab sont donnes dans une
typographie de machine crire. Les oprations mathmatiques et valeurs reprsentes par
ces variables sont crites en italiques.
1.2 Variables et Matrices
1.2.1 Matrices
Dans Matlab, toutes les variables reprsentent des matrices. Par exemple, on multiplie
deux matrices a et b par a*b, et le produit de deux scalaires scrit de la mme faon :
ils sont interprts comme des matrices 1X1. On peut dnir une matrice dans Matlab
de plusieurs faons :
par la liste de ses lments,
en la gnrant par une suite dinstructions et de fonctions,
en la lisant dans un chier extrieur.
Si lon reprsente la touche enter de votre clavier par le symbole , les instructions
suivantes :
A=[3 2 -2 ;-1 0 1 ;1 1 0]
et
A=[
3 2 -2
-1 0 1
1 1 0 ]
crent la mme matrice 3X3. Dans la suite, le symbole ne sera plus indiqu.
En ayant xecut lune ou lautre de ces commandes, vous aurez remarqu que Matlab
ache la valeur de la variable A que vous venez de dnir. Vous pouvez viter lachage
9
en faisant suivre la commande dun point-virgule. Ne la retapez pas pour le vrier ; en
utilisant la che ascendante de votre clavier , vous pouvez rappeler la commande
>> A = [3 2 -2;-1 0 1;1 1 0]
et ajouter le point-virgule
>> A = [3 2 -2;-1 0 1;1 1 0] ;
Matlab distingue les majuscules et les minuscules ; si vous tapez :
>> a
vous recevrez le message :
??? Undefined function or variable a.
Lnumration des lments dune matrice ou dun vecteur peut tre implicite. Essayez par
exemple :
>> m = [-3:3]
>> x = [1:-0.25:-1]
Les matrices m et x sont des matrices une ligne (vecteurs-lignes). Matlab vous fournit
les dimensions dune variable par la fonction size :
>> size(m)
ans =
1 7
Si lon veut un vecteur colonne, on peut taper
>> m = m
ou
>> x = x(:)
Lapostrophe dnit la transposition : A reprsente la matrice A
T
. Les deux points ( :)
imposent le format colonne.
On peut aussi crer directement un vecteur en sparant les composantes par un point-
virgule :
>> b = [3 ; 0 ; 2 ] ; size(b)
Un coecient quelconque dune matrice est rfrenc par ses indices de ligne et de colonne,
dans cet ordre. Par exemple, linstruction :
>> A(1,2)
renvoie la rponse :
10
ans =
2
ans est le nom dune variable qui reoit le dernier rsultat dune instruction ou dune suite
dinstructions lorsquil na t aect aucune variable. On peut faire sacher la valeur
dune variable sans achage de son nom ni de ans
>> disp(A(1,2))
Certaines fonctions de Matlab crent des matrices particulires. Les quelques matrices
suivantes sont parmi les plus couramment utilises :
eye(n) renvoie la matrice identit, habituellement note I
n
en mathmatiques ;
essayez eye(4),
ones(n,m) renvoie une matrice n lignes et m colonnes dont tous les coecients
sont des 1,
zeros(n,m) matrice n lignes et m colonnes dont tous les coecients sont des 0 ;
elle sert beaucoup pour les initialisations.
linspace(a,b,n) cre une matrice ligne de n points rgulirement espacs sur lin-
tervalle [a, b] (bornes comprises).
rand cre une matrice alatoire. Essayez B = rand(3,4). Dans quel intervalle sont
choisis les coecients de cette matrice ?
La commande help permet de recevoir des informations (en anglais !) sur une fonction ;
essayez :
>> help linspace, >> help rand
1.2.2 Oprations usuelles
Matlab permet deectuer les oprations usuelles en tendant leur dnition aux ma-
trices selon les rgles de lalgbre linaire.
Laddition et la soustraction ne mritent aucun commentaire particulier, sinon que les
tailles des matrices doivent tre gales, essayez :
>> 3+5
>> ans -2
>> A + ones(3)
>> m + x
La dernire commande aura entrain cette rponse cinglante :
??? Error using ==> +
Matrix dimensions must agree.
Matlab autorise que les dimensions ne soient pas gales lorsquune des variables est un
scalaire. A + 1 fournit la mme valeur que A + ones(3).
11
La multiplication de deux variables sera possible si les matrices quelles reprsentent
respectent les rgles de concordance des dimensions :
>> 3*4
>> c = A*b
>> C = A*B
>> b*c
>> b*c
Comme les variables A et B reprsentent respectivement des matrices 3 3 et 3 4, la
variable C reprsente une matrice 34, mais la commande B*A susciterait un message
derreur de dimensions.
On peut aussi remarquer que le produit scalaire des vecteurs b et c sobtient directement
par b*c , alors que b*c dnira une matrice 3 3 (de rang 1 !).
Matlab autorise que les dimensions ne concordent pas lorsquune des variables repr-
sente un scalaire.
Matlab distingue la division gauche et la division droite :
>> 3/4
ans =
0.7500
>> 3\4
ans =
1.3333
Ainsi cette division doit elle sinterpreter comme le produit par linverse de la variable
situe du ct vers lequel penche la barre : 3/4 reprsente 3
1
4
alors que 3 4 reprsente
1
3
4. Cette ide se gnralise aux variables reprsentant des matrices :
>> x = A\b ;
>> A*x - b
Vous aurez compris que la variable x contient la solution du systme linaire Ax = b. Com-
ment interprter le dernier rsultat renvoy par la machine ? Au passage, vous remarquerez
que cette nouvelle aectation de la variable x crase la prcdente.
Quelle reexion vous suggre le rsultat de :
>> b/A
On peut se demander ce que reprsente la matrice M dnie par
>> M = A\eye(3)
Matlab autorise le produit et les divisions par un scalaire.
Llvation une puissance donne est dnie par le symbole : essayez
12
>> 2^3
>> A^2
>> A^0
>> A^(-1)
Vous avez retrouv la matrice M.
Les rgles de priorit des oprations sont conformes celles qui sont utilises dans la
plupart des langages de programmation. Elles sont donnes par le tableau suivant :
Niveau de priorit Opration
1 puissance
2 multiplication et division
3 addition et soustraction
A niveau de priorit gal, les oprations sont eectues de la gauche vers la droite. Les
parenthses vous permettent dorganiser les priorits dans vos calculs. Leur utilisation est
recommande pour viter les ambiguts et risques derreurs.
>> 2 + 3^2
>> 2 + 3*3^2
>> 2 + (3*3)^2
>> (2 + 3*3)^2
>> A^2\A
>> A*A\A
1.2.3 Oprations sur les tableaux
Une matrice peut tre vue comme un tableau de valeurs, indpendament de lalgbre
linaire. Matlab permet de travailler avec les valeurs contenues dans un tableau. Pour
laddition et la soustraction, il ny a pas de dirence entre matrice et tableau de valeurs.
Pour la multiplication, les divisions et llvation une puissance, on fait prcder le
symbole dopration dun point. Les tableaux doivent avoir la mme taille :
>> A.^2
>> M.*A
>> b./c
>> C.*B
>> A.*B
>> A.^[2 1 2 ; 2 0 1 ; 1 1 1]
On remarquera que A. 2 lve la puissance 2 chaque lment de A. Cest un raccourci
pour A. (2*ones(3)).
1.2.4 Manipulations sur les matrices
Matlab permet de manipuler les matrices par blocs. Essayez par exemple :
C = [ones(3), rand(3,2) ; rand(2,3), eye(2)]
13
On peut ensuite en extraire la sous-matrice forme des trois dernires colonnes :
C1 = C(:,3:5);
et on retrouve ones(3) en faisant acher C(1 :3,1 :3).
Matlab propose quelques fonctions qui facilitent certaines manipulations. La fonction
diag extrait la diagonale dune matrice, sous forme dun vecteur, ou cre une matrice
diagonale, partir dun vecteur ; essayez par exemple les instructions suivantes :
>> R = rand(5);
>> diag(R)
>> diag(ans)
>> diag(diag(R))
Largument gnral de diag est double ; entrez :
>> help diag
Vous constatez que lon peut ainsi extraire dune matrice ses lments dune parallle
la diagonale. Essayez :
>> diag(R,1)
>> diag(R,-2)
>> d = ones(4,1);
>> M = 2*eye(5)-(diag(d,1)+diag(d,-1))
tril renvoie la partie triangulaire infrieure dune matrice, lments diagonaux compris.
Elle admet aussi plusieurs arguments
>> tril(R)
>> tril(R,1)
triu renvoie la partie triangulaire suprieure dune matrice.
reshape reformate une matrice, cest--dire change le nombre de lignes et de colonnes, en
prenant les lments colonne par colonne.
repmat cre une grande matrice en recopiant une matrice donne selon le format fournit.
1.3 Boucles et tests
Les principales instructions de contrle proposes par Matlab sont for, while et
if ; elles fonctionnent peu prs comme leurs quivalents dans les autres langages de
programmation.
La boucle for doit respecter la syntaxe suivante :
for compteur = expression
instructions
end
14
Generalement, expression est un vecteur de la forme dbut :incrment :fin et compteur
prend successivement toutes les valeurs de expression pour xecuter instructions. Par
exemple, les instructions suivantes permettent de calculer une valeur approche de e
x
,
pour x = 10, en utilisant lapproximation :
e
x

k=0
x
k
k !
(1.1)
>> x = 10;
>> n = 50;
>> s = 1;
>> terme = 1;
>> for k = 1:n, terme = x*terme/k ; s = s + terme ; end;
>> s
On pourra vrier plus tard que la valeur obtenue, s 2.2026 10
4
est assez proche de
e
10
.
Plusieurs boucles peuvent tre embotes. Comme Matlab est un language interprt, il
faut essayer dviter les boucles quand cest possible. Pour cela on peut utiliser des boucles
implicites. Pour construire la matrice H = (h
i,j
) M
3
(R) avec h
i,j
=
1
i+j1
, on peut
utiliser les instructions suivantes :
>> n = 3;
>> H = zeros(3);
>> for i = 1:n
for j = 1:n
H(i,j) = 1/(i+j-1);
end;
end;
Noter que lon a initialis la variable H. Cest recommand lorsque cest possible. On peut
aussi construire H de la faon suivante :
>> J = 1:n;
>> J = repmat(J,n,1);
>> I = J;
>> E = ones(n);
>> H = E./(I+J-E);
Linstruction while respecte la syntaxe suivante :
while expression
instructions
end
Les instructions seront xcutes tant que expression sera vraie. Les instructions suivantes
permettent de trouver approximativement le plus petit nombre positif reprsent dans
larithmtique utilise par Matlab :
15
>> x = 1 ; while x>0 , xm = x; x = x/2; end; xm
Linstruction if respecte la syntaxe suivante :
if expression
instructions
end
Les instructions ne seront xcutes que si expression est vraie. Il est possible de proposer
une alternative, en indiquant les instructions xecuter lorsque expression est fausse :
if expression
instructions 1
else
instructions 2
end
1.4 Fonctions de base
1.4.1 Fonctions scalaires
Ce sont les fonctions usuelles. Par exemple :
sin exp abs round
cos log sqrt tanh
tan rem sign acosh
Ces fonctions font partie des fonctions lmentaires proposes par Matlab. Pour en avoir
la liste, vous pouvez taper :
>> help elfun
Comme la liste est longue, vous pouvez contrler son dlement :
>> more on, help elfun, more off
Le dlement se fait ligne ligne (en tapant une touche quelconque) ou par pages de 20
lignes (en tapant la barre despacements). Vous pouvez maintenant comparer la variable s
calcule prcdemment avec e
10
;
>> s - exp(10)
Quelle commande devrez-vous entrer pour obtenir la valeur absolue de lerreur relative ?
Ces fonctions traitent les variables matricielles comme des tableaux de nombres ; si la
variable A reprsente une matrice A, la variable S = sin(A) reprsentera une matrice
S dont les coecients sont s
i,j
= sin(a
i,j
). Pour lexponentielle et la racine carre, qui
possdent une version "matricielle", Matlab propose les fonctions expm et sqrtm.
Le cas des polynmes est un peu particulier : un polynme peut tre dni par ses
coecients : on utilise dans ce cas une matrice ligne : par exemple, le polynme Q(x) =
x
3
+ 2x
2
3 sera reprsent par :
16
>> Q = [1 2 0 -3];
Sa valeur au point x = 1.2 sera fournie par :
>> polyval(Q,1.2)
Les racines du polynme Q seront fournies par la fonction roots. A linverse, on peut aussi
dterminer les coecients dun polynme partir de ses racines en utilisant la fonction
poly :
>> r=[1 2 3]; K = poly(r)
>> polyval(K,r)
Ces instructions assignent K la valeur [1 -6 11 -6] qui dnit le polynme K(x) =
x
3
6x
2
+11x 6. Le polynme ainsi calcul a toujours le coecient de son terme de plus
fort degr gal 1. Cest un polynme unitaire.
Comme les fonctions usuelles polyval traite les matrices comme des tableaux, il faudra uti-
liser la fonction polyvalm pour valuer un polynme de matrice. Comparez polyval(K,A)
et polyvalm(K,A).
Certaines fonctions spciales sont galement proposes par Matlab : vous allez rencontrer
les fonctions de Bessel de premire espce notes J

(x) ; elles sont donnes par la fonction


besselj dont le format dappel le plus courant est, pour le paramtre entier nu et la
variable x : y=besselj(nu,x) ;
Vous pouvez retrouver linformation sur le format dutilisation par :
>> help besselj
La liste de ces fonctions spciales vous sera renvoye par la commande :
>> more on, help specfun, more off
1.4.2 Fonctions vectorielles
Ces fonctions sont plutot destines agir sur des vecteurs, lignes ou colonnes. Citons
par exemple :
max sum mean sort
min prod std
dont vous trouverez lobjet par la commande help lorsquil nest pas vident. Elles agissent
aussi sur les matrices, mais colonne par colonne. Essayez par exemple :
>> b = rand(3,3) ; c = max(b) ; d = max(max(b));
>> b,c,d
>> sort(c)
>> sort(b)
17
1.4.3 Fonctions matricielles
Citons en quelques-unes :
eig : valeurs et vecteurs propres dune matrice,
inv : inverse,
expm : exponentielle de matrice,
size : dimensions de la matrice,
norm : norme (2 par dfaut, mais aussi 1 ou ),
rank : rang.
Une liste un peu plus complte, mais non exhaustive, de ces fonctions vous est fournie en
annexe. Une liste complte est fournie en rponse la commande
>> more on, help matfun, more off
1.5 Graphiques
1.5.1 Visualisation des courbes en 2D
Matlab permet de tracer facilement le graphe de fonctions scalaires. Cela se fait laide
de la fonction plot. Elle prend en argument des paires de vecteurs de mme dimension.
Voici par exemple le moyen dobtenir le graphe de la fonction cos 3x sur lintervalle [0, 2] :
>> x = [0:0.01:2*pi] ; y =cos(3*x) ; plot(x,y);
Le format de base de la fonction plot est en fait le suivant :
plot(x,y,s) ;
o x contient les absisses, y les ordonnes, et s est une chaine de 1 3 caractres : s=ct,
respectivement couleur et trac, qui peuvent tre choisis dans le tableau suivant :
Couleur Trac
y jaune - trait continu (c)
m magenta : pointills (c)
c cyan -. trait-point (c)
r rouge tirets (c)
g vert + plus (d)
b bleu o cercles (d)
k noir * toiles (d)
w blanc x croix (d)
Les types de trac prcds de (c) sont des tracs continus, avec une interpolation entre
les points fournis, alors que pour les autres, ne sont reprsents que les points (x
i
, y
i
). On
peut combiner ces deux modes de trac. On peut tracer les graphes de plusieurs fonctions
simultanment. Essayez maintenant :
18
>> z = sin(2*x);plot(x,y,x,z);
On peut alors lgender notre graphique de la faon suivante :
>> legend(cos(3x),sin(2x));
On peut galement obtenir ces deux courbes par la succession de commandes :
>> plot(x,y);
>> hold on;
>> plot(x,z);
La seule dirence est que cette fois, les deux graphes sont tracs avec la mme couleur.
hold on gre le graphique courant de faon que les commandes graphiques suivre vont
sajouter ce graphique. hold off est la valeur par dfaut : dans ce cas une nouvelle
commande plot eacera le graphique existant.
Les axes sont dnis automatiquement ; on peut choisir les bornes des coordonnes du
graphe laide de la fonction axis . Essayez par exemple :
>> axis([-1 5 -1.5 1.5]);
Pour la suite de notre travail, il est prfrable que vous entriez maintenant la commande :
>> hold off;
Le format de la fonction plot permet bien sr de reprsenter facilement des courbes para-
mtriques :
>> plot(y,z);
On obtient, pour les valeurs dnies plus haut, une courbe connue sous le nom de courbe
de Lissajoux. Les instructions suivantes vont rduire lgrement lchelle, donner un titre
et un nom aux axes, et faire apparatre une grille sur le fond :
>> axis([-1.1 1.1 -1.1 1.1])
>> title(Courbe de Lissajoux);
>> xlabel(x : axe des absisses);
>> ylabel(y : axe des ordonnees);
>> grid
Vous obtiendrez limpression sur papier dun graphe en utilisant la commande print qui
enverra limpression sur limprimante laquelle est reli votre ordinateur. Cest la dernire
de vos gures qui sera imprime. (A utiliser bien sr avec parcimonie !)
Exercice
On considre la fonction dnie par
F(x) = 0.01 exp x + 10 cos x 3 x. (1.2)
19
Tracer la courbe reprsentant cette fonction sur lintervalle [1, 10], en utilisant ses valeurs
aux points x
k
= 1 +
k
100
, 0 k 1100. Fixer la taille de la fentre de visualisation de
faon que les absisses soient comprises entre 1 et 11 et les ordonnes entre 50 et 200.
Complter cette gure en y ajoutant les axes et un titre. Ces axes peuvent tre tracs "
la main" en utilisant les fonctionnalits de la fentre graphique (voir les icnes). On peut
aussi les obtenir en tapant par exemple :
>> hold on ;
>> plot([0,9],[0,0],9,0,>)
>> plot([0,0],[-20,150],0,150,^)
Quant au titre, vous devez pouvoir lobtenir sans indication ...
1.5.2 Visualisation des courbes en 3D
La fonction qui permet de reprsenter une courbe dans lespace R
3
est plot3. Sa syntaxe
est
plot3(x,y,z,s) ;
et cette fois x, y et z sont des vecteurs de mme dimension contenant les trois coordonnes.
Essayez :
>> theta = pi*[-4:0.04:4]; r = linspace(1,6,201);
>> x = r.*(1+cos(theta)); y = r.*sin(theta); z = r;
>> plot3(x,y,z,k*); grid;
1.5.3 Visualisation des surfaces
Matlab permet de reprsenter des surfaces donnes en coordonnes cartsiennes ou
sous forme paramtrique. La forme paramtrique peut scrire :
x = x(s, t)
y = y(s, t)
z = z(s, t)
o les paramtres s et t parcourent un certain domaine. Plusieurs fonctions permettent cette
reprsentation, parmi lesquelles mesh reprsente un treillis, et surf une surface pleine. Elles
ont le mme format dappel :
surf(X,Y,Z,C) ;
X,Y et Z sont des matrices de mmes dimensions contenant les coordonnes de points de
la surface. C permet de dnir les couleurs et peut tre omis. Nous allons reprsenter le
cne dquation x
2
+y
2
2xz = 0 en utilisant la reprsentation paramtrique donne pour
(, ) ] , [] 0, 12[ par :
x = (1 + cos ),
y = sin ,
z = .
On peut procder de la faon suivante :
20
>> n = 31 ; theta = pi*[-n:2:n]/n ; r = linspace(0,12,n);
>> X = r*(1+cos(theta)) ;
>> Y = r*sin(theta) ;
>> Z = r*ones(size(theta));
>> surf(X,Y,Z);
Il est important de remarquer que X, Y et Z sont des matrices de mme taille !
La surface reprsente laisse apparatre les traces dune grille qui la recouvre. Laspect de la
surface est contrl par la variable shading, dont les valeurs possibles sont faceted (valeur
par dfaut), flat (supprime le treillis), et interp (adoucit les transitions). Essayez :
>> shading interp;
Les couleurs sont dnies par une matrice C de mme taille que celles des coordonnes,
et par dfaut, cette matrice est C=Z, de sorte que dune certaine faon, la couleur est
"proportionnelle" laltitude du point de la surface. Tout cela dpend du choix dune
palette graphique. Essayez :
>> C = rand(size(Z)) ; surf(X,Y,Z,C);
La palette de couleurs de la fentre de visualisation est dnie par la variable colormap.
Sa valeur par dfault est jet. Essayez :
>> colormap(cool);
La liste des palettes disponibles est fournie avec celle de toutes les fonctions ou variables
de contrle dun graphique 3D par la commande :
>> more on, help graph3d, more off
Examinons prsent le trac dune surface donne par son quation cartsienne z = f(x, y).
En gnral, on dispose dune famille de valeurs de x et dune famille de valeurs de y stockes
dans 2 vecteurs, respectivement x et y. On va devoir construire deux matrices X et Y telles
que les colonnes de X et les lignes de Y soient constantes : ces matrices seront utilisees pour
le calcul des valeurs de f. On peut utiliser la fonction meshgrid . Ainsi, pour reprsenter
la surface dquation z = exp(x
2
y
2
) , 2 < x, y < 2, on pourra procder comme suit :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = X .* exp(-X.^2 -Y.^2);
>> surf(Z);
Si on ne souhaite que le treillis, on remplace la fonction surf par mesh. Si lon souhaite
des isolignes, on utilise la fonction contour3. Par exemple :
>> v = linspace(0,max(max(Z)),20); contour3(Z,v);
21
1.6 M-chiers
Jusqu prsent, nous avons travaill en ligne sur la fentre Matlab. Cette faon de
travailler nest pas optimale. Si on commet une erreur, on est oblig de retaper toute la
ligne ! Pour palier cet inconvenient, on peut utiliser un chier dinstructions. Matlab
peut en eet excuter une suite dinstructions stockes dans un chier. On appellera ces
chiers des M-chiers, et leur nom doit tre suivi du suxe .m ; vous vous habituerez vite
travailler sous Matlab essentiellement par lintermdiaire de tels chiers. Nous vous
demandons de le faire systmatiquement. On va distinguer deux types de M-chiers : les
chiers "scripts" et les chiers de fonctions.
1.6.1 Fichiers "scripts" ou chiers dinstructions
Un chier script est un chier contenant une suite dinstructions Matlab directement
xcutables. Ces instructions sont xcutes en utilisant les variables de lespace de travail.
La liste de ces variables est fournie en rponse la commande
>> whos
Pour crer un tel chier, il faut ouvrir une fentre ddition. Selon linstallation de Matlab,
vous aurez ou non accs lditeur deboggueur. Si cest le cas, votre fentre de travail
ressemble la gure ci-dessous :
Vous pouvez alors utiliser les options du menu de cette fentre.
Dans le cas contraire, et si vous travaillez sous LINUX ou sous UNIX, nous vous
conseillons emacs. Vous y accdez depuis votre fentre Matlab par la commande :
! emacs &
22
Une fois que vous aurez crit les instructions que vous voulez voir executes, vous allez
sauvegarder le chier sous un nom de votre choix, avec le suxe .m . Vous le ferez en vous
servant du menu de la fentre emacs.
Un exemple
Lorsque que lon veut calculer la drive dune fonction f(x) au point x, on peut utiliser
la relation :
f

(x)
f(x +h) f(x)
h
. (1.3)
On va vrier la pertinence de ce calcul en fonction des valeurs du pas h dans le cas de la
fonction f(x) = sin(x), dont on calculera la valeur approche de la drive au point x = 1.
Comme la rponse est connue, f

(1) = cos(1), on pourra calculer lerreur et la reprsenter


graphiquement.
Editer un chier que vous appellerez Dernumsin.m dans lequel :
- vous denirez la variable x = 1 ;
- vous dnirez un vecteur contenant les pas, pas = 10. (-[1 :16]) ;
- vous calculerez les drives numriques de la fonction sinus au point x pour ces pas,
Dn = (sin(x+pas)-sin(x))./pas ;
- vous calculerez lerreur Err = abs(Dn-cos(x)) ;
- vous reprsenterez cette erreur en fonction du pas en coordonnes logarithmiques :
loglog(pas, Err) ;
Une fois que ce chier est sauvegard, vous pouvez en demander lxcution :
>> Dernumsin
Vous pourrez alors comprendre pourquoi nous avons utilis des coordonnes logarithmiques.
Les variables qui sont cres par lxcution du chier script sont visibles depuis lespace
de travail :
>> clear all
>> whos
>> Dernumsin
>> whos
Lemploi dune majuscule comme premire lettre de votre chier vous garantit contre le
risque dutiliser le nom dune fonction prdnie de Matlab.
Exercice
Le but de cet exercice est dcrire un chier appel Deform.m dont lobjet est de tracer
un cercle et son image par un endomorphisme donn. On rappelle que le cercle ( de centre
O et de rayon 1 est donn par son quation paramtrique
x(t) = cos(t)
y(t) = sin(t) , t [0, 2]
23
Soit un endomorphisme de R
2
reprsent par la matrice A suivante
A =
_
0.8630 0.1638
0.1638 0.7325
_
Alors limage de ( par A est lensemble des points (u(t), v(t)) tels que
_
u(t)
v(t)
_
= A
_
x(t)
y(t)
_
Crer un chier Deform.m qui contient les instructions suivantes :
dnir le paramtre t (utiliser la fonction linspace)
calculer les x(t) et y(t)
tracer sur une gure le cercle (, mettre une lgende et des axes
dnir la matrice A
dnir le vecteur (x(t), y(t))
calculer le vecteur (u(t), v(t))
tracer sur la mme gure que prcdemment le vecteur (u(t), v(t)) ainsi obtenu
Aprs lavoir sauv, vous pouvez commander lexcution de ce chier par la commande
>> Deform
On vrie que limage de ( est bien une ellipse. Quelle est la particularit de cette ellipse
si on choisit la matrice A diagonale ?
1.6.2 Fichiers functions
Lexemple du chier Dernumsin prcdent nest pas tout fait satisfaisant : dans cer-
tains cas, il serait prfrable de disposer dun moyen de calculer une drive approche
pour une fonction quelconque, au point que lon veut et pour le pas que lon choisit. Cela
peut se faire en crant une fonction. Avant dxaminer la possibilit de crer une fonction
de plusieurs variables, intressons nous des fonctions plus simples.
Fonctions simples dune variable
Nous avons dj rencontr la fonction F(x) = 0.01 e
x
+10 cos x3 x. Il est possible de
crer une fonction Matlab qui calcule les valeurs de F. Cela peut se faire de deux faons :
- comme la fonction F peut se dnir en une seule ligne, on peut le faire avec la
fonction inline
>> F1 = inline(0.01*exp(x)+10*cos(x)-3*x)
- de faon plus gnrale, on peut diter un chier que lon va appeler F2.m qui devra
commencer par le mot-clef function : vous pouvez le dnir de la faon suivante
function y = F2(x) ;
y = 0.01*exp(x)+10*cos(x)-3*x;
La premire dnition est utiliser lorsque lon nenvisage pas dutilisation ultrieure de
cette fonction. La dnition au moyen dun chier permet de la conserver. Cependant, ainsi
quelle est rdige, cette fonction a encore le dfaut que son objet nest pas immdiatement
24
lisible ; on risque de lavoir oubli quand on aura besoin de la rutiliser. Il faut donc la
commenter. Cela se fait sur des lignes qui commencent par le symbole % . Ce symbole
transforme en commentaires tous les caractres qui le suivent dans la ligne courante. Entre
autres commentaires, vous devrez toujours indiquer le format dappel de la fonction. Voici
comment nous vous suggrons dcrire ce chier :
function y = F2(x) ;
% fichier fonction definissant la fonction F2(x) qui sert dexemple
% au polycopie dinitiation a Matlab.
% Lappel se fait selon :
% >> y = F2(x);
y = 0.01*exp(x)+10*cos(x)-3*x;
Ces commentaires sont placs immdiatement aprs la premire ligne (de dclaration). De
cette faon, ils constitueront la rponse fournie par Matlab la commande :
>> help F2
Les variables internes dun chier fonction sont locales ; elles ne sont pas vues depuis
lespace de travail. Corollairement, les variables de lespace de travail que vous souhaitez
utiliser dans une fonction doivent tre passes en argument. La commande global permet
de dnir des variables globales. Elles doivent tre dclares globales au dbut de la fonction
et dans lespace de travail.
Fonctions de plusieurs variables
On souhaite crer une fonction qui calcule la drive numrique dune fonction passe
en argument, en un ou plusieurs points pour une valeur donne du pas. Le chier Dernum.m
ralise une telle fonction :
function Dn = Dernum(fonc,x,h);
% Cette fonction calcule la derivee "numerique" de la fonction
% fonc au(x) point(s) x pour le pas h.
% Lappel se fait selon :
% Dn = Dernum(fonc, x, h)
% Les variables en entree sont :
% - fonc est le nom de la fonction dont on veut calculer
% la derivee,
% - x est une valeur reelle ou un vecteur contenant
% des valeurs reelles du domaine de definition de fonc,
% - h est le pas du calcul.
xp = x + h;
y = feval(fonc,x);
yp = feval(fonc,xp);
Dn = (yp - y)/h;
Le passage dune fonction en argument mrite quelques commentaires :
25
- si fonc.m est une fonction prdnie de Matlab (par exemple sin) ou le nom dun
chier de fonction (par exemple F2), on pourra crire lun ou lautre des deux appels
ci-dessous :
>> Dn = Dernum(F2, x, pas);
>> Dn = Dernum(@F2, x, pas);
- si fonc est le nom dune fonction dnie par inline, (par exemple F1), on devra
formuler lappel selon :
>> Dn = Dernum(F1, x, pas);
Essayez de dnir une fonction Matlab qui calcule la fonction F
(a, b)
qui prsente un "pic"
peu marqu au point a et un pic plus marqu au point b :
F
(a, b)
(x) =
2
(x a)
2
+ 0.01
+
1
(x b)
2
+ 0.002
.
Les paramtres a et b seront des variables de la fonction que lappellera par exemple
Foncapics, et la premire ligne du chier Foncapics.m sera :
function y = Foncapics(x,a,b);
On prendra soin de dnir cette fonction de faon quelle puisse prendre en arguments les
lments dun tableau (./ et .).
Arguments optionnels en entre (*)
Le nombre de variables en entre nest pas ncessairement x. La fonction Dernumbis
propose, si on le dsire, de faire une reprsentation graphique de la drive calcule.
function Dn = Dernumbis(fonc,x,h,dessin);
% Cette fonction calcule la derivee "numerique" de la fonction
% fonc au(x) point(s) x pour le pas h.
% Lappel se fait selon :
% Dn = Dernumbis(fonc, x, h)
% ou Dn = Dernumbis(fonc, x, h, dessin)
% Les variables en entree sont :
% - fonc est le nom de la fonction dont on veut calculer
% la derivee,
% - x est une valeur reelle ou un vecteur contenant
% des valeurs reelles du domaine de definition de fonc,
% - h est le pas du calcul,
% - dessin est une variable optionnelle ; si on
% passe une valeur, on obtient un graphe
% de la derivee.
xp = x + h;
y = feval(fonc,x);
yp = feval(fonc,xp);
Dn = (yp - y)/h;
if nargin>3
26
plot(x,Dn)
axis(1.1*[min(x), max(x), min(Dn), max(Dn)]);
end
nargin renvoie le nombre de variables utilises dans lappel la fonction.
Nombre variable darguments (*)
La fonction dont on veut calculer la drive peut dpendre de paramtres, comme la
fonction F
(a, b)
ci-dessus. On utilisera dans ce cas la fonction varargin, comme le montre
lexemple ci-dessous :
function Dn = Dernumter(fonc,x,h,dessin,varargin);
% Cette fonction calcule la derivee "numerique" de la fonction
% fonc au(x) point(s) x pour le pas h.
% Lappel se fait selon :
% Dn = Dernumter(fonc, x, h, dessin, p1, p2,...)
% Les variables en entree sont :
% - fonc est le nom de la fonction dont on veut calculer
% la derivee,
% - x est une valeur reelle ou un vecteur contenant
% des valeurs reelles du domaine de definition de fonc,
% - h est le pas du calcul,
% - dessin est une variable optionnelle ; si on
% passe une valeur , on obtient un graphe
% de la derivee.
% - p1, p2,... sont deventuels parametres de la
% fonction fonc. On peut passer des parametres sans
% demander de dessin en utilisant la matrice vide [].
if nargin <= 3; dessin = []; end;
xp = x + h;
y = feval(fonc,x,varargin{:});
yp = feval(fonc,xp,varargin{:});
Dn = (yp - y)/h;
if ~isempty(dessin)
plot(x,Dn)
axis(1.1*[min(x), max(x), min(Dn), max(Dn)]);
end
varargin dsigne une liste de longueur quelconque de variables qui peuvent tre de tout
format ; elle est gre comme une cellule de tableaux. Les cellules de tableaux sont
un des moyens proposs par Matlab pour grer une collection de variables de types et
formats dirents. Les lignes suivantes dnissent une cellule de tableaux et font sacher
quelques-uns de ses lments :
>> C ={1:3, rand(2),coucou};
>> C{1}
27
ans =
1 2 3
>> c = C{3}
c =
coucou
Les lments dune cellule sont ordonns comme ceux dune matrice, par ligne et par
colonne ; on y fait rfrence par lutilisation daccolades au lieu de parenthses.
Plusieurs arguments en sortie
On peut rednir la fonction F2 de faon quelle fournisse aussi la drive F

de la
fonction F :
F

(x) = 0.01 e
x
10 sin x 3.
Cela peut se faire de la faon suivante :
function [y, yprime] = F2bis(x);
% fichier fonction d\efinissant la fonction F(x) qui sert dexemple
% au polycopie dinitiation a Matlab, ainsi que sa derivee.
% Lappel se fait selon :
% y = F2bis(x);
% et renvoie alors seulement les valeurs de F, ou selon
% [y, yprime] = F2bis(x);
y = 0.01*exp(x)+10*cos(x)-3*x;
yprime = 0.01*exp(x) -10*sin(x) -3;
Les deux arguments en sortie sont placs entre crochets. Dans les deux formats dappel,
on calcule F(x) et F

(x). On peut ne faire calculer que F(x) si lon ne veut pas les valeurs
de la drive :
function [y, yprime] = F2ter(x);
% fichier fonction d\efinissant la fonction F(x) qui sert dexemple
% au polycopie dinitiation a Matlab, ainsi que sa derivee.
% Lappel se fait selon :
% y = F2ter(x);
% ou [y, yprime] = F2ter(x);
% et renvoie alors seulement les valeurs de F, ou selon
% [y, yprime] = F2ter(x);
y = 0.01*exp(x)+10*cos(x)-3*x;
if nargout==2
yprime = 0.01*exp(x) -10*sin(x)-3;
end
1.6.3 Fichiers de sauvegarde
Il est possible de sauvegarder des variables de lespace de travail en vue dune utilisation
ultrieure. Cela se fait laide de linstruction save. Le format le plus simple est le suivant :
28
save nomfichier X Y Z
Les variables X, Y et Z seront sauvegardes dans un chier nomfichier.mat. On peut les
retrouver par lappel :
load nomfichier
1.7 Utiliser les aides en ligne
1.7.1 La recherche par mot clef
La commande lookfor est une commande de recherche par mot clef. Elle permet de
retrouver toutes les fonctions Matlab dont les commentaires introductifs contient une
chaine de caractres donns. Si, par exemple, je cherche une fonction permettant de tracer
un histogramme, je peux entrer linstruction :
lookfor histogram
En rponse, jobtiens la liste suivante :
HIST Histogram.
HISTC Histogram count.
ROSE Angle histogram plot.
On utilise ensuite la commande help pour plus de prcisions. Cette commande ache les
commentaires de la fonction indique. Ces commentaires contiennent lobjet de la fonction
ainsi que les dirents formats dappel. Ils contiennent galement une rubrique "See Also"
qui donne les noms de fonctions dont lobjet est en rapport avec la fonction considre.
Ces commentaires sont achs sur la fentre de travail.
La fonction helpwin ouvre une fentre qui donne accs ces commentaires sur une
fentre spare. Laccs est arborescent, partant dun classement par domaine dapplication
jusqu laide de chaque fonction. Le lien est fait avec les aides des renvois suggrs par la
rubrique "See Also".
1.7.2 La documentation hypertexte
La commande helpdesk donne accs une documentation hypertexte complte sup-
porte par le navigateur internet. Il sut alors de se laisser guider dans sa recherche.
1.8 Expressions et fonctions MATLAB utilises
axis
clear all
clf
disp
besselj
diag
29
eye
eig
Emacs
for
function
global
grid
help
hold off
hold on
if
inline
inv
linspace
mesh
norm
ones
plot, plot3
polyval
print
rand
repmat
reshape
size
surf
title
trill
triu
xlabel
ylabel
while
zeros
30
Chapitre 2
TP1 : Programmation structure,
tracs de courbes (4 sances TP)
31
Objectif
Le but de ce TP est dapprofondir vos connaissances dans les domaines de la pro-
grammation structure et du trac de courbes dans Matlab. Une application illustrant
graphiquement la notion de dveloppement de Taylor dune fonction est propose. Vous au-
rez dnir des chiers scripts galement appels M-Files et des fonctions. Vous crirez
des boucles, vous aborderez les notions dargument, de variables locales, globales, muettes.
Avant toute chose vous lirez la documentation relative aux functions et chiers scripts
(help function, help script).
2.1 Mthodologie
Crer le rpertoire TP1 qui contiendra tous les scripts et toutes les fonctions pro-
grammer. Nommer main.m le script principal qui regroupe les lignes de commandes
principales de la programmation du TP.
Pour trouver de laide sur une fonction MATLAB ou rechercher le nom dune fonc-
tion, lancer les commandes help et lookfor (help nom_de_la_commande dans la
fentre de commande MATLAB. Exemple : help eig). Regarder la n de laide,
le paragraphe See also pour connatre le nom des fonctions similaires.
Ajouter commentaires et indentation pour amliorer la lisibilit du code pour un
usage ultrieur.
Lutilitaire ddition impos estt lditeur Emacs.
Il est fortement conseill de travailler par crit sur une feuille (algorithme)
avant de commencer lcriture du programme avec le langage Matlab.
Il est aussi fortement conseill de tester les lignes de commandes au fur
et mesure de la construction de votre programme
Pensez crire un programme principal condens et faire appel des fonctions
aussi souvent que possible.
Un programme principal commence toujours par les instructions :
clear all : eace toutes les variables en mmoire
clf : eace toutes les gures
2.2 Premiers pas
On sintresse aux fonctions de tracs proposes par Matlab. Pour illustrer ces fonc-
tionnalits, on considre une famille de fonctions dnie par :
f

(x) = 1 +
_
x cos(x)
_
2
(2.1)
Traons cette fonction pour x [0, 3] et pour trois valeurs du paramtre . Dans cette
premire partie "Premiers Pas", le travail propos consiste utiliser des boucles au sein
dun chier script unique. Vous travaillerez donc en consignant les commandes
Matlab dans un chier script dnomm script0.m.
1. Construire un vecteur x compos de 50 points quirpartis entre 0 et 3.
32
2. A laide dune boucle sur les lments du vecteur x, construire un vecteur y image
de x par la fonction f

pour = 1 (help for).


3. Remplacer la boucle for utilise prcdemment par loprateur .*. Expliquer la
dirence entre .* et *.
4. Tracer la fonction f

sur lintervalle [0, 3] pour des valeurs du paramtre gales 1,


2 et 3 sur la mme gure. Chacune des courbes devra tre trace avec une couleur
dirente (help hold on, help plot(x1,y1,x2,y2,x3,y3)).
5. Modier le programme an de raliser une pause entre les tracs, suspendre lexcu-
tion du script jusqu ce que lutilisateur presse la touche "Entre". Vous indiquerez
un message expliquant lutilisateur comment reprendre lexcution du programme
(help display, pause).
2.3 Dnition de fonctions
Lcriture rptitive de y = 1 + (xcos(x))
2
est fastidieuse et source derreurs. Elle
peut tre vite en crivant un programme principal qui fait appel un autre chier
contenant la dnition de cette fonction. Une fonction est crite dans un chier dirent
de celui du "programme principal". En langage Matlab le nom du chier de la fonction
doit tre le mme que celui de la fonction. Une fois cre, cette fonction peut tre appele
partir de nimporte quel autre programme principal ou fonction. La notion de fonction est
donc associe lide de bibiothque de fonctions. Votre intrt est de crer des fonctions
les plus gnrales possibles et dy associer un mode demploi en plaant des commentaires
sur la deuxime ligne du chier fonction.
Exemple : la fonction toto(x,y) sera dnie dans le chier toto.m. Les premires lignes
de ce chier doivent tre :
function resultat = toto(x,y)
% fonction sommant ses arguments
resultat = x+y;
Dans les autres programmes, cette fonction est appele en prcisant la valeur des argu-
ments. Les arguments x et y sont des variables dites muettes : elles servent rserver une
zone mmoire qui reoit les valeurs utilises lors de lappel de la fonction par le programme
principal. Lexemple ci-dessous devrait vous permettre de mieux comprendre ce point.
% programme principal appelant la fonction toto
...
% avec des valeurs
Somme1 = toto(4,3)
...
% ou des noms de variables aprs affectation
a = 1; b = 2;
Somme2 = toto(a,b)
...
33
Ici, x, premier argument de la fonction toto(x,y), reoit la valeur de la variable a au
moment o la fonction est appele, soit 1.
1. Dnir la fonction Matlab fa2arg.m qui prend comme arguments dentre x et ,
et qui retourne la valeur de f

(x) (help function). Les premires lignes du chier


fa2arg.m devront tre les suivantes :
function R = fa2arg(x,Alpha)
% fonction calculant 1+(Alpha*x*cos(Alpha*x))^2
% Appel
% y = fa2arg(x1,Alpha1)
...
Tester votre fonction.
Une autre possibilit est de crer une fonction avec un seul argument x et de dnir le
paramtre comme variable globale. Une variable globale permet de communiquer une
valeur entre le programme principal et les fonctions sans la passer comme argument de
fonction.
La variable globale Alpha est visible depuis tout programme ou fonction qui contiendra
linstruction global Alpha (help global). Cette instruction doit tre prsente dans les
deux programmes entre lesquels on souhaite changer la valeur de la variable.
2. crire une fonction matlab fa1arg.m qui prend comme unique argument dentre
x; le paramtre (not ) tant trait comme une variable globale.
function Res = fa1arg(x)
% fonction retournant 1+(Alpha*x*cos(Alpha*x))^2
% Le paramtre Alpha est une VARIABLE GLOBALE
% Appel
% y = fa1arg(x1)
global Alpha
...
3. valuer votre fonction avec un argument scalaire.
4. Les fonctions Matlab utilisent couramment des arguments non scalaires. Tester
votre fonction en passant un argument x de type vecteur. Expliquer le message der-
reur rsultant. Procder aux ventuelles corrections pour que cette valuation soit
possible.
2.4 Reprsentation de fonctions
Vous travaillerez pour cette partie en consignant les commandes dans le
chier script script1.m.
1. Reprsenter la fonction fa sur lintervalle [1, 10] pour = 1 (on pourra utiliser 50
points dvaluation) (help plot).
2. Ajouter sur la mme gure la reprsentation de la fonction pour = 3 (sur lintervalle
[1, 10]) en utilisant une ligne de style et de couleur dirents de celle du premier trac
34
(help hold on, doc linespec si vous utilisez la version complte de Matlab sinon
les styles de lignes sont prsents dans laide de la fonction plot).
3. Eacer la fentre graphique (help clf). Reprsenter sur cette gure la fonction pour
= 2 et = 3 sur lintervalle [0, ]. Vous utiliserez une chelle logarithmique pour
laxe des ordonnes (help semilogy).
4. Ajouter une lgende la gure en vous assurant quelle ne masque pas les tra-
cs (help legend). Ajouter un titre (help title) et prciser les quantits repr-
sentes par chacun des axes. Le texte crit devra avoir une taille de police de 16
(help FontSize).
title(titre du trace,Fontsize,16);
5. Fixer la taille de laxe en x lintervalle dtude [0, ]. Vous laisserez laxe y inchang
(help axis).
6. Nous allons maintenant reprsenter la fonction pour quatre valeurs direntes du
paramtre (/2, 2, 3, 6) sur une nouvelle et unique fentre graphique. Pour
cela, la gure sera subdivise en quatre. Vous prciserez pour chaque trac la va-
leur du paramtre considr (les symboles et devront apparatre dans le titre)
(help figure, help subplot, help plot, help title, help texlabel).
2.5 Dveloppement de Taylor dune fonction de plusieurs va-
riables
Vous travaillerez pour cette partie en consignant les commandes dans le
chier script Taylor.m. Commencer par crire trois chiers "fonction" que vous
appelerez ensuite depuis ce programme principal.
Mettons en oeuvre le developpement de Taylor (ou Taylor-Young) dune fonction pour
construire le plan tangent une surface. Considrons une fonction f dnie de R
2
dans R.
Le graphe de cette fonction dnit une surface S dont chaque point M a pour coordonnes
M = (x, y, z) avec z = f(x, y)).
S = (x, y, f(x, y)) [ (x, y) R
2
On recherche lquation du plan tangeant la surface S en un point M
0
de S. Le dvelop-
pement de Taylor de la fonction f au voisinage du point M
0
de coordonnes (x
0
, y
0
, z
0
) =
(H
0
, z
0
) avec z
0
= f(x
0
, y
0
) et H
0
= (x
0
, y
0
) est donn par
f(H
0
+h) = f(x
0
, y
0
) +h
T
.f(x
0
, y
0
) +o([h[) (2.2)
o f(x
0
, y
0
) est appel vecteur gradient de f au point H
0
= (x
0
, y
0
) et est donn par
f(x
0
, y
0
) =
_
f
x
(x
0
, y
0
),
f
y
(x
0
, y
0
)
_
T
(2.3)
et h = (h
1
, h
2
)
T
est un vecteur accroissement. On rappelle que la notation o([h[) = [h[(h)
dsigne un reste petit devant [h[ et qui peut tre ngliger en premire approximation.
35
Ainsi on a en dveloppant la formule (2.2)
f(x
0
+h
1
, y
0
+h
2
) = f(x
0
, y
0
) +h
1
.
f
x
(x
0
, y
0
) +h
2
.
f
y
(x
0
, y
0
) +o([h[) (2.4)
On en dduit que le plan tangeant S en M
0
a pour quation
z = f(x
0
, y
0
) +x
f
x
(x
0
, y
0
) +y
f
y
(x
0
, y
0
)
Lobjectif de cette partie est de vrier que le vecteur gradient de f valu en (x
0
, y
0
)
permet de construire une base du plan tangent la surface au point (x
0
, y
0
). Cette base
est donne, par exemple, par les vecteurs u et v suivants
u =

OM
x
=
_
1, 0,
f
x
(x
0
, y
0
)
_
et v =

OM
y
=
_
0, 1,
f
y
(x
0
, y
0
)
_
(2.5)
On se propose dtudier la fonction suivante
f(x, y) =
x
3
2
+
y
2
2
(2.6)
Construction des chiers fonction f et f
1. crire une fonction matlab f3d qui prend comme unique argument le vecteur H et
qui retourne la valeur de la fonction f au point de coordonnes H = (x, y)
function Res = f3d(H)
% fonction retournant la valeur z=f(x,y)
Res=
2. crire une fonction matlab gradf qui prend comme argument le vecteur H et qui
retourne le vecteur gradient de la fonction f au point de coordonnes H = (x, y)
function Res = gradf(H)
% fonction retournant le vecteur [df/dx; df/dy]
Res=
3. crire une fonction matlab plantangent qui prend comme arguments les deux
vecteurs h et H et qui retourne lapproximation de f(H +h) calcule par la formule
de Taylor (2.2).
function Res = plantangent(X,h)
% fonction retournant la valeur de f en X+h
Res=
Trac de la surface en 3D
Vous travaillerez ici dans le chier script Taylor.m. Construire sur papier lor-
ganigramme de ce programme qui devra acher sur un mme graphique, la surface, un
point de cette surface, les vecteurs tangents la surface et le plan tangent en ce point.
Vous ferez appel aux 3 fonctions dj cres et vous vous aiderez des 4 premires questions
qui suivent.
36
1. Construire deux vecteurs x et y de mme taille pour x [2, 2] et y [3, 3].
A laide de la fonction f3d, construire la matrice Z(i, j) = f(x(i), y(j)). Tracez la
surface z = f(x, y) (help surf(y,x,Z).
Note : attention lordre des vecteurs, le premier vecteur correspond aux colonnes
de Z
2. Placer sur ce graphique un point de cordonnes (x
0
, y
0
, f((x
0
, y
0
)) au choix (help plot3).
3. Tracer les deux vecteurs formant la base du plan tangent en ce point
(help plot3, markerfacecolor, markersize).
4. Calculer les coordonnes des points appartenant au plan tangent en (x
0
, y
0
, f((x
0
, y
0
))
dans un voisinage de plus ou moins 0,5 dans les directions x et y. Tracer ce plan sur
le mme graphique que la surface prcdente.
5. Tester votre programme pour dirents points (x
0
, y
0
).
6. Amliorer la convivialit en demandant lutilisateur de saisir les coordonnes du
point (x
0
, y
0
) (help input).
2.6 Annotation dun trac, fonctionnalits avances
Nous allons utiliser les identiants (handle pour Matlab) des objets graphiques an
de modier leurs proprits. Vous travaillerez dans un nouveau chier script script3.m.
1. (*) Fermer toutes les fentres graphiques. Excuter le chier script1. Slectionner
la fentre 1 et modier la proprit FontSize des axes de la gure an dobtenir des
polices de taille 16 (help gca, set).
2. (*) Slectionner la fentre 3. Crer une nouvelle lgende identique la prcdente,
mais en stoquant lidentiant de cet objet graphique dans la variable Legend_Handle.
Changer la taille des polices utilises pour la lgende (help set).
Remarque : La cration dune nouvelle lgende dtruit lancienne (lobjet lgende est
unique pour chaque gure). Il est possible de rcuprer lidentiant de la lgende
grce la commande >> findobj(gcf,Tag,legend)
3. Annoter une gure. Nous allons ajouter sur la gure un texte indiquant la valeur
prise par la fonction en un point de lintervalle.
(a) Excuter les instructions Matlab suivantes :
figure; Z=\alpha; Y=\approx ; X = \rightarrow;
Mon_Texte = sprintf(%s,f_,Z,Y,X);
Text_Handle = text(0.5,0.5,Mon_Texte);
Que contiennent les variables Mon_Texte et Text_Handle ? (help sprintf, text).
(b) Quelle est la signication du rsultat de linstruction
>>get(Text_Handle,FontSize) (help get).
(c) (*) Changer la taille du texte identi par Text_Handle (help set).
(d) Eacer ce texte (lookfor delete).
37
(e) (*) Construire une chane de caractres de la forme "f
Z
(X) Y " o X,
Y , Z sont des chanes de caractres dnies dans des variables (Exemple :
>> Z = 2; X=\pi).
Indications : sprintf, les symboles et sont obtenus grce respectivement
\approx et \rightarrow).
(f) (**) Procder aux modications ncessaires pour prendre en compte une variable
Z et Y numriques (help num2str).
2.7 Expressions et fonctions MATLAB utilises
clear all
clf
help
script, function
boucle for
hold on
display
pause, input
global
plot, plot3, surf
subplot, markerfacecolor, markersize
axis, legend, title, label
FontSize, semilogy
texlabel, figure
gca, set, get
sprintf, text
38
Chapitre 3
TP2 : Intgration numrique -
Sensibilit la discrtisation (2
sances TP)
39
Objectif
Lobjet de ce TP est le calcul numrique sous MATLAB de lintgrale sur un segment
[a, b] dune fonction dune variable par la mthode du point milieu et la mthode des
trapzes. Soit (a, b) R
2
tel que < a < b < +. Soit f : [a, b] R, x f(x) une
fonction continue donc intgrable sur [a, b].
On se propose de calculer numriquement une valeur approche de lintgrale dnie
I(f; a, b) =
_
b
a
f(x) dx (3.1)
Comme lintgrale reprsente laire algbrique du domaine situe entre la courbe y = f(x)
et laxe des abscisses et entre les deux droites x = a et x = b, on va approcher ce domaine
par un dcoupage en carrs
3.1 Mthodologie
Crer le rpertoire TP2 qui contiendra tous les scripts et toutes les fonctions pro-
grammer. Nommer main.m le script principal qui regroupe les lignes de commandes
principales de la programmation du TP.
Pour trouver de laide sur une fonction MATLAB ou rechercher le nom dune fonc-
tion, lancer les commandes help et lookfor (help nom_de_la_commande dans la
fentre de commande MATLAB. Exemple : help eig). Regarder la n de laide,
le paragraphe See also pour connatre le nom des fonctions similaires.
Ajouter commentaires et indentation pour amliorer la lisibilit du code pour un
usage ultrieur.
Lutilitaire ddition impos estt lditeur Emacs.
Il est fortement conseill de travailler par crit sur une feuille (algorithme)
avant de commencer lcriture du programme avec le langage Matlab.
Il est aussi fortement conseill de tester les lignes de commandes au fur
et mesure de la construction de votre programme
Pensez crire un programme principal condens et faire appel des fonctions
aussi souvent que possible.
Un programme principal commence toujours par les instructions :
clear all : eace toutes les variables en mmoire
clf : eace toutes les gures
3.2 Mthode du point milieu
3.2.1 Elments thoriques
Soit a = x
0
< x
1
< < x
m
= b un dcoupage de lintervalle dtude en m segments
gaux. On note h = x
i+1
x
i
=
ba
m
la longueur de chaque petit segment. La mthode du
point milieu consiste approcher la fonction f par une constante sur chaque intervalle de
40
la forme [x
i
, x
i+1
[.
i = 0 . . . m1 , x [x
i
, x
i+1
[ , f(x) f(c
i
), avec c
i
=
x
i1
+x
i
2
o c
i
est le centre de lintervalle [x
i
, x
i+1
[. La valeur approche de lintgrale est alors
I
m
(f; a, b) =
m

i=1
h f(c
i
) = h
m

i=1
f(c
i
) . (3.2)
Fig. 3.1 Approximation de laire I(f ; a, b) par la mthode du point milieu
On souhaite valuer lerreur commise lors de cette approximation :
E
m
(f; a; b) = I(f; a; b) I
m
(f; a; b)
On suppose que f C
2
([a, b]) et on crit le dveloppement de Taylor de f lordre 2
autour du point c
i
. Il existe
i
]x
i1
, x
i
[ tel que
f(x) = f(c
i
) +f

(c
i
)(x c
i
) +
1
2
f

(
i
)(x c
i
)
2
le point
i
dpendant du point x. En intgrant entre x
i1
et x
i
, il vient par la formule de
la moyenne
I(f; x
i1
, x
i
) = I
m
(f; x
i1
, x
i
) + 0 +
1
2
f

(
i
)
_
(x c
i
)
3
3
_
x
i
x
i1
,
o
i
]x
i1
, x
i
[. Ainsi, si on note M un majorant de f sur [a, b], on a
E
m
(f; a, b) M
b a
24
h
2
. (3.3)
41
3.2.2 Algorithme et programmation
Lisez lalgorithme de calcul de lintgrale par la mthode du point milieu I
m
(f; a, b) :
% Initialisation
quadrature = 0
% Calcul du pas h
Evaluer h = (b - a) / m
% Dbut de la boucle servant parcourir lintervalle [a,b]
Pour i de 1 m
Evaluer c(i) = a + h * (2*i - 1) / 2
Evaluer quadrature = quadrature + f(c(i))
% Fin de la boucle
% Attention limplmentation de f(c(i)) ...
% Calcul de lintgrale
Evaluer quadrature = h * quadrature
3.2.3 Implmentation
Limplmentation du calcul de lintgrale dune fonction f, dont le nom est stock dans
la variable Matlab fun, implique lcriture de trois chiers :
un chier script du programme principal qui interroge lutilisateur sur le nom fun de
la fonction intgrer, la valeur des bornes a et b, le nombre m de sous-intervalles de
discrtisation, la mthode dintgration et qui ralise lappel des fonctions.
un chier de type function qui calcule limage par la fonction f de x.
un chier de type function qui dcrit la mthode de calcul utilise.
Pour ce faire :
1. Implmenter sous Matlab lalgorithme ci-dessus dans le chier fonction fquadpm1.m.
La premire ligne de ce chier est donne par :
function quadrature = fquadpm1(fun, a, b, m)
Largument fun dsigne soit le nom de la fonction gnrique intgrer stock dans une
chane de caractres soit un pointeur sur cette fonction (help function, help feval).
2. Comparer cette implmentation (faire un commentaire) avec celle donne ci-dessous
que lon vous demande de reproduire dans le chier fquadpm2.m (help ops, help colon).
function quadrature = fquadpm2(fun, a, b, m)
h = (b - a) ./ m;
x = a + h./2:h:b;
y = feval(fun, x);
quadrature = h .* sum(y);
3. On tudie le cas (a, b) = (0, 1) et f : [0, 1] R, x f(x) = e
x
2
. Crer un chier
function nomm fexpmx2.m pour dnir la fonction f de la variable x.
Indications supplmentaires :
42
La commande input permet dinteragir avec lutilisateur pour entrer des donnes dans
la fentre principale de Matlab au cours de lexcution dun script ou dune fonction. La
commande switch...case...end peut tre utile pour orienter le calcul de quadrature en
fonction de la mthode.
3.2.4 Application numrique
Faire en sorte que le programme principal ache clairement tous les rsul-
tats demands ci-aprs.
1. Calculer I
m
(e
x
2
; 0, 1) pour m = 10 et m = 100, laide de la fonction fquadpm1.m.
2. Idem avec fquadpm2.m. Vrier que les rsultats obtenus concident.
3. On veut estimer une majoration de lerreur de quadrature pour m = 10 et m = 100
en valeur absolue. A cette n, calculer la main f

(x), tracer avec Matlab, x


f

(x) et en dduire visuellement une valeur de M


2
(f) = max
[a, b]
[f(x)[ par excs. En
dduire une majoration numrique de [E
m
(e
x
2
; 0, 1)[ pour m = 10 et m = 100.
3.3 Mthode des trapzes
3.3.1 Elments thoriques
La mthode des trapzes consiste approcher la fonction non plus par une constante
mais par une fonction ane par morceau sur chaque intervalle de la forme [x
i
, x
i+1
[ :
i = 0 . . . m1 , x [x
i
, x
i+1
[ , f(x) f(x
i
)
_
x
i+1
x
h
_
+f(x
i+1
)
_
x x
i
h
_
.
La valeur approche de lintgrale est alors
I

m
(f; a, b) =
h
2
m

i=1
(f(x
i1
) +f(x
i
)) . (3.4)
On dmontre que lerreur de quadrature scrit, lorsque f C
2
([a, b]),
E

m
(f; a, b) = I(f; a; b) I

m
(f; a; b) =
b a
12
h
2
f

() , (3.5)
pour un certain [a, b].
Remarque : La mthode du point milieu - ne pas confondre avec la mthode des
rectangles droite ou gauche - de part le coecient
1
24
, reste plus prcise que la mthode
des trapzes dont lerreur est en
1
12
, toutes les autres grandeurs gales par ailleurs, au signe
prs.
En fait, la mthode du point milieu est, comme la mthode des trapzes, une mthode
dordre 1, i.e., montre une erreur en h
2
. (Lerreur dune mthode dordre p est en h
p+1
).
Ceci est d au fait que laire du rectangle h.f(
x
i
+x
i+1
2
) concide avec laire du trapze color
h.
1
2
.(f(x
i
) +f(x
i+1
)) pour une application f : x Ax +B; la formule approche devient
donc exacte si f est une fonction ane.
43
Fig. 3.2 Approximation de laire I(f ; a, b) par la mthode des trapzes
Fig. 3.3 La mthode du point milieu intgre exactement une droite ane
44
3.3.2 Algorithme
1. En sinspirant de lexemple de la mthode du point milieu, crire un algorithme pour
le calcul de lintgrale par la mthode des trapzes.
3.3.3 Implmentation
2. Implmenter cet algorithme sous Matlab dans un chier fonction fquadtrap.m sans
utiliser de boucle for ou while comme dans lexemple de la fonction fquadpm2.m.
La premire ligne du chier fquadtrap.m est donne par :
function quadrature = fquadtrap(fun, a, b, m)
3.3.4 Application numrique
1. Complter le programme principal an de calculer galement la valeur de lintgrale
I
1,m
(e
x
2
; 0, 1) pour m = 10 et m = 100 laide de la fonction fquadtrap.m.
2. Evaluer une majoration de [E

m
(e
x
2
; 0, 1)[ pour m = 10 et m = 100.
3. Calculer une valeur approche de lintgrale de f : x exp(x
2
) laide de la
fonction quad.m de Matlab.
4. Idem pour f : x exp(x
3
) laide dune implmentation inline (help inline).
5. Dresser un tableau rcapitulatif de tous les rsultats.
6. Commenter.
3.4 Expressions et fonctions Matlab utilises
help
lookfor
who, whos
function
sum
feval
quad
plot
for...end
while...end
switch...case...end
disp
input
inline
Oprateur : (help colon)
Oprateur @ (help function_handle, help punct, et plus gnralement help ops).
45
Chapitre 4
TP3 : Recherche des zros dune
fonction relle variable relle (2
sances TP)
46
4.1 Objectif
Lobjet de ce TP est de rsoudre, grce la mthode de dichotomie, lquation
f(x) = 0 (4.1)
o f est une application continue de R dans R et x linconnue recherche.
4.2 Mthodologie
Crer le rpertoire TP3 qui contiendra tous les scripts et toutes les fonctions pro-
grammer. Nommer main.m le script principal qui regroupe les lignes de commandes
principales de la programmation du TP.
Pour trouver de laide sur une fonction MATLAB ou rechercher le nom dune fonc-
tion, lancer les commandes help et lookfor (help nom_de_la_commande dans la
fentre de commande MATLAB. Exemple : help eig). Regarder la n de laide,
le paragraphe See also pour connatre le nom des fonctions similaires.
Ajouter commentaires et indentation pour amliorer la lisibilit du code pour un
usage ultrieur.
Lutilitaire ddition impos estt lditeur Emacs.
Il est fortement conseill de travailler par crit sur une feuille (algorithme)
avant de commencer lcriture du programme avec le langage Matlab.
Il est aussi fortement conseill de tester les lignes de commandes au fur
et mesure de la construction de votre programme
Pensez crire un programme principal condens et faire appel des fonctions
aussi souvent que possible.
Un programme principal commence toujours par les instructions :
clear all : eace toutes les variables en mmoire
clf : eace toutes les gures
4.3 Mthode de dichotomie (sans test de bornes)
4.3.1 Elments thoriques
Soit f une fonction relle dune variable relle, continue. On appelle zros de f les
solutions, si elles existent, de lquation (4.1). La mthode de dichotomie se base sur la
proposition suivante :
Proposition 1. Soit [a, b] un segment de R. Soit f une fonction continue de [a, b] dans
R telle que f(a)f(b) < 0. Alors il existe un zro ]a, b[ de f tel que f() = 0.
Le but de la mthode est donc de choisir convenablement deux rels a et b de telle sorte
que lintervalle [a, b] contienne un zro et un seul de la fonction f. Il faudra notamment que
f(a) et f(b) soient de signes opposs. Dcrivons maintenant lalgorithme de dichotomie.
Lide est, dune manire itrative, de crer une suite dintervalles embots qui contiennent
47
un zro de f et dont la longueur est divise par deux chaque itration. On dmarre avec
le premier intervalle I
0
= [a
0
, b
0
] avec a
0
= a et b
0
= b puis on dnit la suite de sous-
intervalles I
k
= [a
k
, b
k
] tels que I
k
I
k1
, k N

et f(a
k
)f(b
k
) < 0,
I
n
... I
k
I
k1
... I
0
.
A partir des donnes de litration k, le point central de lintervalle I
k
est
x
k
=
1
2
(a
k
+b
k
) .
Puis, on eectue le choix suivant :
soit f(a
k
)f(x
k
) < 0 : a
k+1
= a
k
et b
k+1
= x
k
,
soit f(x
k
)f(b
k
) < 0 : a
k+1
= x
k
et b
k+1
= b
k
.
Enn, on pose
x
k+1
=
1
2
(a
k+1
+b
k+1
) .
Les cas thoriques o f(a
k
)f(x
k
) = 0 ou f(x
k
)f(b
k
) = 0 ne sont pas traits ici.
La mthode de dichotomie se termine litration n dnie par [x
n
[ [I
n
[
pour une prcision xe lavance.
On note [I
n
[ la longueur du segment I
n
. Alors [I
0
[ = b a, [I
1
[ = (b a)/2. On montre
ainsi par rcurrence que [I
n
[ = (b a)/2
n
.
Considrons maintenant lerreur absolue e
k
= [x
k
[ litration k entre la valeur
exacte du zro ]a, b[ de la fonction f et la valeur approche x
k
de ce mme zro calcule
par lalgorithme ltape k.
Puisque, x I
k
, [x [ [I
k
[, il vient [e
k
[ (b a)/2
k
; do, lim
k+
[e
k
[ = 0.
Lerreur absolue converge donc globalement.
4.3.2 Illustration thorique
An dillustrer cette mthode par un exemple simple, considrons la recherche de la
racine cubique de 2. Soit f : x x
3
2. Cherchons la racine de lquation f(x) = 0.
Avec Matlab, on trace facilement le graphique de la gure 4.1 pour se donner une
ide de la localisation de =
3

2.
Dans le cas prsent, il sut de se dire
3

1 <
3

2 et
3

2 < 2 pour considrer la premire


tape de lalgorithme :
Itration 0 : a
0
= a = 1, b
0
= b = 2, x
0
=
a
0
+b
0
2
=
3
2
, f(a
0
) = 1, f(b
0
) = 6,
f(x
0
) =
11
8
Puisque f(a
0
).f(x
0
) < 0, on choisit :
Itration 1 : a
1
= a
0
= 1, b
1
= x
0
=
3
2
, x
1
=
a
1
+b
1
2
=
5
4
, f(a
1
) = 1, f(b
1
) =
11
8
,
f(x
1
) =
3
64
Puisque f(x
1
).f(b
1
) < 0, on choisit :
48
Fig. 4.1 Mthode de dichotomie
Itration 2 : a
2
= x
1
=
5
4
, b
2
= b
1
=
3
2
, x
2
=
a
2
+b
2
2
=
11
8
, f(a
2
) =
3
64
, f(b
2
) =
11
8
,
f(x
2
) =
307
512
Puisque f(a
2
).f(x
2
) < 0, on choisit :
Itration 3 : a
3
= a
2
=
5
4
, b
3
= x
2
=
11
8
, x
3
=
a
3
+b
3
2
=
21
16
, f(a
3
) =
3
64
,
f(b
3
) =
307
512
, f(x
3
) =
1069
4096
Puisque f(a
3
).f(x
3
) < 0, on choisit :
Itration 4 : a
4
= a
3
=
5
4
, b
4
= x
3
=
307
512
, x
4
=
a
4
+b
4
2
=
41
32
, f(a
3
) =
3
64
,
f(b
4
) =
1069
4096
, f(x
4
) =
3385
32768
et ainsi de suite...
Avec = x
4
=
41
32
, on obtient lapproximation
3

2 1.2813 comparer avec la valeur


donne par Matlab :
2.^(1./3)= 1.2599 avec 4 dcimales (mode format par dfaut).
Lerreur maximale est donne par la moiti de la longueur de lintervalle nal [I
4
[ =
[b
4
a
4
[ =
333
512
, soit
333
1024
0.3252, prcision mdiocre que lon peut amliorer en poussant
plus loin le nombre ditrations.
Il se trouve que cette formulation thorique en particulier (nous navons pas fait de
calcul dans Matlab sauf ventuellement valuer les numrateurs et dnominateurs des
fractions), fonctionne trs bien une fois programme dans Matlab. Mais, ce nest pas
toujours le cas comme vu ultrieurement.
4.3.3 Algorithme
Rdiger lalgorithme de cette mthode en tenant compte dun nombre maximal dit-
rations possibles an de sortir dun calcul divergent.
49
4.3.4 Implmentation
Programmer cette mthode sous Matlab. Le calcul de la racine se fera dans un chier
fonction (help function) nomm fdicho.m. La fonction devra retourner la valeur de la
racine ainsi que le nombre ditrations ncessaires. La premire ligne sera donc
function [lambda, niter] = fdicho(fun, a, b, precision, nitermax)
o
fun : le nom de la fonction gnrique,
a et b : les bornes de lintervalle dtudes,
precision : ,
nitermax : le nombre maximal ditrations possibles,
lambda : la racine recherche,
niter : le nombre ditrations ncessaires.
Indications : Utiliser la fonction feval (help feval).
Lappel cette fonction est eectu depuis le programme principal.
4.3.5 Application numrique
Faire en sorte que le programme principal ache clairement tous les rsul-
tats demands ci-aprs.
On considre la fonction associe au polynme de Legendre de degr 5,
L
5
: [1, 1] R ,
x L
5
(x) =
x
8
(63x
4
70x
2
+ 15) .
(4.2)
4.3.5.a) Implmenter cette fonction dans Matlab (help function), dans un chier fl5.m
qui reoit comme argument labscisse x et qui retourne la valeur L
5
(x).
4.3.5.b) Tracer laide de Matlab (help plot) la fonction L
5
et donner dans votre
compte-rendu une valeur approche a 10
1
prs (calcule visuellement) des cinq
zros de lquation L
5
(x) = 0 qui comptent la solution triviale x = 0. On dmontre
que ces racines appartiennent lintervalle ] 1, 1[. On rangera les racines dans
lordre croissant (
i
)
1i5
.
4.3.5.c) Utiliser la fonction fdicho pour trouver les racines non triviales avec quatre chires
signicatifs. On choisira nitermax=100.
Quels autres paramtres choisissez-vous pour tester fdicho ? Pourquoi ?
4.3.5.d) Modier la fonction fdicho an quelle retourne chaque abscisse x
k
pour chaque
itration eectue. Depuis le programme principal, tracer alors lhistorique de la
valeur absolue de lerreur absolue e
k
pour la racine
5
0.9, avec en abcisse,
litration k, en ordonne, [e
k
[. Ajouter le titre du graphique (help title) et la
lgende (help legend).
Lerreur absolue converge-t-elle de faon monotone en valeur absolue ?
4.3.5.e) Utiliser les fonctions Matlab fzero et roots pour trouver les zros de L
5
(x) = 0.
50
4.3.6 Contre-exemple
La mthode fonctionne bien pour les problmes (quations & intervalle [a, b]) vus ci-
dessus. Cependant, dautres problmes ncessitent quelques amnagements.
4.3.6.a) Discuter sur le compte rendu - dun point de vue thorique pur - de lapplica-
tion possible ou non, des deux premires itrations de la mthode de dichotomie
vue ci-dessus la recherche des zros de lquation cos x = 0 pour les conditions
suivantes :
(a) a
0
= 0 et b
0
= ,
(b) a
0
= 0 et b
0
= /4,
(c) a
0
= /2 et b
0
= .
4.3.6.b) Discuter sur le compte rendu - en faisant TOUS les calculs mmes simples
en Matlab - de lapplication possible ou non, des deux premires itrations de
la mthode de dichotomie vue ci-dessus la recherche des zros de lquation
cos x = 0 pour les conditions suivantes :
(a) a
0
= 0 et b
0
= ,
(b) a
0
= 0 et b
0
= /4,
(c) a
0
= et b
0
= 3/2.
4.3.6.c) Peut-on dans les cas comparables (a) et (b) appliquer la mthode selon les deux
points de vue, thorique et pratique ?
4.3.6.d) Conclusion : que faut-il modier et / ou ajouter dans la mthode de dichotomie
vise ci-dessus pour quelle devienne applicable lquation cos(x) = 0 quelles que
soient les bornes de lintervalle initial.
4.4 Mthode de dichotomie (avec test de bornes)
4.4.1 Elments thoriques
Il sagit dune part de dtecter les valeurs qui sont proches du zro numrique. En eet,
la reprsentation nie des nombres en machine ne permet pas toujours dobtenir le 0 absolu
dans Matlab mais une valeur approche trs petite. Cette valeur est approche eps/2
1.1102e-016 prs (help eps).
Il sagit galement de vrier que lalgorithme sarrte ds lors quun premier test
permet ( tort ou raison) darmer quaucune racine nexiste dans lintervalle dtude :
les signes de f(a
0
) et de f(b
0
) tant identiques.
4.4.2 Algorithme
Rdiger lalgorithme modi de la mthode de dichotomie qui prend en compte les
valeurs proches du zro numrique et les bornes de mme signe.
51
4.4.3 Implmentation
Programmer ce nouvel algorithme dans un chier fonction nomm fdicho_test.m.
4.4.4 Application numrique
Faire en sorte que le programme principal ache clairement tous les rsul-
tats demands ci-aprs.
Par lusage de fdicho_test.m, trouver les racines de lquation cos x = 0 pour les
intervalles suivants :
1. a
0
= 0 et b
0
= ,
2. a
0
= 0 et b
0
= /4,
3. a
0
= et b
0
= 3/2.
4.5 Expressions et fonctions Matlab utilises
help
lookfor
who, whos
function
feval
fzero, roots
plot, title, legend, axis equal, axis square
for...end, while...end
Oprateur : (help colon)
Oprateur @ (help function_handle, help punct, et plus gnralement help ops).
4.6 Complment thorique sur la prcision de calcul
Pour donner une estimation du nombre ditrations ncessaires pour le calcul de la
racine avec une prcision donne lavance, des ingalits [x
n
[ [I
n
[ , il vient
n E
_
ln
_
ba

_
ln 2
_
+ 1 . (4.3)
Ainsi, augmenter la prcision de calcul dune dcimale, cest--dire, passer de

=
/10, et n devient n

= n +E[
ln 10
ln 2
] + 1 = n + 4.
Autrement dit, quatre itrations supplmentaires permettent damliorer dun chire
signicatif la prcision de calcul de la racine.
52
Chapitre 5
TP4 : Diagonalisation de matrices (2
sances TP)
53
Objectif
Lobjectif du TP est de mettre en uvre la diagonalisation de matrices et en particulier
de montrer sur un exemple lintrt de calculer les valeurs propres et les vecteurs propres
dune matrice.
5.1 Mthodologie
Crer le rpertoire TP4 qui contiendra tous les scripts et toutes les fonctions pro-
grammer. Nommer main.m le script principal qui regroupe les lignes de commandes
principales de la programmation du TP.
Pour trouver de laide sur une fonction MATLAB ou rechercher le nom dune fonc-
tion, lancer les commandes help et lookfor (help nom_de_la_commande dans la
fentre de commande MATLAB. Exemple : help eig). Regarder la n de laide,
le paragraphe See also pour connatre le nom des fonctions similaires.
Ajouter commentaires et indentation pour amliorer la lisibilit du code pour un
usage ultrieur.
Lutilitaire ddition impos estt lditeur Emacs.
Il est fortement conseill de travailler par crit sur une feuille (algorithme)
avant de commencer lcriture du programme avec le langage Matlab.
Il est aussi fortement conseill de tester les lignes de commandes au fur
et mesure de la construction de votre programme
Pensez crire un programme principal condens et faire appel des fonctions
aussi souvent que possible.
Un programme principal commence toujours par les instructions :
clear all : eace toutes les variables en mmoire
clf : eace toutes les gures
5.2 Quelques rappels mathmatiques (*)
Soit une matrice carre (ou un tenseur) relle de taille 3 3. Le rel est une valeur
propre (ou valeur principale ou eigenvalue en anglais) de si il existe un vecteur non nul

n de R
3
appel vecteur propre (ou vecteur principal ou eigenvectors en anglais) de tel
que

n =

n (5.1)
En pratique, on recherche les valeurs propres de parmi les racines du polynme carac-
tristique de not P

(x) = det( xI). Puis, on trouve les vecteurs propres associs


en rsolvant le systme (5.1). Il ny a pas unicit du vecteur propre car tout multiple dun
vecteur propre est encore vecteur propre associ la mme valeur propre.
Dans le cas o admet trois valeurs propres distinctes
I
,
II
et
III
, la matrice
est diagonalisable, cest--dire, il existe une matrice inversible P GL
3
(R) telle que
= PDP
1
= P
_
_

I
0 0
0
II
0
0 0
III
_
_
P
1
54
P sappelle la matrice de changement de base. Cela signie que si un vecteur

v a les
composantes (x, y, z) dans le repre de dpart appel repre de rfrence Ref, il aura les
composantes (X, Y, Z) dans le repre des vecteurs propres appel repre principal RP avec
_
_
x
y
z
_
_
= P
_
_
X
Y
Z
_
_
5.3 Position du problme physique
Pour illustrer ce TP, nous avons choisi un exemple de mcanique des milieux continus.
Soit Ref un repre de rfrence de lespace. Soit un tenseur de contraintes en un point
de coordonnes (x, y, z) relativement Ref et un instant t, dans un milieu continu
dformable. Le tenseur scrit :

Ref
=
_
_
1 2 0
2 1 0
0 0 1
_
_
Ce point du milieu continu est entour de matire. On peut donc dnir une innit
de facettes passant par ce point. On choisit de reprer lorientation de chaque facette par
sa normale extrieure

n
Ref
, il sagit dun vecteur de norme 1 de R
3
:

n
Ref
=
_
_
l
m
n
_
_
Lintensit du vecteur contrainte

(

n
Ref
) qui sexerce sur la facette de normale

n
Ref
est le produit du tenseur de contraintes par le vecteur

n
Ref
dnissant la normale :

n
Ref
) =
Ref
.

n
Ref
=
_
_
1 2 0
2 1 0
0 0 1
_
_
_
_
l
m
n
_
_
Si la normale prend toutes les orientations possibles dans lespace, lextrmit du vecteur
contrainte dcrit une surface que lon se propose de dterminer.
5.4 Programmation
1. Tracer les axes du repre cartsien Rf, pour -4<x<4, -4<y<4, -4<z<4 (help plot3).
Une fois tracs les axes, faire pivoter la gure.
2. On note (r, , ) les coordonnes sphriques dans lespace R
3
. Pour faire parcourir
au vecteur normal tout lespace, on propose de faire varier langle de 0 360tous
les 10(soient ntheta valeurs) et langle de 0(au ple nord) 180(au ple sud)
tous les 10aussi (soient nphi valeurs). Pour chaque valeur de et de , calculer les
composantes du vecteur normal dans le repre cartsien Rf. Pour chaque valeur de
la normale, calculer le vecteur contrainte associ et tracer la position de lextrmit
du vecteur contrainte dans le repre de rfrence Rf. Commenter le rsultat.
55
3. Diagonaliser le tenseur de contraintes (help eig). On note
I
,
II
,
III
les valeurs
propres (valeurs diagonales du tenseur D de la fonction eig). On note

n
I
,

n
II
,

n
III
les vecteurs propres associs. La fonction eig donne les composantes des vecteurs
propres dans le repre de rfrence Ref. On rappelle que par dnition, le tenseur de
contraintes est diagonal dans le repre principal RP :

RP
=
_
_

I
0 0
0
II
0
0 0
III
_
_
et que dans ce mme repre principal RP, les composantes des vecteurs propres sont :

n
I
=
_
_
1
0
0
_
_

n
II
=
_
_
0
1
0
_
_

n
III
=
_
_
0
0
1
_
_
4. Tracer dans le repre de rfrence Ref les axes ports par chaque vecteur propre (sur
le trac prcdent) et de commenter le sens physique des vecteurs propres.
5. Porter la grandeur des valeurs propres sur chaque vecteur propre et conclure. On
remarquera en particulier que quel que soit le repre, on a :

n
I
) =
I
.

n
I

n
II
) =
II
.

n
II

n
III
) =
III
.

n
III
6. On se place maintenant dans le repre principal RP. On note (X, Y, Z) les coordonnes
dun point de R
3
relatif au repre principal RP. Crer une nouvelle fentre en la
numrotant (help figure). Tracer les axes du repre principal RP pour -4<X<4,
-4<Y<4, -4<Z<4.
7. Dans le repre principal, on note les composantes du vecteur normal comme suit :

n
RP
=
_
_
L
M
N
_
_
et le vecteur contrainte associ scrit :

n
RP
) =
RP
.

n
RP
=
_
_

I
0 0
0
II
0
0 0
III
_
_
_
_
L
M
N
_
_
=
_
_

I
L

II
M

III
N
_
_
=
_
_
X
Y
Z
_
_
Comme prcdemment, on fait varier langle de 0 360tous les 10et langle de
0(au ple nord) 180(au ple sud) tous les 10aussi. Pour chaque valeur de et de
, calculer les composantes du vecteur normal

n
RP
dans le repre principal RP.
8. Pour chaque valeur de la normale

n
RP
, calculer le vecteur contrainte associ

n
RP
)
et tracer la position de lextrmit du vecteur contrainte dans le repre principal RP.
9. Comme

n
RP
est un vecteur de norme 1, on a
L
2
+M
2
+N
2
= 1
56
Do par identication :
X
2

2
I
+
Y
2

2
II
+
Z
2

2
III
= 1
En conclusion, quand la normale la facette balaie tout lespace, lextrmit du
vecteur contrainte balaie une surface ellipsodale dont les axes sont ports par les
vecteurs propres et les longueurs sont donnes par les valeurs propres. On appelle
cette surface lellipsode de LAME des contraintes.
Utiliser la fonction Matlab surf (help surf ) pour tracer cet ellipsode. On uti-
lisera surf(XX,YY,ZZ) avec des matrices XX,YY et ZZ de taille ntheta fois nphi.
Commenter le rsultat. Conclure.
5.5 Expressions et fonctions MATLAB utilises
figure
plot3
eig
surf
57
Chapitre 6
TP5 : Application de lanalyse en
composantes principales des
donnes de procd de traitement
biologique en lit bactrien (4 sances
TP)
58
Objectif
Le but de ce TP est de traiter des donnes relles dune campagne de mesure deuents
industiels laide doutils statistiques et dalgbre linaire. Lobjectif de ce traitement de
donnes est de dgager de centaines de mesures des conclusions pertinentes et des solutions
industrielles ecaces.
6.1 Mthodologie
Crer le rpertoire TP5 qui contiendra tous les scripts et toutes les fonctions pro-
grammer. Nommer main.m le script principal qui regroupe les lignes de commandes
principales de la programmation du TP.
Pour trouver de laide sur une fonction MATLAB ou rechercher le nom dune fonc-
tion, lancer les commandes help et lookfor (help nom_de_la_commande dans la
fentre de commande MATLAB. Exemple : help eig). Regarder la n de laide,
le paragraphe See also pour connatre le nom des fonctions similaires.
Ajouter commentaires et indentation pour amliorer la lisibilit du code pour un
usage ultrieur.
Lutilitaire ddition impos estt lditeur Emacs.
Il est fortement conseill de travailler par crit sur une feuille (algorithme)
avant de commencer lcriture du programme avec le langage Matlab.
Il est aussi fortement conseill de tester les lignes de commandes au fur
et mesure de la construction de votre programme
Pensez crire un programme principal condens et faire appel des fonctions
aussi souvent que possible.
Un programme principal commence toujours par les instructions :
clear all : eace toutes les variables en mmoire
clf : eace toutes les gures
6.2 Introduction au traitement biologique en lit bactrien
6.2.1 Lits bactriens
La dicult majeure dans la lutte contre la pollution industrielle rside dans :
la grande variabilit des types de rejets dun secteur industriel un autre.
la diversit des agents polluants rencontrs et donc des paramtres mesurer.
Les rejets industriels peuvent tre pollus par :
des matires organiques (MO)
des matires en suspension (MES)
des toxiques : phnols, cyanures...
des mtaux lourds.
An dpurer les euents industiels, il existent plusieurs techniques possibles. Concer-
nant les matires organiques, les procds biologiques permettent le plus souvent dobtenir
la dpollution recherche dans des conditions conomiques acceptables. Le plus courant de
59
ces procds, dit par "boues actives" met en uvre une biomasse libre, maintenue en sus-
pension dans le liquide quil a pour objet dpurer, en utilisant la pollution comme source
dnergie. Dautres techniques sont employes, comme les "ltres bactriens" qui utilisent
une biomasse xe sur un support granulaire.
6.2.2 Systmes de contrle
Lecacit de ces dpollutions ncessite un contrle rgulier. Or les stations dpuration
biologiques sont faiblement pourvues en capteurs et autres appareils de mesure. Ce type
dquipement ncessite la prsence de personnels aptes comprendre et interprter les
ventuelles variations ainsi que lassurance dune maintenance rgulire. On peut cependant
trouver ponctuellement certaines sondes de type pH ou Red-ox rpondant des besoins
spciques des usines.
Il apparat donc ncessaire de proposer des mthodes de contrle proposant lutilisation
de capteurs, dcrivant les caractristiques physico-chimiques des euents et permettant
ainsi de :
dtecter rapidement les drives du procd
isoler le problme
tablir un diagnostic complet de ltat du systme
mettre en uvre laction corrective adquate
A cette n, on peut envisager deux types dapproche :
un diagnostic bas sur des techniques dintelligence articielle (lois heuristiques).
un diagnostic tabli partir de lhistorique de fonctionnement du procd et son
analyse statistique. Cest cette deuxime approche qui sera aborde ici.
6.2.3 Description de la campagne de mesures
Ltude propose porte sur le fonctionnement dune station dpuration dune industrie
chimique. Cette dernire produit majoritairement de lacide-amino-11-dcanoque qui sert,
entre autre, la fabrication de gainage mtallique et de rilsans. Ce produit chimique est
labor partir de dhuile de ricin, de glycrine et de xylne, composs qui se retrouvent
donc naturellement dans les euents traiter.
Dans le procd dpuration utilis, les euents sont spars en deux catgories : pro-
duits non huileux et composs huileux. Ces derniers suivent un premier traitement dlimi-
nation des graisses via une unit de ottation. Ils rejoignent ensuite les produits dits " non
huileux " an de subir une premire dcantation, dont le rle est denlever les matires en
suspension.
Leuent percole ensuite lintrieur du lit bactrien o se ralise le traitement bio-
logique. Le lit bactrien est de forme cylindrique : 12.6 mtres de hauteur et 18 mtres
de diamtre. A la sortie du lit bactrien, une deuxime dcantation est ncessaire de ma-
nire retenir les boues et autres lments dtachs du ltre bactrien et assurer un rejet
deuent aux caractristiques conformes avec la lgislation en vigueur.
60
6.2.4 Paramtres mesurs
Le premier type de donnes que lon va traiter concerne les caractristiques physico-
chimiques de leuent trait. Ces mesures ont t eectues au moyen de deux sondes
multiparamtres immerges, places en amont et en aval du lit bactrien. Les paramtres
mesurs sont :
La temprature (Celsius )
Le potentiel Red-Ox (mV )
La conductivit ( mS / Cm). La conductivit lectrique dune eau est la conductance
dune colonne deau comprise entre deux lectrodes mtalliques de 1cm
2
de surface
et spares lune de lautre de 1cm. Dun point de vue pratique, la mesure est base
sur le principe du pont de wheatstone et la cellule de conductimtrie (platine +
noir de platine) constitue lune des branches du pont. De plus, il faut noter que la
conductivit est trs inuence par la temprature.
Loxygne dissous ( mg / L ). La sonde utilise est base sur le principe polarogra-
phique. Cette mthode sappuie sur la polarisation des lectrodes par application
dune tension lectrique constante. On va ainsi mesurer les variations de courant
provoques par la rduction de loxygne qui a dius travers la membrane.
Le pH. La mesure du pH, avec une lectrode en verre (de rfrence interne au calomel)
est lie lactivit des ions prsents en solution.
La turbidit ( NTU ). La sonde utilise le phnomne de TYNDALL, technique dite
de nphlomtrie : un liquide trouble sclaire vivement lorsquil est travers par un
faisceau lumineux. Ce sont les particules en suspension qui diractent la lumire.
Le pourcentage de saturation en O
2
Tous ces paramtres ont t mesurs pendant une dure de 29 jours, avec un intervalle
de mesure de 15 minutes, ce qui correspond environ 2800 valeurs par paramtres
analyser.
6.3 Introduction lanalyse en composantes principales (ACP)
6.3.1 Ncssit dun traitement statistique
Avant toute utilisation de donnes issues de mesures chimiques, il faut vrier leur va-
lidit an davoir une bonne reprsentation de la ralit. Les sources dinterfrence tant
nombreuses (lectromagntique, problme dinstallation, faible maintenance), il faut pou-
voir les dtecter et traiter les valeurs potentiellement errones. Chaque srie de mesures
est souvent confronte des problmes de bruit, valeurs manquantes, points aberrants, de
tendance. Les objectifs dun traitement statistique de ces donnes sont :
traiter un grand nombre de donnes, quelles soient dpendantes ou indpendantes.
rduire la dimension du problme (le nombre de variables mesures).
raliser des prdictions sur les variables qualitativement importantes partir des
variables des procds et de variables qualitatives.
proposer des solutions la pollution industrielle.
Ltude et la description dun ensemble de donnes sont faciles lorsque celles-ci sont
reprsentes par un nombre rduit de paramtres (appels variables descriptives). En eet,
61
la reprsentation graphique de ces variables permet de mettre rapidement en vidence, par
simple examen du nuage de points, les relations ventuelles entre variables ou donnes,
mais cette ecacit diminue mesure que la dimension de la reprsentation augmente.
Ainsi, une fois le tridimensionnel dpass, il devient impossible de reprsenter le nuage
dtude.
Lanalyse en composantes principales est une mthode de rduction du nombre de va-
riables ncessaires pour reprsenter gomtriquement les phnomnes. La rduction nest
possible que si les N variables initiales ne sont pas indpendantes. Cette notion dindpen-
dance est mesure laide des coecients de corrlation que nous verrons ensuite. Il faut
que les coecients de corrlation soient non nuls. LACP est une mthode dite factorielle,
car la rduction ne consiste pas en une slection des variables de base mais en une dnition
de nouvelles variables (principales), obtenues par combinaison des variables initiales. Cest
une mthode linaire. Loutil mathmatique associ la mthode dACP repose donc sur
lalgbre linaire et le calcul matriciel.
6.3.2 Dnition gomtrique de lACP
Considrons un tableau de donnes contenant les mesures eectues des direntes
variables (ici la temprature, la turbidit...) aux dirents instants (appels vnements).
Lorsquil ny a que 2 variables, il est facile de reprsenter lensemble des donnes sur un
graphe 2 dimensions. Le trac permet de dduire :
labsence de corrlation entre les variables
lexistence dune forte liaison
lmergence de sous-populations ou de groupes de variables.
Si il y a N variables mesures et M vnements par variable, on recherche une repr-
sentation graphique ralisable (cest--dire sur un plan) la plus dle la ralit possible
(cest--dire qui minimise les distorsions). Pour cela, on utilise une projection orthogonale
du nuage de points sur un plan choisi de manire rendre maximale la moyenne des carrs
des distances entre les variables.
La mthode consiste rechercher :
la direction
1
rendant maximum la moyenne des carrs des distances entre variables,
la direction
2
orthogonale
1
rendant maximum la moyenne des carrs des dis-
tances entre variables,
les directions
3
,
4
,
5
... orthogonales entre elles.
Ces directions ne sont rien dautres que les directions principales du nuage de points.
Soit X
1
, X
2
, X
3
, .., X
N
les coordonnes de lensemble des N variables dans le repre de
rfrence. On note C
1
, C
2
, C
3
, .., C
N
les coordonnes de lensemble des N variables dans
le repre principal. La matrice de changement de repre correspond aux coordonnes des
vecteurs principaux (ou vecteurs propres) dans le repre principal.
Remarque : Dans le TP4 dalgbre linaire, vous aviez recherch les vecteurs principaux
dun tenseur de contraintes.
62
6.3.3 Dnition algbrique de lACP
Mathmatiquement, on peut interprter chaque variable comme un vecteur de R
M
(ici
il y a 15 vecteurs de R
2800
). On note X
1
, X
2
, .., X
N
ces N vecteurs de R
M
(ici N = 15 et
M = 2800). On peut aussi sauvergarder ces donnes dans une matrice X de taille M N
dont le coecient X
ij
reprsente la ime mesure de la jme variable. Les vecteurs colonnes
de X sont X
1
, .., X
N
et pour j = 1..N, X
j
R
M
reprsente les mesures de la jme variable
tous les M = 2800 instants. De mme, on note e
1
, .., e
M
les vecteurs lignes de X et pour
i = 1..M, e
i
R
N
reprsente les mesures linstant i des N = 15 variables.
On introduit un peu de vocabulaire en dnissant pour j = 1..N :
la moyenne

X
j
de la variable X
j

X
j
=
1
M
M

i=1
X
ij
lecart-type
j

j
=

_
1
M
M

i=1
(X
ij


X
j
)
2
la matrice R (carre de taille N N) de corrlation des variables X
1
, ..., X
N
R
jk
=

M
i=1
(X
ij


X
j
)(X
ik


X
k
)
_

M
i=1
(X
ij


X
j
)
2

M
i=1
(X
ik


X
k
)
2
=

M
i=1
(X
ij


X
j
)(X
ik


X
k
)
M
j

k
Pour plus de facilit, on prfre travailler avec des variables centres rduites, cest--
dire de moyenne nulle et dcart-type gale 1. Soit donc ces nouvelles variables Y
1
, ..., Y
N
:
1 i M , 1 j N , Y
ij
=
X
ij


X
j

j
Dans cette transformation, la matrice de corrlation est inchange, cest--dire que la ma-
trice de corrlation des variables Y
1
, ..., Y
N
est encore R. En particulier,
R
jk
=
1
M
M

i=1
Y
ij
Y
ik
=
1
M
Y
T
Y
Soit V le sous espace vectoriel de R
N
sur lequel on souhaite projeter le nuage de points
pour rduire le nombre de variables que lon considre (souvent V sera un plan) et soit P
la projection orthogonale de R
N
sur V . Daprs la dnition gomtrique prcdente, le
but de lACP est de choisir V tel que
I
V
=
M

i=1
M

k=1
|Pe
i
Pe
k
|
2
soit maximum o on a not |.| la norme euclidienne dans R
N
. On a alors le thorme
suivant (quon admettra) :
63
Thorme 1. La matrice de corrlation R est symtrique donc diagonalisable dans une
base orthonormale. On note
1

2
...
N
ses valeurs propres et v
1
, ..., v
N
les vecteurs
propres associs. Soit q un entier x infrieur ou gal N. La valeur maximale de I
V
pour V sous-espace vectoriel de dimension q de R
N
est atteinte pour V = Vect(v
1
, ..., v
q
)
et I
V
=
1
+... +
q
.
Si q = N, on obtient les directions principales du nuage de points. Si q < N, on obtient
les q variables les plus reprsentatives pour dcrire le nuage de points (On retrouve que
ces variables ne sont pas une slection des variables de base mais des nouvelles variables
(principales) obtenues comme combinaison linaire des variables originales).
On note C
j
et Z
j
les composantes principales des N variables X
j
ou Y
j
respectivement.
On sait (voir TP4 le chapitre sur les rappels mathmatiques) que les vecteurs C
j
et Z
j
sont
donns en fonction de X
j
et Y
j
respectivement par N relations linaires qui traduisent le
changement de repre :
C
T
= PX
T
C
k
=
N

j=1
P
kj
X
j
Z
T
= PY
T
Z
k
=
N

j=1
P
kj
Y
j
On vrie que
N

j=1
P
ij
P
kj
=
ik
cad P
T
P = I
N
ce qui traduit bien le fait que P est la matrice de changement de repre entre deux bases
orthonormales.
Les variables Z
j
sont de moyenne nulle et de variance
j
:

j
=
1
M
M

i=1
Z
2
ij
Enn, une proprit remarquable des valeurs propres est que leur somme est gale la
dimension du problme :
N

j=1

j
= N
On connait ainsi la contribution en variance de chaque composante principale la variance
totale du sytme.
6.4 Programmation
6.4.1 Rception et trac des donnes de bases
On fournit deux chiers issus de tableur excel sous format csv : dse.csv et dss.csv
relatifs aux donnes de sondes en entre et en sortie du lit bactrien. Le chier dse.csv a
2866 lignes (du 02/06/01 15 heures au 03/08/01 11h15) et 8 colonnes (temprature C,
condsp mS/cm, conductivit mS/cm, oxygne dissous satur pourcentage, oxygne dissous
64
pourcentage, pH, redox mV, turbidit NTU). Le chier dss.csv a 2875 lignes (du 02/06/01
15 heures au 03/08/01 13h30) et 7 colonnes (temprature C, condsp mS/cm, conductivit
mS/cm, oxygne dissous satur pourcentage, oxygne dissous pourcentage, pH, redox mV).
1. Crer un chier script.m et charger ces chiers aprs les avoir copis depuis le r-
pertoire /home/commetud/2eme\ Annee\ ICBE/Informatique/TP_ACP/ dans votre
rpertoire de travail. (voir Remarque ci-aprs pour importer des chiers au format
csv sous Matlab)
2. Tracer 4 par 4 les volutions temporelles des donnes dentre et de sortie (help subplot)
6.4.2 Calcul des variables centres rduites
3. Pour chaque variable X
j
, calculer la moyenne

X
j
et lcart-type ( help mean et
help std).
4. Dnir les variables centres rduites Y associes au 15 variables initiales X.
5. Vrier que la moyenne de chaque variable centre rduite Y est nulle et que lcart-
type est gale 1.
6. Calculer la matrice de corrlation R partir des variables en coordonnes rduites.
6.4.3 Composantes principales et vecteurs principaux
Composantes principales
7. Diagonaliser la matrice R (help eig).
8. En dduire les composantes principales
j
.
9. Vrier la proprit remarquable des valeurs propres :
N

j=1

j
= N. Dterminer ainsi
la contribution en variance de chaque composante principale la variance totale du
systme.
10. Faire un trac des valeurs propres en fonction de leur indice. Combien de variance
expliquent les premires valeurs propres ?
Directions principales
Les coordonnes des vecteurs propres sont dnies dans le repre initial, relatif aux N
variables initiales.
11. Construire un tableau N+1 colonnes (relatives aux N vecteurs propres et la
liste des variables initiales) et N lignes relatives aux variables initiales (et donc aux
coordonnes de chaque vecteur propre dans le repre initial).
12. Pour chaque vecteur propre, identier les coecients les plus importants et identier
les variables initiales associes.
65
Interprtation des composantes principales
La principale question de lACP rside dans la signication concrte des composantes
principales qui reprsentent les nouvelles variables obtenues par combinaison linaire des
variables initiales. On tudie en gnral les corrlations avec les variables initiales en terme
de cercle de corrlation.
Pour cela, on calcule les coecients de corrlation entre la kime composante principale
C
k
et la jime variable initiale X
j
: cest la jime composante du kime vecteur propre v
k
multiplie par la racine de
k
:
r(C
k
, X
j
) =
_

k
(v
k
)
j
Soit (C
i
, C
k
) un couple de variables principales contribuant pour beaucoup la variance
totale. Dans un plan (ici q = 2), on reprsente chaque variable X
j
par un point dabscisse
r(C
i
, X
j
) et dordonne r(C
k
, X
j
). On obtient alors un nuage de N points correspondant
aux N variables initiales projetes sur le plan V ect(v
i
, v
k
). On peut montrer que tous ces
points sont situs dans le cercle unit centr lorigine appel cercle de correlation et que
plus un point de coordonnes (r(C
i
, X
j
), r(C
k
, X
j
)) est prs du cercle, plus la corrlation
est eective entre la variable dorigine X
j
et les variables principales C
i
et C
k
.
13. Dnir un vecteur abs correspondant aux coordonnes du mime vecteur principal
multiplies par la racine de la valeur propre ou composante principale
m
associe.
14. Dnir un vecteur coor correspondant aux coordonnes du nime vecteur principal
multiplies par la racine de la valeur propre ou composante principale
n
associe.
15. Tracer les couples de points (abs,coor) dans le repre relatif C
m
en abscisse et C
n
en ordonnes.
16. Tracer le cercle de rayon unit relatif au cercle de corrlation.
17. Identier les variables discrimines par C
m
et celles discrimines par C
n
.
Eectuer ces tracs pour les couples (m, n) de composantes principales dim-
portance dcroissante, en terme de contribution la variance.
6.5 Expressions et fonctions MATLAB utilises
help
lookfor
eig
std
mean
plot
sqrt
diag
figure
hold on
axis
size
66
Chapitre 7
TP6 : Application des sries de
Fourier ltude du violon (2 sances
TD, 2 sances libres et 4 sances TP)
67
Objectif
Lobjectif de ce TP est de crer un semblant de violon numrique en faisant jouer des
sons de "violon" lordinateur. Ce TP comporte des travaux thoriques de modlisation
du mouvement dune corde de violon et des travaux numriques de programmation de ces
rsultats.
Quelques conseils :
Crer le rpertoire TP6 qui contiendra tous les scripts et toutes les fonctions
programmer.
Pour crire ces chiers vous utiliserez un diteur de texte. Les utilitaires ddition
imposs sont lditeur propre Matlab ou Emacs.
Il est fortement conseill de travailler par crit sur une feuille (algorithme)
avant de commencer lcriture du programme avec le langage Matlab.
Lobjectif est de lister et dorganiser les tches raliser squentiellement.
Il est aussi fortement conseill de tester les lignes de commandes au fur et
mesure de la construction de votre programme. Pour cela vous pouvez copier
une ou plusieurs lignes de commande et les coller dans la fentre Matlab. Si vous
utilisez lditeur de texte associ Matlab : slectionnez des lignes de commandes,
clic-droit puis evaluate selection (version complte ncessaire) ce qui dclenche
lexcution des lignes en question dans la fentre Matlab.
Pour trouver de laide sur une fonction Matlab ou rechercher le nom dune fonction,
lancer les commandes help et lookfor (help nom_de_la_commande dans la fentre
de commande Matlab. Exemple : help lookfor).
Regarder la n de laide dune fonction, le paragraphe See also pour connatre le
nom des fonctions similaires.
Ajouter commentaires et indentation pour amliorer la lisibilit de vos codes. Cela
vous fera gagner beaucoup de temps lors dun usage ultrieur.
7.1 Etude du mouvement de la corde de violon
On cherche reprsenter mathmatiquement le mouvement dune corde de violon frot-
te par un archet. On schmatise donc la corde linstant t 0 par une courbe y = f(t, x)
dans un plan (x0y). On la suppose de longueur L au repos, attache ses deux extrmits
(0, 0) et (0, L). Une fois que larchet a donn son impulsion, on suppose la corde libre et
sans amortissement.
Cette corde possde les proprits physiques suivantes :
une masse par unit de longueur = 6 10
4
kg.m
1
,
une tension T | = 200 N rgle lors de laccord du violon par le musicien,
une longueur L = 0.5 m .
La relation fondamentale de la dynamique permet alors dcrire que

2
t
f(t, x) = c
2

2
x
f(t, x) x [0, L] t 0 (7.1)
o c =
_
T |/ > 0.
68
On associe cette quation aux drives partielles les conditions aux limites et condi-
tions initiales :
t 0 , f(t, 0) = f(t, L) = 0 (7.2)
x [0, L] , f(0, x) = 0
t
f(0, x) = (L x) (7.3)
o = 0.1.
7.1.1 Rsolution par onde progressive
On pose u = x ct et v = x + ct et on dnit lapplication linaire de la faon
suivante :
: [0, L] R
+
([0, L] R
+
)
(x, t) (u, v) = (x ct, x +ct)
Enn, on dnit la fonction F par
f(t, x) = F(x ct, x +ct) = F(u, v) .
1. Montrer que est un diomorphisme de classe C
2
. Calculer = ([0, L] R
+
).
2. Exprimer
2
x
f(t, x) et
2
t
f(t, x) en fonction de
2
u
F(u, v),
2
v
F(u, v),
2
uv
F(u, v).
3. Si f est solution de (7.1), trouver lquation aux drives partielles satisfaite par F.
4. Montrer quil existe alors deux fonctions h et g de classe C
2
sur R telles que
F(u, v) = h(u) +g(v) .
5. En dduire que la solution de (7.1) scrit
f(t, x) = h(x ct) +g(x +ct) , (x, t) [0, L] R
+
6. Trouver h et g pour que f soit solution de (7.2) et (7.3). Montrer que f est de la
forme
f(t, x) =

4c
_
(L [x ct[)
2
(L [x +ct[)
2
_
si t [
T
2
, +
T
2
], x [0, L] avec T =
2L
c
et f est T-priodique.
7. Crer trois fonctions solexacte_h, solexacte_g et solexacte qui pour un rel t
(reprsentant le temps) donn et un vecteur x de points (de la corde) calcule respec-
tivement h(x ct), g(x +ct) et f(t, x) = h(x ct) +g(x +ct). Lentte de lune de
ces fonctions pourra scrire
function g = solexacte_g(t,x)
%Fonction qui calcule la composante g(x+ct) de la
%solution exacte du mouvement de la corde de violon
%pour un temps t et aux points contenus dans x.
%Le vecteur g est de meme dimension que x.
% VARIABLES GLOBALES UTILISEES :
% Alpha, c, L.
% Appel a la fonction :
% gexaxte = solexacte_g(temps,abscisses);
69
On prendra un pas de discrtisation en espace de 1 mm. On pourra utiliser la fonction
rem pour replacer le temps sur lintervalle [T/2, T/2] (help rem). Les paramtres
, c, L seront dclares en variables globales. Vous testerez vos fonctions en tracant
ces fonctions pour t = 0, T/4, T/2, 3T/4, T. Commentez les courbes obtenues.
8. Dans un chier script et laide des fonctions getframe et movie (saider de lexemple
donn dans laide de getframe) , crer trois animations montrant lvolution de h
(en rouge), de g (en bleu) puis de f (en noir). On pourra enn superposer lvolution
des trois fonctions sur une mme et dernire animation. On pourra prendre un pas
de temps de T/100 et on observera les animations sur un intervalle de temps de T.
On xera le nombre dimages par seconde (ou Frames Per Second : paramtre FPS de
movie) 100 et on xera les axes comme suit :
axis([0 0.5 -alpha/(16*c) alpha/(16*c)])
Remarque : La fonction (t, x) g(x + ct) est constante le long de la droite x + ct =
constante appele caractristique. Elle reprsente une onde progressive se propageant sur
laxe des x la vitesse c de la droite vers la gauche. De mme, la fonction (t, x) h(xct)
est constante le long des caractristiques x ct = constante. Elle reprsente une onde
progressive se propageant la mme vitesse c mais de la gauche vers la droite.
7.1.2 Rsolution par mthode de sparation des variables
On souhaite maintenant rsoudre lquation des ondes (7.1) grce la mthode de
sparation des variables.
1. On cherche une solution lmentaire de lquation des ondes de la forme
f(t, x) = (x)(t) , (x, t) [0, L] R
+
vriant les conditions aux limites (7.2). Montrer que cette solution lmentaire peut
scrire :
T
n
(x, t) =
_
A
n
cos(2f
n
t) +B
n
sin(2f
n
t)
_
sin(k
n
x) , n N, (7.4)
o A
n
et B
n
sont des constantes et
f
n
=
nc
2L
, k
n
=
n
L
; (7.5)
f
n
est appele frquence de la nime harmonique.
2. Quel lien existe-t-il entre f
1
et f
n
? Il sensuit que le son du violon est priodique de
priode 1/f
1
(dans notre modle idal !). Ceci est encore vrai pour beaucoup dautres
sons ! f
1
est appel le fondamental.
3. Montrer que la solution gnrale de lquation des ondes scrit :
f(t, x) =
+

n=1
(A
n
cos(2f
n
t) +B
n
sin(2f
n
t)) sin(k
n
x) .
4. Trouver les A
n
et B
n
pour que f vrie (7.3).
70
5. En dduire que lunique solution de (7.1, 7.2, 7.3) scrit
f(t, x) =
+

n=1
2L
2
n
2

2
c
sin(k
n
x) sin(2f
n
t) . (7.6)
6. On veut maintenant programmer la solution f(t, x) donne par (7.6), le problme
tant que lordinateur ne sait pas calculer une somme innie !
On va donc tronquer la srie et ne garder que les p premiers termes :
u
p
(t, x) =
p

n=1
2L
2
n
2

2
c
sin(k
n
x) sin(2f
n
t).
Montrer laide dune majoration trs grossire de comparaison avec une intgrale
que lerreur commise est infrieure
2L
2

2
cp
(t, x).
7. Crer une fonction solapprochee(t,x,p) qui calcule u
p
(t, x).
8. On va xer t = T/3. Tracer laide de la commande subplot u
p
(t, x) pour p =
1, 3, 10, 100 et comparer (sur les mmes graphiques mais avec une autre couleur)
les courbes la solution exacte calcule laide de la fonction solexacte.
9. Dans cette question aussi on xe t = T/3. Tracer sur un mme graphique et en fonc-
tion de p lerreur commise (max(abs(solapprochee(t,x,p)-solexacte(t,x)))) ainsi
que la majoration calcule dans la question prcdente. On pourra utiliser une chelle
logarithmique (help loglog) et faire varier p de 1 100.
7.2 Son produit par linstrument
Le son produit par le violon peut tre approxim par la force exerce sur le chevalet
par la corde. Ce chevalet est reli la table des harmoniques do la note est mise,
et correspond la frontire de notre modle situe en L. Cette force est assimile
la drive spatiale du mouvement de la corde en L. On dnit donc s(t) le son mis
par le violon au court du temps par :
s(t) =

x
f(x, t)

x=L
=
+

n=1
d
n
sin(2f
n
t) (7.7)
On dnira v
p
une approximation du son mis par linstrument un instant t, la
quantit :
v
p
(t) =
p

n=1
d
n
sin(2f
n
t) (7.8)
10. Calculer d
n
et vrier que [d
n
[ 1/n quand n tend vers +. Ceci traduit le fait que
lamplitude des harmoniques successives dcrot doucement avec n, et donc que le
violon est un instrument riche en harmoniques aigus. Dnir une fonction Matlab
dn permettant le calcul des coecients d
n
de la relation (7.7). Tracer un histogramme
des 30 premiers lments de la suite (d
n
)
nN
(help bar).
71
11. Dnir une fonction vp calculant lapproximation du son pour un temps donn. Tra-
cer la courbe reprsentant le son sur lintervalle [0, T]. Construire le son mis par le
violon sur un intervalle de temps de deux secondes. Quelle est la frquence dchan-
tillonage (sample frequency : paramtre Fs de soundsc) de ce signal. Jouer ce son
(help soundsc).
12. On souhaite rendre le son un peu plus raliste. Pour cel on introduit un temps de
monte et dattnuation de la note. On obtient ces eets en multipliant lamplitude
du signal sonore par une enveloppe qui vous est donne.
Copier la fonction envelop.m depuis le rpertoire
/home/commetud/2eme\ Annee\ ICBE/Informatique/TPson/ dans votre rpertoire
de travail :
cp /home/commetud/2eme\ Annee\ ICBE/Informatique/TPson/envelop.m .
Construire un vecteur reprsentant le prol de monte et dattnuation (help envelop).
Reprsenter graphiquement lenveloppe. Construire le son avec la monte et lattnua-
tion, le visualiser et le jouer.
7.3 Expressions et fonctions Matlab utilises
help
lookfor
function
global
rem
getframe
movie
axis
subplot
abs
loglog
bar
soundsc
envelop
72
73
Chapitre 8
Annexe : lexique non exhaustif
Caractres spciaux et oprateurs logiques
Symbole Usage
= instruction daectation
() utilises pour marquer la priorit dune expression arithmtique ;
contiennent les variables en entre des fonctions
[ ] utilis pour former matrices et vecteurs ; contient les variables en sortie des fonctions
. point dcimal
.. rpertoire au-dessus du rpertoire courant
... continue une suite dinstructions la ligne suivante
; termine une ligne ; evite lachage
, spare les lments ou instructions dune ligne et les variables dune fonction
% commentaires
: utiliss pour la gnration de vecteurs lignes dlments rgulirement espacs,
par dfaut avec un incrment entier, sinon avec un incrment prciser ;
dsigne lensemble des indices dun tableau selon une de ses dimensions
( :) force le format vecteur colonne
se place avant et aprs une chaine de caractres
permet de dnir lintrieur dune chaine de caractres
@ identicateur de fonction depuis la version 6
! permet lexecution dune commande du systme dexploitation
& ET logique ; opre lment par lment pour les tableaux avec faux valant 0
et toute valeur non nulle valant vrai
[ OU logique
NON logique
xor OU exclusif, semploie sous la forme xor(A, B)
any fonction vectorielle logique qui vaut 1 si un lment du vecteur est non nul
et 0 sinon ; elle opre sur chaque colonne pour une matrice et semploie sous
la forme any(A)
all fonction vectorielle logique qui vaut 1 si chaque lment du vecteur est non
nul ; semploie et opre comme la prcdente pour les tableaux
74
Oprateurs arithmtiques
Symbole Usage
+ addition
- soustraction
* produit matriciel ; les dimensions doivent tre compatibles (sauf le cas dun scalaire)
.* produit lment par lment ; les deux variables doivent avoir les mmes dimensions
division gauche, ou solution de systme(s) linaire(s) : C = A B si A*C=B
. division gauche, lment par lment
/ division droite, ou solution de systme(s) linaire(s) : C = B/A si C*A=B
./ division droite, lment par lment
^ puissance de scalaire ou de matrice
. ^ puissance de chaque lment dun tableau
conjugue transpose
. transpose
Oprateurs relationnels
Symbole Usage
< infrieur, compare lment par lment des tableaux de mme taille et prend pour valeur
un tableau de cette taille , de coecients 1 (vrai) ou 0 (faux)
<= infrieur ou gal, opre comme le prcdent
> suprieur
>= suprieur ou gal
== gal
= dirent
Variables et fonctions dintrt gnral
Symbole Usage
help aide en ligne
helpdesk accs une documentation hypertexte de Matlab, gre par Netscape sous Unix
what fournit la liste des M-chiers du repertoire courant
type ache le contenu dun M-chier
lookfor indique les occurences dune chaine de caractres dans laide en ligne
ans rsultat de la dernire instruction lorsquil nest pas aect
whos ache la liste des variables courantes, et leur format
save sauvegarde une ou plusieurs variables de la session dans un chier du rpertoire courant
load retrouve les variables sauvegardes prcdemment
clear supprime une ou plusieurs variables de la session
75
Variables et fonctions dintrt gnral
Nom Usage
function dnit une fonction ; en pratique, on enregistre les instructions qui la dnissent
dans un M-chier de mme nom que la fonction (muni du suxe .m)
feval value une fonction dont le nom est donn en argument
nargin nombre de variables en entre dune fonction
nargout nombre darguments en sortie dune fonction
varargin liste darguments variable en entre
varargout liste darguments variable en sortie ; dnit une cellule de tableaux
global dnit des variables globales
pause arrte la session en attente dune rponse de lutilisateur
disp ache une variable sans donner son nom, ou un texte
find fournit les indices des lments non nuls dun tableau
for initialise une boucle de rptition dune suite dinstructions pour des valeurs
dune variable (compteur) spcies par un vecteur
while initialise une boucle de rptition dune suite dinstructions tant quune condition reste vraie
if instructions xcutes sous condition
else sutilise avec if
elseif sutilise avec if
end clt le corps dinstructions de for, while et if
break arrte lxcution des boucles for ou while
size dimensions dun tableau
length longueur dun vecteur
linspace cre un vecteur de composantes uniformment rparties entre deux valeurs
logspace cre un vecteur de composantes rparties logarithmiquement entre deux valeurs
fliplr inverse lordre des colonnes dun tableau
flipud inverse lordre des lignes dun tableau
reshape change les dimensions dun tableau ( avec les mmes lments)
repmat cre un tableau en reproduisant une matrice selon les dimensions spcies
cat cre une matrice par concatenation
cell cre une cellule de tableaux
struct cre une structure de matrices
format prcise le format dachage
echo controle lachage des commandes xcutes
more controle le nombre de lignes de chaque page ache
tic ouvre le compteur de dure dexecution dune suite de commandes
toc ferme le compteur ouvert par tic
cputime compteur de temps CPU
cd change le repertoire de travail
quit termine une session Matlab
76
Arithmtique, polynmes et manipulation de donnes
Nom Usage
eps prcision relative de larithmtique virgule-ottante utilise
pi
i,j unit imaginaire des nombres complexes
abs valeur absolue ou module dun nombre complexe
angle argument dun nombre complexe
sqrt racine carre
real partie relle
imag partie imaginaire
conj conjugu complexe
gcp plus grand diviseur commun
lcm plus petit multiple commun
round arrondi lentier le plus proche
fix arrondi vers 0
ceil arrondi vers
floor arrondi vers
rem reste aprs division entire : rem(x,y)= x-fix(x./y).*y
mod reste sign : mod(x,y)=x-floor(x./y).*y
max plus grande composante dun vecteur ; pour une matrice, la fonction renvoie un
vecteur ligne form des maxima de chaque colonne
min plus petite composante dun vecteur
sort trie les composantes dun vecteur selon lordre croissant
mean moyenne des composantes dun vecteur
sum somme des composantes dun vecteur
std cart-type des composantes dun vecteur
cov matrice de covariance
prod produit des composantes dun vecteur
cumsum sommes cumules des lments dune matrice selon une dimension prciser
poly construit un polynme de racines donnes
roots fournit les racines dun polynmes par recherche des valeurs propres de la matrice
compagne
polyval evalue un polynme donn par ses coecients
conv produit de polynmes, ou convolution de vecteurs
deconv division polynmiale ou dconvolution de vecteurs
polyder fournit le polynme driv
fzero rsoud une quation non linaire
fsolve rsoud un systme dquations non linaires
fmin recherche le minimum dune fonction dune variable
fmins recherche le minimum dune fonction de plusieurs variables
diff oprateur aux dirences ; permet de construire les dirnces nies ou divises
77
Algbre linaire
Nom Usage
zeros matrice de 0
ones matrice de 1
eye matrice identit
rand matrice alatoire, de coecients uniformment distribus sur [0, 1]
randn matrice alatoire, de coecients normalement distribus
diag extrait la diagonale dune matrice, ou cre une matrice diagonale ou bande
tril extrait la partie triangulaire infrieure dune matrice
triu extrait la partie triangulaire suprieure dune matrice
inv inverse dune matrice (par rsolution de systmes linaires)
lu factorisation lu dune matrice, avec stratgie de pivot partiel
chol factorisation de Choleski dune matrice symtrique dnie positive
qr factorisation orthogonale-triangulaire dune matrice
null fournit une base orthonorme du noyau
orth fournit une base orthonorme de limage
rank rang dune matrice
eig tous les lments propres dune matrice carre
svd valeurs et vecteurs singuliers dune matrice
pinv pseudo-inverse dune matrice
det dterminant
cond nombre de conditionnement pour la rsolution des systmes linaires, en norme 2
condest estimation du conditionnement dune matrice carre, en norme 1
norm norme dune matrice (plusieurs normes sont proposes)
trace trace dune matrice
expm exponentielle de matrice
sqrtm racine carre matricielle dune matrice carre
Analyse
Nom Usage
exp, log, log10 exponentielle de base e, logarithme nperien et de base 10
sin, asin, sinh, asinh sinus, arcsinus, sinus hyperbolique et argsh
cos, acos, cosh, acosh cosinus,...
tan, atan, tanh, atanh tangente,...
cot, acot, coth, acoth cotangente,...
sec, asec, sech, asech secante,...
csc, acsc, csch, acsch cosecante,...
besselj, bessely, besselh fonctions de Bessel de premire, deuxime et troisime espce
besseli, besselk fonctions de Bessel modies
gamma, gammainc fonctions gamma
beta, betainc fonctions beta
erf, erfinv fonction derreur (ou fonction de Gauss) et sa rciproque
78
Graphiques et visualisations
Nom Usage
figure cre une nouvelle fentre de visualisation
plot graphe linaire en dimension 2
fplot graphe dune fonction entre deux valeurs
bar graphe en rectangles verticaux
hist histograme
pie graphe en camembert
polar graphe en coordonnes polaires
subplot permet de partitionner une fentre de visualisation
hold conserve le graphique courant
axis dnit les bornes des axes
title ache un titre (chaine de caractres fournir)
legend ache une lgende sur la gure
text ache un commentaire (chaine de caractres fournir) en un point donn par
ses coordonnes
xlabel prcise le nom de la variable en absisse
semylogy graphique avec une echelle logarithmique en ordonne
plot3 graphe linaire en dimension 3
bar3 graphe en paralllogrames verticaux
meshgrid construit un jeu de coordonnes pour la visualisation tridimensionnelle dune
fonction de 2 variables
mesh visualise une surface maille en dimension 3
hidden fait apparaitre (off) ou disparaitre (on) les parties caches dune surface maille
surf visualise une surface ombre (en couleurs) en dimension 3
surfnorm reprsente les normales aux surfaces en dimension 3
contour reprsente les isolignes dune surface en dimension 2
meshc combine mesh et contour
clabel fait apparaitre les valeurs des isolignes
quiver reprsente des gradients par des ches
contour3 reprsente les isolignes dune surface en dimension 3
view spcie le point de vue dun graphe en dimension 3
colormap dnit le jeu de couleurs
colorbar ache une chelle des couleurs
getframe forme un vecteur colonne partir dun graphique en vue dune animation
movie execute lanimation visuelle avec la matrice prcdente
image cre une image en interpretant les valeurs des coecients dune matrice
print imprime un graphique, ou le sauvegarde en format post-script
79
Analyse numrique
Nom Usage
spline spline cubique dinterpolation
interp1 interpolation de donnes en dimension 1
interpn interpolation de donnes en dimension n
quad intgration numrique par la mthode de Simpson
quadl intgration numrique par une methode adaptative de Lobatto
ode45 rsolution approche dquations ou de systmes direntiels non raides
par mthodes de Runge-Kutta emboites dordre 4-5
ode113 rsolution approche dquations ou de systmes direntiels non raides
par des mthodes dAdams-Bashforth-Moulton de type PECE dordre variable
ode23s rsolution approche dquations ou de systmes direntiels raides
par la mthode de Rosenbrock dordre 2
ode15s rsolution approche dquations ou de systmes direntiels raides
par une mthode de direntiation rtrograde dordre variable
fft transforme de Fourier rapide en dimension 1
ifft transforme de Fourier rapide inverse en dimension 1
fft2 transforme de Fourier rapide en dimension 2
Matrices creuses
Nom Usage
sparfun fournit une liste de fonctions qui sappliquent aux matrices creuses
sparse convertit au format creux une matrice pleine, ou cre une matrice creuse
full convertit au format plein une matrice creuse
speye matrice identit en format creux
spdiags cre une matrice diagonale ou une matrice bande en format creux
nnz nombre dlments non nuls
issparse vrai si la matrice est sous format creux
spy visualise la rpartition des coecients non nuls dune matrice
symmmd renumrotation par lalgorithme du degr minimum
symrcm renumrotation par lalgorithme Cuthill et Mac-Kee inverse
pcg rsoud un systme linaire de matrice symtrique dnie positive par la
mthode du gradient conjugu prconditionn
gmres rsolution dun systme linaire par la mthode GMRES
luinc factorisation LU incomplte dune M-matrice creuse
cholinc factorisation de Choleski incomplte dune H-matrice creuse
eigs quelques lments propres dune matrice carre
80
Chapitre 9
Index des fonctions et expressions
MATLAB utilises
abs TP6
axis Initiation, TP1
bar TP6
besselj Initiation
clear all tout TP
clf tout TP
diag Initiation, TP5
disp Initiation, TP2
display TP1
eye Initiation
eig Initiation, TP4, TP5
Emacs Initiation
envelop TP6
feval TP2
figure TP1, TP4
FontSize TP1
for Initiation, TP1
function Initiation, TP1, TP2
fzero TP3
gca TP1
get TP1
getframe TP6
global Initiation, TP1
grid Initiaton
help Initiation
hold off Initiation, TP1
hold on Initiation, TP1
if Initiation
inline Initiation, TP2
81
input TP1, TP2
inv Initiation
label TP1
legend TP1
linspace Initiation
loglog TP6
lookfor tout TP
markerfacecolor, markersize TP1
mean TP5
mesh Initiation
movie TP6
norm Initiation
ones Initiation
pause TP1
plot, plot3 Initiation, TP1
polyval Initiation
print Initiation
quad TP2
rand Initiation
rem TP6
repmat Initiation
reshape Initiation
roots TP3
size Initiation, TP5
semilogy TP1
set TP1
script TP1
soundsc TP6
sprintf TP1
sqrt TP5
std TP5
subplot TP1
surf Initiation, TP1
switch...case...end TP2
texlabel TP1
text TP1
title Initiation, TP1
trill Initiation
triu Initiation
xlabel Initiation
ylabel Initiation
while Initiation
who, whos Initiation, TP2
zeros Initiation
82
Chapitre 10
Elments de programmation
structure :
10.1 Une dmarche structure pas--pas :
La dmarche structure peut tre vue comme dcoulant naturellement dune dmarche
scientique puisquune partie de celle-ci a vocation dvelopper des modles qui struc-
turent les connaissances. On peut donc tenter de dcrire succinctement les tapes qui
permettent daboutir une solution programme partir dun problme dingnierie :
1. Rexion scientique : description du problme scientique ou technique rsoudre
2. Rexion mathmatique : analyse du problme, choix doutil et algorithmique
3. Action sur papier : dveloppement dune stratgie de rsolution
liste de tches organigramme pseudo code
4. Action programmation : criture du programme, excution et analyse des rsultats
10.2 Quelques ides de base de la programmation structure :
Lide de base est de construire de manire structure un programme qui permet de
rsoudre un problme complexe en le dcomposant en un ensemble de sous-problmes plus
simples (= sous-programmes ou fonctions). La simplication se fait par niveau danalyse
descendante jusqu arriver une description par modules les plus simples possibles qui
permettent une programmation aise tout en vitant les astuces de programmation (carac-
tre gnrique).
La dcomposition dun programme en modules permet
daner sa perception
de faciliter le travail en le simpliant (travail en groupe, chelonn dans le temps)
de vrier le fonctionnement dun niveau indpendamment de lensemble du pro-
gramme
Un programme structur suit une architecture trs gnrale de type :
Dbut du programme (arguments dentres/sorties)
Instructions dclaratives
83
Instructions excutables
Fin de programme
10.3 Organigramme en programmation structure :
La structuration des programmes et sous-programmes facilite la prsentation sous forme
dorganigramme. Pour en faciliter la comprhension, une syntaxe graphique type est pro-
pose (voir page suivante)
10.4 Programmation structure avec Matlab :
Quelques ides de structures sous Matlab :
Lide de base est de construire un programme principal aussi appel script (par exemple
main.m) qui comprend lessentiel :
commenter lobjet du programme
dnir les variables globales du problme (les autres sont locales par dfaut)
traiter le problme par une liste dinstructions connues de matlab ou dnies dans
des sous-programmes (chiers function)
sortir et prsenter les rsultats
Tout ce qui nest pas essentiel un premier niveau dinterprtation doit si possible tre
dvelopp dans des chiers function. Si la fonction le ncessite, elle peut elle-mme appeler
une autre fonction, toujours dans le but de structurer et simplier au maximum la structure
de chaque fonction :
commenter lobjet de la fonction, les arguments dentre et de sortie
dnir les variables globales utilises par la fonction (et seulement celles utiles)
traiter le problme par une liste dinstructions connues de matlab ou dnies dans
des sous-programmes (chiers functions)
revenir au niveau prcdant en fournissant les arguments de sortie (sils existent) ou
les variables globales nouvellement aectes suite aux instructions de la fonction.
Un exemple simple :
Le chier principal.m contient le texte suivant
%Ce programme principal permet de donner un exemple de structure
%pour calculer et reprsenter Fa(x)=sin(a*x)
%Jefface les figures et toutes les variables en mmoire pour viter toute confusion
clear figure;
clear all;
%Dclaration des variables globales (gardes en mmoire)
global a
%Affectation des variables
a=3 ;
x=[0 :pi/100 :pi] ;
%Appel la fonction Fa.m avec largument dentre x
y=Fx(x);
%Visualisation
84
plot(x,y);
%Fin du programme
Le chier Fx.m contient le texte suivant :
function arg_sortie=Fx(arg_entree);
% Cette fonction permet de calculer F(x)=sin(a*arg_entree)
% arg_entree est un argument dentre et a est une variable globale
% Rappel des variables globales en mmoire utiles ici:
global a;
% Calcul de Fx avec largument dentre arg_entree
arg_sortie =sin(a*arg_entree);
% Retour au programme appelant avec largument de sortie arg_sortie
Dans cet exemple, la variable x est dite locale pour le programme principal.m. La valeur
de la variable x est aecte largument dentre arg_entree de la fonction Fx.m. Cette
variable arg_entree est locale pour la fonction Fx.m (x nexiste pas pour Fx.m). De mme,
la variable locale arg_sortie de la fonction Fx.m) est un argument de sortie aect la
variable locale y du programme principal.m (arg_sortie nexiste pas pour principal.m).
La seule variable connue et partage par les 2 chiers est la variable globale a.
85
Chapitre 11
Bibliographie
Matlab Guide, D. J. Higham, N. J. Higham, SIAM, 2000.
Introduction to Scientic Computing, A Matrix-Vector Approach Using MATLAB, C.F.
Van Loan, MATLAB curriculum Series, 1997.
Apprendre et Matriser Matlab, versions 4 et 5 et SIMULINK
r
, M. Mokhtari, A. Mesbah,
Springer, 1997.
86