Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 80

1

Introduction à Matlab
Janvier 2005
1

Table des matières

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

II.1 Structure générale du logiciel


Matlab peut s’utiliser de deux manières différentes :
directement à partir de la « fenêtre de commande » (ou « Command Window ») où les instructions
sont tapées à la suite du prompt (>>) et immédiatement exécutées après validation. On peut
ainsi utiliser Matlab comme « une super calculatrice ». Dans la suite du document les 2
chevrons « >> » indiquent que les instructions sont tapées sous la fenêtre de commande.
ou bien comme une interface (ou langage) de programmation. Les commandes sont alors
placées les unes à la suite des autres dans un fichier ASCII(texte) de façon à former globalement
un programme ou script. Ce script est crée/édité/modifié à l’aide de n’importe quel éditeur de
texte, en particulier le plus pratique est l’éditeur de texte Matlab (menu File/new/M-file).Le
fichier script crée, est enregistré sur le disque dur de la machine puis exécuté à partir de la
fenêtre de commande par simple appel de son nom, de la même façon qu’une routine ou
fonction préprogrammée de Matlab. Les instructions du programme sont alors exécutées une à
une dans leur ordre d’apparition dans le fichier. Il est essentiel que le nom du fichier comporte
l’extension « .m. ».
Remarques :
En mode interactif (1) ou bien mode script (2), toutes les variables crées ou chargées sont
placées dans le « Wokspace » ou espace de travail. Ce workspace est détruit à la fermeture de la
session Matlab.
Enfin, il faut noter que la gestion des graphiques se fait dans un mode particulier. En effet, les
graphiques sont crées et modifiés dans une fenêtre indépendante que l’on nommera par la
suite « fenêtre graphique ». Les propriétés des figures peuvent alors être modifiées soit à l’aide
d’instruction tapées sous la fenêtre de commande ou dans un script, ou bien directement
(manière la plus aisée) grâce aux menus/boutons de la fenêtre graphique (voir plus loin).
>> figure % crée une fenêtre graphique vierge
autre possibilité : menu File (fenêtre de commande) /new /figure
Sous la fenêtre de commande, divers boutons/outils sont disponibles : ouverture de
fichier, copier, coller… En particulier, il existe deux boutons importants :
le bouton ‘’Workspace browser ‘’ utilisé pour modifier/éditer les variables
le bouton ‘’Path browser’’ utilisé pour changer le répertoire de travail et les répertoires de
recherche de Matlab (« path »). Le répertoire de travail doit TOUJOURS être défini à l’ouverture
d’une nouvelle session Matlab :
Cliquez sur ‘’Path browser’’, puis dans « Browse » pour changer le« current directory »
(ou répertoire de travail). Choisir « stage –Matlab » dans « Mes documents ». Cette opération peut
aussi être effectuée manuellement en tapant des instructions (voir plus loin).U9ne fois le

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 ».

II.3 Types de variables scalaires, workspace, opérations élémentaires


Dans Matlab, il y a un seul type de données : le type matrice. Tout est matrice, un nombre est
une matrice carré d’ordre 1. Il n’y a dons pas de déclaration de types. De même, l’utilisateur ne
s’occupe pas de l’allocation mémoire. Les matrices et vecteurs peuvent être redimensionnés.
Cependant, lorsque on utilise Matlab et par commodité, on peut supposer l’existence de 3 types
de base, le scalaire, le vecteur (ligne ou colonne), et la matrice de dimension (n,m).
Les noms des variables et des fonctions sont composés de lettres et de chiffres. Seul les 19
premiers sont significatifs. Matlab fait la distinction entre les minuscule et les majuscules. Ainsi
Mavar et MAVAR sont 2 variables différents.
>> var =2
var = 2
>> autre = 3
>> who % fournit la liste des fonctions définies dans le workspace
>> whos % donne plus d’informations que who particulier la taille et type
% des variables
Sous windows, vous avez accès au ‘’workspace browser’’ dans la barre d’outils (icône outil). Cet
éditeur de variable vous permet d’éditer/modifier manuellement les variables en mémoires.
Seules les variables de type numérique peuvent être éditées/modifiées par le « workspace
browser ». Utilisez le ‘’Workspace browser’’ pour éditer/modifier/détruite les variables déjà
crées.
>> clear autre
>> who
your variables are :
var
>> clear all % efface toutes les variables du workshop
Opérations élémentaires :
+ - * / or \ ^
>> 4/2
ans =
2
>>4\2

3
ans =
0.5000

II.4 Commentaires, ponctuation


« % » (le caractère %) permet de mettre des commentaires en face de vos lignes de commande
>> S = 2+3 % je fais une somme
S =
5
« … » (les trois points de suspensions) permet de continuer sur une autre ligne une commande
trop longue
>> cout_moyen = cout ... % commande sur deux lignes
/nombre ;
« ; » (point virgule) pour séparer 2 instructions sur une même ligne de commande et évite que le
résultat s’affiche à l’écran. Il est conseillé de toujours l’utiliser.
>> a = 4\2
a =
0.5000
>> a = 4\2 ;

II.5 Variables spéciales


pi, infini, realmin, reamax, eps, ans, flops (nombre d’opérations effectuées), NaN,…
Il est fortement conseillé de na pas utiliser ces noms pour les variables que vous créez (sauf i et
j), sous peine de conflits souvent très difficilement décelables.
>> pi
ans =
3.1416
>> eps % pour epsilon, c’est la précision par défaut
ans =
2.2204e–16
>> realmax % plus grand nombre positif à virgule flottante
ans =
1.7977e + 308
>> 0/0
Warning : divide by zero
ans =
NaN

II.6 Nombres complexes


L’imagine pur en Matlab est noté i ou j. Un nombre complexe est donc toujours de la
forme z = a + ib ou z = a + jb. Mais Matlab donne toujours dans ses réponses le symbole i.
>> c1 = 1 – 2i
c1 =
– 2.0000 i
>> c2 = 3*(2 –sqrt (-1) *3)
c2 =
6.0000 – 9.0000 i
real(c1) : partie réelle de c1
imag(c1) : partie imaginaire de c1
abs(c1) : module de c1
conj(c1) : le conjugué de c1

4
>> angle(c1) % argument
ans =
1.1071

II.7 Les chaînes de caractères


