Académique Documents
Professionnel Documents
Culture Documents
Polycopié de Cours
Maitriser Matlab
Présenté par :
M.BERBER Mohammed
M.MOKADDEM Allel
M.DOUMI Bendouma
AVANT PROPOS
Dans la recherche bibliographique que nous avons réalisée sur le logiciel MATLAB, nous
avons trouvé beaucoup de travaux et de cours en ligne allant des notions de base jusqu'à
des degrés assez complexes ; la plupart sont présentés sous forme de descriptifs écrits.
Ce modeste polycopié de cours intitulé ‘’ Maîtriser Matlab ‘’ qui est destiné aux étudiants
de Licence et de Master des deux domaines S.T et S.M a été préparé en tenant compte
des niveaux de connaissances et des difficultés relevées auprès de nos étudiants durant
notre encadrement pédagogique. Ce cours tel qu’il est présenté va certainement
contribuer à encourager les intéressés à se familiariser avec le logiciel MATLAB et à
surmonter leurs difficultés. Une présentation assez simple se basant sur des définitions,
des illustrations, et des exemples de programmes exécutés qui touchent pratiquement
l'ensemble des notions indispensables pour apprendre MATLAB, Ce manuel de cours a
été élaboré dans l’esprit d’éviter à nos étudiants de se perdre sur des recherches
supplémentaires inutiles.
Tables des Matières
I. Introduction Générale
I.1 Méthodes numériques……………………………………………………………5
I.2 Algorithme………………………………………………..………………………..5
I.3 Organigrammes…………………………………………………………………...6
I.4 Programmes……….………………………………………………………………….6
I.5 Logiciels de programmation………….…………………………………………7
III. Graphisme
III.1 Représentation graphique……………………………………………………..23
III.2 Graphique simple………………………….……………………………………23
III.3 Graphique avancée……………………………………………………………..25
III.4 Graphique multiples 1…………………………………………………………26
III.5 Graphique multiples 2…………………………………………………………26
III.6 Graphique polaire………………………………………………………………27
III.7 Graphiques à échelles logarithmiques………………………………………28
1
Tables des Matières
V. Programmation
V.1 Les m-files……………………………………………………..………………….43
V.2 Les opérateurs logiques……………………………………………….………..43
V.3 Les mots gardés……………………………………………………………….…44
V.4 Entrées / sorties………………………………………………………………….44
V.4.1 Utilisateurs……………………………………..…………………………44
V.4.2 Disques……………………………………………………………………..45
V.5 Le contrôle de l'exécution………………………………………………………45
V.5.1 La boucle FOR…………………………………………………………….45
V.5.2 La boucle WHILE………………………………………………………...46
V.5.3 Instruction de choix IF……………………………..……………………46
V.5.4 Instruction de choix SWITCH…………………………………….……47
V.6 Les fonctions……………………………………………………………………...47
V.6.1 Les fonctions simples……………………………………………………..47
2
Tables des Matières
3
Introduction Générale
INTRODUCTION GENERALE
4
Introduction Générale
I.2 Algorithme
On appelle algorithme l’ensemble des règles définissant un procédé de calcul destiné à
obtenir un résultat déterminé à partir des données initiales. Il peut y exister plusieurs
algorithmes pour le même problème ; l’essentiel est d’aboutir au résultat très acceptable
le plus rapidement possible. On doit alors choisir le plus simple algorithme possible de
façon à optimiser les tâches machines.
Un algorithme comprend :
- des calculs (R=A*B)
- des formules de récurrence faisant intervenir des valeurs calculées au stade
précèdent du calcul (Ri = A*Ri-1 pour i = 2 à N).
5
Introduction Générale
Il y à lieu de choisir la méthode la mieux adaptée qui doit garantir par conséquent :
• la stabilité (sinon il y a un risque de ne pas obtenir les solutions).
• la précision des résultats.
• la rapidité des calculs.
• la facilité d’écriture des programmes.
I.3 Organigramme
Il donne une description schématique de l’algorithme. On doit dessiner un schéma
indiquant l’ordre d’exécution des opérations traitées par l’algorithme, et déclarer, au
départ, les variables utilisées dans le programme. Voici, ci après, les principaux
symboles utilisés :
INSTRUCTIONS SYMBOLES
Traitement – Calculs
Boucle de programme
Branchement
I.4 Programmes
Après avoir trouvé le bon algorithme pour résoudre numériquement un problème et
après avoir donné son exécution sous forme schématique (organigramme), on choisit
ensuite un langage de programmation afin de le faire exécuter par un ordinateur. Le
programme transmet étape par étape les instructions décrites dans l’organigramme.
C’est le messager de l’ordinateur. Les instructions décrites dans le programme doivent
respecter des codes et des ordres d’écriture spécifique à celui-ci. C’est les syntaxes du
6
Introduction Générale
MATLAB est enrichi par ses nombreuses bibliothèques (”Toolboxes”) qui évitent dans
plusieurs cas de programmer les techniques numériques évidentes. Néanmoins, pour
les développements approfondies, il met à notre disposition les mêmes possibilités de
programmation structurée que les langages scientifiques courants (C, C++, C#, PHP,
Javascript, ...). Le code de MATLAB comporte des blocs spécifiques écrits en langage
assembleur pour obtenir des performances améliorées.
Son nom vient de MATrix LABoratory, car il a été initialement développé pour le calcul
matriciel.
Le logiciel MATLAB est très flexible et sa disponibilité est remarquable puisqu’il peut
être exécuté sur n’importe quel type d’ordinateur et sur des différents systèmes
d'exploitation utilisés par les scientifiques : PC, Macintosh, Station de travail, gros
ordinateurs sous UNIX, Windows, etc ...
7
Introduction Générale
INTRODUCTION A MATLAB
8
Introduction à Matlab
9
Introduction à Matlab
10
Introduction à Matlab
Exemple d’illustration
11
Introduction à Matlab
l’invite
A >> deshort
format commande, taper le format à utiliser, taper « 1/7 », puis entrer :
>> 1/7
ans
0.1429,
>> format short e
>> 1/7
ans =
1.4286e-001
>> format short g
>> 1/7
ans =
0.14286
>> format long
>> 1/7
ans =
0.142857142857143
>> format long e
>> 1/7
ans =
1.428571428571429e-001
>> format long g
>> 1/7
ans =
0.142857142857143
>> 4*7
ans =
28
>> 4*7 ;
>>
12
Introduction à Matlab
>> x = 6
x =
6
>> y = 14
y =
14
>> x + y
ans =
20
>> x * y
ans =
84
Symboles Significations
pi Nombre π =3.141592
i ou j Nombre complexe : √−1
ans Réponse à une expression sans assignation
eps Réponse à une expression sans assignation
NaN Not a Number 0/0
nargin Nbre d'arguments d'entrée d'une fonction
nargout Nbre d'arguments de sortie d'une fonction
flop Nombre d'opérations flottantes par seconde
inf Infini ∞
computer Type de calculateur
13
Introduction à Matlab
>> pi=1
pi =
1
>> clear pi
>> pi
ans =
3.1416
>> a = 2 + i*8;
>> b = 5 – i*2;
>> a + b
ans =
7 + 6i
>> a*b
ans =
26.0000 +36.0000i
>> a/b
ans =
-0.2069 + 1.5172i
>> a-b
ans =
-3.0000 +10.0000i
14
Introduction à Matlab
%Vecteurs %
>> vecH = [ 1 2 3 4 5] % Vecteur horizontal
vecH =
1 2 3 4 5
vecV =
1
2
3
4
5
>> vecH = [ 1,2,3,4,5] % Vecteur horizontal
vecH =
1 2 3 4 5
vecV =
1
2
3
4
5
>> A = [2 1 0 ; 4 -3 2 ; 1 2 -1]
A =
2 1 0
4 -3 2
5
1 2 -1
>> B = [-5;0;1]
B =
-5
0
1
15
Introduction à Matlab
>> zeros(4,4) % Matrice dont tous les éléments sont égaux é zéro
ans =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
>> rand(2,3) % Matrice d'éléments aléatoires
ans =
0.4447 0.7919 0.7382
0.6154 0.9218 0.1763
ans =
2 3
16
Introduction à Matlab
>> length (A) % donne le plus grand nombre entre lignes et colonnes
ans =
+ Addition
- Soustraction
* Produit
/ division à droite
\ division à gauche
^ Puissance
‘ Transposition
Inv( ) Inversion
17
Introduction à Matlab
>> A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]
A=
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> A(3,:)=[]
A=
1 2 3 4
5 6 7 8
13 14 15 16
>> A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]
A=
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> A(:,4)=[]
A=
1 2 3
5 6 7
9 10 11
13 14 15
18
Introduction à Matlab
>> A + B
ans =
3 1
2 12
>> A * B
ans =
-2 3
-30 27
>> A'
ans =
2 6
1 9
>> inv(B)
ans =
1.0000 0
1.3333 0.3333
Exemples d’application
>> A / B
ans =
3.3333 0.3333
18.0000 3.000
>> A^2
ans =
10 11
66 87
NB : Si l’on souhaite effectuer une opération, non pas matricielle, mais éléments par éléments,
l’opérateur doit être précédé d’un point « . » : .* ./ .^ .\ Appliquons ces opérateurs aux
matrices de l’exemple précédent.
19
Introduction à Matlab
>> A .* B
ans =
2 0
-24 27
>> B ./ A
ans =
0.5000 0
-0.6667 0.3333
>> A.^2
ans =
4 1
36 81
20
Introduction à Matlab
>> linspace(1,10,4)
ans =
1 4 7 10
>> linspace(1,10,6)
ans =
1.0000 2.8000 4.6000 6.4000 8.2000 10.0000
>> linspace(1,10,8)
ans =
1.0000 2.2857 3.5714 4.8571 6.1429 7.4286 8.7143
10.0000
>> linspace(1,10,10)
ans =
1 2 3 4 5 6 7 8 9 10
21
Introduction à Matlab
- Pour 𝑙2 = 2
′
3 − 3 𝑥2
(A + 2I2 )X2 = 0 ⇔ ( )( ) = 0
6 − 6 𝑥2′′
3𝑥2′ − 3𝑥2′′ = 0
1
𝑥2 = ( )
1
Voici comment demander à Matlab de déterminer les valeurs propres et les vecteurs
propres d'une matrice.
>> A = [1 2 3 ; 4 5 6 ; 7 8 9] ;
VecA =
ValA =
16.1168 0 0
0 -1.1168 0
0 0 -0.0000
22
Graphisme
GRAPHISME
23
Graphisme
24
Graphisme
25
Graphisme
26
Graphisme
27
Graphisme
28
Graphisme
29
Graphisme
%Graphiques 3 dimensions
30
Graphisme
La fonction mesh trace un maillage (séries de lignes entre les points) tandis que la
fonction surf trace une surface. Ces fonctions prennent en argument 2 matrices
générées à partir de 2 vecteurs (x et y, pas nécessairement de même taille) et une
matrice Z de dimension (length(y),length(x)). Pour chaque point du plan (x(i),y(j)), elles
affichent la valeur (ou niveau) Z(j,i). Les 2 premières matrices obtenues à l’aide de la
fonction meshgrid définissent tous les points du quadrillage. En fait, le niveau Z(j,i) de
chaque point du maillage est calculé à partir des couples (X(j,i),Y(j,i)). Une quatrième
matrice peut être précisée pour définir une échelle de couleur associée au niveau du
maillage. Cette échelle est basée sur une palette de couleurs prédéfinie par la valeur
courante de la variable colormap.
31
Graphisme
% Normales de surfaces%
figure ; % Nouvelle Fenêtre
[x,y,z] = cylinder(1 :10) ; % Création d'un cylindre 3 dimensions
surfnorm(x,y,z) % Affichage des surfaces et normes
axis([-12 12 -12 12 -0.1 1]) % Etalonnage des axes
32
Graphisme
33
Résolution des Systèmes
34
Résolution des Systèmes
IV.1.Décompositions de matrice
Matlab permet de séparer des matrices selon plusieurs décompositions tels que LU, QR,
SVD, etc.
% | Décomposition de matrice
A = [ 1 2 3 ; 4 5 6 ; 7 8 9] ; % Défnition de A
[L U] = lu(A) % Décomposition LU
[Q R] = qr(A) % Décomposition QR
[U S V] = svd(A) % Décomposition USV
IV.2 Déterminant
Pour connaître le déterminant d'une matrice, il suffit d'utiliser la commande det
% Simplification d'équations
syms x ; % Déclaration des symboles
f = cos(x)^2 + sin(x)^2 ; % Fonction à simplifier
f = simple(f) % Simplification
f=
1
syms x ; % Déclaration des symboles
g = cos(3*acos(x)) ; % Fonction à simplifier
g = simple(g) % Simplification
g=
4*x^3 - 3*x
35
Résolution des Systèmes
IV.4.1Sommation symbolique
Matlab est capable de calculer les sommes symboliques.
1
% sommation symbolique de ∑∞
𝑛=1 𝑥
𝑛
et de ∑∞
ℎ=1 ℎ 4
>> syms x,h,n ; % Déclaration des symboles
S=
piecewise([1 <= x, Inf], [abs(x) < 1, -1/(x - 1)])
S=
pi^4/90
% Dérivée symbolique %
syms x ; % Déclaration des symboles
diff(sin(x^2)) % Dérivation symbolique
ans =
2*x*cos(x ^2)
36
Résolution des Systèmes
-t^2*sin(t*x)
diff(f,t,2)
ans =
-x^2*sin(t*x)
% Intégrale symbolique %
syms x ; % Déclaration des symboles
int(-2*x/(1 + x^2)^2) % Intégrale symbolique
ans =
1/(x^2 + 1)
% Intégrale de 0 à 1 %
syms x ; % Déclaration des symboles
int(x*log(1 + x), 0, 1) % Intégrale symbolique
ans =
1/4
% Intégrale symbolique de sin(t) à 1 %
syms x t ; % Déclaration des symboles
int(2*x, sin(t), 1) % Intégrale symbolique
ans =
cos(t)^2
37
Résolution des Systèmes
% Résolution symbolique
syms a b c x ; % Définition des symboles
solve('a*x^2 + b*x + c') % Résolution
ans =
-1/2*(b-(b^2-4*a*c)^(1/2))/a
-1/2*(b+(b^2-4*a*c)^(1/2))/a
syms t m; % Définition des symboles
solve('sin(t + m)') % Résolution
. ans =
-m
syms a b c x ; % Définition des symboles
solve('a*x^2 + b*x + c','b') % Résolution pour la variable b
ans =
-(a*x^2+c)/x
38
Résolution des Systèmes
%Exemple2
S=solve( 'b+2*a=1','b+a-c=2','a-c=0');
[S.a,S.b S.c]
ans=
[ -1/2, 2, -1/2]
3𝑥 + 𝑦 + 4𝑧 = −1
{ 𝑥 − 𝑦 + 2𝑧 = 1
4𝑥 − 𝑦 − 2𝑧 = 0
3 1 4 𝑥 −1
[1 −1 2 ] [𝑦] = [ 1 ]
4 −1−2 𝑧 0
39
Résolution des Systèmes
a=
3 1 4
1 -1 2
4 -1 -2
>> b=[-1;1;0]
b=
-1
>> x=inv(a)*b
x=
-0.1765
-0.9412
0.1176
40
Résolution des Systèmes
z=
[ C1*sin(t)+C2*cos(t), C1*cos(t)-C2*sin(t)]
41
Résolution des Systèmes
%Equation1
clc
clear all
y = dsolve('D2y + 3*Dy + 7*y = 0','y(0)=1','Dy(0)=0')
ezplot(y)
y =
cos((19^(1/2)*t)/2)/exp((3*t)/2) +
(3*19^(1/2)*sin((19^(1/2)*t)/2))/(19*exp((3*t)/2))
%Equation2
clc
clear all
y = dsolve('D2y + 8*Dy + 2*y = 0','y(0)=1','Dy(0)=2')
ezplot(y)
y=
%Equation 3
clc
clear all
y = dsolve('D2y + sqrt(2)*Dy + 0.1*y = 0','y(0)=0','Dy(0)=1')
ezplot(y)
y =
10^(1/2)/(4*exp(t*(2^(1/2)/2 - 10^(1/2)/5))) -
10^(1/2)/(4*exp(t*(2^(1/2)/2 + 10^(1/2)/5)))
42
Résolution des Systèmes
(C2*cos((19^(1/2)*t)/2))/exp((3*t)/2) +
C3*sin((19^(1/2)*t)/2))/exp((3*t)/2)
D’autres exemples
Commandes Matlab
Equations différentielles
𝑑𝑦
+ 4𝑦(𝑡) = 𝑒 −𝑡
𝑑𝑡 y = dsolve('Dy+4*y = exp(-t)', 'y(0) = 1')
avec y(0)=1
2𝑥 2 𝑦 ′′ + 3𝑥𝑦 ′ − 𝑦 = 0
y = dsolve('2*x^2*D2y + 3*x*Dy - y = 0','x')
avec ‘=d/dx
𝑑2𝑦
= 𝑥𝑦(𝑥) avec y(0)=0,
𝑑𝑥 2 y = dsolve('D2y = x*y','y(0) = 0',
1 'y(3) = besselk(1/3, 2*sqrt(3))/pi', 'x')
𝐾1 (2√3)
𝜋 3
43
Programmation
PROGRAMMATION
44
Programmation
V. Programmation
% Bonjour Monsieur
>> disp('Bonjour Monsieur')
Bonjour Monsieur
Opérateurs Définitions
< ………….est plus petit que………..
> ………….est plus grand que………
<= ………….est plus petit ou égal à….
>= ………….est plus grand ou égal à…
== ………….est égal à………………..
~= ………….n'est pas égal à………….
& ………….est vrai et ... aussi (pour tableaux)
| ………….est vrai ou ... est vrai, ou les deux (pour tableaux)
&& ………….est vrai et ... aussi…………..
|| ………….est vrai ou ... est vrai, ou les deux
~ …………..n'est pas vrai……………….
xor(x,y) …………..est vrai ou ... est vrai……….
Any(x) ................. vrai si un des éléments de x est non nul
All(x) ................. vrai si tous les éléments de x sont nuls
45
Programmation
Mots Signification
: Créer des vecteurs, des tableaux en indice, spécifiez pour boucle itérations
() Passer des arguments de fonction, la priorité des opérateurs
[] Construire ensemble, concaténer éléments, spécifier plusieurs sorties
de fonction
{} Construire matrice de cellules, index dans matrice de cellules
. Insérez point décimal, de définir le champ de structure, les méthodes
de l'objet de référence
.() Référence domaine dynamique de la structure
.. Référence répertoire parent
… Continuer la déclaration à la ligne suivante
, Rangées séparées, des arguments d'entrée / de sortie fonction distincte,
commandes distinctes
; Des colonnes distinctes de tableau, supprimer la sortie de la commande de
courant
% Insérez la ligne de commentaire dans le code
%% Insérez bloc de commentaires dans le code
! Commande d'émission de système d'exploitation
'' Construire tableau de caractères
@ Répertoire de classe de référence
V.4.1 Utilisateurs
Les commandes suivantes permettent l'interaction avec l'utilisateur lors de l'exécution
d'un script. L'utilisateur peut dans l'exemple ci-dessous saisir un nombre que le script
pourra alors utiliser. Dans le sens inverse la commande disp permet d'afficher des
variables à l'utilisateur.
% Exemple 1
n = input('Saisissez un nombre :') ; %Saisie de l'utilisateur
disp(n) ; %Sortie vers l'affichage Matlab
46
Programmation
V.4.2 Disques
Il est aussi possible d'exporter ou d'importer des données sur le disque dur via les deux
commandes suivantes.
% Exemple2
save 'D : ...save.txt' Sauvegarde le workspace
load 'D : ... save.txt' Charge le workspace
%Exemple 1
for n = 1 :5 % Boucle pour n allant de 1à 5 inclus par pas de 1
disp(n) % Affichage
end % Fin de boucle
%Exemple 2
for n = 8 :-2 :0 % Boucle pour n allant de 8 à 0 par pas de -2
disp(n) % Affichage
end % Fin de boucle
% | Exemple 3
for n = [ 1 9 3 5 6 7 ] % Boucle pour n égal chaque valeur du vecteur
disp(n) % Affichage
end % Fin de boucle
47
Programmation
% Exemple 1
n=5;
m=8;
while (n < 10 && m > 0) % Boucle tant que n est inférieur à 10 et m est supérieur
à0
n=n+1; % Incrémente n
m=m-1; % Décrémente m
disp(n) ; % Affichage
disp(m) ; % Affichage
end % Fin de boucle
L'instruction IF est une instruction de choix. Autrement dit, en fonction que son gardien
sera évalué vrai ou faux, la commande exécutera un groupe d'instructions ou l'autre.
%Exemple
n=5;
m=8;
if (n > 0) % Gardien 1
if ( n > 5 && m < 0) % Gardien 1 et gardien 2
disp ('ici 1') % Affichage
elseif (n == 5) % Si gardien1 et non gardien2 et gardien 3
disp ('ici 2') % Affichage
else % Si gardien1 et non gardien2 et non gardien 3
disp('ici 3') % Affichage
end
else % Si gardien 1 est faux
disp('ici 4') % Affichage
end
48
Programmation
%Exemple
n = input('Pour signaler l’arrivée de Ahmed tapez 1, Amine tapez 2, Salim tapez 3 :') ; %
Demande de saisie de l'utilisateur
switch n
case 1 % Si n vaut 1
disp('Ahmed est arrivé')
break
case 2
disp('Amine est arrivé') % Si n vaut 2
break
case 3
disp('Salim est arrivé') % Si n vaut 3
break
otherwise
disp('Autres personnes') % Si n est différent de 1,2,3
end
49
Programmation
. %Fonction simple
% Fonction isOdd
% Cette fonction prend en argument un nombre et renvoie
% true si ce nombre est impair, false si non.
% Argument : un nombre
% Valeur de retour : un boolean
% Code placé dans isOdd.m
function p = isOdd(n)
if (mod(n,2) == 1) % Si la division modulaire laisse un reste
p = true ; % Renvoie vrai
else
p = false ; % renvoie faux
end
% Fonction récursive
% Fonction factorial
% Cette fonction prend en argument un entier positif et renvoie la factorielle correspondante.
% Argument : un entier positif
% Valeur de retour : un entier positif
clc
clear all
n=input('donner la valeur de n=');
y=factorial(n);
disp(y)
50
Problèmes avec Solutions
51
Problèmes avec Solutions
clc
clear all
a=input('introduire a=');
b=input('introduire b=');
c=input('introduire c=');
if a==0
x1=-c/b;
disp('solution x1')
disp([x1])
end
delta=b^2-4*a*c;
if a~=0
if delta >0
disp('2 racines réelles')
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
disp([x1 x2])
elseif delta==0
disp('racine double')
x=-b/(2*a);
disp(x)
else
disp('2 racines complexes')
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
disp([x1 x2])
end
end
52
Problèmes avec Solutions
Remarque
b−a
A l’étape n, c appartient à l’intervalle de travail, qui a pour longueur
2n
D’une itération à la suivante, l’erreur est donc multipliée par 1/2
Exemple
On considère l’équation 10x − 9e−x = 0 La fonction f définie sur [0, 1] par f(x) =
10x − 9e−x est continue, dérivable, et sa dérivée f ‘ vérifie f ′ (x) = 10 + 9e−x > 0 donc f
est strictement croissante sur [0, 1]
De plus f(0) = −9 et f(1) = 10 − 9 /e ⋍ 6,69 sont de signes contraires.
On peut donc utiliser la méthode de dichotomie pour calculer à 10−6 prés la solution
de l’équation proposée.
Le nombre n de termes à calculer doit vérifier :
1−0
≤ 10−6
2n
Soit
ln(10−6 )
n≥
ln(2)
53
Problèmes avec Solutions
0.529832839965820 0.529833793640137
Conclusion
La méthode de dichotomie sert parfois de moyen de calcul d’une initialisation pour les
algorithmes des autres méthodes. L’inconvénient majeur de cette méthode est la lenteur
de convergence de son algorithme.
54
Problèmes avec Solutions
Majoration d’erreur
Si c est le point fixe de 𝜑 on a :
|𝑥1 − 𝑐| = |𝜑(𝑥0 ) − 𝜑(𝑐)| ≤ 𝑀|𝑥0 − 𝑐| < |𝑥0 − 𝑐|
|𝑥2 − 𝑐| = |𝜑(𝑥1 ) − 𝜑(𝑐)| ≤ 𝑀|𝑥1 − 𝑐| < |𝑥1 − 𝑐|
En réitérant, on voit bien qu’on s’approche de plus en plus de la racine : c’est le principe
des approximations successives. Plus précisément, on démontre par récurrence la
majoration d’erreur.
‖∀ 𝑛 ≥ 0 |𝑥𝑛 − 𝑐| ≤ 𝑀𝑛 |𝑥0 − 𝑐| ≤ 𝑀𝑛 |𝑏 − 𝑎|
55
Problèmes avec Solutions
Ainsi, la suite (𝑥𝑛 ) converge vers c puisque, M appartenant à ]1, 2[, on a: lim 𝑀𝑛 = 0
𝑛→∞
Test d’arrêt : fixons 𝜀 > 0. Pour que 𝑥𝑛 soit une valeur approchée de c à 𝜀 près, il suffit
que :
𝑀𝑛 |𝑏 − 𝑎| ≤ 𝜀
ln 𝜀 − ln|𝑏 − 𝑎|
𝑛>
ln 𝑀
Remarque
On peut construire graphiquement la suite des itérés (𝑥𝑖 ), à l’aide de la ligne polygonale
𝑥
[𝑀0 𝑁0 𝑀1 𝑁1 𝑀2 𝑁2 … ], où 𝑀𝑖 à pour coordonnées (𝑥𝑖 ) et 𝑁𝑖 à pour coordonnées
𝑖
𝑥𝑖
(𝜑(𝑥 )) = ( 𝑥𝑖 )
𝑖 𝑥𝑖+1
56
Problèmes avec Solutions
Exemple d’application
Pour calculer à 10−6 près la solution, dans l’intervalle [0,1] de l’équation :
9 −𝑥
𝑥= 𝑒
10
Par la méthode du point fixe, on procède comme suit :
Cette fonction est continue et dérivable sur [0,1] ;
Pour vérifier l’hypothèse 2, on étudie les variations de 𝜑 , en calculant 𝜑 ′
% vérification hypothèse 2
>> syms x ;
>> phiDeX = 9/10*exp(-x) ;
>> phiPrimeDeX = diff( phiDeX );
>> phiPrimeDeX = -9/10*exp(-x);
>> phiPrimeDeX = -9/10*exp(-x)
phiPrimeDeX =
-9/(10*exp(-x))
phiDe1 =
0.3311
phiDe1 =
0.9000
Donc, 𝜑(𝑥) prend ses valeurs dans l’intervalle [0.3311..., 0.9000...]⊂ [0,1], et
hypothèse 2 vérifiée.
Pour vérifier hypothèse 3, il faut en général étudier les variations de 𝜑 ′ , donc calculer
les 𝜑 ′′ , mais ici : |𝜑 ′ (𝑥)| = 𝜑(𝑥). Donc |𝜑 ′ (𝑥)| à pour maximum M=0.9.
Le nombre 𝑛0 de termes à calculer pour obtenir une valeur approchée de la solution
10 près est donné par :
−6
% vérification hypothèse 3
n0 =
D’où 𝑛0 = 132 ; on calcule les itérés successifs :
132
57
Problèmes avec Solutions
% vérification hypothèse 3
>> X(1) = 0 ;
>> for i = 1 :132 X(i+1) = 9/10*exp(-X(i)) ; end
>> format short
>> X(1 :6)
ans =
ans =
0.529832965633434
Vitesse de convergence
Elle dépend de la valeur de M (voir hypothèse 3) :
– Si M est proche de 1, la convergence est lente. On a vu dans l’exemple précédent, où
M=0.9 qu’il fallait 132 termes pour obtenir une précision de є=10−6
– Si M=0.5, on retrouve la vitesse de convergence de la méthode de dichotomie.
– Si est proche de 0, on a une convergence rapide.
58
Problèmes avec Solutions
Remarque
Cette suite est celle permettant de chercher le point fixe de la fonction
𝑓(𝑥)
𝜑: 𝑥 ⟼ 𝜑(𝑥) = 𝑥 −
𝑓 ′ (𝑥)
φ est dérivable si, et seulement si, f l’est. Cela conduit à ajouter l’hypothèse suivante
sur f :
f est deux fois dérivable sur [a, b] (Hypothèse 5.)
VI.4.2 Théorème
Sous les hypothèses 1, 2, 3, 4 et 5 et pour x0 choisi suffisamment proche de l’unique
racine c la suite des itérés de Newton converge vers c.
On admettra ce théorème dont l’idée de démonstration repose sur le fait que la
fonction φ vérifie toutes les hypothèses du point fixe dans un voisinage de c.
59
Problèmes avec Solutions
𝑓(𝑥)𝑓 ′′ (𝑥)
𝜑 ′ (𝑥) =
(𝑓 ′ (𝑥))2
Et donc au point c 𝜑 ′ (𝑐) = 0
La formule de Taylor-Lagrange à l’ordre deux donne l’existence d’un 𝜂 Δ ∈ ]𝑎, 𝑏[ tel que :
1
𝜑(𝑥)= 𝜑(𝑐) + (𝑥 − 𝑐)𝜑 ′ (𝑐) + 2 (𝑥 − 𝑐)2 𝜑 ′′ (𝜂)
1
𝜑(𝑥) = 𝑐 + (𝑥 − 𝑐)2 𝜑 ′′ (𝜂)
2
1
D’où |𝜑(𝑥) − 𝑐| = 2 (𝑥 − 𝑐)2 |𝜑 ′′ (𝜂)|
1
≤ 𝑀 |𝑥 − 𝑐| 2
2 2
Où 𝑀2 = max |𝜑 ′′ (𝑥)|
𝑥∈[𝑎,𝑏]
En appliquant cette majoration aux itérés 𝑥𝑛 = 𝜑(𝑥𝑛−1 ) et en supposant que pour tout n,
𝑥𝑛 ∈ [𝑎, 𝑏], il vient :
1 1
𝑀2 |𝑥𝑛 − 𝑐| ≤ 𝑀2 |𝑥𝑛−1 − 𝑐| 2
2 2
On montre par récurrence sur n :
1 1 𝑛
𝑀2 |𝑥𝑛 − 𝑐| ≤ 𝑀2 |𝑥0 − 𝑐| 2
2 2
Par exemple, si on choisit l’initialisation 𝑥0 telle que :
1
|𝑥0 − 𝑐| ≤
5𝑀2
2 𝑛
|𝑥𝑛 − 𝑐| ≤ 10−2
𝑀2
60
Problèmes avec Solutions
Exemple d’application
L’étude de la fonction f définie sur [0,1] par : f(x) = 10x − 9e−x
Les hypothèses de 1 à 4 sont vérifiées : f ′ : x ↦ 10 + 9e−x
Est elle même dérivable, donc l’hypothèse 5 est vérifiée.
𝑥0 =0; on calcule les huit premiers itérés de la méthode de Newton :
>> fDeX=10*x-9*exp(-x);
>> fPrimeDeX=diff(fDeX) ;
>> X(1)=1 ;
for i=1 :7
X(i+1)=X(i)-double(subs(fDeX,x,X(i))/subs(fPrimeDeX,x,X(i))) ;
end
>> X
X =
Columns 1 through 4
Columns 5 through 8
61
Problèmes avec Solutions
VI.5 Introduction
Dans le domaine des sciences de l'ingénieur et parfois même dans le domaine des
sciences humaines, on a souvent besoin d’établir un modèle mathématique liant
plusieurs séries de données expérimentales. Dans le logiciel Matlab, diverses fonctions
(polyfit, interp1,..) ainsi que la commande cftool sont utilisées pour ajuster ces
données.
On se donne une fonction f définie sur un intervalle fermé borné [ a, b ] ainsi qu’un
vecteur x=(x1, x2, …xn ) d’abscisses tel que x1=a, xn=b et xk<xk+1 avec k=1,…n-1. On
définit le vecteur y=(y1, y2,…yn) par yk=f(xk) pour k=1,…n. On se propose de chercher
l’unique polynôme P de degré inférieur ou égal à n-1tel que P(xk)=yk pour k=1,…n. Une
manière de le faire consiste à exprimer ce polynôme à l’aide des polynômes de Lagrange
basés sur les abscisses d’interpolation xi, i=1,…,n. Le ième polynôme de Lagrange s’écrit:
n x − xj
Li ( x) = ; On remarque que Li (xi)=1 si i=1,…,n et que Li (xj)=0 si i j .
j =1, j i xi − x j
n
Notre solution s’écrit alors: y L ( x) .
i =1
i i
62
Problèmes avec Solutions
-Régression exponentielle
Nous voulons approximer des données par une loi exponentielle: y = aebx .
Elle peut être aussi réduite à une régression linéaire, en prenant le logarithme:
lny=lna+bx
Les masses volumiques du matériau pour différentes températures sont données par le tableau
ci-dessous :
I 1 2 3
Température T(en°C) 94 205 371
Masse volumique R(T) (en kg/m3) 929 902 860
VI.5.2 Approximation
Exemple1
T [°C] 0 2 4 6 8 10 12 14 16 18
R 0.99987 0.99997 1.0000 0.99997 0.99988 0.99973 0.99953 0.99927 0.99897 0.99846
[kg/m3]
T [°C] 20 22 24 26 28 30 32 34 36 38
R 0.99805 0.99751 0.99705 0.99650 0.99664 0.99533 0.99472 0.99409 0.99333 0.99326
[kg/m3]
63
Problèmes avec Solutions
1°) Tracer le graphe R en fonction de T. Utiliser la fonction polyfit pour ajuster ces
données. Comparer les coefficients de ces polynômes du second et du troisième
degré avec ceux déterminés par cftool.
Exemple 2
Année 1961 1964 1967 1970 1973 1976 1979 1982 1984
Tonnes 1900 9500 21200 43300 80300 101600 154900 146300 154500
%****************************************
% Interpolation polynomiale de Lagrange *
%****************************************
clc;
clear;
T=[94 205 371];
R=[929 902 860];
Ti=[251 305 800];
Ri=lag(T,R,Ti)
%Sous-programme lag.m
function Ri=lag(T,R,Ti)
Ri=zeros(size(Ti)); % Initialisation des Ti
n=length(R); % Nombre de points
for i=1:n
y=ones(size(Ti));
for j=1:n
if i~=j
y=y.*(Ti-T(j))/(T(i)-T(j));
end
end
Ri=Ri+y*R(i);
end
%Compilation de interpol.m
64
Problèmes avec Solutions
Solutions de l'approximation
Exemple1
>> rho=[0.99987 0.99997 1.00000 0.99997 0.99988 0.99973 0.99953 0.99927 0.99897
0.99846... 0.99805 0.99751 0.99705 0.99650 0.99664 0.99533 0.99472 0.99409
0.99333 0.99326];
>> C2=polyfit(T,rho,2)
>> cftool(T,rho)
p3 = 1 (0.9998, 1)
>> C3=polyfit(T,rho,3)
>> cftool(T,rho)
p4 = 0.9998 (0.9995, 1)
1
1 rho vs. T
rho vs. T
fit 1
fit 1 0.999
0.999
0.998 0.998
0.997 0.997
0.996 0.996
0.995 0.995
0.994 0.994
0.993
0.993
0 5 10 15 20 25 30 35 0 5 10 15 20 25 30 35
65
Problèmes avec Solutions
Exemple2
4
x 10
masse vs. x
16
fit 1
14
12
10
5 10 15 20
66
Problèmes avec Solutions
VI.6 Introduction
Dans cette partie, nous allons programmer quelques méthodes d’intégration numérique
élémentaires et plus élaborées d’une fonction entre deux bornes. On souhaite écrire un
algorithme permettant de résoudre numériquement les intégrales.
f ( x)dx I TN =
h
f (a) + f (b) + h f ( xi )
a
2 i =1
2h M −1
b
h 4h M
a f ( x)dx I SN =
3
( f ( a ) + f (b )) +
3 i=1
f ( x2 i ) + f ( x2i−1 )
3 i=1
VI.6.3 Intégration en formule de quadrature de Tchébychev:
(b − a ) n
b
f ( x)dx I TcN =
n i=1
f ( xi )
a
b+a b−a
xi = + ti
2 2
(b − a ) n
b
f ( x)dx I TcN =
n
i =1
Ai f ( xi )
a
b+a b−a
xi = + ti
2 2
Exemple d'application
1
Calculer I =
−1
2 + x dx par ces 4 méthodes.
67
Problèmes avec Solutions
function I=integ_tra(a,b,N,f)
%Détermination du pas
h=(b-a)/N;
NM1=N-1;
I=0;
for i=1:NM1
x=a+i*h;
I=I+feval(f,x);
end
I=h*(feval(f,a)+feval(f,b))/2+h*I;
function I=integ_simp(a,b,N,f)
%Détermination du pas
h=(b-a)/N;
M=N/2;
I1=0;
I2=0;
for i=1:M
x=a+h*(2*i-1);
I1=I1+feval(f,x);
end
MM1=M-1;
for i=1:MM1
x=a+h*2*i;
I2=I2+feval(f,x);
end
I=h*(feval(f,a)+feval(f,b)+4*I1+2*I2)/3;
function I=integ_Tche(f,a,b,T)
N=length(T);
x=zeros (1,N);
x=(a+b)/2+(b-a)/2*T;
s=0;
for i=1:N
s=s+feval(f,x(i));
end
I=(b-a)/N*s;
function I=integ_GaussLegendre(a,b,T,A,f)
N=length(T);
x=zeros(1,N);
x=((a+b)/2)+((b-a)/2)*T;
I=((b-a)/2)*sum(A.*feval(f,x));
68
Problèmes avec Solutions
%Calculs symboliques
>> f=inline('sqrt(2+x)');
>> I=integ_ELEM('trapeze',-1,1,10,f)
I = 2.7967
>> f=inline('sqrt(2+x)');
>> I=integ_ELEM('simpson',-1,1,10,f)
I = 2.7974
>> f=inline('sqrt(2+x)');
>> T=[-0.832498 -0.374541 0 0.374541 0.832498];
>> I=integ_Tche(f,-1,1,T)
I =2.7974
>> f=inline('sqrt(2+x)');quad(f,-1,1)
ans = 2.7974
>> f=inline('sqrt(2+x)');
>> T=[-0.90617985 -0.53846931 0 0.53846931 0.90617985];
>> A=[0.23692688 0.47862868 0.56888889 0.47862868 0.23692688];
>> I=integ_GaussLegendre(-1,1,T,A,f)
I = 2.7974
>> syms x f
>> f=sqrt(2+x);I=int(f,-1,1)
I = -2/3+2*3^(1/2)= 2.7974
69
Problèmes avec Solutions
VI.7 Introduction
h
yi +1 = yi + (k1 + 2k 2 + 2k 2 + k 4 ) avec
6
k1 = f ( yi , ti )
k1
k 2 = f ( yi + , ti +1/ 2 ) ,
2
k
k3 = f ( yi + 2 , ti +1/ 2 ) et
2
k4 = f ( yi + k3 , ti+1 )
h
Prédiction (explicite): yi +1 = yi + (−9 f i −3 + 37 f i−2 − 59 f i−1 + 55 f i )
24
h
Correction (implicite): yi +1 = yi + ( f i−2 − 5 f i −1 + 19 f i + 9 f i+1 )
24
Exemple d'application
dy (t − y )
= f ( y, t ) =
dt 2
y (0) = 1
70
Problèmes avec Solutions
%******************************************
%RESOLUTION NUMERIQUE D'UNE EQUATION % DIFFERENTIELLE PAR LA
METHODE DE
% RUNGE-KUTTA
********************************************
format long
h=1/8;
t=0:h:3;
N=length(t);
NM1=N-1;
y(1)=1;
for i=1:NM1
k1=h*amine(t(i),y(i));
k2=h*amine(t(i)+h/2,y(i)+k1/2);
k3=h*amine(t(i)+h/2,y(i)+k2/2);
k4=h*amine(t(i)+h,y(i)+k3);
y(i+1)=y(i)+(k1+2*k2+2*k3+k4)/6;
end
[t;y]'
%********************************************************
%RESOLUTION NUMERIQUE D'UNE EQUATION DIFFERENTIELLE PAR
%LA METHODE PREDICTEUR-CORRECTEUR (ADAMS-BASHFORD-
MOULTON)
%*********************************************************
format long
h=1/8;
t=0:h:3;
N=length(t);
NM1=N-1;
y(1)=1;
% AMORCAGE PAR LA METHODE DE RUNGE-KUTTA
for i=1:3
k1=h*amine(t(i),y(i));
k2=h*amine(t(i)+h/2,y(i)+k1/2);
k3=h*amine(t(i)+h/2,y(i)+k2/2);
k4=h*amine(t(i)+h,y(i)+k3);
y(i+1)=y(i)+(k1+2*k2+2*k3+k4)/6;
end
%
71
Problèmes avec Solutions
function dydt=amine(t,y)
dydt=(t-y)/2;
%Calcul symbolique
>> syms t y
>> y=dsolve('Dy=(t-y)/2','y(0)=1')
y =t-2+3*exp(-1/2*t)
>> t=0:1/8:3;
>> N=length(t) ;
>> for i=1:N
y(i)=t(i)-2+3*exp(-1/2*t(i));
end
>> [t;y]'
>> [t,y]=ode45(@amine,[0:1/8:3],1)
>> [t;y]'
72
Problèmes avec Solutions
73
Références Bibliographiques
REFERENCES BIBLIOGRAPHIQUES
74
Références Bibliographiques
Références bibliographiques
10. Luc Jolivet, Rabah Labbas. "Analyse et Analyse Numérique", ISBN: 2-7462-
0993-4, Lavoisier, Paris, 2005.
11. Ionut Danaila, Pascal Joly, Sidi Mahmoud Kaber, Marie Postel. "Introduction au
calcul scientifique par la pratique", ISBN : 2 10 0048709 4, Dunod, Paris, 2005.
75