Cours Matlab
Cours Matlab
Cours Matlab
AU: 2016-2017
Objectifs du cours :
Introduction
Les sciences font régulièrement appel aux mathématiques afin de modéliser les
problématiques. Si les mathématiques offrent un cadre formel, riche et puissant, l’ingénieur
a la possibilité d’utiliser des logiciels afin de l’aider à résoudre les problèmes. On
rencontre, pour résumer, deux types de logiciel scientifique :
1- Les logiciels de calcul formels (les plus connus étant Maple et Mathematica) ;
2- Les logiciels de calcul numériques (Matlab est le plus utilisé, mais il existe aussi Scilab,
Introduction
Remarque
Il n’y a pas de logiciel meilleur qu’un autre, les deux catégories sont complémentaires et
dépendent de l’application visée.
Les logiciels de calculs numériques sont très répandus dans l’industrie et la recherche,
car ils permettent de faire du prototypage rapide, c’est `a dire de pouvoir développer une
application très rapidement afin de l’´evaluer, avant de lancer un processus industriel.
Calcul numérique approché
L'objet de cette section est de mettre en évidence les principales difficultés liées à la pratique
des calculs numériques sur ordinateur.
Tout calcul numérique devrait s’accompagner d’une estimation des erreurs d’approximation
commises.
Exemple :soit un objet valant 100 DH, son vrai prix en dollars est donc de
,
Mais on le trouvera uniquement au prix de =15,24 dollars, l’erreur commise est donc de :
Sources d’erreur
Erreur de troncature
Exemple: dans le calcul numérique de l’exponentiel, l’erreur de troncature
vaut
La valeur exacte du calcul est x = 6,23172179 107 et la valeur calculée est = 6,2317 107.
Sources d’erreur
Erreurs
Erreur absolue
Erreur relative
Si x≠0, l’erreur relative est
/
Chapitre 2:
Présentation du Matlab
Présentation Matlab
Avantages
✓ Facilité d’utilisation, prise en main rapide
✓ Existence de toolboxes utiles pour l’ingénieur (réseaux de neurones,
traitement de signal, Optimisation, Contrôle, etc..)
✓ Possibilité de l’interfacer avec d’autres langages (C, C++, Fortran)
✓ Permet de faire du calcul parallèle.
Inconvénients
✓ Limitation en mémoire
✓ Payant
Présentation Matlab
Alternatives libres
✓ Scilab
✓ Octave
✓ Python
Remarque
Contrairement à Maple, Matlab n’est pas un logiciel de calcul formel (pas de calculs exacts)
Présentation Matlab
2-Premières notions : lancement de Matlab
Exemples d’expressions :
* input(' ') :
Introduire une ou des variables par l’intermédiaire du clavier.
Exemple :
>>z=input(‘texte’); % demande à l’utilisateur de saisir des données numériques à la
suite d’un message ‘texte’ qui s’affiche à l’écran
3- Scripts et fonctions
Pour écrire plusieurs instructions à la fois, il est utile d’utiliser 2 types de fichier (qui portent
l’extension .m)
script M-files : ni entrée, ni sortie et utilise les variables de l’espace de travail.
fonction M-files : contient une fonction qui accepte des arguments en entrée et renvoie
des arguments en sortie et les variables internes sont locales à la fonction
Exemple de script
Fichier exempleScript.m
x=1;
y=2;
z=x+y;
>> x
>> y Renvoie les valeurs des variables x,y et z.
>> z
Les variables déclarées dans le script sont connues
Présentation Matlab
3- Scripts et fonctions
Exemples de fonctions
Fichier SommeEtProduit.m
(x,y) arguments d’entrée
Function [s,p]=SommeEtProduit(x,y)
S=x+y
P=x*y (s,p) arguments de sortie
(end fonction)
Remarque :
Le fichier SommeEtProduit.m doit être dans le répertoire courant
Le nom du fichier.m et le nom de la fonction doivent être les mêmes
Présentation Matlab
3- Scripts et fonctions
Créer des fichiers scripts ou des fonctions / Editeur Matlab
Présentation Matlab
✓Scripts et fonctions : expliquer les différentes étapes de vos programmes (une ligne, un
commentaire)
✓Commentaires additionnels pour les fonctions : décrire les variables d’entrée, les
variables de sortie ainsi que ce que fait votre fonction
Présentation Matlab
4-Variables scalaires
✓ Pas de différents types pour les nombres (Matlab fait lui même les conversions)
>> a=2;
>> b=2.5;
>> c=a*b;
✓ Liste des variables : commande who
>> a=2;
Définition des variables a et b
>>b=5;
>> who ab
4-Variables scalaires
Pour sauvegarder des variables, utilisez la fonction save. Sauvegarder les variable a, b dans le
fichier svar.mat se fait par :
save svar a b
On les recharge par la commande :
load svar
5- Format Matlab
Format numérique : commande format pour afficher des nombres en virgule fixe ou
flottante
6- Calcul matriciel
Soient n et m des entiers positifs. Une matrice à m lignes et n colonnes est un ensemble de m
× n éléments aij, avec i = 1, . . .,m et j = 1, . . ., n, représentée par le tableau
On écrira de manière compacte A = (aij). Si les éléments de A sont des réels, on écrit
× ×
A et A s’ils sont complexes
Les matrices carrées de dimension n sont celles pour lesquelles m = n. Une matrice
n’ayant qu’une colonne est un vecteur colonne, et une matrice n’ayant qu’une ligne est
un vecteur ligne.
Présentation Matlab
6- Calcul matriciel
Pour définir une matrice en MATLAB, on doit écrire ses éléments de la première à la dernière
ligne, en utilisant le caractère ; pour séparer les lignes. Par exemple, la commande :
>> A = [ 1 2 3; 4 5 6]
donne
A=
123
456
c’est-à-dire, une matrice 2 × 3 dont les éléments sont indiqués ci-dessus.
La matrice nulle 0 est celle dont tous les éléments aij sont nuls pour i = 1, . . .,m, j = 1, . . .,
n; on peut la construire en MATLAB avec la commande zeros(m,n).
La commande eye(m,n) renvoie une matrice rectangulaire dont les éléments valent 0
exceptés ceux de la diagonale principale qui valent 1.
La diagonale principale d’une matrice A de taille m×n est la diagonale constituée des éléments
aii, i = 1, . . ., min(m, n).
La commande eye(n) (qui est un raccourci pour eye(n,n)) renvoie une matrice carrée de dimension n
appelée matrice identité et notée I.
Enfin, la commande A = [] définit une matrice vide.
Présentation Matlab
6- Calcul matriciel
Somme et produit de deux matrices
6- Calcul matriciel
Somme et produit de deux matrices
ans =
8 10 12
14 16 18
>> A*C
ans =
94 100
229 244
Présentation Matlab
6- Calcul matriciel
Somme et produit de deux matrices
Remarquer que MATLAB renvoie un message d’erreur quand on tente d’effectuer des opérations
entre matrices de dimensions incompatibles.
Par exemple :
>> A*B
??? Error using ==> *
Inner matrix dimensions must agree.
Présentation Matlab
6- Calcul matriciel
Inverse d’une matrice
Si A est une matrice carrée de dimension n, son inverse (quand elle existe) est une matrice
carrée de dimension n, notée , qui satisfait relation .
Le déterminant d’une matrice carrée est défini par la formule de récurrence (règle de
Laplace)
Présentation Matlab
6- Calcul matriciel
où et est la matrice obtenue en éliminant la i-ème ligne et la
j-ème colonne de la matrice A (le résultat est indépendant du choix de la ligne ou de la
colonne).
En particulier, si A R2×2 on a
det(A) = a11a22 − a12a21;
si A R3×3, on obtient
det(A) = a11a22a33 + a31a12a23 + a21a13a32−a11a23a32 − a21a12a33 − a31a13a22.
6- Calcul matriciel
Inverse d’une matrice
Pour certains types de matrices carrées, les calculs de l’inverse et du déterminant sont très
simples. Par exemple, si A est une matrice diagonale, i.e. telle que seuls les éléments
diagonaux , k = 1, . . ., n, sont non nuls, son déterminant est donné par
.
6- Calcul matriciel
Inverse d’une matrice
Remarquer que cette commande est aussi valide pour des valeurs négatives de m
:dans ce cas, ce sont les diagonales inférieures qui sont concernées.
6- Calcul matriciel
Les matrices triangulaires supérieures et triangulaires inférieures
6- Calcul matriciel
Les matrices triangulaires supérieures et triangulaires inférieures
Par exemple, étant donné la matrice A =[3 1 2; -1 3 4; -2 -1 3],
la commande L1=tril(A) donne :
>> L1=tril(A)
L1 =
3 0 0
-1 3 0
-2 -1 3
6- Calcul matriciel
Pour finir, rappelons que si A ℝn×m, sa transposée AT ℝn×m est la matrice obtenue en
intervertissant les lignes et les colonnes de A.
Pour définir un vecteur colonne v, on doit indiquer entre crochet ses composantes séparées d’un
point-virgule, tandis que pour un vecteur ligne w, il suffit d’écrire ses composantes séparées par des
espaces ou des virgules.
Exemple:
Les instructions v = [1;2;3] et w = [1 2 3] définissent le vecteur colonne v et le vecteur ligne
w, tous les deux de dimension 3.
La commande zeros(n,1) (resp. zeros(1,n)) définit un vecteur colonne (resp. ligne), qu’on notera
0, de dimension n et de composantes nulles. De même, la commande ones(n,1) définit le vecteur
colonne, noté 1, dont les composantes sont toutes égales à 1.
Présentation Matlab
6.1 Vecteurs
Définition:
Un ensemble de vecteurs {y1, . . ., ym} est dit linéairement indépendant
si la relation : α1y1 + . . . + αmym = 0 implique que tous les coefficients α1, . . .,
αm sont nuls
β= (y1, . . . , yn) de n vecteurs linéairement indépendants de ℝn (ou ₵n) est une base de ℝn (ou
₵n). Autrement dit, tout vecteur de ℝn peut être écrit
et les coefficients {wk} sont uniques. Ces derniers sont appelés les composantes de dans la base β. Par
exemple, la base canonique de ℝn est donnée par (e1, . . . , en), où ei est le vecteur dont la i-ème
composante est égal à 1, et toutes les autres sont nulles. Bien que n’étant pas la seule base de ℝn, la base
canonique est celle qu’on utilise en général.
Présentation Matlab
6.1 Vecteurs
Pour un vecteur v à composantes complexes, v’ désigne son transconjugué vH, qui est le vecteur ligne
dont les composantes sont les complexes conjugués de
Dans MATLAB, on peut visualiser un vecteur à l’aide de la commande quiver2 dans ℝ2 et quiver3
dans ℝ3 .
Les commandes MATLAB x.*y, x./y ou x.ˆ2 indiquent que les opérations sont effectuées composante
par composante. Par exemple, si on définit les vecteurs :
7- Fonctions réelles
Cette section traite des fonctions réelles. On cherche en particulier à calculer les zéros (ou
racines), l’intégrale et la dérivée d’une fonction donnée f, définie sur un intervalle ]a,
b[.
La commande fplot(fun,lims) trace le graphe de la fonction fun (définie par une chaîne de
caractères) sur l’intervalle ]lims(1),lims(2)[.
Par exemple, pour représenter f(x) = 1/(1 + x²) sur [ − 5, 5], on peut écrire :
7- Fonctions réelles
le paramètre n(≥ 1) assure que la fonction sera tracée avec un minimum de n+1 points.
LineSpec spécifie le type de ligne ou la couleur (par exemple, LineSpec=’–’ pour une
ligne en traits discontinus, LineSpec=’r-.’ une ligne rouge en traits mixtes, etc.).
Pour utiliser les valeurs par défaut de tol, n ou LineSpec, il suffit d’utiliser des matrices
vides ([ ]).
Présentation Matlab
7- Fonctions réelles
On peut définir la fonction f(x) = 1/(1 + x2) de plusieurs manières : par l’instruction fun=’1/(1+x^2)’
vue précédemment ; par la commande inline avec l’instruction :
>> fun=inline(’1/(1+x^2)’,’x’);
>> fun=@(x)[1/(1+x^2)];
La commande inline, dont la syntaxe usuelle est fun=inline(expr, arg1, arg2, ..., argn), définit une
fonction fun qui dépend de l’ensemble ordonné de variables arg1, arg2, ..., argn. La chaîne de
caractères expr contient l’expression de fun. Par exemple,
fun=inline(’sin(x)*(1+cos(t))’, ’x’,’t’) définit la fonction fun(x, t) = sin(x)(1 + cos(t)).
Présentation Matlab
7- Fonctions réelles
La forme compacte fun=inline(expr) suppose implicitement que expr dépend de toutes les
variables qui apparaissent dans la définition de la fonction, selon l’ordre alphabétique.
Par exemple, avec la commande fun=inline(’sin(x) *(1+cos(t))’),on définit la fonction
fun(t, x)=sin(x)(1 + cos(t)),dont la première variable est t et la seconde x (en suivant l’ordre
lexicographique).
7- Fonctions réelles
Définition :
On dit que α est un zéro de la fonction réelle f si f(α) = 0. Il est dit simple si
f ‘(α) = 0, et multiple sinon.
On peut déterminer les zéros réels d’une fonction à partir de son graphe (avec une certaine
tolérance). Le calcul direct de tous les zéros d’une fonction donnée n’est pas toujours
facile.
On peut calculer le zéro unique α = −a0/a1, quand n = 1 (le graphe de p1 est une ligne
droite), ou les deux zéros α+ et α− C, éventuellement confondus, quand n = 2 (le
graphe de p2 est une parabole):
Présentation Matlab
Mais il n’y a pas de formule explicite donnant les racines d’un polynôme quelconque pn quand
n ≥ 5.
Nous noterons Pn l’espace des polynômes de degré inférieur ou égal à n,
En général, le nombre de zéros d’une fonction ne peut pas être déterminé a priori. Dans le cas
particulier des fonctions polynomiales, le nombre de zéros (complexes et comptés avec leurs
multiplicités) est égal au degré du polynôme. De plus, si le complexe α = x+iy est racine d’un
polynôme à coefficients réels de degré n ≥ 2, son conjugué ¯α = x − iy l’est aussi.
Présentation Matlab
Remarque :
Le résultat obtenu pour le second zéro est légèrement différent du précédent car
l’algorithme implémenté dans fzero est initialisé différemment dans ce cas.
Les polynômes sont des fonctions très particulières auxquelles MATLAB dédie la toolbox
polyfun. La commande polyval, permet d’évaluer un polynôme en un ou plusieurs points. Ses
arguments en entrée sont un vecteur p et un vecteur x, où les composantes de p sont les
coefficients du polynôme rangés en ordre des degrés décroissants, de an à a0, et les
composantes de x sont les points où le polynôme est évalué. Le résultat peut être stocké dans
un vecteur y en écrivant :
>> y = polyval(p,x)
Par exemple, les valeurs de p(x) = x7 +3x2 − 1, aux points équirépartis xk = −1 + k/4 pour
k = 0, . . ., 8, peuvent être obtenus en procédant ainsi :
>> p = [1 0 0 0 0 3 0 -1]; x = [-1:0.25:1];
>> y = polyval(p,x)
y=
Columns 1 through 5:
1.00000 0.55402 -0.25781 -0.81256 -1.00000
Columns 6 through 9:
-0.81244 -0.24219 0.82098 3.00000
Présentation Matlab:
Si x est un vecteur contenant des abscisses et si p (resp. p1 et p2) est un vecteur contenant les
coefficients d’un polynôme P (resp. P1 et P2), les commandes précédentes sont résumées
Présentation Matlab:
Les entrées-sorties
Structures de contrôle
Graphisme
Programmation sous Matlab
2 Les entrées-sorties
2.1 Affichage simple, la commande disp
On utilise fréquemment la commande disp avec un tableau qui est une chaîne de
caractères pour afficher un message. Par exemple :
disp(’Calcul du déterminant de la matrice A’).
On utilise également la commande disp pour afficher un résultat. Par exemple :
disp([’Le déterminant de la matrice A vaut ’, num2str(det(A))]).
Programmation sous Matlab
2 Les entrées-sorties
2.1 Affichage simple, la commande disp
Remarque
On remarque que l’usage de la commande disp est alors un peu particulier. En effet un
tableau doit être d’un type donné, les éléments d’un même tableau ne peuvent donc être des
chaînes de caractères et des valeurs numériques. On a donc recours à la commande num2str
(« number to string ») pour convertir une valeur numérique en une chaîne de caractères.
Programmation sous Matlab
2 Les entrées-sorties
2.2 Impressions dirigées par format
sprintf(format, variables)
format= % L s
2 Les entrées-sorties
format= % L.Dt
2 Les entrées-sorties
Modèle d’édition des réels
2 Les entrées-sorties
Exemple 2: La commande sprintf est << vectorielle >> : si la variable n'est pas scalaire le
format d'impression est réutilisé pour tous les éléments du tableau, colonne
par colonne.
>> x = [1:10];
>> sprintf(' %d ,',x)
ans =
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,
Il est possible d'utiliser les symboles suivant dans les chaînes de caractères :
Remarque :
La commande fprintf est l'analogue de sprintf pour imprimer de variables selon
un modèle donné dans un fichier.
Programmation sous Matlab
2 Les entrées-sorties
exp.txt
Exemple x exp(x)
0.00 1.00000000
0.10 1.10517092
0.20 1.22140276
x = 0:.1:1; 0.30 1.34985881
A = [x; exp(x)]; 0.40 1.49182470
0.50 1.64872127
fileID = fopen('exp.txt','w'); 0.60 1.82211880
fprintf(fileID,'%6s %12s\r\n','x','exp(x)'); 0.70 2.01375271
fprintf(fileID,'%6.2f %12.8f\r\n',A); 0.80 2.22554093
0.90 2.45960311
fclose(fileID); 1.00 2.71828183
Programmation sous Matlab
3: Structures de contrôle
3.1 Boucle for: parcours d’un intervalle
Une première possibilité pour exécuter une séquence d’instructions de manière répétée
consiste à effectuer une boucle pour les valeurs d’un indice, incrémenté à chaque itération,
variant entre deux bornes données. Ce processus est mis en œuvre par la « boucle for ».
Syntaxe :
for indice = borne_inf : borne_sup
séquence d’instructions
end
où
indice est une variable appelée l’indice de la boucle ;
borne_inf et borne_sup sont deux constantes réelles (appelées paramètres de la boucle) ;
séquence d’instructions est le traitement à effectuer pour les valeurs d’indices variant
entre borne_inf et borne_sup avec un incrément de 1. On parle du corps de la boucle.
Programmation sous Matlab
3: Structures de contrôle
3.1 Boucle for: parcours d’un intervalle
Interprétation :
Si borne_inf est plus petit ou égal à borne_sup, le traitement séquence d’instructions est
exécuté (borne_sup − borne_inf + 1) fois, pour les valeurs de la variable indice égales à
borne_inf, borne_inf + 1, ・ ・ ・ , borne_sup − 1, borne_sup.
Si borne_inf est strictement plus grand que borne_sup, on passe à l’instruction qui suit
immédiatement l’instruction de fin de boucle (end).
Remarque :
On peut utiliser un incrément (pas) autre que 1 (valeur par défaut). La syntaxe est alors
borne_inf : pas : borne_sup. Le pas peut être négatif.
>> for r=1.1:-0.1:0.75
disp([’r = ’, num2str(r)]);
end
r = 1.1
r=1
r = 0.9
r = 0.8
Programmation sous Matlab
3: Structures de contrôle
3.1 Boucle for: parcours d’un intervalle
Une seconde possibilité pour exécuter une séquence d’instructions de manière répétée
consiste à effectuer une boucle tant qu’une condition reste vérifiée. On arrête de boucler dès
que cette condition n’est plus satisfaite. Ce processus est mis en oeuvre par la « boucle
while ».
Syntaxe :
while expression logique
séquence d’instructions
end
Où
expression logique est une expression dont le résultat peut être vrai ou faux ;
séquence d’instructions est le traitement à effectuer tant que expression logique est vraie.
Programmation sous Matlab
3: Structures de contrôle
3.2 Boucle while : tant que . . . faire
Interprétation :
Tant que expression logique est vraie le traitement séquence d’instructions est exécuté sous
forme d’une boucle. Lorsque expression logique devient faux, on passe à l’instruction qui suit
immédiatement l’instruction de fin de boucle (end).
Exemple >> n = 4;
>> k = 1; nfac = 1;
>> while k <= n
nfac = nfac*k;
k = k+1;
end
>> nfac
nfac =
24
Programmation sous Matlab
3: Structures de contrôle
3.2 L’instruction conditionnée IF
On a parfois besoin d’exécuter une séquence d’instructions seulement dans le cas où une
condition donnée est vérifiée au préalable. Différentes formes d’instruction conditionnée
existent sous matlab.
Syntaxe :
if expression logique
séquence d’instructions
end
où
expression logique est une expression dont le résultat peut être vrai ou faux ;
séquence d’instructions est le traitement à effectuer si expression logique est vraie.
Programmation sous Matlab
3: Structures de contrôle
3.2 L’instruction conditionnée IF
Interprétation :
la séquence d’instructions n’est exécutée que si le résultat de l’évaluation de l’expression
logique est vraie (c’est-à-dire vaut 1). Dans le cas contraire on exécute l’instruction qui suit
le mot clé end. Dans le cas où l’expression logique est vraie, après exécution de la séquence
d’instructions on reprend le programme à l’instruction qui suit le mot clé end.
Il est possible d’effectuer un choix en cascade :
Syntaxe :
if expression logique 1
séquence d’instructions 1
elseif expression logique 2
séquence d’instructions 2
...
elseif expression logique N
séquence d’instructions N
else
séquence d’instructions par défaut
end
Programmation sous Matlab
3: Structures de contrôle
3.2 L’instruction conditionnée IF
On utilise fréquemment un choix en cascade lors d’initialisation de données. Par exemple, on initialise
une matrice A en fonction de la valeur d’une variable numex (numéro d’exemple) de la manière
suivante :
Exemple :
numex=input('donner la valeur de numex')
n=3;
if numex == 1
A = ones(n);
elseif numex == 2
A = magic(n);
elseif numex == 3 | numex == 4
A = rand(n);
else
error(’numero d’’exemple non prevu ...’);
end
Programmation sous Matlab
3: Structures de contrôle
3.3 L’instruction swich
Syntaxe :
switch var
case cst_1 ,
séquence d’instructions 1
case cst_2 ,
séquence d’instructions 2
...
case cst_N ,
séquence d’instructions N
otherwise
séquence d’instructions par défaut
end
Programmation sous Matlab
3: Structures de contrôle
3.3 L’instruction swich
où
var est une variable numérique ou une variable chaîne de caractères ;
cst_1, . . ., cst_N, sont des constantes numérique ou des constantes chaîne de caractères ;
séquence d’instructions i est la séquence d’instructions à exécuter si var==cst_i.
Interprétation :
Si la variable var est égale à l’une des constantes cst_1, . . ., cst_N, (par exemple cst_i) alors
la séquence d’instructions correspondante (ici séquence d’instructions i) est exécutée. Le
programme reprend ensuite à la première instruction suivant le mot-clé end. Si la variable
var n’est égale à aucune des constantes la séquence d’instructions par défaut (otherwise)
est exécutée.
Remarque :
La variable var doit bien entendu être du même type que les constantes cst_1, . . ., cst_N.
Si la séquence d’instructions à exécuter est la même pour différents cas il est possible de
les regrouper. La syntaxe est alors,
Chaque fenêtre se voit affecter un numéro. Ce numéro est visible dans le bandeau de la
fenêtre sous forme d’un titre.
Le résultat d’une instruction graphique est par défaut affiché dans la dernière fenêtre
graphique ouverte qui est la fenêtre graphique active.
La commande close permet de fermer la fenêtre graphique active. On ferme une fenêtre
graphique précédemment ouverte en exécutant la commande close(n), où n désigne le
numéro de la figure. Il est également possible de fermer toutes les fenêtres graphiques en
tapant close all.
Programmation sous Matlab
4: Graphisme
4.2 Graphisme 2D
La commande fplot permet de tracer le graphe d’une fonction sur un intervalle donné.
Syntaxe:
fplot(’nomf’, [xmin , xmax])
où
nomf est soit le nom d’une fonction matlab incorporée, soit une expression définissant
une fonction de la variable x, soit le nom d’une fonction utilisateur.
[xmin , xmax] est l’intervalle pour lequel est tracé le graphe de la fonction.
Illustrons par des exemples les trois façons d’utiliser la commande fplot.
Programmation sous Matlab
4: Graphisme
4.2 Graphisme 2D
Exemple 1
On obtient le graphe de la fonction incorporée sinus entre −2π et 2π par l’instruction:
fplot(’sin’,[-2*pi 2*pi])
Programmation sous Matlab
4: Graphisme
4.2 Graphisme 2D
Exemple 2
Pour tracer le graphe de la fonction h(x) = x sin(x) entre −2π et 2π, on peut définir la fonction
utilisateur h dans le fichier h.m de la manière suivante
function y=h(x)
y=x.*sin(x);
où nomf_f1, nom_f2, nom_f3 est soit le nom d’une fonction matlab incorporée, soit une
expression définissant une fonction de la variable x, soit le nom d’une fonction utilisateur.
Il est également possible de gérer les bornes des valeurs en ordonnées. Pour limiter le
graphe aux ordonnées comprises entre les valeurs y_min et y_max on passera comme
second argument de la commande fplot le tableau [x_min , x_max , y_min , y_max ].
Exemple :
fplot(’[sin(x)/x , cos(x)/x]’, [-5, 5, -1, 1])
Programmation sous Matlab
4: Graphisme
4.2.2. La commande plot
La syntaxe est plot(x,y) où x est le vecteur contenant les valeurs xi en abscisse et y est le
vecteur contenant les valeurs yi en ordonnée
Voici par exemple une autre façon de tracer le graphe de la fonction h(x) = x sin(x)
entre −2π et 2π,
On peut spécifier à matlab quelle doit être la couleur d’une courbe, quel doit être le style de
trait et/ou quel doit être le symbole à chaque point (xi, yi). Pour cela on donne un troisième
paramètre d’entrée à la commande plot qui est une chaîne de 3 caractères de la forme ’cst’
avec c désignant la couleur du trait, s le symbole du point et t le style de trait. Les
possibilités sont les suivantes :
Les valeurs par défaut sont c = b, s = . et t = - ce qui correspond à un trait plein bleu reliant
les points entre eux
Remarque:
Il est possible de tracer plusieurs courbes sur la même figure en spécifiant plusieurs tableaux
x1, y1, x2, y2, …. , comme paramètres de la commande plot
Exemple:
>> x = [-5:0.01:5];
>> y = x.^2.*cos(x); z =
x.*cos(x);
>> plot(x,y,'b-',x,z,'r:');
Programmation sous Matlab
4: Graphisme
4.3 Améliorer la lisibilité d’une figure
Il est recommandé de mettre une légende à une figure. La commande xlabel permet de
mettre un texte en légende sous l’axe des abscisses. La syntaxe est
xlabel(’ légende ’)
pour obtenir le mot légende en légende.
La commande ylabel fait de même pour l’axe des ordonnées.
La syntaxe text(posx,posy,’ un texte ’) permet d’écrire un texte donné à une position précise
de coordonnées (posx, posy)
La syntaxe gtext(’ un texte ’) permet de placer le texte à une position choisie sur la figure à
l’aide de la souris
>> P = 5;
>> t = [0:.01:2]; 5
La commande hold on permet d’afficher plusieurs courbes dans une même fenêtre
graphique
fplot('log',[1/e e]) 1
plot([-1:0.01:e],[-1:0.01:e])
0.5
gtext('log')
log
gtext('y=x') 0
gtext('exp')
-0.5
grid
hold off -1
0.5 1 1.5 2 2.5
Programmation sous Matlab
4: Graphisme
4.3 Améliorer la lisibilité d’une figure
Où:
m est le nombre de sous-fenêtres verticalement ;
n est le nombre de sous-fenêtres horizontalement ;
i sert à spécifier dans quelle sous-fenêtre doit s’effectuer l’affichage. Les fenêtres sont
numérotées de gauche à droite et de haut en bas.
Programmation sous Matlab
4: Graphisme
4.3 Améliorer la lisibilité d’une figure
0.5 0.5 1
0 0 0
-0.5 -0.5 -1
-1 -1 -2
0 5 10 0 5 10 -1 0 1
3 1 1
2 0 0
1 -1 -1
0 -2 -2
-1 0 1 -1 0 1 -1 0 1
Programmation sous Matlab
4: Graphisme
4.3 Améliorer la lisibilité d’une figure
4.3.3 Sauvegarder une figure
La commande print permet de sauvegarder la figure d’une fenêtre graphique dans un
fichier sous divers formats d’images.
La syntaxe de la commande print est :
print -f<num> -d<format> <nomfic>
où
<num> désigne le numéro de la fenêtre graphique. Si ce paramètre n’est pas spécifié,
c’est la fenêtre active qui est prise en compte.
<nomfic> est le nom du fichier dans lequel est sauvegardée la figure.
<format> est le format de sauvegarde de la figure. Ces formats sont nombreux. On
pourra obtenir la liste complète en tapant help plot. Les principaux sont :
Exemple :
Pour tracer les lignes de niveau de la fonction g(x, y) pour x [xmin, xmax] et y [ymin,
ymax] on procède de la manière suivante :
2 Évaluation de la fonction aux noeuds de ce maillage, soit par appel à la fonction utilisateur
définissant la fonction, Z = g(X,Y) soit directement en définissant la fonction par une
expression matlab.
Script N°2
On peut également écrire une fonction
utilisateur g.m,
function x3 = g(x1,x2)
x3 = x1.*exp(-x1.^2-x2.^2);
et exécuter
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = g(X,Y);
>> contour(X,Y,Z)
Programmation sous Matlab
4: Graphisme
4 Graphisme 3D
4.1 Tracer les lignes de niveau d’une fonction de 2 variables
Remarques :
Le nombre de lignes de niveau est déterminé de manière automatique à partir des valeurs
extrêmes prises par la fonction sur le domaine considéré. Pour imposer le nombre n de
lignes de niveau à afficher, il suffit d’appeler la fonction contour avec la valeur n comme
quatrième paramètre, contour(X,Y,Z,n).
La commande clabel permet d’afficher les valeurs pour toutes les lignes de niveau.
>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h)
Si l’on souhaite afficher uniquement les valeurs de quelques lignes de niveau, on utilise la
commande clabel de la manière suivante :
La commande contourf permet d’afficher, en plus des lignes de niveau, un dégradé continu
de couleurs qui varie en fonction des valeurs prises par la fonction
2
Exemple
1.5
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = (X-1).^2 + 10*(X.^2-Y).^2; 1
>> contourf(X,Y,Z,30);
0.5
>> colormap(cool);
0
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Programmation sous Matlab
4: Graphisme
4 Graphisme 3D
4.2 Représenter une surface d’équation z = g(x, y)
La commande mesh permet de tracer une surface d’équation z = g(x, y). La fonction g
peut être définie directement par une expression matlab ou être définie comme une
fonction utilisateur
Pour tracer la surface d’équation z = g(x, y) pour x [xmin, xmax] et y [ymin, ymax] on
procède de la manière suivante :
function x3 = g(x1,x2)
x3 = x1.*exp(-x1.^2-x2.^2);
on exécute :
>> [X,Y] = meshgrid(-2:.2:2, -
2:.2:2);
>> Z = g(X,Y);
>> mesh (X,Y,Z)
>>
Chapitre 4
Initiation au Calcul Scientifique
Plan
Méthode de Newton
Nous débuterons ce chapitre avec quelques problèmes simples et concrets qui donnent lieu à
des équations non linéaires. Diverses méthodes numériques seront alors présentées, puis
utilisées pour résoudre ces problèmes
Quelques problèmes types , dichotomie, Newton, point fixe
Algorithme de la méthode
( ) ( ) , ( ) ( ) , ( ) ( ) .
étant donné ,
si ,
alors
et on s’arrête ;
sinon,
Quelques problèmes types , dichotomie, Newton, point fixe
Si
poser , ;
Si
poser , ;
Exemple :
En prenant ,
on obtient
=] − 0.25, 1.25[,
=]0.5, 1.25[, = 0.875,
=]0.875, 1.25[, = 1.0625,
=]0.875, 1.0625[, = 0.96875
Pour garantir que , pour une tolérance ε donnée, il suffit d’effectuer itérations,
où est le plus petit entier tel que:
Quelques problèmes types , dichotomie, Newton, point fixe
N.B
La méthode de dichotomie est simple mais elle ne garantit pas une réduction monotone de
l’erreur d’une itération à l’autre : tout ce dont on est assuré, c’est que la longueur de
l’intervalle de recherche est divisée par deux à chaque étape. Par conséquent, si le seul
critère d’arrêt est le contrôle de la longueur de ( ) , on risque de rejeter de bonnes
approximations de α.
Quelques problèmes types , dichotomie, Newton, point fixe
2- Méthode de Newton
La seule information utilisée par la méthode de dichotomie est le signe de la fonction f aux
extrémités des sous-intervalles. Dans le cas où f est différentiable, on peut construire une
méthode plus efficace en exploitant les valeurs de f et de ses dérivées. En partant de
l’équation de la tangente à la courbe (x, f(x)) au point ,
(2.1)
en supposant .
Quelques problèmes types , dichotomie, Newton, point fixe
2- Méthode de Newton
Cette formule permet de construire une suite , étant donné une valeur initiale
Cette méthode est connue sous le nom de méthode de Newton et revient à calculer le zéro
de f en remplaçant localement f par sa tangente (voir Figure 2).
Figure 2. Les premières itérations obtenues avec la méthode de Newton pour la fonction
en partant d’une donnée initiale
Quelques problèmes types , dichotomie, Newton, point fixe
2- Méthode de Newton
En faisant un développement de Taylor de f au voisinage d’un point arbitraire , on trouve
(2.2)
où .
2- Méthode de Newton
En général, la méthode de Newton ne converge pas pour des valeurs arbitraires de , mais
seulement pour des valeurs suffisamment proches de α, c’est-à-dire appartenant à un certain
( )
voisinage de α. Au premier abord, cette condition semble inutilisable : elle signifie en
effet que pour calculer α (qui est inconnu), on devrait partir d’une valeur assez proche de α !
2- Méthode de Newton
Test d’arrêt pour les itérations de Newton
En théorie, une méthode de Newton convergente ne retourne le zéro α qu’après une infinité
d’itérations. En pratique, on recherche une approximation de α avec une certaine tolérance
ε. Ainsi, on peut interrompre la méthode à la première itération pour laquelle on a
l’inégalité suivante
Ceci est un test sur l’erreur. Malheureusement, comme l’erreur est elle-même inconnue, on
doit la remplacer par un estimateur d’erreur, c’est-à-dire, une quantité qui peut être
facilement calculée et grâce à laquelle on peut estimer l’erreur réelle.
La différence entre deux itérées successives fournit un estimateur d’erreur correct pour la
méthode de Newton. Cela signifie que l’on peut interrompre les itérations à l’étape
telle que
2- Méthode de Newton
Résumons-nous
1. Les méthodes pour le calcul des zéros d’une fonction f sont généralement itératives ;
3. La méthode de Newton permet le calcul d’un zéro α de f en faisant appel aux valeurs de
f et de sa dérivée. Une condition nécessaire de convergence est que la donnée
initiale appartienne à un certain voisinage (assez petit) de α;
Quelques problèmes types , dichotomie, Newton, point fixe
En s’amusant avec une calculatrice de poche, on peut vérifier qu’en partant de la valeur 1
et en appuyant plusieurs fois de suite sur la touche “cosinus”, on obtient cette suite de
valeurs qui doit tendre vers la valeur α = 0.73908513….
La méthode proposée fournit donc un moyen de calculer les zéros de f. Cependant, toutes les
fonctions n’ont pas un point fixe. Par exemple, en répétant l’expérience précédente avec
l’exponentielle et , on dépasse les capacités de calcul (overflow) après seulement 4
itérations
Figure 3: La fonction φ(x) = cosx admet un point fixe et un seul (à gauche), tandis que
la fonction φ(x) = exp(x) n’en a aucun (à droite)
Quelques problèmes types , dichotomie, Newton, point fixe
Si un tel α existe, on dit que c’est un point fixe de φ et on peut essayer de le calculer à
l’aide de l’algorithme suivant
(3.1)
Où est une donnée initiale. Cet algorithme est appelé méthode de point fixe ou
itérations de point fixe et on dit que φ est la fonction d’itération. La procédure décrite en
introduction est donc un exemple d’itérations de point fixe avec φ(x) = cos(x).
Quelques problèmes types , dichotomie, Newton, point fixe
Figure 4. Représentation de quelques itérations de point fixe pour deux fonctions d’itération. A
gauche, la suite converge vers le point fixe α. A droite, la suite diverge
Quelques problèmes types , dichotomie, Newton, point fixe
1. Supposons que φ(x) est continue sur [a, b] et telle que φ(x) [a, b] pour tout x [a, b] ;
alors il existe au moins un point fixe α [a, b].
2. De plus, si
Introduction
1- Introduction
Nous présentons dans ce chapitre des méthodes pour approcher les dérivées et les intégrales
de fonctions. Concernant l’intégration, on sait bien qu’il n’est pas toujours possible, pour une
fonction arbitraire, de trouver la forme explicite d’une primitive. Mais même quand on la
connaît, il est parfois difficile de l’utiliser. C’est par exemple le cas de la fonction
f(x) = cos(4x) cos(3 sin(x)) pour laquelle on a
On voit que le calcul de l’intégrale est transformé en un calcul, aussi difficile, de la somme
d’une série. Dans certains cas, la fonction à intégrer ou à différentier n’est connue que par
les valeurs qu’elle prend sur un ensemble fini de points (par exemple, des mesures
expérimentales).
Dans tous ces cas, il faut considérer des méthodes numériques afin d’approcher la quantité à
laquelle on s’intéresse, indépendamment de la difficulté à intégrer ou à dériver la fonction.
Introduction, Calcul approché de la valeur d'une dérivée, Calcul
approché d'intégrales
2.1 Calcul approché de la valeur d'une dérivée
Soit f une application réelle dérivable sur un intervalle ouvert ]a,b[ non-vide. La définition
du nombre dérivé f’( ) en ]a; b[ fournit implicitement une méthode de calcul approché
de f’( ) :
Premier algorithme :
function [y]=deriv1(x,h) % calcul approché d’un nombre dérivé
fun=inline('t^2','t')
y=(fun(x+h)-fun(x))/h;
Deuxième algorithme :
function [y]=deriv2(x,h) % calcul approché d’un nombre dérivé :
fun=inline('t^2','t')
y=(fun(x+h)-fun(x-h))/(2*h);
Introduction, Calcul approché de la valeur d'une dérivée, Calcul
approché d'intégrales, Calcul exact avec syms
2.1 Calcul approché de la valeur d'une dérivée
Utilisation
Le résultat exact est ici 2 : on constate que l'approximation est bien meilleure dans le
2eme cas...
Soit f de classe (c.à.d.. deux fois dérivable et sa dérivée seconde continue) sur un
intervalle ouvert contenant . Alors pour tout h suffisamment proche de 0 :
Puisqu'au voisinage de 0
Tandis que :
Introduction, Calcul approché de la valeur d'une dérivée, Calcul
approché d'intégrales, Calcul exact avec syms
2.1 Calcul approché de la valeur d'une dérivée
Lorsque h tend vers 0, converge bien plus rapidement que h vers 0. C'est pourquoi, pour
des valeurs identiques de h (proches de 0), la deuxième méthode donnera en général de
meilleurs résultats que la première : l'erreur est un O( ) plutôt qu'un O(h).
Introduction, Calcul approché de la valeur d'une dérivée, Calcul
approché d'intégrales, Calcul exact avec syms
2.2 Calcul approché d'intégrales
2.2.1. Subdivision régulière d'un segment
Calculer la valeur d'une intégrale est une opération en général difficile. Dans les
applications scientifiques ou en ingénierie il est pourtant nécessaire de calculer
rapidement des valeurs approchées d'intégrale (calcul d'aire, de volume,
physique).
Le calcul d’une valeur approchée n'est pas très difficile. Les méthodes les plus simples
consistent à subdiviser régulièrement l'intervalle d'intégration pour approcher le
calcul intégral par un calcul d'aires de figures géométriques plus simples (par
exemple dans la méthode des trapèzes).
C'est pourquoi il est utile de définir la notion de subdivision régulière d'un segment :
Définition :
Soit [a, b] un intervalle non vide et non réduit à un point (i.e. a < b). Soit
∗
; une subdivision régulière de [a, b] en n + 1 points est une suite finie de n + 1
réels : vérifiant :
, et la suite de terme général est stationnaire.
Introduction, Calcul approché de la valeur d'une dérivée, Calcul
approché d'intégrales
5.2 Calcul approché d'intégrales
5.2.1. Subdivision régulière d'un segment
>> x=linspace(1,3,10)
x=
Columns 1 through 9
1.0000 1.2222 1.4444 1.6667 1.8889 2.1111 2.3333 2.5556 2.7778
Column 10
3.0000
Introduction, Calcul approché de la valeur d'une dérivée, Calcul
approché d'intégrales
2.2 Calcul approché d'intégrales
2.2.2. Méthode des Trapèzes
Soit une application f réelle : continue sur un intervalle [a, b]. Donné un entier n non nul (et
suffisamment grand), la méthode des trapèzes calcule une valeur approchée de l'intégrale de
f sur [a, b] en approchant le domaine délimité par la courbe représentative de f (l'axe des
abscisses et les droites x = a et x = b) par des trapèzes ayant même hauteur.