Toute chaînes de caractères est une matrice à une ligne et un nombre de colonne égal à sa
longueur
>> ch =’matlab’
ch =
matlab
>> size(ch) % dimension de la variable caractère ch
ans =
1 6
La chaîne’ matlab’ est considérée comme une matrice à une ligne et six colonnes, ou plus
simplement comme un vecteur ligne de taille 6.
Concaténation de chaînes :
>> cch = [‘langage ’ ch]
cch =
langage matlab
Les codes ASCII des caractères formant une chaîne peuvent être obtenus en utilisant la
fonction abs :
>> ch = ‘une chaîne’ ;
>>abs (ch)
ans =
117 110 101 32 99 104 97 148 110 101
Inversement, on peut obtenir une chaîne de caractère connaissant les codes ASCII avec la
fonction sestr.
>> setstr (ans)
ans =
une chaîne
La conversion de nombres entiers ou réels en chaîne de caractères se fera à l’aide de la fonction
num2str :
>> a = 1/3
a =
0.3333
>> ch = num2str(a)
ch =
0.3333
str2num transforme une chaîne de caractères valide en une matrice de nombres. Une chaîne
valable contient « 0 » à « 9 », le symboles « + » et « -» pour le signe, « i » pour les complexes, « e »
pour les puissances de 10, les crochets, la virgule et le point virgules. Si
>> ch =’124’
ch =
124
>>str2num(ch)
ans
124
Une fonction importante est la fonction eval qui permet d’évaluer une chaîne de caractères
contenant une/des commandes, des opérations et des noms de variables. Si la chaîne n’est pas
valide, une erreur est retournée. Cette fonction est souvent utilisée dans les scripts.

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)

II.8 Fonctions mathématiques


( voir les tables en annexe )
Les plus classiques :
Les fonctions trigonométriques :
sin cos tan sinh tanh …
asin acos atan asinh acosh atanh …
transformation de coordonnées :
cart2sph cart2pol sph2cdart
autres
exp log log 10 sqrt (racine carrée)
fix (entier le plus proche en allant vers 0)
floor (entier immédiatement inférieur)
ceil (entier immédiatement supérieur) round (entier le plus proche)
sign (signe)
factor (facteurs premier)
isprime, primes (nombres premiers)
gcd (pgcd)
lcm (ppcm)
nchoosek (nombre de combinaisons différents de N éléments pris K à K)

>> nchoosek (30,4)
ans =
27405
perms (retourne toutes les permutations possibles d’un vecteur V)
>> perms ( [ 1 2 3 ] )
ans =
3 2 1
2 3 1
3 1 2
1 3 2
2 1 3
1 2 3

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

II.9 Format d’affichage


FORMAT fixe le format de sortie
Tous les calculs en Matlab sont effectués en double précision.
FORMAT peut être utilisé pour changer de sorties comme suit :
format short (défaut) format avec 5 digits.
format long format avec 15 digits.
Autres format : cf. help format
Espacement :
format compact supprime les lignes en plus
format loose remet les lignes en plus
exemples :
>> pi
ans =
3.1416
>> format long g
>> pi
ans =
3.14159265358979

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

II.11 Edition des lignes de commande


Matlab conserve un historique des commandes entrées de façon interactive (i.e. dans la
fenêtre de commande) lors d’une session. Il est donc possible de récupérer des instructions déjà
saisies et de les modifier dans le but de les réutiliser.
Résumé de l’édition des lignes e commande :
Passer à l’instruction précédente
Passer à l’instruction suivante
Aller vers la droite sur la ligne de commande éditée
Aller vers la gauche sur la ligne de commande éditée
En tapant quelques caractères suivis de la touche , la dernière commande commençant par
ces caractères est alors rappelées sur la ligne de commande.

II.12 Terminer Matlab


>> quit % retourne le nombre d’opération effectuées pendant la session
5340584 flops.

II.13 Personnaliser Matlab


Si, au démarrage, Matlab trouve le fichier startup.m, il l’exécute.
Exemple de startup .m :
disp (‘execution de STARTUP.M’)
addpath (‘ HC:/Matlab /cours’) ; % ajoute une répertoire ans le path de Matlab
addpath (‘C:/Matlab/exercices , % (défini le répertoire courant de travail)
format compact
disp (‘ STARTUP.M terminé)
Après avoir vu dans la partie 5 “programmer en Matlab” les fichiers script, il sera
possible d’écrire un fichier startup.m personnalisé.

8
III Vecteurs

III.1 Création de vecteurs


Par défaut, le vecteur est une ligne à plusieurs colonnes
a) vecteur ligne par énumération des composantes :
>> v = [1 3.4 5 -6]
v =
1.0000 3.4000 5.0000 - 6.0000
ou bien :
>> v = [ 1 ,3 . 4, 5, - 6]
v =
1.0000 3.40000 5.0000 - 6.0000
b) vecteur par description :
>> x = [0 : pi/11 : pi] % [ valeur–initiale : incrément : valeur-finale ]
x =
Columns 1 through 7
0 0.2856 0.5712 0.8568 1.1424 1.4280 1.7136
Columns 8 through 12
1.9992 2.2848 2.5704 2.8560 3.1416
On peut noter que x contient 12 valeurs dans 12 colonnes.
Pour obtenir un vecteur colonne :
>> xcol = x’
xcol =
0
0.2856
0.5712
0.8568
1.1424
1.4280
1.7136
1.9992
2.2848
2.5704
2.8560
3.1416
autre méthode :
>> x = linspace (0,pi,11) % génère uniquement 11 valeurs entre 0 et pi,
également
espacées (avec 11 nombre de points compris entre 0 et pi)
x =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
>> linspace(0,1,11)*pi % donne le même résultat
>> logspace(0, 2, 11) % crée un vecteur à 11 valeur espacées logarithmique-
% ment
entre 100 et 102
ans =
Columns 1 through 7
1.0000 1.5849 2.5119 3.9811 6.3096 10.0000
15.8489
Columns 8 through 11
25.1189 39.8107 63.0957 100.0000

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

III.2 Adressage et indexage


Dans Matlab, les indices d’un tableau commencent toujours à 1.
>> x(0)
??? Index into matrix is negative or zero. See release notes on changes to
logical indices.
>> x(3) % 3ème élément du vecteur x
ans =
7
>> x(2:4) % un bloc de composantes
ans =
4 7 1
>> x ([2 3 6 1]) % une sélection de composante (on les désigne avec
% un autre vecteur !)
ans =
4 7 8 6

III.3 Combinaisons et opérations de vecteurs


a) accolage de deux vecteurs :
>>a = [1:3]
a =
1 2 3
>> b =[10:10:30]
b =
10 20 30
>> c= [a b]
c =
1 2 3 10 20 30
On peut faire plus compliqué :
>> d = [a(2:-1:1) b] % on accole b avec une portion de a dans l’ordre
% renversé
d =
2 1 10 20 30

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

IV.1 Créations de matrices


Un matrice est un ensemble de lignes comportant toutes le même nombre de colonnes Matlab,
depuis la version 5, supporte les matrices à n dimensions (n>2)

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

IV.3 Opérations scalaires-matrices


