Académique Documents
Professionnel Documents
Culture Documents
Cours DEA 2005
Cours DEA 2005
Introduction à Matlab
Janvier 2005
1
I Introduction ___________________________________________________________ 1
II Aspects élémentaires __________________________________________________ 2
II.1 Structure générale du logiciel _____________________________________________ 2
II.2 Aides ______________________________________________________________________ 3
II.3 Types de variables scalaires, workspace, opérations élémentaires ________ 3
II.4 Commentaires, ponctuation ______________________________________________ 4
II.5 Variables spéciales ________________________________________________________ 4
II.6 Nombres complexes _______________________________________________________ 4
II.7 Les chaînes de caractères _________________________________________________ 5
II.8 Fonctions mathématiques ________________________________________________ 6
II.9 Format d’affichage ________________________________________________________ 7
II.10 Entrées-sorties ____________________________________________________________ 8
II.11 Edition des lignes de commande __________________________________________ 8
II.12 Terminer Matlab __________________________________________________________ 8
II.13 Personnaliser Matlab ______________________________________________________ 8
III Vecteurs _______________________________________________________________ 9
III.1 Création de vecteurs ______________________________________________________ 9
III.2 Adressage et indexage ___________________________________________________ 10
III.3 Combinaisons et opérations de vecteurs _________________________________ 10
IV Matrices ______________________________________________________________ 11
IV.1 Créations de matrices ____________________________________________________ 11
IV.2 Transposition ____________________________________________________________ 12
IV.3 Opérations scalaires-matrices ____________________________________________ 12
IV.4 Opérations entre matrices _______________________________________________ 12
IV.5 Matrices particulières ____________________________________________________ 13
IV.6 Caractéristiques des matrices / indexation ______________________________ 14
IV.7 Manipulations de matrices et sous-matrices _____________________________ 15
IV.8 Matrices clairsemées _____________________________________________________ 16
V Gestion du système de fichiers/compléments sur les entrées-sorties 16
V.1 Gestion du système ______________________________________________________ 16
V.2 Fonctions d’entrées/sorties______________________________________________ 17
VI Programmer en Matlab ________________________________________________ 20
VI.1 Contrôler l’exécution ____________________________________________________ 20
VI.2 Opérateurs logiques et de relation _______________________________________ 20
VI.3 Les fichiers M (M- Files ) ou scripts ______________________________________ 21
VI.4 Fonctions ________________________________________________________________ 22
VI.5 Recommandations pour programmer ____________________________________ 23
VI.6 Graphiques à 2D _________________________________________________________ 25
VI.7 Graphiques à 3D _________________________________________________________ 30
VI.8 Sauvegarde des figures ___________________________________________________ 35
VI.9 Animations ______________________________________________________________ 36
VII Quelques applications de Matlab ______________________________________ 37
VII.1 Fits et interpolations ____________________________________________________ 37
VII.2 Différentiations __________________________________________________________ 39
VII.3 Algèbre linéaires _________________________________________________________ 40
VII.4 Zéros et minima de fonctions ; fits ______________________________________ 40
VII.5 Filtrage de signaux _______________________________________________________ 45
VII.6 Probabilité et statistiques ________________________________________________ 46
VII.7 Optimisation _____________________________________________________________ 48
VII.8 Traitement d’image ______________________________________________________ 52
VIII Intégration numérique ____________________________________________ 55
VIII.1 Introduction __________________________________________________________ 55
VIII.2 Méthodes de base (cas d’intégrale simple ou double) _________________ 55
VIII.2.1 Utilisation des fonctions Matlab quad, quad8 _________________________________________ 55
VIII.2.2 Méthode des trapèzes ___________________________________________________________ 56
VIII.2.3 Exercices _____________________________________________________________________ 57
VIII.2.4 Utilisation de la fonction Matlab dblquad (cas d’intégrale double)_________________________ 58
VIII.2.5 Intégrer un vecteur : trapz ________________________________________________________ 58
VIII.2.6 Intégrer une fonction : ___________________________________________________________ 59
VIII.2.7 Méthode de Monte Carlo _________________________________________________________ 59
VIII.3 Equations différentielles ordinaires __________________________________ 60
VIII.3.1 Introduction ___________________________________________________________________ 60
VIII.3.2 Méthode d’Euler _______________________________________________________________ 60
VIII.3.3 Application ___________________________________________________________________ 60
VIII.3.4 Équations différentielles du second ordre ____________________________________________ 62
VIII.3.5 Application ___________________________________________________________________ 63
VIII.3.6 Les différentes routines sous Matlab ________________________________________________ 65
VIII.4 Méthode de Runge-Kutta _____________________________________________ 67
VIII.4.1 Méthode de Runge-Kutta du second ordre ___________________________________________ 67
VIII.4.2 Méthode de Runge-Kutta à l’ordre 4 ________________________________________________ 68
VIII.4.3 Les routines Matlab _____________________________________________________________ 68
IX Méthode des différences finies ________________________________________ 68
IX.1 Présentation du problème ________________________________________________ 68
IX.2 L’approximation par différences finies et ses limites ____________________ 69
IX.2.1 Approximation en une dimension d’espace _____________________________________________ 69
IX.2.2 Algorithme______________________________________________________________________ 70
IX.2.3 Application et fonction Matlab associée _______________________________________________ 70
IX.2.4 Approximation en deux dimensions d’espace ___________________________________________ 72
IX.2.5 Limite de l’approximation par différence finies _________________________________________ 73
X Appendice 3 : Résumé des commandes MATLAB ______________________ 1
2
I Introduction
Matlab est un logiciel interactif permettant de réaliser des calculs numériques, ainsi que des
visualisation graphiques ou imaginées. Il possède un vaste ensemble de procédures (ou « sous-
programmes » ou fonctions) préprogrammées et directement utilisables par une simple
instruction. Matlab est un logiciel produit par Math Works (voir le site Web
http://www.mathworks.com/). Il est disponible sur plusieurs plateformes (Mac OS, Windows,
Unix, Linux).
Matlab (ou tout autre logiciel du même type) est un outil précieux pour le scientifique puisqu’il
permet des visualisations de données rapides et précises en 1D, 2D ou même 3D, de piloter des
expérimentation et surtout puisqu’il permet de réaliser facilement des programmes complexes
ne nécessitent pas le re-programmation de routines ou fonction « classique ». Pour le calcul
numérique, Matlab est beaucoup plus concis que les « vieux » langages (C, Pascal, Fortran,
basic). Un exemple : plus besoin de programmer des boucles pour un à un modifier les éléments
d’une matrice. On peut traiter la matrice comme un simple variable. Matlab est un langage
simple et très efficace, optimisé pour le traitement des matrices, d’où son nom (MATrix
LABoratory).
De plus, Matlab contient également une interface graphique puissante, ainsi qu’une grande
variété d’algorithmes scientifiques. On peut enrichir Matlab en ajoutant des « boites à outils »
(toolbox) qui sont des ensembles de fonctions supplémentaires, profilées pour des applications
particulières (traitement de signaux, analyses statistiques, optimisation par exemple).
Ces notes ne constituent pas une référence exhaustive sur Matlab, mais soulignent les
notions principales de manière succinctes et servent de guide pour votre travail de
recherche.
Voici quelques références qui vous permettront de compléter les notions introduites au cours
de cette formation :
Introduction à Matlab
J-T. Lapresté (Ellipses, 1999)
Mastering Matlab 6
D. Hanselman B. Littlefield (Prentice Hall, 2001)
Apprendre et maîtriser Matlab
M. Mokhtari A. A. Mesbah , (Springer, 1997)
Solving problems in scientific computing using Maple and Matlab
W.Gander, J.Hrebicek (Springer, 1995, second edition)
Numerical Methods Using Matlab
G.Lindfield J. penny (Prentice Hall, 2nd edition : 2000)
Signaux et images sous Matlab
Méthodes, applications et exercices corrigés
Gérard Blanchet et Maurice Charbit, ENST
ISBN : 2-7462-0293X
Introduction au traitement d’images- simulation sous Matlab
Gilles Burel
ISBN 2-7462-0323-5
Matlab est relativement coûteux car il contient un nombre très important de fonctions. Il existe
une version « light » à un prix abordable et un clone (Octave, disponible en freeware, dont la
compatibilité avec Matlab est assez bonne : http://www.che.wisc.edu/octave/ ou dans la distribution
SuSE de Linux).
1
Nous nous bornerons dans cette formation à décrire les aspect fondamentaux du logiciel
Matlab sans aborder le programme SIMULINK additionnel utilisé pour la simulation des
systèmes numériques. De plus, nous ne décrirons que le langage Matlab qui est indépendant de
la plateforme utilisée.
L’environnement de travail de Matlab offre plusieurs fonctionnalités assez conviviales qui sont
utiles au développement et que l’utilisateur aura intérêt à mettre en œuvre (workspace
browser, path browser, éditeur,…)
II Aspects élémentaires
2
répertoire de travail défini, tous les fichiers crées lors de la session seront placés à cet endroit. Il
est bien sûr possible de changer son répertoire de travail au cours d’une session.
II.2 Aides
Intro lance une introduction à Matlab.
Help « non d’une fonction » donne de l’aide sur une fonction dans la fenêtre de
commande.
Helpwin aide en ligne dans une fenêtre séparée.
Lookfor recherche d’un mot clé (lent).
Which localise fonctions et fichiers.
What liste des fichiers Matlab dans le répertoire .
Exist check si une fonction ou une variable existe dans le workspace.
Who, whos liste des variables dans le workspace.
La plupart du temps, en particulier sous une fenêtre graphique, une aide est disponible
directement en cliquant sur un bouton « help ».
3
ans =
0.5000
4
>> angle(c1) % argument
ans =
1.1071
5
>> x = [1 -3;-6 7]
x =
1 -3
-6 7
>> ch =’det(x) + 0.8’
ch =
det (x) + 0.8 % ch est une phrase
>> eval(ch)
ans =
-10.2000 % la phrase contenue dans ch est évaluées
Autres fonctions utiles (consulter l’help)
Isletter, isspace, blancs, findstr, strtok, … etc)
6
Et aussi :
besselj (fonction de Bessel de première espèce)
besseh (fonction de Bessel de troisième espèce)
beta (fonction béta)
erf (fonction erreur erf (x)=2/sqrt(pi)*intégrale de 0 à x de exp (-t^2) dt)
legendre (fonction de Legendre) …
cross (produit vectoriel)
dot (produit scalaire)
>> v1 = [1 3 5]
v1 =
1 2 3
>> v2 = [2 4 6]
v2 =
2 4 6
>> cross (v1,v2) produit vectoriel (v1,v2)
ans =
-2 4 -2
>> dot (v1,v2) produit scalaire (v1,v2)
ans =
44
>> whos
Name size Bytes class
ans 1x1 8 double array
cl 1x1 16 double array (complex)
c2 1x1 16 double array (complex)
v1 1x3 24 double array
v2 1x3 24 double array
7
II.10 Entrées-sorties
Deux commandes utiles pour gérer le workspace, :
>> save % écrit toutes les variables du workspace dans le fichier matlab.mat
>> load % charge dans le workspace toutes les variables du fichier matlab.mat
Entrées-sorties sur des fichiers disques (voir partie a) :
Fopen (ouverture d’une fichier)
Fclose ( fermeture d’un fichier)
fscan ( lecture formatée)
N = input (‘Nombre de boucles désirées >’) ; % entrées interactive
Disp (N) % affiche la valeur de N
8
III Vecteurs
9
c) dimension
>> size(x) % dimension de la variable (ici, c’est une matrice à 1 ligne
% et 11 colonnes)
ans =
1 11
>> [m n] = size(x) % dimension de la variable (ici, c’est une matrice à
% 1 ligne et 11 colonnes)
m =
1
n =
11
>> long = length(x) % retourne une variable « long » contenant longueur de
% la variable x (c’est la plus grande dimension de la
% matrice/vecteur)
long =
11
d) construction d’un vecteur à partir d’un autre
>> x = [6 4 7 ]; x = [x 1 2 8]
x =
6 4 7 1 2 8
10
Notez la différence entre () et [] :
() ensemble d’arguments
[] énumération d’éléments
b) opérations sur les vecteurs :
>> x = [0 4 3] ;
>> y = [2 5 7] ;
>> x – y
ans =
- 2 -1 - 4
>>x + y
ans =
2 9 10
>> 3 + x % addition d’un scalaire
ans =
3 7 6
>> 2*x % multiplication par un scalaire
ans =
0 8 6
>> tx = x’ % transformation ligne en colonne et inversement (ou transposée)
tx =
0
4
3
Le produit d’un vecteur colonne de taille n par un vecteur ligne de taille m donne une matrice
de dimension (n, m)
>> tx * y
ans =
0 0 0
8 20 28
6 15 21
En précédant d’un pont les opérateurs *,/^.., on réalise des opérations éléments par élément
>> x.*y
ans =
0 20 21
>> x./y
ans =
0 0.8000 0.4286
Fonctions opérants sur un vecteur :
sum : somme des composantes d’un vecteur
prod : produit des composantes d’un vecteur
sqrt : racines carrées des composantes d’un vecteur
mean : moyenne des composantes d’un vecteur
etc …
IV Matrices
11
>> m1 = [1 2 3 ; 4 5 6 ; 7 8 9] % on sépare les lignes par
% des points virgules
m1 =
1 2 3
4 5 6
7 8 9
On peut étendre aux patrices les autres manières de définir des vecteurs .
Par exemple :
>> m2 = [1:1:3 ; 11:1:13]
m2 =
1 2 3
11 12 13
>> m3 = [1:1:3 ; logspace(0,1,3)]
m 3 =
1.0000 2.0000 3.0000
1.0000 3.1623 10.0000
IV.2 Transposition
L’opérateur apostrophe utilisé pour créer un vecteur colonne est en fait l’opérateur
transposition :
>> m2‘
ans =
1 11
2 12
3 13
12
>> m1*m2’ % le produit matriciel n’est possible que lorsque les dimensions
% sont cohérentes, c’est à dire que le nombre de colonnes de la
% première matrice doit être égal au nombre e lignes de la 2ème
% matrice
ans =
14 74
32 182
50 290
>> m1*m2
??? Error using ==> *
Inner matrix dimensions must agree.
13
>> zeros(2,5) % matrice nulle
ans =
0 0 0 0 0
0 0 0 0 0
>> eye (4) % matrice identité
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>> diag([1:4]) % matrice diagonale
ans =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> rand(1,7) % matrice ligne(1,7) de 7 nombres aléatoires entre 0 et 1
ans =
0.9501 0.2311 0.6068 0.4860 0.8913 0.7621
0.4565
>> rand(1,7) % matrice ligne(1,7) de 7 nombres aléatoires choisit à
% partir d’une distribution normale avec une moyenne nulle
% et une variance 1.
ans =
- 0.4326 -1.6656 0.1253 0.2877 -1.1465 1.1909 1.1892
14
IV.7 Manipulations de matrices et sous-matrices
a) Exercices de manipulations avec les notions vues jusqu’ici
• Définissez A une matrice 3x3
• Mettez à zéro l’élément (3,3)
• Changez la valeur de l’élément dans la 2ème ligne, 6ème colonne, que se passe –t-il ?
• Mettez tous les éléments de la 4ème colonne à 4
• Créez B en prenant les lignes de A en sens inverse
• Créer C en accolant toutes les lignes de la 1ère et 3ème colonne de B à la droite de A
• Créer D en extrayant les deux premières lignes et les deux dernières colonnes de A
Note : chacun de ces exercices se fait en une seule commande, sans boucles itératives.
b) Fonctions de manipulation des matrices
>> A = [1 2 3 ; 4 5 6 ; 7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> flipud(A) % flip haut–bas
ans =
7 8 9
4 5 6
1 2 3
>> fliplr(A) % flip gauche–droite
ans =
3 2 1
6 5 4
9 8 7
>> rot90(A,2) % 2 rotations de 90 degrés (sens trigo)
ans =
9 8 7
6 5 4
3 2 1
>> reshape(A,1,9) % change la forme de la matrice
ans =
1 4 7 2 5 8 3 6 9
>> diag (A) % extrait la diagonale de A
ans =
1
5
9
>> diag(ans) % diag travaille dans les 2 sens !
ans =
1 0 0
0 5 0
0 0 9
>> triu(A) % extrait le triangle supérieur de A
ans =
1 2 3
0 5 6
0 0 9
>> tril(A) % extrait le triangle inférieur
ans =
1 0 0
4 5 0
7 8 9
Il a encore bien d’autres fonctions pour travailler les matrices, voir la liste dans l’annexe.
15
IV.8 Matrices clairsemées
Lorsque seulement quelques éléments d’une matrice sont non-nuls on peut la définir comme
une sparce matrix. Sa description contient seulement les éléments non nuls.
>> A_normal = [0 1 0 ; 1 0 0 ; 0 0 1] % matrice normale
A _normal =
0 1 0
1 0 0
0 0 1
>> A_sparse = sparse (A_normal) % matrice clairsemée
A _sparse =
(2,1) 1
(1,2) 1
(3,3) 1
Sparse peut aussi être utilisé pour créer directement une matrice clairsemée :
>> S = Sparse([2 1 3] ,[1 2 3], [4 5 6 ], 3 , 3)
S=
(2,1) 4
(1,2) 5
(3,3) 6
Le gain de place dans le workspace est d’autant plus significatif que la matrice est grande (on
utilise bucky, une matrice clairsemée prédéfinie) :
>> clear
>> B = bucky ; % B est une matrice clairsemée
>> size(bucky)
ans =
60 60
>> A = zeros(size(bucky)); % A est une matrice complète, de même taille que B
>> whos
Name size Bytes class
A 60 x 60 28800 double array
B 60 x 60 2404 sparse array
16
>> ls
test_filter.m ballistic.m message.m temps.m myfun1.m test.dat
>> cd ..
>> cd exercices
>> pwd
C : \matlab\exercices
Dans le cas où le nom du répertoire variable (nom_rep), la commande cd doit être utilisée avec
des parenthèses :
>> rep =‘C:\matlab’
>> cd rep
???invalid directory
>> cd(rep)
>> cd
C:\matlab
17
>> whos % le workspace contient de nouveau A et B
Name Size Bytes Class
A 60 x 60 28800 Double array
B 60 x 60 2404 sparse array
Exemple :
>> save ma_variable A –ascii % sauve dans un fichier ma_variable, la sauve-
% garde se fait en ascii ou texte, lisible sous
% tout éditeur de texte dont celui de matlab
>> clear % élimine les variables en mémoire
>> who % vérifie que le workspace est vide
>> load ma_variable % charge le contenu du fichier ma_variables dans
% le workspace
>> whos % le workspace contient à nouveau A et B
Name Size Bytes Class
A 60 x 60 28800 double array
Lecture et écriture de fichiers externes
Les fonctions d’entrées/sorties de Matlab permettent de lire des données à partir de fichiers
organisés sous des formats divers ou d’écrire des données gérées par Matlab sous des formats à
d’autres langage /programmes.
fopen % ouvre une liaison fichier-programme en vue d’une lecture ou écriture
fclose % ferme la liaison ayant comme identifiant fid
fread %lecture séquentielle d’un fichier binaire
fwrite % écriture séquentielle d’un fichier binaire
fprintf % écriture séquentielle pour les fichiers texte (ascii)
fscanf % lecture séquentielle pour les fichiers texte (ascii)
fgetl % lecture d’une ligne pour les fichiers texte (ascii)
…etc
Exemple : lecture dans un fichier ascii (à faire après la partie 5)
Le programme suivant permet de lire le fichier « exp.txt » présent sur le disque et dont le
contenu est : (vous pouvez l’ouvrir et le visualiser avec n’importe quel éditeur de texte)
0.00 1.00000000
0.10 1.10517092
0.20 1.22140276
0.30 1.34985881
0.40 1.49182470
0.50 1.64872127
0.60 1.82211880
0.70 2.01375271
0.80 2.22554093
0.90 2.45960311
1 2.71828183
clear
li = fopen ( ‘ exp.txt ’, ’r ‘ ) % ouvre une liaison appelée li entre le fichier exp.txt % et le
programme. La permission est spécifiée par ‘ r ’ pour read, pour les autres % permissions
consulter l’aide.
for i=1:10 % boucle sur les 10 lignes
a(1) = fscanf(li,‘%f‘,1) % lit un réel dans le fichier et le met
% dans a(i)
b(i) = fscan(li,‘%f’,1) % lit le réel suivant dans le fichier et
% le met dans(i)
18
end
fclose(li) % on ferme la liaison
autre possibilité :
clear
li = fopen(‘exp.txt‘,‘r‘) % ouverture du fichier en lecture
ligne = fgetl(li); % lit une ligne de caractères dans le fichier
i = 1; % initialisation du compteur
while(ligne >=0) % test pour vérifier qu’on n’est pas à la fin du fichier
% si la fin est atteinte, fgetl retourne un nombre négatif
% et la boucle s’arrête
a(i) = str2num(ligne(3:6)); % on prend 4 caractères entre les indices
% 3 et 6
b(i = str2num(ligne(11:20)); % on prend 10 caractères entre les indices
% 11 et 20
i = i+1; % % incrémentation du compteur
ligne = fgetl(li) ; % on lit une nouvelle ligne de caractères
end
fclose(li) % fermeture du fichier
Il existe encore bien d’autres variantes pour lire ce fichier
Exemple : écriture formatée dans un fichier ascii( à faire après la partie 5)
Cet exemple permet de créer le fichier exp.txt, lu précédemment.
x = 0 :.1:1 ; y = [x; exp(x)] ;
fid = fopen(‘exp.txt‘,‘w‘);
fprintf(fid,‘%6.2f %12.8f\n‘,y) ;
fclose(fid) ;
Exemple :
Le programme suivant crée un fichier « mon_fichier» sur le disque et le remplit de la manière
suivante :
Pour x variant entre 0 et pi/2 avec un pas de 0.1, on écrit d’abord le numéro du point puis x,
puis sur la ligne suivante sin(x) et cos(x).
x = 0:.1:pi/2 ; y = [sin(x);cos(x)] ;
fid = fopen(‘essail.txt‘,‘w‘) ;
for i = 1:length(x)
fprintf(fid,‘%I %6.2f\n’,i,x(i));
fprintf(fid,‘%8.6f %8.6f\n’,y(:,i));
end
fclose(fid);
Exercise 2 :
Ecrire un programme qui crée un fichier « exercice 2. txt » sur le disque et le remplit de la
manière suivante :
50 fois consécutivement :
il écrit la date sous forme de chaîne de caractères (identifiant « s »), puis sur la ligne suivante le
temps écoulé depuis que Matlab est en fonctionnement (cptume), puis sur la ligne suivante,
deux nombres aléatoires réels entre 0 et 10, avec 3 chiffres après la virgule.
Enfin sur la dernier ligne du fichier, le temps total mis par Matlab pour exécuter ce programme.
Pour plus d’informations sur ces fonctions et pour les lectures/écritures en binaire, consulter
l’aide.
19
VI Programmer en Matlab
Matlab peut exécuter une séquence d’instructions stockées dans un fichier. Ce fichier est
appelé fichier M, en raison de l’extension obligatoire (.m). Il existe 2 types de fichiers M : les
fichiers de commande (ou fichier script) et les fichiers de fonctions.
Ces fichiers peuvent s’éditer/modifier à l’aide ne n’importe quel éditeur de texte, dont celui
intégré à Matlab.
Pour ouvrir la fenêtre de commande : menu file new M-file
20
< plus petit
> plus grand
<= plus petit ou égal
>= plus grand ou égal
== égal
~= pas égal
& et
| ou
~ not
xor(x, y) ou exclusif
any(x) retourne 1 si un des éléments de x est non nul
all(x) retourne 1 si tous les éléments de x sont nuls
isequal (A, B)
isempty
ischar etc …
Tous ces opérateurs peuvent être utilisés avec des scalaires ou des matrices. Le résultat d’une
expression rationnelle est 1 (vrai) ou 0 (faux). Quand ces opérateurs sont appliqués à des
matrices, le résultats est une matrice de même dimension, formée de 0 et de 1, résultats des
comparaisons élément par élément.
21
Les fichiers de commandes sont par exemple utilisés pour la saisie de données. Dans le cas de
grandes matrices, l’utilisation de script permet de corriger rapidement et facilement les erreurs
de saisie. Un fichier script peut en appeler un autre ou lui-même.
Exercice 3 :
Dans un script ‘’ pluspetitnombre.m ‘’, utiliser la structure ‘’ while’’ pour évaluer le plus petit
nombre tel que, ajouté à 1, on obtient un nombre supérieur à 1.
Exercice 3b :
Vous devez créer un programme dans lequel Matlab générera-lui même un nombre naturel
entre 0 et 1000 inclusivement, qui par la suite devra être trouvé par l’utilisateur à l’aide des
indices données par le programme. Ces indices diront simplement si le nombre entré par
l’utilisateur est supérieur ou inférieur à celui choisi par Matlab.
VI.4 Fonctions
On peut écrire des fonctions Matlab que l’on peut ensuite appeler depuis un script. Ces
fonctions spécifiques auront le même statut que les autres fonctions de Matlab.
Attention, le nom de la fonction qui apparaît après l’instruction function au début du fichier,
doit obligatoirement être le même que le nom du fichier sauvegardé sur le disque. Dans
l’exemple suivant, la fonction est nommée « temps » et le fichier sur le disque devra être nommé
« temps » définie dans le fichier temps. m :
function y = temps(x)
% TEMPS(X) affiche un message suivant le temps qu’il fait
% et retourne le paramètre d’entrée X changé de signe
if length(x) > 1 error(‘X doit être un scalaire‘) ; end
if x ~= 0
disp ( ‘Hello, il fait beau‘)
else
disp (‘Espérons que demain sera meilleur !‘)
end
y = -x
return
utilisation de cette fonction :
>> clear
>> help temps
TEMPS (X) affiche un message suivant le temps qu’il fait et retourne le paramètre d’entrée X
changé de signe
>> temps (1)
Hello, il fait beau
-1
Remarquez que les variables internes d’une fonction sont locales et n’entrent pas dans le
Workspace.
Vous pouvez, dans une fonction déclarer une ou plusieurs variables globales afin de pouvoir les
utiliser depuis l’extérieur de la fonction. Ces variables devront également être déclarées en
global dans le programme d’appelle de la fonction. Par exemple :
global x y
Matlab offre plusieurs moyens de vérifier les arguments d’entrées et de sorties d’une fonction :
margin retourne le nombre d’arguments d’entrée
margout retourne le nombre d’arguments de sortie
22
nargchk vérifie le nombre d’arguments d’entrée
error Affiche un message d’erreur
inputname retourne le nom d’un argument d’entrée
Enfin, les arguments sont transmis par valeur lors de l’appel d’un fonction. Leur modification
éventuelle dans le corps de la fonction n’est pas visible à l’extérieur de celle –ci. Si une fonction
doit modifier une variable, celle –ci doit être dans les arguments d’appel et de retour de la
fonction, ou déclarée en global (déconseillé).
for j = 2 : N,
for i = j : N,
m = A ( i , j – 1 ) / A ( j – 1 , : )*m;
A ( i , : ) = A ( I , : ) - A ( j – 1 , : )*m ;
b ( i ) = b ( i ) - m* b (j –1 ) ;
end
end
23
% algorithme de remontée
x = zeros (N, 1) ;
x (N) = b (N) / A (N,N) ;
for j = N –1 : - 1 :1,
x ( j) = (b (j) - A (j , j + 1 :N) ) / A ( j, j) ;
end
Maintenant que notre fonction existe, créons une matrice et un vecteur ( de tailles cohérentes)
afin de résoudre le système . Et pour bien vérifier que les variables utilisées dans la fonction et
celles déjà existantes, sont bien indépendantes, choisissons d’autres noms.
>> M = [ 1 2 3 6; 4 3 2 3; 9 9 1 -2; 4 2 2 1]
M =
1 2 3 6
4 3 2 3
9 9 1 -2
4 2 2 1
>> v = [1 2 1 4]‘
v =
1
2
1
4
>> [ res ] = gaussElim (M,v)
res =
0.6809
- 0.8936
1.8085
- 0.5532
>> whos
Name Size Bytes Class
M 4 x4 128 double array
V 4 x 1 32 double array
Res 4 x 1 32 double array
Grand total is 24 éléments using 192 bytes
Notre système a été résolu, et on remarque bien que les variables utilisées au cours de la
fonction n’ont pas laisse de ‘’trace’’ dans le workspace (pas de i, j, N, etc …)
Remarque : Matlab permet de résoudre ce système beaucoup plus rapidement, grâce à la
manipulation des matrice :
>> z = inv(M)*v
z =
0.6809
- 0.8936
1.8085
- 0.5532
Graphisme
Matlab peut produire des graphiques couleurs 2D et 3D complexes. Il fournit les outils et
moyens de personnaliser et de modifier pratiquement tous les aspects et paramètres facilement
et de manière parfaitement contrôlée.
Pour avoir un aperçu des possibilités de Matlab, visionnez la démo en tapant demo
Nous donnons ici les indications minimum. Utilisez help et les autres commandes d’aide pour
affirmer vos connaissances et vos graphiques.
Chaque graphique est généré dans une fenêtre graphique indépendante, pouvant être gérée
comme un objet particulier. En particulier, on peut sauvegarder une fenêtre graphique dans
différents formats image, ou bien en fichier Matlab. fig ou .m.
24
>> figure % crée une fenêtre graphique vierge .
autre possibilité : menu File (fenêtre de commande) new figure
Des boutons outils sont disponible dans le haut de la fenêtre graphique. Il permettent de
modifier pratiquement tous les paramètre d’une figure. En particulier :
• la flèche vers la gauche est un outil de sélection qui permet de sélectionner /éditer par
double click :
o la courbe ou la surface tracée et de modifier :
épaisseur / couleur /style
marqueurs et taille des marqueurs
o les axes
o ajouter un titre ou une légende aux axes
o modifier l’espacement des labels
o passer en échelle logarithmique ou inverse
o ajout ou retrait d’une grille par axe
o modifier l’échelle
o …
• le « A » permet d’ajouter un texte quelconque n’importe où .
• la flèche à droite permet d’ajouter une flèche sur le tracé à l’aide de la souris.
• Le « trait » permet d’ajouter un trait sur le tracé à l’aide de la souris.
• Les loupe + et – permettent de zoomer ou de dézoomer la figure.Le bouton rotation qui
permet de faire tourner globalement le tracé et de l’observer sous des angles différents
(équivalent à la fonction rotate 2D).
De plus, un simple click sur le bouton de droite de la souris (ou double click sur l’objet sauf le
texte) permet de :
• ajouter une légende en cliquant sur les axes
• modifier épaisseur / style / couleur en cliquant sur la courbe
• modifier le texte / taille de police /police / couleur en cliquant sur n’importe quel texte
/titre /légende des axes
• modifier l’épaisseur / style / couleur en cliquant sur une flèche ou un trait.
Cette liste de tâches accessibles grâce aux boutons / menu est non exhaustive, à vous de
naviguer dans les menus et d’explorer les possibilités graphiques.
Toutes les modifications des graphiques décrites ci-dessus, accessibles par boutons ou click, le
sont également par instruction tapées au clavier sous la fenêtre de commande ou sons un
script. Dans la suite, ce sont ces instructions qui sont indiquées, encore une fois de façon non
exhaustive. Il est souvent beaucoup plus simple d’utiliser les boutons de la fenêtre graphique
pour obtenir le même résultat.
VI.6 Graphiques à 2D
>> help graph2d % inventaire des fonctions 2D disponibles
L’instruction subplot permet de diviser la fenêtre graphique en autant de ligne / colonne que
souhaité, et d’affecter à chaque cellule graphique un tracé différent.
25
>> subplot (3,2,3) % subdivise la fenêtre graphique en 6 zones (3 lignes et 2 colonnes) et
commence par traiter la zone 3 (ligne 2, première colonne).
a) courbes 2D en coordonnées cartésiennes y = f(x) : plot (x,y,’ option).
permet de tracer des graphiques (courbes ou nuages de points) de vecteurs de dimension
compatibles. Le choix du type et de la couleur du tracé peut se faire à l’aide du paramètre
optionnels.
Options :
y yellow . point - solid
m magenta 0 circle : dotted
c cyan x x – mark -. dashdot
r red + plus -- dashed
g green * star
b blue s square
w white d diamond
k black v triangle (down)
^ triangle (up)
< triangle (left)
> triangle (right)
p pentagram
h hexagram
>> x = linspace (0 ,2 * pi, 30) ;
>> y = sin (x) ;
% un plot rudimentaire :
>>plot (x ,y)
>> title ( ‘ Trigonométrie ‘ ) % Matlab _ fig1
Matlab1_ fig 1
26
Quelques ameliorations :
>> grid on % grille activée
>> axis ( [0 2 * pi - 1 1 ] )
>> hold on % add a second cuvre
>> hold on % tracer = courbes dans une même fenêtre
>> z = cos (x)
>> plot (x,z, ‘ c +’ ) % Matlab1_ fig 2
>> clf % efface la figure mais garde la fenêtre.
Matlab1_ fig 2
semilogx, , semilogy et loglog sont semblables à plot mais permettent d’utiliser des échelles
logarithmiques.
b) courbes paramétriques : plot
La procédure de tracé de courbes paramétriques est identique à celle des courbes de
fonctions.
Exemple :
% courbes paramétriques
t = -100 : 0.1 : 100 ;
x = (2* t)./(1+t.^4) ;
y = (2*t.^3)./(1 + t.^4);
plot (x,y) ;
title(‘Lemniscate de Bernouilli ‘ )
xlabel (‘x’)
ylabel ( ‘ y ’)
grid;
27
Matlab1_ fig 3
c) courbes en coordonnées polaires : polar
polar (theta, rho, ‘type‘ )
exemple : cardioïde ou limaçon d’équation polaire r = a + bcos θ
% cardioïde
theta = -pi : 0.1 : pi ;
r = 1–2*cos(theta);
polar (theta , r , ‘r -. ‘ )
title ( ‘cardioïde’) ;
Matlab1_ fig 4
28
d) histogrammes : hist
exemple :
>>x = -2.9:0.2:2.9; % défini l’intervalle et la largeurs des canaux
% de l’histogramme
>>y= randn(50000,1); % génère des nb aléatoires répartis selon 1a
% distribution normale
>> hist (y,x) % dessine l’histogramme
Matlab1_ fig 5
Autre fonctions 2D :
bar et barth pour tracer des graphiques sous formes de barres
>> subplot (3,1,1) , bar (rand (10,5) ,’stacked ’) , colormap(cool);
>> subplot (3,1,2) , bar (0: 0.25:1, rand (5) ,1);
>> subplot (3,1,3), bar (rand (2,3), .75,‘grouped‘);
29
Matlab1_ fig 6
e) graphes pour matrices clairsemées : spy, gplot
>> spy (bucky) % donne un schéma des composantes non-nulles de bucky
Les matrices clairsemées sont parfois utilisées pour décrire les connections dans les graphes.
gplot permet de dessiner ces connections :
>> [ B,v] = bucky ;
>> gplot (B,v) ; axis equal
VI.7 Graphiques à 3D
>> help graph3d % inventaire des fonctions 3D disponibles
meshgrid : génération de vecteurs qui seront utilisés pour les tracés 3-D lorsqu’on veut tracer la
surface correspondant à un fonction à plusieurs variables.
[X,Y] = meshgrid(x,y) transforme le domaine spécifié par les vecteurs x et y en tableau X et Y qui
peuvent être utilisés pour l’évaluation de fonctions de 2 variables et les tracé 3-D.
[X,Y,Z] = meshgrid (x, y , z ) produit des tableaux 3-D qui peuvent être utilisés pour l’évaluation
de fonction à 3 variables ou des tracés 3 –D volumétriques.
Exemple de l’évaluation de la fonction x* exp ( - x ^ 2 – y ^ 2) sur la gamme –2<x<2, -2<y<2,
[ X, Y ] = meshgrid ( -2 :.2 : 2 , - 2 : .2 : 2) ;
Z = X .* exp(- X .^2 – Y.^2) ;
mesh (Z)
30
Matlab1_ fig 7
a) Ligne dans l’espace : plot3
>>t = linspace (0, 10*pi) ;
>>plot3 (sin(t), cos(t), t) ;
>>xlabel(’sin(t)’), ylabel(’cos(t)’), zlabel(’t‘);
>> grid on ;
Matlab _ fig 8
b) grillage en perspective/tracé de surface : mesh
>> clf
>> [ X,Y,Z] = peaks (30) ; ²% peaks est une fonction à 2D prédéfinies dans
matlab.
31
>> mesh (X,Y,Z) % grillage 3D.
>> meshc (X,Y,Z) % grillage 3D avec les contours sur le plan de base.
Matlab _ fig 9
c) Surface avec illumination : surfl
>> clf
>> [X,Y,Z] = peaks (30) ;
>> surfl (X,Y,Z) % graphique avec illumination
>> shading interp ; % meilleure interpolation
>> colormap pink ; % choix d’une palette de couleurs prédéfinie .
>> view (-37.5+ 90, 30) % changement point de vue : view (azimut, élévation)
Matlab _ fig 10
32
d) courbes de niveau : contour
contour (X, Y, Z, 20) % 20 lignes de niveau
Matlab _ fig 11
% pour transformer ce graphe en échelle de couleurs, ou pour tracer une matrice à 2
dimension : pcolor
>> figure
>> pcolor (X,Y,Z)
>> shading interp
>> hold on % pour ajouter au tracé précédent
>> contour (X, Y, Z, 20, ‘k’ ) % 20 contours en noir
>> colorbar % ajoute une échelle de couleur à droite.
Matlab _ fig 12
33
Autre exemple :
>> A = rand (30) ; % matrice 30x30 de nombres aléatoires
>> x = [1 : 0.31 : 10] ; % étalonnage des x
>> y = [10 : 3.1 : 100] ; % étalonnage des y
>> pcolor (x, y, A)
>> shading(‘interp‘)
>> colorbar
e) autres fonctions 3D
quiver (x, y, dx, dy) et quiver3 affiche les variations des points sous forme de vecteurs (flèches)
ayant comme origine (x,y) et comme composantes dx, dy.
Exemple :
>> clear % effacer
>> [X,Y,Z] =peaks(20)
>> pcolor (X,Y,Z)
>> shading ( ‘interp ‘ )
>> colorbar
>> hold on
>> [px, py] = gradient (z);
>> quiver (x, y, px, py) ;
Matlab _ fig 13
Autres fonctions graphiques :
stem3 graphiques 3D sous forme de batons
bar3 et bar3h barres 3D verticales ou horizontales
pie et pie3 tracés de diagrammes circulaires ( camemberts)
Exemple:
subplot (1,2,1) , bar3 (peaks (5)) ;
subplot (1,2,2) , bar3 ( rand (5),‘stacked‘) ;
34
Matlab _ fig 14
Exercice 5 :
Visualiser une surface sinusoïdale d’équation z = sin (x), pour x variant de 0 à 2*pi par pas de
0.1 ; y de 0 à 10 par pas de 0.1
Exercice 6 :
Dans une même fenêtre graphique séparée en 2 lignes-1 colonne, visualiser en haut la surface
de la fonction z = x.*exp (-x.^2 – y.^2) avec x de –2 à 2 par pas de 0.2 et y de -1 à 1 par pas de
0.15
Sur la partie du bas, visualiser l’image colorée de la surface vue de dessus (fonction pcolor) ,
utiliser un lissage, ajouter une échelle de couleurs et superposer le gradient sous forme des
flèches.
35
Choisir export dans le menu File, entrer le nom, choisir le type de format image souhaité
parmi le choix important proposé (en particulier les plus utilisés sont .jpg et tiff)
Exercice 7
Sauvegarder la figure de l’exercice 6, sous format .fig et .m. Eliminer la figure, puis la rappeler.
Sauvegarder la même figure sous format. jpg, ouvrir word et insérer cette figure sous une page
vierge.
VI.9 Animations
moviein : initialisation d’un buffer pour les images
getframe : capture une figure dans une image de l’animation
movie : affiche l’animation
Exemple :
% RotatePeaks.m - Exemple d’animation
% On crée plusieurs frames dans lesquels on met un même graphique 3D
% vu sous des angles différents de manière à créer une impression de rotation
%
clear
% préparation du graphique qui va servir de base à l’ animation
[X,Y,Z] = peaks (30) ;
surfl (X,Y,Z)
axis ( [-3 3 –3 3 –10 10] )
axis off
shading interp
colormap (hot)
% construction de l’animation
m = moviein (15) ; % initialise l’animation (15 images)
for i = 1 : 15
view (-37.5 + 24* ( i –1), 30) % change le point de vue
m(:, i ) = geftrame ; % capture une image
end
% présentation du résultat
movie (m ,5) % affiche l’animation 5+1 fois
Importer /exporter des animations
Il est possible d’exporter un movie Matlab dans un fichier MPEG à l’aide de mpgwrite, une
commande que l’on trouve sur le site web de Matworks. De même, il est possible de charger un
fichier MPEG dans un movie Matlab avec mpgread
Exercice 8
Construisez une animation du jeu de la vie.
On peurt avec un espace 2D composé de (m*n) cellules qui sont aléatoirement vivantes ou
mortes.
A chaque génération (itération), cette population évolue en suivant les deux règles suivantes :
1) une cellule morte devient vivante si elle est entourée exactement par 3 cellules vivantes parmi
les 8 cellules qui l’entourent.
2) une cellule vivante survit seulement si elle entourée par deux ou trois cellules vivantes.
Conseil : utiliser la fonction graphique ‘’image’’ pour visualiser l’espace dans lequel évolue la
population de cellules.
36
VII Quelques applications de Matlab
Matlab _ fig 15
37
c) autres possibilités :
interp1 interpolation à 1 – D
interp2 interpolation à 2 – D
interp3 interpolation à 3 – D
YI = interp1 (X, Y, XI) interpole pour trouver le vecteur Y1 aux points d’abscisse X1 en tenant
compte de la fonction à interpoler données par les vecteurs X et Y.
YI = interp1(X, Y, XI, ‘method‘) spécifie la méthode d’interpolation. La méthode par défaut est
l’interpolation linéaire.
Les méthodes possibles sont :
‘ linear ‘ – interpolation linéaire
‘ spline ‘ – interpolation spline cubique
‘ cubic ‘ – interpolation cubique
Toutes les interpolations nécessitent un X monotone.
Par exemple, génération d’une courbe sinus et interpolation sur une abscisse plus fine :
x = 0 : 10; y = sin (x) ; xi = 0 :.25 :10 ;
yi = interp1 (x, y, xi), plot (x, y, ‘0‘ , xi, yi)
Matlab _ fig 16
Exercice 9 :
Interpoler le même fonction sinus avec une méthode spline et la rajouter sur le graphique
précédent, avec une couleur différente.
Autre exemple :
[ x, y, z ] = peaks (10) ; [ xi, yi ] = meshgrid(-3 : .1 : 3 , -3 : .1 : 3) ;
zi = interp2 (x, y, z, xi, yi) ; mesh (xi, yi, zi) ;
38
Matlab _ fig 17
VII.2 Différentiations
Contrairement à l’intégration, la différentiation numérique est difficile, puisqu’elle est très
sensible à la forme locale de la fonction.
a) Drivée approximative
La fonction DY = diff (Y) retourne dans DY la dérivée de Y calculée simplement en prenant la
différence entre les éléments adjacents de Y. diff retourne un vecteur moins long que Y, ce qui
peut être gênant. Dans ce cas, vous pouvez utiliser ‘’gradient’’
b) gradient
>> gradient (F) % dérivée de F si F est un vecteur
>> gradient (H) % gradient de H, si H est une matrice
>> del2 (U) % approximation du Laplacien de U
Exemple :
% exemple .m
% dérivée d’un ensemble de valeurs expérimentales
% Fitte un ensemble de valeurs expérimentales avec des splines et calcule
% la dérivée
clear
% (x, y) sont les points à fitter
x = [0:0.1:1];
y = [-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2];
% Il faut commencer par fitter des cubic splines (voir plus haut)
xi = linspace(0,1,100) ; % maillage plus fin entre 0 et 1
yi = spline(x,y,xi); % fit avec une fonction spline.
plot (x,y, ‘o‘,xi,yi,’–‘); % les points expérimentaux sont en bleu,
zi = gradient(yi,xi) ;
hold on;
plot(xi,zi/3,’—‘) % on divise zi par 3 pour pouvoir afficher
% sur la même figure.
39
Matlab _ fig 19
40
MatLab1 _ fig 21
Autre exemple :
Function f = f (x)
% fichier de la fonction
f = exp (x) – 2*cos (x)
>> d = fzero ( ‘ f ‘ , o . 5 )
La fonction find retourne les indices du tableau f qui satisfont à une condition particulière.
Dans l’exemple suivante, on cherche ceux pour lesquels f(x) est positif :
>> x = - 1 : 0 . 1 : 1 ;
>> y = f(x) ;
>> j = find (y>0)
j=
17 18 19 20 21
41
>>solutions = y ( j )
solutions =
0.1714 0.4841 0.8321 0.2164 1.6377
b) Minimalisations
Recherche des extrema d’une fonction.
Très utile quand vous voulez fitter une fonction paramétriques à une série de mesures afin de
déterminer les paramètres de votre modèle.
3.14159268915185
>> fminbnd ( ‘ cos ‘ , o, 15)
ans =
9.42477753165182
Exercice 14 :
Ecrivez un script fit.m qui
1) génère une mesure m (x) décrite par une gaussienne avec du bruit (utiliser rand)
2) fitte un modèle gaussien g(x) en utilisant fminsearch. Les paramètres du modèle seront :
la position x0 du centre de la gaussienne,
la largeur de la gaussienne σ
l’amplitude de la gaussienne A
Pour utiliser fminsearch , il faudra écrire une fonction fitgaus qui retourne la somme des
résidus entre la mesure et le modèle . Le résidu au point x est : (m(x) – g (x) ) 2
3) Construire une figure en deux parties l’une montrant la mesure avec le modèle de départ
et l’autre la mesure avec le fit obtenu.
Rappel : gaussienne : g(x) = A exp( (x– x0)2/2σ2 )
c) autres fonctions de fit :
42
D’autres fonctions de fit sont disponibles dans toolbox /stats (cf Appendice)
nlinfit – Nonlinear least-squares data fitting . Fournit une estimation de l’erreur sur les
paramètres du fit.
polyfit – Least-square polynomial fitting
regress – Multivariate linear regression
optim – Optimization toolbox (help optim)
Ce coefficient est très utilisé pour tester la qualité de l’ajustement réalisé. Plus il est proche de
1, meilleure est la qualité de l’ajustement.
Le coefficient de détermination est égal à R2
La déviation standard est définie par :
43
L’ajustement est d’autant meilleure que DS est proche de 0.
La fonction rml permet de construire une régression multilinéaire à partir d’un ensemble de
données. Elle retourne le vecteur des paramètres de la régression, le coefficient de corrélation
et la déviation standard.
% déviation standard
DS = sqrt (sum ( ( Ycalc –Ymean ) . ^ 2 ) /sum ( ( Y – Ymean ) .^ 2 ) ) ;
Exemple :
Comme exemple direct d’application considérons une grandeur physique y qui dépend des 2
variables X1 et X2. Les différentes mesures effectuées sont :
Y 55 -35 245 140 40 -50 230 155 105 90
X1 -10 9 -10 9 -9 10 -9 10 1 0
X2 -9 -9 10 9 -10 -10 9 10 0 -1
44
>> X1 = [ -10 9 -10 9 -9 10 -9 10 1 0];
>> X2 = [ - 9 -9 10 9 - 10 - 10 9 10 0 -1];
>> X(1, :) = X1
>> x (2 , : ) = X2
>> Y = [55 -35 245 140 40 -50 230 155 105 90 ] ;
>> [A, R, DS] = rml ( X ’ , ‘Y ’)
A=
98.9722
- 4. 7158
10. 0059
R=
9990
DS =
9. 9476e –15
45
subplot ( 2, 1, 1)
N = 1001 ;
Bruit = 0 .1
t = [0 : N –1] ‘ / ( N –1) ;
smooth = exp ( - 100* (t –1 / 5 ) . ^ 2 ) + exp ( - 500 * ( t – 2 / 5 ) . ^ 2) +…
exp ( - 2500 * ( t –3 / 5 ) . ^ 2 ) + exp ( - 12500* ( t – 4 / 5 ) . ^ 2 ) ;
Noisy = smooth + bruit * rand (size (t) ) ; % avec bruit
Plot ( t, Noisy)
hold on
title (‘ Filtre fenêtre constante ‘ )
m = 5 ; % Demi largeur de la fenêtre de filtrage
b = ones ( 2 *m +1, 1) ./ (2*m+1);
Filtered = filter ( b, 1, Noisy ) ;
% compensation du retard introduit par le filtre :
Filtered (1 :m –1 ) = Noisy ( 1 :m – 1 ) ;
Filtered ( m : N – m) = Filtered ( m + m : N) ;
Filtered ( N – m + 1 : N ) = Noisy ( N – m + 1 : N );
plot ( t, Filtered + 0 .2, ‘ –r ‘ )
subplot ( 2, 1, 2 )
plot ( t, Smooth – Filtered )
title ( ‘ Smooth - filtered ‘ )
MatLab1 _ fig 22
Cet exemple montre clairement l’effet de retard introduit par filter .
46
La fonction erf permet de calculer la probabilité qu’une variable aléatoires gaussienne Z soit
comprise entre 0 et Z :
P (0<Z<z ) = 1
erf z
2
√2
>> p = erf ( 0 . 5 / sqrt (2) / 2
p=
0 .1915
>> a = 0 . 1915
>> z = sqrt (2) * erfinv ( 2*a )
z=
5001
451 412 412 375 407 454 375 393 355 364 414 345 432
392 329 439 381 451 413 434 370 448 436 368 433
429 444 396 458 432 413 436
Format short
Home
% Saisie de l’échantillon
X = [ 451 412 412 375 407 454 375 393 355 364 414 345
432 392 329 439 381 451 413 434 370 448 436 368
47
433 429 444 396 458 432 413 436 ] ;
X= X ( : ) ;
% estimation ponctuelle de la moyenne
moy_ X = mean (X) ;
disp ( [ ‘ moyenne de l’échantillon : ‘ , num2str (moy _X) ]
% écart type de l’échantillon
sigma = std (X)
disp ( [ Ecart type : ‘ , num2str (sigma ) ]
% moyenne de la population à 95 % de confiance
% calcul de z _ alpha sur_2
% Z _ alpha _sur _2) = 0, 475
Z _ alpha_sur_2 = sqrt (2) * erfinv (2*0,475) ;
% calcul de la marge d’erreur
E = Z_alpha_sur_2* sigma / sqrt ( lenght (X) ) ;
% intervalle de confiance à 95%
inter_95 = [ moy_X – E moy_X +E ] ;
disp ( ′′ )
disp ( ’ intervalle de confiance ’ )
disp ( [ ‘[ ‘ num2str (moy_X – E ) ’, ’ num2str (moy_X + E ) ’ ] ’] )
VII.7 Optimisation
Nous avons abordé déjà la minimalisation. On appelle généralement optimisation une
minimalisation sous contraintes. Pour traiter ce type de problème avec Matlab, il faut avoir à
disposition la ‘’ Optimization Toolbox ’’ qui ne fait pas tarie de Matlab lui-même.
help optim donne les grandes lignes des outils de cette toolobox.
Au travers d’un exemple et d’un exercice, nous allons étudier deux des fonctions d’optimisation
disponibles.
Exemple d’optimisation :
48
% 3x1 +2x2 <= 30,
%x1>= 0, x2 >= 0, x3 >= 0
clear
disp ( ‘ problème : minimiser cx, sous les contraintes Ax <= b’ =
disp ( ‘ avec 3 constraintes sur x ’ )
disp ( ‘ ‘ )
disp ( ‘ coefficients c de la fonction objectif f (x) ‘ )
c=[-5 –4 –6]
disp ( ‘ Constraintes : membres de gauche ‘ )
A = [ 1 -1 1 ; 3 2 4 ; 3 2 0 ]
Disp ( ‘ Contraintes : membres de droite ‘ )
b = [ 20 42 30 ]
%
ù Limites inférieures et supérieurs de X :
n = max (size © ) ;
L = zeros ( n, 1 ) ;
U = 10 ^ 10* ones ( n, 1 );
%
% Optimisation :
[ x, lambda , exitflag ] = linprog ( c, A, b, [ ] , [ ], L, U ) ;
if exitflag <= 0
disp ( ‘ ERROR , exitflag = ‘ )
exitflag
else
disp ( ‘ solution optimale pour x ‘ )
x
disp ( ‘ valeur optimale de f(x) ‘ )
z=c*x
disp ( ‘ Vérification des contraintes : ‘ )
for i = 1 : n
A (i, : ) * x
end
end
Exercice 15 :
Déterminer un acier aux propriétés données, à partir de relations empiriques.
Le problème est exposé ci- dessous :
49
% Steels – Synthèse d’un alliage aux propriétés spécifiques
%
% On a établi expérimentalement des relations
% empiriques qui permettent de déterminer les propriétés d’un acier.
% On voudrait, en utilisant ces relations, trouver des aciers qui auraient
% des propriétés données.
%
%Ennonc2 du problème :
%
%Les éléments composant l’alliage sont : Fe Ni C Mn N Mo Si Nb et le Cr .
%
%Les propriétés considérées sont :
% Sigma02 : le coefficient d’allongement à 0.2%
%Uts : Utimate tensile strenght –tension de rupture
% Gamma : module d’élasticité
% Cor1 : indice de corrosion
%Prix
%
%Si on dénote par Fe, Ni … la concentration (%) de Fer, de Nickel, …
% dans l’alliage, Comte a décrit les propriétés de l’alliage
% par les relations suivantes :
%
%Sigma02 = 1*Fe +2*Ni +C +3*Mn +50*N + 1*Mo +2*Si +4*Nb +1*Cr +7
% Uts = 2*Fe +1*Ni +55*C +3*Mn +86*N+2*Mo +4*Si+8*Nb +0*Cr +46
% Gamma = 3*Fe +1*Ni +30*C +1*Mn +30*N 2* Mo +4*Si + 1* Nb +3*Cr
% Cor * 10 = 1* Fe + 3*Ni + 2*C + 1* Mn +2* N + 30* Mo +1* Si +2*Nb +10*Cr
%Prix = 1*Fe +3*Ni +1*C +1*Mn +0*N +1*Mo +1*Si +2*Nb + 6*Cr
%
% Ces relations sont valables dans le domaine de concentrations suivantes :
% 25<= Fe <=40
% 25<= Ni <= 40
% 0.01 <= C <=0.1
% 1 <= Mn <= 7
% 0.1<= N <=1
% 1<= Mo <= 10
% 0.2 <= Si <= 2
% 0.3 <= Nb <=3
50
% 15<= Cr <= 35
%
% Finalement , il faut imposer que la somme des concentrations égal 100%
%
% Résolution du problème :
%
%En examinant les relation , on voit que le problème est mal déterminé,
%donc numériquement instable. Un algorithme de minimalisation tel que
% fminsearch n’est donc pas adéquat.
%
%P. Comte a développé une stratégie ‘’ Monte – Carlo’’ pour trouver les aciers
%aux propriétés recherchées : on tire au hasard un grand nombre d’aciers
% et on sélectionne celui qui ales propriétés les plus proches de celles
% désirées. Cette approche nécessite beaucoup de temps CPU si on veut être
% sûr de ne pas trop loin de la bonne solution. L’industriel
51
% vecteur contenant le résidu pour chaque propriété . Comme les paramètres
%de la fonction sont définis, on devra passer les autres quantités
% nécessaires par l’intermédiaire de variables globales.
52
>> J = ind2rgb (I ,t ) , % transforme I en image rgb, avec la binne table de couleur t
>> image (J) ou imagesc (J) % affiche J avec la bonne table de couleur
Exemple :
Exemple :
53
Exercice 16 (long) : reconnaissance automatique de forme sur une image
A partir de l’image ‘rice.tif’ de grains de riz, l’idée de cet exercice est de compter
automatiquement le nombre de grains à peu prés complets dan l’image .
On peut reconnaître certaine structures dans une image en la corrélant avec un motif donné.
Ce motif peut-être artificiel, comme un cercle, un trait , une gaussienne, etc …, ou au
contraire pris dans l’image elle même ( grain, cratère, faille, …) Une fois le motif extrait, on peut
le corréler avec l’image en un endroit donné.
Dans le cas d’ l’image ‘rice.tif , on se propose de comparer un motif donné (un grain) avec le
reste de l’image. Pour cela, il faut d’abord extraire le motif (grain) de l’image.
Choisir donc un grain sur l’image, zoomer pour obtenir les coordonnées (x1, x2, xy1, y2 ) du
motif sur l’image originale. L’extraire de l’image en lui donnant un nom. Ce motif représente
donc une image à par entière extraite de l’image originale plus grosse.
On effectue alors la corrélation du motif, avec les motifs contenus dans l’image originale (ou
dans toute autre image) .
Image
Plus exactement :
54
Les facteurs de normalisation du dénominateur permettent d’obtenue une valeur 1 pour une
corrélation parfaite (motif = image originale).
VIII.1 Introduction
Les fonctions analytiques ne sont pas intégrables analytiquement du fait de leurs
complexités. Dans certains cas, on a des fonctions qui sont évaluées numériquement en
différents points de l’intervalle où ces dernières sont données, et l’intégrale de ces types de
fonctions ne peut être obtenue que par des approches numériques. On s’intéresse aux méthodes
utilisées fréquemment; à savoir la méthode des trapèzes, la méthode de Simpson.
55
I=
450
où ; ; et .
(b − a ) 2 (b − a )
3
E≈ − h f " ≈− f"
Le terme représentant l’erreur est :
12 12 n 2
est la moyenne de sur l’intervalle [a, b]. L’erreur E est inversement proportionnelle à
la valeur de n2.
y
f2
f1
x1 h x2
x
Si la fonction est donnée sur les intervalles réguliers ( ), la méthode des trapèzes
peut être écrite dans Matlab sous la forme :
avec :
56
On peut également faire un programme pour calculer l'intégrale I :.
Celui-ci appelé 'trapez_v.m' par exemple, est listé ci-dessous :
function I=trapez_v(f,h)
I=( sum(f) - 0.5*(f(1)+f(length(f))) )*h;
Exemple 2 : considérons la même fonction à intégrer f(x) = x2 + 2x – 1 sur l’intervalle [-10,8] où
le pas est "h" égal à 1. Avant de lancer le programme 'trapez_v.m', on donne la fonction f, ainsi
que les bornes de l’intervalle d’intégration :
>> h=1; % le pas de discrétisation choisi égale à 1 suivant l’énoncé
>> x=-10:h:8; % bornes de l’intervalle d’intégration
>> f=x.^2+2*x-1; % évaluation de la fonction sur les points de discrétisation (le vecteur x)
On exécute ensuite le programme 'trapez_v.m', et on obtient :
>>I=trapez_v(f,h)
I=
453
Avec un pas d’intégration plus fin, on obtient :
>> h=0.01; % le pas de discrétisation choisi égale à 0.01
>> x=-10:h:8; % bornes de l’intervalle d’intégration
>> f=x.^2+2*x-1; % évaluation de la fonction sur les points de discrétisation (le vecteur x)
>>I=trapez_v(f,h)
I=
450.0003
VIII.2.3 Exercices
Exercice 1 :
Ecrire une autre fonction trapez_n.m qui a quatre paramètres : la fonction f à intégrer,
les deux bornes d’intervalle a et b ([a, b]) et n le nombre associé aux différents points de
discrétisation. On suggère d’utiliser la fonction Matlab feval pour évaluer la fonction f sur les
points de discrétisation, et la fonction trapez_v.m décrit précédemment pour le calcul de
l’intégral de cette fonction.
En se référant avec les notations précédentes, le pas h=(b-a)/n et les points de
discrétisation sont xi = a + (i-1)* h, avec i=1, ... n+1.
On donne comme suit la première ligne de la fonction tapez_n.m :
function I=trapez_n(fonction_f,a,b,n)
Exercice 2 :
On donne la fonction 'fonc_f' par le sous-programme 'fonc_f.m' listé ci-dessous :
%****************
% fonction fonc_f(x) *
%****************
function f=fonc_f(x);
f=x+2*log(0.0000025235*x);
Ecrire une autre fonction trapez_g.m qui a quatre paramètres : la fonction fonc_f à
intégrer, les deux bornes d’intervalle a et b ([a, b]) et n le nombre associé aux différents points
de discrétisation, mais qui n’utilise pas cette fois ci la fonction trapez_v.m (à réécrire dans cette
fonction la formule qui calcule l’intégration de la fonction fonc_f avec la méthode de trapèze.
57
Une fois la valeur de l’intégrale calculée, utiliser les fonctions Matlab permettant de
tracer cette fonction fonc_f sur 100 points, avec les grilles sur l’axe des abscisses et des
ordonnés.
Sur la même figure, tracer les valeurs de cette fonction fonc_f sur chaque point de
discrétisation utilisé pour le calcul d’intégrale, ainsi que la fonction x=0.(axe des abscisses).
Exécuter par la suite la commande suivante :I=trapez_g('fonction_f',1,50,60) ;par
exemple pour obtenir le résultat suivant :
58
Matlab _ fig 18
59
1 n
lim
n→∞ n
∑
i =1
X i = E( X )
presque sûrement.
Ce résultat signifie en pratique que si l’on choisi un générateur de valeurs aléatoires
donnant des points distribués uniformément dans l’hypercubes [0, 1]p et que la suite des points
de IR p délivrée par ce générateur on a :
1 n
∑
1 1
lim f ( x p ) = ∫ L∫ f (u1 L u p ) du1 L du p
n→∞ n 0 0
i =1
p
et plus généralement su on prend un hyper-rectangle quelconque I = ∏ [a i , bi ] l’hypervolume
i =1
V, alors on a :
1 n 1
∑
b1 bp
lim
n →∞ n
i =1
f (xp ) =
V ∫a1
L∫ f (u1 Lu p ) du1 L du p
ap
pour que les (xp) aient une distribution uniforme sur l’hypervolume.
L’erreur sur l’intégrale peut être estimée à l’aide de l’écart type de la moyenne des f(Xn)
et calculée statistiquement à l’aide des f(xp), divisé par la racine carrée du nombre des points.
L’écart type est donné par la fonction Matlab std.
VIII.3.1 Introduction
Les équations différentielles que nous considérons de résoudre seront de la forme :
dy
y' = = f ( x, y ),
dx .
y (0) = y 0
y n +1 = y n + h f ( xn , y n )
qui permet de faire progresser la solution de xn à xn+1 = xn + h. L’erreur commise sur yn+1 est
alors de l’ordre de h2 Cette méthode n’est ni très précise, ni très stable si l’on compare à
d’autres qui utilisent de pas similaires et sont tout aussi simple à programmer.
VIII.3.3 Application
Soit à résoudre l’équation différentielle suivante :
dV
M = −C V 2 + M g
dt
où :
60
M = 70 kg
g = 9.81 N / kg
C = 0.27 kg / m
Déterminer numériquement V(t). On choisit un pas de temps h=0.1s, et on donne
comme condition initiale V(t=0) = V0 = 0. Tracer la solution de cette équation différentielle pour
0 ≤ t ≤ 20 s.
dV
L’équation M = −C V 2 + M g est équivalente à V’(t)=f(V,t) où V(0)=0 et
dt
C 2
f (V , t ) = − V +g
M
La solution de cette équation peut être effectuée par la méthode d’Euler, qui consiste à écrire :
Vn +1 = Vn + h f (V , t )
Le programme MATLAB suivant (eul1.m) permet la résolution de cette équation :
%*******************************************
% Résolution d’une équation différentielle *
% par la méthode d’Euler à l’ordre 1 *
%*******************************************
clear; clc;
t=0; n=1; V=0;
C=0.27; M=70; g=9.81; h=0.1;
t_R(n)=t; V_R(n)=V; % l’indice des tableaux en Matlab commence tjrs à 1
while t<=20
V=V+h*(-C/M*V.^2+g);
t=t+h;
t_R(n)=t;
V_R(n)=V;
n=n+1;
end
plot(t_R,V_R);
xlabel(‘Temps (en s)’);
ylabel(‘Vitesse (en m/s)’);
grid on;
On obtient ainsi un graphique (fig. 1) qui donne l’évolution de la solution V(t) en fonction
du temps.
61
Figure 1 : Evolution de la vitesse en fonction du temps
où a(t), b(t) et s(t) sont des constantes ou des fonctions de t ; u’0 et u0 sont des conditions
initiales.
Avant d’appliquer la méthode d’Euler par exemple, on peut rendre l’équation précédente
à une équation du type 1er ordre. Dans ce cas, on pose v(t) = u’(t).
D’où :
u ' (t ) = f1 ( u , v, t ); u (0) = u 0
v' (t ) = f 2 ( u , v, t ); v(0) = u ' 0
où
62
En faisant le calcul pas par pas, on obtient :
Pour t = t1 = h
u1 = u 0 + h f1 ( u 0 , v0 , t 0 ) = h v0
v1 = v0 + h f 2 ( u 0 , v0 , t 0 ) = h(−av0 − bu 0 + s (t 0 ))
pour t = t2 = 2 h
u 2 = u1 + h f1 ( u1 , v1 , t1 ) = h v1
v 2 = v1 + h f 2 ( u1 , v1 , t1 ) = h(−av1 − bu1 + s (t1 ))
Ainsi, dans Matlab, le calcul pour chaque pas de temps peut être décrit par les matrices
ci-dessous.
On définit au départ y et f par :
u f v
y = et f = 1 =
v f2 − a v − bu + s
ensuite, on écrit y’=f(y,t) et on résout l’équation :
y n +1 = y n + h f ( y n , t n )
VIII.3.5 Application
u (0) = 0
v(0) = 1
v = u ' B
avec a =
v' = −a v v − c u M
k
c =
M
63
Pour t = t0 = 0, on a :
u 0 = u (0) = 0
v0 = u ' (0) = 1
Pour t = t1 = h =0.05, on a :
u
y =
v
y ' = f ( y, t ) où
f = v
− a v v − c u
La méthode d’Euler donne :
y n +1 = y n + h f ( y n , t n )
Le programme ‘eul3.m’, listé ci-dessous permet de calculer la solution u(t) de l’équation
différentielle proposée :
%*******************************************
% Résolution d’une équation différentielle *
% du second ordre par la méthode d’Euler *
%*******************************************
clc;
clear;
clf;
hold off;
t_max=5;h=0.05;n=1;
y(:,1)=[0;1];t(1)=0;
while t(n)<t_max
y(:,n+1)=y(:,n)+h*def_f(y(:,n),t);yb=y;
t(n+1)=t(n)+h;
n=n+1;
end
axis([0 5 -1 1]);
plot(t,y(1,:),t,y(2,:),’:r’);
xlabel(‘Temps (en s)’);ylabel(‘v(t) et u(t)’);
gtext(‘Solution : v(t)’);
L=length(t);
text(t(L-2),y(2,L-5),’Solution : u(t)’);
La fonction ‘def_f(y,t)’ est un sous programme dont la liste est dressée ci-dessous :
%*******************************************
% Définition de la fonction : def_f(y,t)
64
%*******************************************
function f=def_f(y,t);
a=5;c=20;
f=[y(2);(-a*abs(y(2))*y(2)-c*y(1))];
La figure 3 ci-après donne l’évolution des solutions u(t) et u’(t)=v(t). La solution u(t)
oscille autour de 0 et tend à s’amortir au fur et à mesure que le temps t augmente.
65
L’équation différentielle est dy/dt = K(y –s) . Le script myode.m est le suivant :
% myode .m :
function yprime = myode (t , y)
yprime = - 0 .1 * ( y – 10) ;
et l’évolution dans le temps de la température y est obtenue en résolvant l’équation différentielle
à l’aide de ode45 :
>> tinitial = 0 ;
>> tfinal = 60 ;
>> y0 = 100 ;
>> [ t y ] = ode45 ( ‘ myode ‘ , [tinitial tfinal] , y0 )
>> plot ( t , y ) ; xlabel ( ‘ time ‘ ) ; ylabel ( ‘ température ‘ ) ;
ode45 (et les autres) permet de résoudre des systèmes de plusieurs ODE couplés. On va utiliser
cette propriété dans l’exemple c-dessous.
Exemple : tir balistique dans le vide
Une transformation de variable permet de résoudre les équations du 2ème ordre.
Les équations du mouvement sont :
x = 0 et z = - g
Pour ramener ces équations du 2ème ordre au premier ordre, on effectue les transformations de
variables suivantes :
X(1) = x X(2) = z X(3) = x X(4) = z
On obtient alors les 4ODE suivantes :
X (1) = X(3) X(2) = X(4) X (3) =0 X(4) = -g
Avec les conditions initiales suivantes :
X0(1) = 0 X0(2) = h X0(3) = v0cos (θ) X0 (4) = v0sin (θ)
La fonction décrivant les ODE s’écrit :
Function xdot = balisticODE (t,X)
% BALISTICODE .m ODE pour le tir balistique dans le vide global g
xdot = [ X (3) X (4) 0 -g ] ;
xdot = xdot ‘ ; la fonction ODE doit retourner un vecteur colonne return
et le M-file qui résout le problème du tir balistique et fait le dessin est :
% BALLISTIC .M tir balistique simple dans le vide
% exemple de résolution d’ODE avec Matlab
% utilise la fonction balisticODE .m qui définit les ODE à résoudre
clear
global g
g = 9.81 ; % const . de gravitation
% conditions initiales du tir :
h = 1; % altitude de départ
v0 = 25 ; % vitesse initiale
66
theta = pi / 180 *15 ; % angle de tir
% conditions initiales :
xin = [ 0,h, v0*cos (theta), v0*sin (theta) ] ;
% temps de vol jusqu’à atteindre l’altitude 0
tmax = (xin (4) + sqrt (xin (4) ^ 2 + 2*g*xin (2) ) ) /g ;
% solution numérique des ODE :
[t x] = ode45 ( ‘ balisticODE ‘ , [0 tmax ] , xin ) ;
% plot de la solution avec une interpolation faite avec des splines cubiques
N = max (x ( : , 1));
Xi = 0 : N / 50 : N ;
Axis ( [ 0, max (x ( : , 1 ) ) , 0 , max ( x ( : , 2 ) ) ] )
Grid on ; hold on ;
Zi = spline ( x ( : , 1 ) , x ( : , 2 ) , xi )
Plot (xi, zi, ‘ : r ‘ ) ;
MatLab1-fig 20
Exercice 12 :
Reprenez l’exemple du tir balistique et introduisez une force de frottement proportionnelle à la
vitesse (on prendra K coefficient de frottement égale à 0.2). Vérifiez que le projectile va moins
loin.
Exercice 13 :
Réaliser une animation montrant l ‘évolution du projectile sur sa trajectoire
67
L’erreur étant en h3, la méthode est dite du second ordre.
VIII.4.2 Méthode de Runge-Kutta à l’ordre 4
La plus utilisée de toutes les méthodes de type RK est sans conteste RK4 qui est donnée par les formules :
k1 = h f ( x n , y n )
h k
k 2 = h f ( xn + , y n + 1 )
2 2
h k
k3 = h f ( xn + , yn + 2 )
2 2
k 4 = h f ( x n + h, y n + k 3 )
1
y n +1 = y n + (k1 + 2k 2 + 2k 3 + k 4 ) + O(h 5 )
6
Cette méthode demande à chaque pas quatre évaluations de f, on peut donc en conclure qu’elle sera
meilleure que (par exemple) RK2, à la condition que l’on puisse utiliser un pas h deux fois plus grand. C’est
généralement vraie, mais pas toujours.
VIII.4.3 Les routines Matlab
Il existe un certain nombre de routines sous Matlab pour la résolution des équations
différentielles ordinaires aux conditions initiales. Nous avons deux routines qui sont basées sur
les méthodes de Runge-Kutta à pas adapatif ODE23 et ODE45 qui s’utilisent de la même
manière. L’appel est du type:
[t, y] = ODE45(<fonction>, <intervalle>, <conditions initiales>, {options})
La fonction doit être du style y’=f(t,y), et renvoyer un vecteur colone. L’intervalle est soit du type
[t0, t1], soit [t0, t1, …, tn] et l’éqution différentiuelle est intégrée de t0 à tn en calculant
obligatoirement les valeurs intermédiares qui peuvent être demandées.
Objectif : obtenir une solution approchée du problème de Dirichlet homogène par une méthode d’approximation
numérique.
68
IX.2 L’approximation par différences finies et ses limites
Approche classique : on se donne une fonction f ∈ C0(Ω), on cherche la solution u dans C2(Ω) ∩ C0(Ω) et on
demande que l’EDP soit − u" = f satisfait en tout point x∈ ]0, 1[.
Méthode des différences finies : chercher à approcher la solution de (1) en un nombre fini de points, n, de
l’intervalle ]0, 1[ : 0=x0 < x1< … < xn < xn+1 = 1.
Les points xj forment un maillage de l’intervalle ]0, 1[. Pour des raisons de simplicité, on choisit des points de
maillage régulièrement espacés :
1
x j = jh, avec h = , où h est le pas de discrétisation.
n +1
Objectif : trouver un vecteur U=(U1, …, Un) ∈ IRn tel que Uj soit une approximation de u(xj) La façon la plus
simple de procéder consiste à utiliser des développement de Taylor afin d’approcher la dérivée u’’. En
supposant u suffisamment régulière, on a :
1
u ( x + h) = u ( x) + h u ' ( x) + h 2 u" ( x) + O (h 3 ),
2
1
u ( x − h ) = u ( x ) − h u ' ( x ) + h 2 u" ( x ) + O ( h 3 )
2
En sommant membre à membre, on obtient :
u ( x + h) − 2u ( x) + u ( x − h)
u" ( x) = + ε (h), avec ε (h) = O(h)
h2
En fait en poussant le développement de Taylor à l’ordre 4, on montre aisément que pour un maillage
régulier ε(h)=O(h2). En posant uj = u(xj), on a :
u j +1 − 2u j + u j −1
u" ( x j ) = + ε (h),
h2
ce qui suggère de chercher la solution approchée U=(U1, …, Un) telle que :
U j +1 − 2U j + U j −1 (2)
− 2
= f ( x j ),
h
avec les conditions limites
U 0 = U n +1 = 0, (3)
Il s’agit d’un schéma aux différences finies. Le schéma (2)–(3) est simplement un système linéaire :
AU = F , (4)
où la matrice A∈ IRnxn est tridiagonale : A = tridiag(-1, 2, -1)/h2, F=(F1, …, Fn) ∈ IRn le membre de droite de
composante Fj=f(xj) et U ∈ IRn est le vecteur inconnu.
On a le résultat suivant :
69
Proposition : La matrice A est symétrique définie positive et le système linéaire (4) admet donc une solution
unique.
IX.2.2 Algorithme
Résolution numérique du problème suivant :
y" ( x) = f ( x) ; x ∈ [a, b]
avec y (a ) et y (b) donnés.
Le principe de cette méthode consiste à subdiviser l’intervalle d’intégration [a, b] en N sous-intervalles de
longueur égale à h=(b_a)/N délimités par les points de subdivision xn = a + nh, n=0, 1, 2, … , N.
Pour chaque abscisse xn, on calcule une valeur approchée yn de la vraie valeur y(xn) de la fonction y.
La formule de Taylpr permet d’écrire
y ( x + h ) − 2 y ( x ) + y ( x − h)
y" ( x) = + ε (h), avec ε (h) = O(h)
h2
On remplace y’’ dans l’équation différentielle par l’approximation obtenue en négligeant les termes en h.
On résout par la suite le système linéaires de n=N-1 équations et n=N-1 inconnues.
y j +1 − 2 y j + y j −1
= f ( x j ), j = 1,..., n = N − 1.
h2
( y 0 et y n +1 = y N donnés).
Deuxième équation :
(y1-2y2+y3)/10-2)=f(x2) = f(2/10)=2/(1+2/10)3
d’où
y1-2y2 + y3 = 5/432.
70
y6-2y7 + y8 = 20/4913.
y7-2y8 + y9 = 5/1458.
y8-2y9 = -6819/13718.
%
% diff_fini(a,b,u_0,u_n_plus_1,n,f)
% Méthode des différences finies pour la résolution du problème
% de Dirichlet homogène (en dimension 1)
% -u" = f(x) sur ]a, b[ ;
% avec u(a)=u_0 et u(b)= u_n_plus_1.
%
function diff_fini(a,b,u_0,u_n_plus_1,n,f)
%
% Pas de discrétisation régulière h = 1/(n+1)
%
h = 1/(n+1);
%
% Détermination de la matrice A=tridiag(1,-2,1), de taille nxn
% Utilisation des outils de vectorisation pour générer la matrice A
%
A = -2*eye(n)+diag(ones(n-1,1),1)+diag(ones(n-1,1),-1);
%
% Détermination des points de discrétisation x_j=j*h pour les j=1..n.
% Concernant les valeurs à la frontière: on a:
% pour j=0,x_0=a et pour j=n+1, x_n_plus_1=b
%
x = linspace(a+h,b-h,n);
x = x';
%
% Détermination du vecteur second membre F, valeurs de la fonction f
% à chaque point de discrétisation x_j uniquement pour les j=1..n.
%
F=f(x)*h^2;
F(1) = F(1)-u_0;
F(n) = F(n)-u_n_plus_1;
%
% Détermination de la solution approchée par la résolution du système
% linéaire AU=F.
%
U = A\F;
%
Y = 0:n+1;
Y=Y';
X=Y;
Y(1) = u_0;
Y(n+2) = u_n_plus_1;
Y(2:n+1) = U(1:n);
%
X(1) = a;
X(n+2) = b;
X(2:n+1) = x(1:n);
%
% Solution exacte g(x)=1/(1+x)
%
g = inline('1./(1.+x)');
Sol_exacte = g(X);
%
[' x_n ','y_n ','Solution exacte ','
Erreur']
Sol = [X, Y, Sol_exacte, Y-Sol_exacte];
format long
71
Sol
Format
Le système pour N=10 : dans ce cas, on prend n=N-1 = 9 dans notre programme car il reste à résoudre 9 équations à
9 inconnues. Dans ce cas , nous avons :
» diff_fini(0,1,1,0.5,9,f)
ans =
Sol =
0 1.00000000000000 1.00000000000000 0
0.10000000000000 0.90935677412322 0.90909090909091 0.00026586503231
0.20000000000000 0.83373984426447 0.83333333333333 0.00040651093113
0.30000000000000 0.76969698847979 0.76923076923077 0.00046621924902
0.40000000000000 0.71475745540790 0.71428571428571 0.00047174112219
0.50000000000000 0.66710655207362 0.66666666666667 0.00043988540696
0.60000000000000 0.62538157466527 0.62500000000000 0.00038157466527
0.70000000000000 0.58853940975692 0.58823529411765 0.00030411563927
0.80000000000000 0.55576807733381 0.55555555555556 0.00021252177825
0.90000000000000 0.52642610019191 0.52631578947368 0.00011031071822
1.00000000000000 0.50000000000000 0.50000000000000 0
»
Le système pour N=100 : dans ce cas, on prend n=N-1 = 99 dans notre programme car il reste à résoudre 99
équations à 99 inconnues.
» diff_fini(0,1,1,0.5,99,f)
ans =
Sol =
0 1.00000000000000 1.00000000000000 0
0.10000000000000 0.90909359522873 0.90909090909091 0.00000268613782
0.20000000000000 0.83333743786729 0.83333333333333 0.00000410453395
0.30000000000000 0.76923547435518 0.76923076923077 0.00000470512441
0.40000000000000 0.71429047333442 0.71428571428571 0.00000475904870
0.50000000000000 0.66667110301117 0.66666666666667 0.00000443634450
0.60000000000000 0.62500384733291 0.62500000000000 0.00000384733291
0.70000000000000 0.58823835983916 0.58823529411765 0.00000306572151
0.80000000000000 0.55555769758743 0.55555555555556 0.00000214203187
0.90000000000000 0.52631690115516 0.52631578947368 0.00000111168148
1.00000000000000 0.50000000000000 0.50000000000000 0
»
IX.2.4 Approximation en deux dimensions d’espace
Considérons toujours le problème de Dirichlet homogène en deux dimensions d’espace. Ω est un rectangle
]0, a[ x ]0, b[, où a et b réels strictement positifs, la méthode des différences finies dans le cas monodimensionnel
s’étend facilement.
Construction d’un maillage structuré de Ω constitué des points de coordonnées (xj, yj), avec :
Xi = i hx et yj = j hy
b
i,j+1
i,j-1
0 a
Afin d’obtenir une approximation de Ui,j de u(xi,yj) en tous les points du maillage, on utilise à nouveau des
développements de Taylor. En supposant que la solution u est suffisamment régulière, on a :
ϑ 2u u i +1, j − 2u i , j + u i −1, j
( xi , y j ) = + O(h x2 ),
ϑx 2
h x2
ϑ 2u u i , j +1 − 2u i , j + u i , j −1
( xi , y j ) = + O(h y2 ),
ϑy 2 2
hy
et qui conduit au schéma :
U i +1, j − 2U i , j + U i −1, j U i , j −1 − 2U i , j + U i , j −1
− 2
− = f ( xi , y j ),
h x h y2
qui n’est rien d’autre qu’un système linéaire en les inconnues Ui,j.
IX.2.5 Limite de l’approximation par différence finies
Cette simplicité de mise en œuvre est contrebalancée par un défaut majeur lié à la structure des données.
Lorsque Ω a une forme géométrique plus complexe, il est difficile voire impossible de mailler Ω avec u maillage
structuré. La mise en œuvre de cette méthode conduit aussi à des algorithmes et donc à des logiciels lourds à
manipuler.
73
X Appendice 3 : Résumé des commandes MATLAB
On a regroupé par sujet d’intérêt les différents commandes et fonctions de Matlab . Il en existe
bien d’autres regroupées dans des options spécialisées, les boîtes à outils (ou toolbx).
Gestions des commandes et des fonctions Gestion des variables et de l’espace de travail
help aide who affiche les variables courantes
what listing du nom des M_ files présents whos affiche les variables en format long
type impression d’un M_file save sauve l’espace de travail sur disque
lookfor recherche d’une entrée dans le help load charge l’espace de travail
which localise les fonctions et fichiers clear efface la mémoire
demo lance la démonstration quit quitter Matlab (aussi exit)
diary sauvegarde le texte d’une session Matlab
1
; fin de lignes (matrices) ou suppression de
l’affichage
% commentaires
: manipulation de sous matrices génération de
vecteurs
2
exp exponentiel ifft FFT inverse de dimension 1
log log népérien ifft2 FTT inverse bidimensionnelle
log10 log décimal n =1
Fonctions de Matrices
Décompositions et factorisations de Matrices
inv inversion expm exponentiation (fonction interne)
lu décomposition LU expm1 M_file correspondant à expm
chol factorisation de Cholesky expm 2 expm par série de taylor
qr décomposition QR expm3 expm par valeurs et vecteurs propres
nnls moindres carrées non-négatif logm logarithme
orth orthogonalisation sqrtm racine carrée
eig valeurs et vecteurs propres funm ex : funm (A, ‘sin’) donne sin (A)
cdf2rdf forme complexe diagonale vers forme poly polynôme caractéristique
réelle diagonale par blocs
rsf2csf forme réelle diagonale par blocs vers det déterminant
forme complexe diagonale
balance mise à l’échelle pour le calcul des trace trace
valeurs propres
qz valeurs propres généralisées Conditionnement
polyeig polynôme aux valeurs propres cond suivant norme L2
svd décomposition en valeurs singulières rcond1 bon, 0. mauvais
norm normes L1,L2 , Lp et Li
rank rang
3
diff approximation de la dérivée max valeur max
gradient approximation du gradient min valeur min
Intégration numérique mean valeur moyenne
quad intégrale de Simpson median valeur médiane
quad8 intégrale de newton-Cotes std écart type
trapz méthode des trapèzes sort tri en ordre croissant
sum somme des éléments
prod produit des éléments
hist histogramme