Une telle opération agit sur chaque élément de la matrice
>> m2’*10 % de même : 4*m2 ou m2–10 ou m2/4
ans =
10 110
20 120
30 130
Une exception :
>> m2^2
??? Error using ^
Matrix must be square.

Dans ce cas, Matlab veut calculer le produit matriciel m2* m2


La solution est l’usage du point qui force l’opération sur chaque élément :
>> m2.^ 2
ans =
1 4 9
121 144 169

IV.4 Opérations entre matrices


a) Multiplications
>> m1 % rappelons la définition de m2
m2 =
1 2 3
11 12 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.

Multiplication élément par élément :


>> m2.*m3 % (m2 et m3 doivent avoir les mêmes dimensions)
ans =
1.0000 4.0000 9.0000
11.0000 37.9473 130.0000
b) Divisions
>> m2/m3 % division matricielle à droite, c’est la même chose que
% m2*inv(m3), voir help de mrdivide pour plus d’explications si m2
% n’est pas carrée.
ans =
-0.5000 -0.8257 -0.4500
0 0 0
0.5000 0.9419 1.1500
Division élément par élément :
>> m2./m3 % chaque élément de m2 est divisé par l’élément équivalent de m3
ans =
1.0000 1.0000 1.0000
11.0000 3.7947 1.3000
>> m2\m3 % chaque élément de m3 est divisé par l’élément équivalent m2
ans =
1.0000 1.0000 1.0000
0.0909 0.2635 0.7692
>>m3./m2 % chaque élément de m3 est divisé par l’élément équivalent m2
ans =
1.0000 1.0000 1.0000
0.0909 0.2635 0.7692
c) autres
>> x= [1 2 3 ; 3 3 1 ; -2 –1 4] ;
>> det(x) % déterminant d’une matrice
ans =
6
>> inv(x) % inverse d’une matrice
ans =
-2.1667 1.8333 1.1667
2.3333 -1.6667 -1.3333
-0.5000 0.5000 0.5000

IV.5 Matrices particulières


>> ones(3) % matrice où tous les éléments sont 1
ans =
1 1 1
1 1 1
1 1 1

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

IV.6 Caractéristiques des matrices / indexation


a) caractéristiques
>> size(m3) % dimensions
ans =
3
>> length(m3) % équivalent à max (size (m3)) : dimension maximum
ans =
1
b) Indexation
Accès à un élément de la matrice :
>> x = [0 1 2 ; 3 4 5] ;
>> x(2,1) % élément de la 2ème ligne en 1ère colonne
ans =
3
Accès à une colonne d’une matrice :
>> y = x(:,1) % éléments 1ère colonne de toutes les lignes
y =
0
3
Accès à une ligne d’une matrice :
>> y = x(1,:) % éléments de toutes les colonnes de 1ère ligne
y =
0 1 2
Accès à une partie d’une matrice :
>> y = x(:,2:3) % éléments de la 2ème à la 3ème colonnes de toutes les lignes
y =
1 2
4 5

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

V Gestion du système de fichiers/compléments sur les


entrées-sorties

V.1 Gestion du système


Matlab utilise la syntaxe d’Unix (DOS est assez semblable à ce niveau) pour la gestion des
dossiers. Ainsi on peut connaître le dossier courant et se déplacer dans l’arbre des dossiers à
l’aide des commandes suivantes :
Pwd ou cd permet de connaître le dossier courant ie le chemin absolu du répertoire courant
(print Working Directory)
cd.. remonte au dossier supérieur
cd sub sélectionne le dossier inférieur nommé sub
ls ou dir donne la liste des fichiers dans le dossier courant
Exemples :
>> pwd
C:\matlab
>> cd
C :\matlab
>> cd C:\matlab\cours

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

V.2 Fonctions d’entrées/sorties


Matlab offre différentes façons de sauvegarder et de restituer des données. Les commandes
save et load sont les plus utilisées .
>> save nom_fic % sauvegarde toutes les variables de l’espace de travail dans le fichier
% disque « nom_fic ». Si aucun nom n’est spécifié, la sauvegarde est
% réalisée dans le fichier « matlab.mat » par défaut.
>> save nom_fic var1 var2 % sauvegarde les variables spécifiées.
>> load nom_fic % charge en mémoire les variables sauvegardées à l’aide de “save” dans
% le fichier.mat nommé : “nom_fic”.
Lors de la sauvegarde, si le fichier existe déjà, il est écrasé. Si les nom du fichier est une
variable, utiliser la syntaxe suivante :
>> save (var_nomfic,’ var1’,’ var2’,….)
De même, lors de la récupération des variables, si le nom fichier est la avaleur d’une variable,
on utilisera :
>> load(var_nomfic)
La sauvegarde peut être réalisée dans un fichier texte plutôt que binaire, en utilisant la syntaxe
suivante :
>> save nomfic var1 –ascii % fichier texte (8 bits pour les nombres)
>> save nomfic var1 -ascii –double % fichier texte (16 bits pour les nombres)
Attention dans ce cas, il est préférable de na sauvegarder qu’une seule variable à la fois dans
un fichier, sinon la récupération sera plus compliquée.
Une matrice ou variable stockée dans un fichier texte peut être récupérée par la commande
load. Le nom de la variable obtenue est celui du fichier texte.
Exemple :
>> save mes_variables A B % sauve A et B dans un fichier mes_variables.mat
% la sauvegarde se fait en binaire
>> clear % élimine les variables en mémoire
>> who % vérifie que le workspace est vide
>> load mes_variables % charge les variables contenues dans le fichier
% mes_variables.mat dans le workspace.

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

VI.1 Contrôler l’exécution


Matlab dispose des instructions de contrôle suivantes : for , while et if. La syntaxe de chacune
de ces instructions est semblable à celle des langages classiques.
a) L’instruction for
for compteur = valdébut : pas : valfin
instructions
end
for n = 1:5
for m = 5:-1:1
A(n,m) = n^2 + m^2;
end
disp (n)
end
>> A
A =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
b) L’ instruction while
While conditions
instructions
end
c) L’ instruction if –then –else
if expression1
(commandes à exécuter si expression1 est « vrai »
elseif expression2
(instruction à exécuter si expression2 est « vra »)
else
(commandes à exécuter si aucune expression est « vrai »)
end

VI.2 Opérateurs logiques et de relation


Des expressions rationnelles ou logiques peuvent être utilisées exactement comme dans les
langages classiques.

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.

VI.3 Les fichiers M (M- Files ) ou scripts


Un script (ou M-file) est un fichier (message .m par exemple) contenant des instructions
Matlab. L’extension .m est mise automatiquement lors de la sauvegarde du programme (menu
File Save ou Save as ).
Voici un exemple de script :
% message .m affiche un message
% ce script n’affiche le message que s’il fait beau
beau_temps = input (‘quel temps fait-il ?‘) ; % variable entrée au clavier
if beau_temps ~= 1
disp(‘Hello, il fait beau‘)
end
return % (pas nécessaire à la fin d’un M-file )
Sous la fenêtre de commande :
>> message
Hello, il fait beau
>> edit % lance l’éditeur de Matlab. Voir aussi la barre d’outils
Tout autre éditeur de texte convient aussi.
Les M-files sont exécutés séquentiellement dans le « workspace », c’est à dire qu’ils peuvent
accéder aux variables qui s’y trouvent déjà, les modifier, en créer d’autres etc.
On exécute un M-file en utilisant le nom du script comme commande.

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é).

VI.5 Recommandations pour programmer


• choisir des noms significatifs pour les variables et les fonctions
• documenter les fonctions pour l’aide en ligne et la clarté
• vérifier le nombre et le type des arguments d’appel et de retour des fonctions
• n’utiliser les boucles for et while que si nécessaire, elles peuvent souvent être
remplacées avantageusement par des opérations et fonctions matricielles.
• Préférer les algorithmes itératifs aux algorithme récursifs.
Exercice 4 :
Ecrivez une fonction ‘’ indice _ max’’ qui retourne l’indice de l’élément le plus grand d’un vecteur
A donné comme argument d’entrée. On pourrait aussi utiliser la fonction « max » de matlab.
Exemple :
La fonction suivante effectue une élimination de Gauss, afin de résoudre le système Ax = b. On
désire pouvoir passer en argument la matrice A et le vecteur b, pour obtenir le vecteur x
résolvant le système Ax = b. La première ligne de la fonction doit préciser quelles sont les
variables entrantes et sortantes, ainsi que leurs noms. Dans ce cas, c’est ce que fiat la ligne :
function [ X] = gaussElim (A,b). Pour avoir plus de variables en entrée ou sortie, il suffit de les
rajouter en les séparant par une virgule.
Il ne reste plus qu’a copier le texte suivant dans un fichier que l’on sauvegardera sous
gaussElim.m.
function [X] = gaussElim(A,b)
% Fichier gaussElim .m
% Cette fonction effectue l’élimination, de Gauss
% Sur le système donne
% i.e., soient A et b elle peut trouver x,
% AX =b
% pour exécuter cette fonction, il faut spécifier :
% A - la matrice du membre de droite
% b - le vecteur du membre de gauche
%
% La fonction retourne x par élimination de Gauss.
% ex : [ X] = gaussElim (A ,b)
N = max (size (A) ) ;
% Elimination de Gauss

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.

VI.8 Sauvegarde des figures


Matlab permet la sauvegarde des figures crées pour une modification ultérieure (format Matlab)
ou bien en vue de l’exportation sous des logiciels de mise en forme (format image).
• sauvegarde normale pour une modification ultérieure (format Matlab, utilisable
uniquement sous Matlab :
o .fig format
Sous la fenêtre graphique, menu Filesave asnom_du_fichier .fig.
Il suffit ensuite de taper open nom_du_fichier.fig sur la fenêtre de commande
ou bien menu Fileopennom_du_fichier.fig pour récupérer la figure
identique et modifiable classiquement.
o .mat format.
Format similaire au .fig format, mais crée en plus du fichier. fig, un fichier .m
qui peut être appelé depuis la fenêtre de commande ou depuis un script.
• sauvegarde sous des formats image, pour exportation sous d’autres logiciels (word,
powerpoint, photoshop, etc …) :

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

VII.1 Fits et interpolations


a) Fits de polynôme : (interpolation. m)
>> 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] ;
>> p=polyfit (x, y, 2) % fit un polynôme du deuxième degré
p =
- 9.8108 20.1293 -0.317
La solution est y = -9.8108 x2 + 20.1293 x - 0.0317
Regardons le résultat :
>> xi = linspace (0, 1, 100) ;
>> yi = polyval (p,xi) ;% évaluation du polynôme définit par les coefficients
% p aux points xi, le résultat est placé dans yi
>> plot(x, y, ‘o‘, xi, yi, ‘--‘) ;
b) fit de fonctions splines :
Si, pour mieux s’approcher des points à fitter, on utilise des polynômes de degrés élevés, on
obtient des oscillations (Exercice : essayez de tels fits en reprenant les vecteurs x et y donnés
ci/ dessus).
Les splines sont une manière de résoudre ce problème et d’obtenir de meilleurs fits qu’avec les
polynômes.
Rappel : une spline cubique (la plus fréquente) est composée de segment de polynômes du
troisième degré dont les dérivées premières et deuxièmes sont continues aux points de
jonction.
>> yi = spline(x,y,xi) ;% on fitte une fonction spline sur les points (x,y)
>> hold on % on fixe le graphique afin d’y rajouter une courbe
>> plot(xi, yi, ‘r– ‘ )% on rajoute la spline
>> title( ‘ Fits : polynôme degré 2 ( pointillé) ; spline(ligne continue)‘ )

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

VII.3 Algèbre linéaires

a) Systèmes d’équations linéaires


Le système d’équation linéaires
a11*x1 +a12*x2 + … + a1n*xn = b1

an1*x1 +an2*x2 + … + ann*xn = bn
s’écrit sous forme matricielle : A* x = b
Il a une solution unique ssi rank(A) = rank ( [ A b] ) = n
On peut résoudre ce système par un élimination de Gauss (voir plus haut) mais plus
simplement, la solution peut –être obtenue en utilisant la fonction ‘’ inv’’ d’inversion de matrice :
>> x = inv(A)* b
ou en utilisant ‘’ \ ‘’ la division matricielle par la gauche
>> x = A\b
Cette seconde méthode donne des résultats plus précis, lorsqu’elle peut être appliquée.

b) Systèmes à valeurs propres et vecteurs propres


La fonction eig permet d’obtenir vecteurs et valeurs propres d’une matrice

VII.4 Zéros et minima de fonctions ; fits


a) Recherche des zéros d’une fonction
hump est une fonction prédéfinie dans Matlab

40
MatLab1 _ fig 21

>> x = fzero ( ‘ humps ‘ , 2 .) % appelle fzero (fonction à _ étudier, solution_ estimée)


x=
1.2995496825842
Attention, fzero ne retourne qu’un zéro

% recherche les points où humps (x) = 60


>> fzero ( ‘ humps (x) – 60 ‘ , [0 .2 0. 3] ) % on peut donner un intervalle
ans =
0.22497151787552
>> fzero ( ‘ humps (x) – 60 ‘ , [0 . 3 0 . 4] )
ans =
0.376994647486211
>> fzero ( ‘ humps ‘ (x) – 60 ‘ , [ 0 . 2 0 . 4 ] )
??? Error using fzero
The function values at the interval endpoints must differ in sign .

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.

Fonctions à une dimension (modèle à 1 paramètre) :


>> fminbnd ( ‘ humps ‘ , 0, 1 ) % cherche le minimum de la fonction humps entre 0 et 1
ans =
0.63700873404437
Ici également, fminbnd ne retourne qu’un seul minimum :
>> fminbnd ( ‘ cos ‘ , 0, 6 )
ans =

3.14159268915185
>> fminbnd ( ‘ cos ‘ , o, 15)
ans =
9.42477753165182

Fonctions à plusieurs dimensions (modèles à plusieurs paramètres ) :


Dans ce cas, on utilise fminsearch, de manière fort semblable à fminbnd.

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)

d) Régression multi- linéaire


Il souvent utile de décrire par une relation mathématique, le lien entre une réponse y et des
variables X1, X2, X2, …
On s’intéresse ici au cas où les variables Xi ne sont pas aléatoires. On cherche à écrire la
réponse y de la forma :
Y = f (Xi, A) + ei
A vecteurs des coefficients du modèle
ei variable d’écart aléatoire, de moyenne nulle
Dans le cas où les écart ei suivent une loi normale de moyenne 0 et de variance σ ^ 2 et sont
de plus indépendants, le critère « des moindres carrées » fournit une estimation de A qui donne
la meilleur estimation de y pour un ensemble de X donnés.
Nous adpterons la notation suivante :
Y : vecteur des observations
A : vecteur des coefficients
E : vecteur des résidus
X : vecteur des expériences
On cherche à établir une relation du type : y = a0 + a1X1 + a2X2 + …. +AKXK
On doit alors résoudre l’équation matricielle : Y = XA + E. A est l’inconnue dont on cherche
l’estimation Ä telle quelle que le résidu soit minimal au sens des moindre carrés.
Le principe consiste à annuler la dérivée de EtE par rapport à A.
Si la matrice XtX n’est pas singulière, on en déduit l’estimation de A :
Ä = (XtX)–1 XtY
Le coefficient de corrélation multiple est par définition :

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.

function [ A, R, DS] = rml (X , Y)


% Régression linéaire multiple
if nargin ∼ = 2
help rml
error ( ‘ le nombre d’ ‘ arguments est incorrect ‘ )
end
% dimensions

[ nX, cX] = size (X) ; [nY , cY] = size (Y) ;


Xtemp = [ ones (nX , 1 ) X ] ;
% test si les colonnes sont indépendantes
if ( Xtemp ‘ * X temp ) = = 0
error ( ‘ présence de colonnes dépendantes ‘ )
end
% estimation du vecteur des coefficients
A = inv (Xtemp ‘ * X temp ) * Xtemp ‘ * Y ;
% vecteur moyenne des observations
Ymean = mean (Y) ;
% vecteur calculé
Ycalc = Xtemp * A ;

% 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

VII.5 Filtrage de signaux


Le filtrage des signaux est un très vaste domaine. On trouvera une série de filtres prêts à
l’emploi dans divers toolbox. Citons les fonctions :
conv – convolution
filter – 1D Digital filter
filter 2 –2D Digital filter
latcfilt –Lattice filter
firl , fir2...-Window based FIR filter design (Finite Impulse Response)
medfilt – 1D median filtering
besself – Bessel analog filter

Exemple : Utilisation simple de filter :


Filtrage d’un signal bruyant avec une fonction carrée constante :

% TEST _FILTER. M test de la fonction filter


% Filtrage d’un signal bruyant avec une fonction
% carrée de largeur 2*m + 1.
Clear
Figure (1)
clf

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 .

VII.6 Probabilité et statistiques


De nombreuses fonctions existent sous Matlab pour les calculs de probabilités et de statiques.
En particulier, Statistics Toolobox contient une gamme très complète d’outils statistiques. Nous
ne traiterons dans cette partie, que des fonctions de bases.
max valeur max
min valeur min
mean valeur moyenne
median valeur médiane
std écart type

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

La fonction inverse erfinv, permet d’obtenir la valeur de z telle que P ( 0 <Z<z ) ∝

>> a = 0 . 1915
>> z = sqrt (2) * erfinv ( 2*a )
z=
5001

Intervalle de confiance, loi normale :


Des essais en laboratoire sur 32 voyants utilisés dans divers appareils conduisent aux durées
de vis en heures suivantes :

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

Nous allons dans ce qui suit :


Calculer l’estimation ponctuelle de la durée de vie moyenne pour l’ensemble de la production.
Calculer la variance de l’échantillon et l’écart type de la moyenne
Estimer à l’aide d’un intervalle de confiance à 95% , la durée de vie moyenne de l’ensemble de
la production.

Fichier int _ conf .m

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 :

% LinearProg - - Programmation linéaire en Matlab : fonction LINPROG


%( D’après l’exemple du helpdesk)
%
% Trouver x = (x1 , x2, x3, ) qui minimise f (x) = - 5x1 – 4x2 – 6x3
%avec les contraintes :
% x1 – x2 + x3 <= 20,
% 3x1 + 2x2 + 4x3 <= 42,

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

% demande s’il était possible d’utiliser une stratégie plus adéquate.


%
%La méthode présentée ici est basée sur la théorie de l’optimisation
% (minimalisation sous contraintes ) qui consiste, à partir d’un acier de
% départ, à descendre dans l’espace de minimalisation jusqu’au minimum qui
% donnera l’acier aux propriétés optimum. Un bémol : la solution peut toujours
% n’être qu’un minimum local. Il faut donc la vérifier avec soin .
% Un difficulté résolue par cette méthode : le respect de contraintes, qui
% peuvent être de plusieurs types : inégalités, égalités, limites inférieures
% et / ou supérieures.
%
% En Matlab, les problèmes d’optimisation peuvent se résoudre aisément avec
%une des fonctions du ‘’toolbox’’ d’optimisation. Nous utiliserons fminimax.
%
%Pour fminimax, il faut fournir une fonction de ‘’résidus’’, ce que l’on peut
% faire en évaluant :
%
%résidu d’une propriété de l’acier x =
% (propriété désirée –propriété obtenue pour l’acier x ) ^ 2
%
%La fonction (Résidu Proprietes dans l’exemple ci- dessous) doit fournir un

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.

VII.8 Traitement d’image


Grâce au toolbox « Image Processing » , Matlab permet de visionner, modifier, traiter des images
de façon performante.

>> help / image % inventaire des fonctions image disponible


Lecture et visionnage des images :

>> imshow ( ‘nom_de_l’image ‘ ) visualise l’image sans la charger en mémoire


>> imfinfo ( ‘ nom_de_l’image ‘ ) affiche toutes les info concernant l’image, en
particulier la taille, le format, la date de création, code couleur , etc..
>> I = imread ( ‘ nom_de_l’image ‘ ) charge l’image en mémoire dans la matrice I
>> image(I) affiche l’image contenue dans I à l’écran, sans échelle
>> imagesc(I) affiche l’image contenue dans I à l’écran, l’échelle de couleur est calculée
automatiquement
>> I = getimage ; récupère les données à partir d’une image affichée
>> imwrite ( I, ‘ nom_du_fichier ‘ , ‘ format ‘ ) sauvegarde l’image contenue
dans I sous le format spécifié (formats possibles voir help imwrite, en particulier ‘.jpg ’ ou tif ‘ )

Transformation et code couleur :

colormap permet d’obtenir la table de couleur de l’image en cours


ind2rgb transforme une image aux couleurs indexées en couleur RVB
( inversement rgb2ind )
ind2gray transforme une image aux couleurs indexées en échelle de gris (inversement
gray2ind)
rgb2gray transforme une image aux couleurs RVB en échelle de gris (inversement
gray2rvb)
isgray retourne 1 si l’image est en échelle de gris (de même isrvb, isind)

Exemple : l’image tress.tif est en mémoire de Matlab

>> imshow ( ‘ moon . tif ‘ ) % visionne l’image


>> t = colormap ; % récupère la bonne table de couleurs pour l’affichage
>> I = imread ( ‘ moon.tif ‘ ) % charge l’image dans I (couleurs indexes)

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

Histogramme et traitement élémentaires :

>> imhist (I) permet d’obtenir l’histogramme de l’image I


>> histeg (J) égalisation de l’histogramme de I, permet d’améliorer le contraste
et la lisibilité.
>> incontour (I, n) extrait n contours de l’image i
>> edge ( ‘ I, 4 méthode ‘ ) trouve les bords sur l’image I, avec la méthode spécifiée (sobel,
prewitt, etc …)

Exemple : à la suite de l’exemple précédent

>> K = histeg (J)


>> figure ; image (K) % la lisibilité est améliorée

Exemple :

>> I = imread ( ‘ ic.tif ‘ )


>> figure ; subplot ( 2, 1, 1) ; imshow (I) ;
>> subplot (2, 1, 2) ; imcontour (I , 3)

>> I = imread ( ‘ moon . tf ‘ ) ;


>> figure ; subplot ( 2, 1, 1 ) ; imshow (I) ;
>> subplot ( 2, 1, 2 ) ; imcontour ( I )

Exemple :

>> I = imread ( ‘ rice . tif ‘ )


>> I1 = edge ( I , ‘ prewitt ‘ )
>> I 2 = edge ( ‘ I , ‘ prewitt ‘ , vertical ‘ )
>>I 3 = edge ( ‘ I, ‘ canny )
>> figure ; subplot ( 2, 2, 1 ) ; imshow (I);
>> subplot ( 2, 2, 2 ) ; image (I 1) ;
>>subplot ( 2, 2, 3 ) ; image (I 2 ) ;
>> subplot ( 2, 2, 4 ) ; image (I 3 ) ;

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

Soit x (i, j ) la avaleur du pixel sous jacent de l’image originale


Soit x’ (i’, j’ ) la valeur du pixel dans le motif.
On veut corréler les pixels du motif avec ceux de l’image sous- jacente. Pour, cela on doit
d’abord moyenner les pixels sous jacents de l’image, soit x la valeur obtenue
Idem pour le motif, soit x’ la valeur obtenue.

La corrélation est alors données par

Plus exactement :

54
Les facteurs de normalisation du dénominateur permettent d’obtenue une valeur 1 pour une
corrélation parfaite (motif = image originale).

N.B. : Attention aux indices et aux bords de l’image


On pourra faire des itérations en faisant tourner le motif chaque fois d’un petit angle à choisir
convenablement (fonction imrotate)
Pour extraire le motif, visualiser l’image originale avec images et repérer la plage des indices
des pixels du motif. L’extraction se fait ensuite comme une simple extraction de sous-matrice
(on peut aussi utiliser la fonction imcrop).

VIII Intégration numérique

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.

VIII.2 Méthodes de base (cas d’intégrale simple ou double)

VIII.2.1 Utilisation des fonctions Matlab quad, quad8


Matlab (Toolbox) fournit deux méthodes d’intégration numérique de type adaptatif et une
méthode pour les intégrales doubles. La fonction quad utilise la méthode de Simpson et la
fonction quad8 utilise les formules de Newton-Cotes à l'ordre 8. Ces deux fonctions sont
utilisées de la façon suivante :
• quad('fonction_f',a,b)
• quad('fonction_f',a,b,tol)
• quad('fonction_f',a,b,tol,trace)
Dans la première forme, la tolérance 'tol' qui correspond à l'erreur relative, elle est
considérée égale à 0,001 par défaut. Ainsi, le calcul quadratique de l'intégrale est réitéré jusqu'à
ce que la tolérance soit satisfaite. Si la 3ème forme est utilisée avec une valeur non nulle de
'trace', un graphique d'évolution des itérations sera affiché sur l'écran. Quand à la fonction
'quad8', elle est utilisée de la même manière que la fonction 'quad' dans les 3 formes
d'expressions précédentes.
La 'fonction_f' peut être déclarée par inline ou par la création d’un M-file décrivant la
définition de la fonction fonction_fOn décrit dans l’exemple qui suit l’utilisation de ces deux
définitions pour la description de la fonction ‘fonction_f’.
Exemple 1 : Utilisation de quad pour intégrer numériquement la fonction f(x) = x2 + 2x – 1 sur
l’intervalle [-10, 8].
>> f = inline(‘x.^2+2*x-1’); % utilisation de inline pour définir la fonction à intégrer
>> I = quad(f, -10, 8) % intégration de f avec quad sur l’intervalle [-10, 8]

55
I=
450

% Définition de la fonction fun en M-file (à sauvegarder sous le nom fun.m


function f = fun(x)
f =x.^2+2*x-1;
>> I = quad(‘fun’, -10, 8) % intégration de fun avec quad sur l’intervalle [-10, 8]
% on passe ‘fun’ (ne pas oublier les deux quotes) en 1ère
% paramètre de quad.
I=
450

VIII.2.2 Méthode des trapèzes


Soit f(x) la fonction à intégrer sur [a, b]. L’intégrale I de f(x) s’écrit en utilisant la méthode
des trapèzes :

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 :

VIII.2.4 Utilisation de la fonction Matlab dblquad (cas d’intégrale double)


La fonction dblquad permet d’effecteur le calcul d’une intégrale double et elle s’utilise de
la manière suivante :
• dblquad('fonction_f',a1,b1,a2,b2,tol,méthode) ;
Exemple 3 : Utilisation de dblquad pour intégrer numériquement la fonction
f(x,y) = exp( -x2 - :y2) pour x appartenant à l’intervalle [0, 5], et . pour y appartenant à
l’intervalle [0, 5].
>> f = inline(‘exp(-x.^2 –y.^2’); % utilisation de inline pour définir la fonction f
>> I = dblquad(f, 0, 5, 0, 5, [],’quad8’) % intégration de f avec dblquad, méthode=quad8
I=
0.78540

VIII.2.5 Intégrer un vecteur : trapz


Note : ‘’humps‘’ est une fonction numérique prédéfinie dans Matlab.
>> x = linspace (-1, 2, 1000) ;
>> y = humps(x) ; plot (x, y)

58
Matlab _ fig 18

>> area = trapz (x, y)


area =
26.3450

VIII.2.6 Intégrer une fonction :


>> quad (‘humps’ , -1, 2) % intègre à 6 chiffres significatifs
ans =
26.3450
>> quad8 (‘humps‘ , -1, 2 ) % intègre à 8 chiffres significatifs
ans =
26.3450
Vous pouvez intégrer vos propres fonctions :
Supposons que vous avez écrit le script suivant dans le fichier myfun1.m
function y = myfun1 (x)
% myfun1 est une fonction simple définie dans le fichier myfun1.m
y = exp (-x.^2).*cos(x) ; % La fonction peut traiter des vecteurs
Exercice 10 : Intégration simple
Tracer myfun1 entre 0 et pi, et l’intégrer sur le même intervalle
Exercice 11 : Intégration double
a. Ecrivez une fonction myfun2 de votre choix à deux variables.
b. Dessinez –là avec une fonction graphique 3D. Indication : utiliser mesgrid et mesh
c. Evaluez son intégrale double avec dblquad.

VIII.2.7 Méthode de Monte Carlo


La méthode est basée sur le résultat probabiliste suivant :
Si Xn est une suite de variables aléatoires indépendantes, de même loi, avec E(|X|) < ∞, alors :

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 Equations différentielles ordinaires

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

où f(y,x) est une fonction de y et de x, et la seconde équation représente la condition initiale


sans laquelle la solution de l’équation différentielle ne peut être évaluée.

VIII.3.2 Méthode d’Euler


La méthode la plus simple est la méthode dite d’Euler :

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

VIII.3.4 Équations différentielles du second ordre


Ces équations sont du type :

u" (t ) + a (t ) u ' (t ) + b(t ) u (t ) = s (t )



u ' (0) = u ' 0
u (0) = u
 0

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ù :

v' (t ) + a (t ) v(t ) + b(t ) u (t ) = s (t )



v(0) = u ' 0
Les conditions initiales deviennent :

u ' (t ) = f1 ( u , v, t ); u (0) = u 0

v' (t ) = f 2 ( u , v, t ); v(0) = u ' 0

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

M u"+ B u ' u ' + k u = 0 M = 10


 
Résoudre l’équation différentielle suivante : u (0) = 0 avec B = 50
u ' (0) = 1 k = 200
 
On donne le pas h=0.05 :
1. Calculer u(t) pour 0 ≤ t ≤ 0.1 en utilisant la méthode d’Euler à l’ordre 1 (calcul manuel)
2. Calculer, en utilisant un algorithme dans Matlab, la solution u(t) de l’équation
différentielle précédente pour 0 ≤ t ≤ 5.
Tracer l’évolution de u(t) (toujours avec un pas h=0.05).
La solution à ce problème.
1. Le système précédent peut être écrit sous la forme :

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 :

u1 = u 0 + h v0 = 0 + 0.05 × 1 = 0.05



v1 = v0 + h (−av0 v0 − cu 0 ) = 1 + 0.05 × (−5 × 1 × 1 − 20 × 0) = 0.75
Pour t = t2 =2 h =0.1, on a :

u 2 = u1 + h v1 = 0.05 + 0.05 × 0.75 = 0.0875



v 2 = v1 + h (−av1 v1 − cu1 ) = 0.75 + 0.05 × (−5 × 0.75 × 0.75 − 20 × 0.05) = 0.5594
2. Sous une forme vectorielle, l’équation précédente s’écrit :

 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.

Figure 2 : évolution des solutions u(t) et v(t) en fonction du temps

VIII.3.6 Les différentes routines sous Matlab


Dans ses versions récentes, Matlab contient un ensemble de fonctions pour résoudre quasiment
tout problème décrit par des ODE du type suivant, avec des conditions initiales définies.
La routine ‘’ ode45 ’’ est la routine de base. Elle implémente une variante de la méthode de
Runge-Kutta qui, elle–même est un raffinement de la ;méthode très simple d’Euler qui utilise la
dérivée de f à t pour évaluer f à t + dt.
D’autres algorithmes sont à disposition . par exemple :
ode23 : formule de Rosenbrock à l’ ordre 2
ode113 : Adams-Bashforth–Moulton
Matlab offre aussi une démo (pas très explicité) sur la solution des ODE.
>> odedemo
La stratégies pour résoudre les ODE est d’écrire une fonction (par exemple la fonction ‘’myode’’,
contenue dans le M-file myode.m) qui décrive le membre droit de l’équation à résoudre.
On peut alors obtenir la solution, dans un intervalle t = [tinitial, tfinal] et pou des conditions
initiales définies dans y0 en utilisant ode45.

Exemple : Refroidissement d’un corps


Le corps à la températures y0 = 100 est plongé dans un milieu de température s = 10. On
suppose le taux de refroidissement K constant = - 0.1.

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

VIII.4 Méthode de Runge-Kutta


La méthode d’Euler est bancale, elle ne s’appuie sur la valeur de la dérivée qu’à l’extrémité inférieure de
l’intervalle. Si on considère un ou plusieurs points intermédiaires, on obtient des méthodes dites de Ringe-Kutta, qui
sont parmi les plus populaires.
VIII.4.1 Méthode de Runge-Kutta du second ordre
RK2 dite méthode du point central. On effectue un demi saut d’Euler jusqu’à x+h/2, et en ce point on
calcule la pente de la dérivée qui va nous permettre d’effectuer le saut complet :
k1 = h f ( x n , y n )
1 1
k 2 = h f ( xn + h, y n + k 1 )
2 2
y n +1 = y n + k 2 + O(h )3

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.

IX Méthode des différences finies

IX.1 Présentation du problème


Problème de Dirichlet homogène. :
 − ∆u = f dans Ω,

 u=0 sur Γ.
Ω est un ouvert borné de IRd avec d=1, 2, 3, … et notons par Γ sa frontière. f fonction suffisamment
régulière (élément de L2(Ω) pour fixer les idées).
Le problème de Dirichlet homogène modélise par exemple l’équilibre d’une membrane élastique sous un
chargement ou encore les transferts thermiques dans un corps conducteurs de chaleur.

Objectif : obtenir une solution approchée du problème de Dirichlet homogène par une méthode d’approximation
numérique.

Deux méthodes numériques :


• méthode des différences finies : simple, mais assez limitée et peu adaptée aux domaines Ω pour une
dimension d’espace ≥ 2*.
• Méthode des éléments finis : mise en œuvre moins immédiat, mais elle repose sur un cadre
conceptuel plus profond et robuste.

68
IX.2 L’approximation par différences finies et ses limites

IX.2.1 Approximation en une dimension d’espace


Cas de la dimension d’espace égale à 1 avec : Ω =]0,1[. Recherche de la solution u de :

 − u" = f sur ] 0,1[,


 (1)
 u (0) = u (1) = 0.

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).

IX.2.3 Application et fonction Matlab associée


Exemple : intégrer le problème suivant ::
2
y" ( x) = ; x ∈ [0, 1]
(1 + x) 3
avec y (0) = 1 et y (1) = 1 / 2.
La solution exacte est :
1
y ( x) =
(1 + x)
On calculera numériquement les valeurs de y(x) pour x=0, 0.1, 0.2, 0.3, …, 1, en prenant pour N les
puissances successives de 10. En prenant le cas N=10, on a :
h = 1/10 ;
x0=0, y0=1 et x10=1, y10=1/2.
Première équation :
(y0-2y1+y2)/10-2)=f(x1) = f(1/10)=2/(1+1/10)3
d’où
y0 – 2y1 + y2 = 20/1331, et comme y0 =1, on a :
-2y1 + y2 = -1311/1331.

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.

De même pour les autres équations:


y2-2y3 + y4 = 20/2197.
y3-2y4 + y5 = 5/686.
y4-2y5 + y6 = 4/675.
y5-2y6 + y7 = 5/1024.

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 =

x_n y_n Solution exacte Erreur

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 =

x_n y_n Solution exacte Erreur

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-1,j i,j i+1,j


72

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

Opérateurs courants Opérations sur les Opérateurs Opérateurs Logiques


Tableaux Relationnels
+ addition + addition < inférieur à & et
- soustraction - soustraction > supérieur à | ou
* multiplication .* multiplication <= inférieur ou égal à ∼ non
^ puissance .^ puissance >= supérieur ou égal xor ou exclusif
à
/ division à droite ./ division à droite = = égal à
\ division à gauche .\ division à gauche ∼= différent de
‘transpose conjugué
.’ transpose

Instruction de contrôle Instruction spécifiques


if test conditionnel input indicateur d’attente d’entrée
else complète if menu génère un menu de choix pour
l’utilisateur
elseif complète if pause attente
end terminaison de if, for et while function définition de fonction
for instruction de répétition avec compteur global définit les variables comme globales
while instruction de répétition avec test Caractères spéciaux
break interrompt une boucle for ou while = assignation
return retour . point décimal
error affiche un message et interrompt … indique une ligne suite
l’exécution
, séparateur d’arguments ou d’instructions

1
; fin de lignes (matrices) ou suppression de
l’affichage
% commentaires
: manipulation de sous matrices génération de
vecteurs

Variables prédéfinies Matrices prédéfinies


ans nom donné à l’évaluation d’une expression zeros matrice de 0
sans assignation
realmax plus grand nombre flottant ones matrice de 1
realmin plus petit nombre flottant positif eye matrice identité
pi diag matrice diagonale
i, j rand nombres aléatoires (répartition uniforme)
inf randn nombres aléatoires (réparttion normale)
NaN Not a Number Fonctions trigonométriques
flops nombre d’opérations par seconde sin, asin, sinh, asinh
etime durée d’exécution cos, acos, cosh, acosh
size renvoie la taille d’une matrice tan, atan, tanh, atanh
length renvoie la longueur d’un vecteur cot, acot, coth, acoth
disp affiche une matrice de texte

Fonctions mathématiques élémentaires Fonction prédéfinies


abs valeur absolue ou module bessel fonction Bessel
angle argument d’un complexe beta fonction beta
sqrt racine carrée gamma fonction gamma
real partie réelle rat approximation par un rationnel
imag partie imaginaire rats format de sortie pour rat
conj complexe conjugué erf fonction erreur erf
gcd PGCD erfinv inverse de erf
lcm PPCM ellipke intégrale elliptique complète
round arrondi à l’entier le plus proche ellipj fonction elliptique de jacobie
fix troncature Expint intégrale exponentielle pour n =1
floor arrondi vers - log2logarithme base 2 ou décomposition
mantisse, exposant
ceil arrondi vers + pow2 calcule 2 puissance y
sign signe de fft FFF de dimension 1 (fréquences de 0 à 1 )
rem reste de la division fft2FFT bidimensionnelles

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

Polynômes Equations non linéaires et Optimisation


poly construit un polynôme à partir des fmin minimisation d’une fonction d’une
racines variable
roots calcul des racines fmins minimisation d’une fonction de plusieurs
variables
polyval évaluation en un point Fsolve résolution d’un système d’équations
non – linéaires
polyvalm évaluation en une matrice de points fzero zéro d’une fonction d’une variable
conv multiplication
deconv division
residue décomposition en éléments simples et
residus
polyder différentiation
Différences finies et Interpolation Analyse de données par colonne

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

Graphiques 2D Annotation de graphiques Graphiques 3D


plot graphe linéaire title titre du graphique mesh surface maillée
loglog graphe log –log xlabel légende abscisse surfl surface 3D à facettes
semilogx graphe semi –log(x) ylabel légende ordonnée plot3 dessin de lignes et points
en 3D
semilogy graphe semi-log (y) zlabel légende cote contour dessin 2D des équi-
niveaux
polar graphe (coord.polaires) grid dessin d’une grille contour3 dessin 3D des équi-
niveaux
bar histogramme batons text texte clabel étiquettes des équi-
niveaux
stairs fonction en marches Contrôle des fenêtres pcolor dessine en psedocouleur
d’escalier graphiques
errorbar graphe avec barres figure ouvre une fenêtre Apparence des graphiques
d’erreur graphique
hist histogramme hold gère la surimpression view spécifie l’angle de vue
compass représentation polaire ishold état de la viewmtx matrice de
(module, argument) surimpression transformation
feather représentation linéaire subplot sous-fenêtre hidden gère les lignes cachées
(module, argument) graphiques
fplot graphe d’une fonction axis contrôle de
l’apparence et de l’échelle
des axes
Sauvegarde et copie graphique
print imprime ou sauvegarde
dans un fichier

Vous aimerez peut-être aussi