Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Option : PM (S1)
v.1.1 Octobre 2021
Table des matières
1 Introduction à l'algorithmique 2
1.1 Algorithmique et programmation . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1 A quoi servent les variables ? . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 Déclaration des variables . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3 Les types de variables . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 L'instruction d'aectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 Syntaxe et signication . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2 L'Ordre des instructions . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.3 Expressions et opérateurs . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Lecture et Ecriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2 Les instructions de lecture et d'écriture . . . . . . . . . . . . . . . . . 8
1.5 Les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.1 Structure d'un test . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.2 Denition d'une condition . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.3 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . 10
1.5.4 Conditions composées . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.5 Tests imbriqués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.6 Variables Booléennes . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.6 Une première structure de boucle . . . . . . . . . . . . . . . . . . . . . . . . 13
1.7 Boucler en comptant ou compter en bouclant . . . . . . . . . . . . . . . . . . 14
1.7.1 Des boucles dans des boucles . . . . . . . . . . . . . . . . . . . . . . 14
1.8 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
i
TABLE DES MATIÈRES ii TABLE DES MATIÈRES
3 Intégration numérique 35
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2 Méthode des rectangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.1 Principe de La méthode . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.2 Evaluation de la méthode des rectangles . . . . . . . . . . . . . . . . 36
3.3 Méthode des trapèzes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.1 Estimation de l'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4 Méthode de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5 Méthode de Monte-Carlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.6 conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5 Résolution des ED 48
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.1.1 Un modèle de dynamique des populations . . . . . . . . . . . . . . . 48
iii
Introduction générale
Le but de ce module est donné les outils nécessaires pour la résolution des problèmes
des sciences de physique et de l'ingénieries par des méthodes numériques. Pour cela, nous
donnons dans un premier lieu nous donnons dans le chapitre 1 une introduction sur l'algorith-
mique et ces principaux instruction pour concevoir des algorithmes de qualité simpliant la
traduction en langage de programmation, pour nous on s'intéressera à la programmation avec
Matlab qui sera déni dans le chapitre 2. Le choix du langage Matlab réside dans sa richesse
sur plusieurs champs d'applications, il peut être étendu aux systèmes non linéaires et aux
problèmes associés de simulation avec le produit complémentaire SIMULINK. Les capacités
de MATLAB peuvent en outre être enrichies par des fonctions spécialisées regroupées au sein
de dizaines de "toolboxes" (boîtes à outils qui sont des collections de "M-les") couvrant des
domaines très variés tels que :
Analyse numérique
Traitement de signaux et d'image
Statistiques
Logique oue
Finance
Bio-informatique
Économie
Aérospatial
Communications
Optimisation
... etc
Par la suite nous utilisons ce qui précède pour le calcul numérique d'un intégral : Inté-
gration numérique par la méthode des rectangles, la méthode des trapèzes et les méthode de
Simpson. La recherche des zéros des fonctions non linéaires en utilisant la méthode de Dicho-
tomie, la méthode de points xes et la méthode de Newton. Et on termine par la résolution
numériques des équations diérentielles ordinaires(edo).
1
Chapitre 1
Introduction à l'algorithmique
Un algorithme est une suite d'instructions, qui une fois exécutée correctement, conduit à
un résultat donné.
Pour fonctionner, un algorithme doit donc contenir uniquement des instructions compré-
hensibles par celui qui devra l'exécuter.
Les ordinateurs.
Ne sont capables de comprendre que quatre catégories d'ordres (en programmation, on
n'emploiera pas le terme d'ordre, mais plutôt celui d'instructions). Ces quatre familles
d'instructions sont :
• l'aectation de variables
• la lecture / écriture
• les tests
• les boucles
2
1.2. LES VARIABLES CHAPITRE 1. 3 INTRODUCTION À L'ALGORITHMIQUE
N.B. En pseudo-code, une chaîne de caractères est toujours notée entre guille-
mets. et ceux pour éviter deux confusions possibles :
1. La confusion entre des nombres et des suites de chires. Par exemple, 423 peut repré-
senter le nombre 423 (quatre cent vingt-trois), ou la suite de caractères 4, 2, et 3. Avec
le premier, on peut faire des calculs, avec le second, on ne peut pas. les guillemets
permettent d'éviter toute ambiguïté.
2. L'autre confusion, plus grave - consiste à se mélanger les pinceaux entre le nom d'une
variable et son contenu. cela consiste à confondre l'étiquette d'une boîte et ce qu'il y
a à l'intérieur.
Soit deux variables de type numérique, par exemple, X et Y ayant respectivement comme
valeurs x et y ; quelles sont les aectations qui donneront à X la valeur y et à Y la valeur x ?
Remarque :
N.B. L'instruction d'aectation ne modie que ce qui est situé à gauche de la èche.
B ←A+4
Si A contenait 12, B vaut maintenant 16. De même que précédemment, A vaut toujours 12.
B ←B+1
Si B valait 6, il vaut maintenant 7. La valeur de B est modiée, puisque B est la variable
située à gauche de la èche.
Exemple n◦ 1
Début
tau ← "std"
F ← "tau"
Fin
Exemple n◦ 2
Début
tau ← "std"
F ← tau
Fin
Commentaire
• La seule diérence entre les deux algorithmes (des exemples 1 et 2) consiste dans la
présence ou dans l'absence des guillemets lors de la seconde aectation. Et cela change tout !
=⇒ Dans l'exemple n◦ 1, ce que l'on aecte à la variable F, c'est la suite de caractères t - a -
u. Et à la n de l'algorithme, le contenu de la variable F est donc "tau".
Dans l'exemple n◦ 2, en revanche, tau étant dépourvu de guillemets, n'est pas considéré comme
une suite de caractères, mais comme un nom de variable. Le sens de la ligne devient donc :
" aecte à la variable F le contenu de la variable std.
A la n de l'algorithme n◦ 2, la valeur de la variable F est donc " std ". Ici, l'oubli des
guillemets conduit certes à un résultat, mais à un résultat diérent.
ceci résume l'ensemble des problèmes qui surviennent lorsqu'on oublie les guillemets aux
chaînes de caractères.
L'exemple 1 donne comme résultat nal : A = 12, tandis l'exemple 2 donne A = 34, ce
qui implique que l'execution se fait ligne après ligne c-à-d séquentielle.
Variable A en Numérique
Début
A ← 12
Fin
•Exemple 2
Variable A en Numérique
Début
A ← 34
Fin
c'est-à-dire c'est pas bien de donner à une variable une valeur puis en la change par une
autre ! ! !
Opérateurs numériques
Ce sont les quatre opérations arithmétiques tout ce qu'il y a de classique. + : addition,
- : soustraction, * : multiplication et / : Division. Mentionnons également le ∧ qui signie
puissance. 45 au carré s'écrira donc 452 . Enn, on a le droit d'utiliser les parenthèses, avec
les mêmes règles qu'en mathématiques. La multiplication et la division ont " naturellement "
priorité sur l'addition et la soustraction. Les parenthèses ne sont ainsi utiles que pour modier
cette priorité naturelle. Cela signie qu'en informatique, 12 ∗ 3 + 5 et (12 ∗ 3) + 5 valent même
chose, à savoir 41. En revanche, 12 ∗ (3 + 5) vaut 12 ∗ 8 soit 96.
ne pas faire cette confusion consiste à bien employer le signe ← en pseudo-code, signe qui a
le mérite de ne pas laisser place à l'ambiguïté. Une fois acquis les bons réexes avec ce signe,
vous n'aurez plus aucune diculté à passer au = des langages de programmation.
C1 N onC1
C1V rai F aux
C1F aux V rai
Dans l'algorithme précédent, on oblige la machine à examiner trois tests successifs alors que
tous portent sur une même chose, la valeur de la variable Temp. Il serait ainsi bien d'imbriquer
les tests de cette manière :
Variable Temp en Entier
Début
Ecrire "Entrez la température de l'eau :"
Lire Temp
Si (T emp =< 0) Alors
Ecrire "C'est de la glace"
Sinon
Si (T emp < 100) Alors
Ecrire "C'est du liquide"
Sinon
Ecrire "C'est de la vapeur"
Finsi
Finsi
Fin
le dernier algorithme s'écrit sous une autre forme :
Variable Temp en Entier
Début
Ecrire "Entrez la température de l'eau :"
Lire Temp
Si Temp =< 0 Alors
Ecrire "C'est de la glace"
SinonSi Temp < 100 Alors
Ecrire "C'est du liquide"
Sinon
Ecrire "C'est de la vapeur"
Finsi
Fin
Dans le cas de tests imbriqués, le Sinon et le Si peuvent être fusionnés en un
SinonSi. On considère alors qu'il s'agit d'un seul bloc de test, conclu par un seul
FinSi
SinonSi B Alors
Ecrire "C'est du liquide"
Sinon
Ecrire "C'est de la vapeur"
Finsi
Fin.
A priori, cette technique ne présente guère d'intérêt : on a alourdi plutôt qu'allégé l'algorithme
de départ, en ayant recours à deux variables supplémentaires.
• Il est clair que presque dans la plupart des algorithmes on rencontre des tests. Ce qui
nous amène à bien optimisé nos algorithmes si on ait plus d'un test ou bien si on on a des
tests dans des tests (tests imbriqués).
• A noter que pour une bonne lisibilité de l'algorithme on note les tests entre parenthèses.
exemple de structure
Variables Tr, Ta en Entier
Pour Tr ← 1 à 15
Ecrire "Il est passé par ici"
Tr Suivant
Pour Ta ← 1 à 6
Ecrire "Il repassera par là"
Ta Suivant
Ici, il y aura quinze écritures consécutives de "il est passé par ici", puis six écritures
consécutives de "il repassera par là" , et ce sera tout. Si des boucles peuvent être imbriquées
(cas n◦ 1) ou successives (cas n◦ 2), elles ne peuvent jamais, au grand jamais, être croisées.
Cela n'aurait aucun sens logique, et de plus, bien peu de langages vous autoriseraient ne
serait-ce qu'à écrire cette structure aberrante.
Variables Tr, Ta en Entier
Pour Tr ...
instructions
Pour Ta ...
instructions
Tr Suivant
instructions
Ta Suivant
Variable Tr en Entier
Pour Tr ← 1 à 15
Tr ← Tr * 2
Ecrire "Passage numéro : ", Tr
Tr Suivant
Vous remarquerez que nous faisons ici gérer " en double " la variable Tr, ces deux gestions
étant contradictoires. D'une part, la ligne " Pour... " augmente la valeur de Tr de 1 à chaque
passage. D'autre part la ligne " Tr ← Tr * 2 " double la valeur de Tr à chaque passage. Il
va sans dire que de telles manipulations perturbent complètement le déroulement normal de
la boucle, et sont sources d'exécutions erratiques.
1.8 Conclusion
Dans ce chapitre nous avons présenté les quatres principaux instructions de l'algorith-
mique à savoir :
fournit de point de vu fonction prédénis ainsi que la simplicité de traçage des fonctions 2D
et 3D.
2.1 Programmation
2.1.1 Introduction
Au démarrage du logiciel Matlab nous trouvons Les caractères >> en début de ligne
constituent le prompt de Matlab. C'est après eux que vous pouvez taper des commandes
qui seront exécutées par le logiciel après avoir tapé sur la touche entrée du clavier (gure
4.1).
17
2.1. PROGRAMMATION
CHAPITRE 2. 18
INITIATION À LA PROGRAMMATION AVEC MATLAB
Remarque :
Si vous tapez un ; après la ligne de commande le résultat ne s'achera pas.
Par défaut, Matlab utilise la représentation "short" (4 chires après la virgule).
Si vous tapez >> format long, la représentation devient 15 chires après la virgule.
Pour écrire écrire des commentaires (explication d'une instruction) il sut de précéder
le commentaire par un %, par exemple :
>> A=[1 2 3 ; 2 5 7] % A est une matrice 2 ligne 3 colonnes.
2.1.3 Vecteurs
Pour dénir un vecteur vous pouvez utiliser une syntaxe parmi les suivantes :
>> v = [1 2 3] % v est un vecteur ligne de 3 éléments
>> v 0 % transposé du vecteur v
>> vect = [1; 2; −1; 4] % vect est un vecteur colonne de 4 éléments
>> a = [1; 2 + i; −1; 4] % est un vecteur colonne de complexe de 4 éléments
>> b = a0 % est le transconjugué de du vecteur a
>> w = vect + a % est la somme de deux vecteurs a
>> c = vect0 . ∗ v % est le produit de deux matrices terme à terme
>> m = a.4 % est une mise en puissance 4 de chaque terme
Remarque :
Les composantes, dans un vecteur, sont séparées par des blancs (chose n'est pas conseillé)
ou de préférence par des virgules pour les vecteurs lignes et par des points-virgules pour les
vecteurs colonnes. Des messages erreurs sont achés si une opération impossible est tentée
(par exemple l'addition de vecteurs de longueurs diérentes).
Si vous voulez créer un vecteur à pas xe (incrémenter) vous pouvez utiliser la syntaxe
suivante : >> v = 1 : 3.2 : 23 % vecteur a incrément constant de 3.2
2.1.4 Matrices
La dénition des matrices sous Matlab suit la même syntaxe que les vecteurs, les lignes
de la matrice sont séparés par des points virgule ( ;). Pour dénir une matrice on peut écrire :
>> M = [1 2 3; −1 2 7] % M est une matrice 2 lignes 3 colonne
ou bien sous cette forme :
>> M = [1, 2, 3; −1, 2, 7] % M est une matrice 2 lignes 3 colonne
De même, vous pouvez multiplier deux matrice à condition que le nombre de lignes de la
première matrice soit égal au nombre de colonne de la deuxième matrice.
>> N = [1, −1; −1, 2; 4, 7] % M est une matrice 2 lignes 3 colonne
>> R = M ∗ N % R est le produit des deux matrices M et N
Vous pouvez extraire une ligne à partir d'une matrice comme suit :
>> D = M (1, :) % D est un vecteur constitué avec les éléments de la première ligne de la
matrice M
Comme le logiciel Matlab est logiciel basé sur le calcul matricielle il nous fournis des matrices
prédénis par exemple :
.
{.. instructions de la fonction
end
où nom_f onction est le nom de la fonction, x1 , ....xn , les n arguments d'entrée et [y1 , ...ym ]
les m arguments de sortie.
Le passage des arguments d'entrée dans les fonctions se fait par valeur. Aussi, même si elles
sont modiées dans la fonction les valeurs des paramètres ne sont pas modiées dans le pro-
gramme appelant.
Si une des variables de la procédure n'est pas dénie à l'intérieur de celle-ci elle doit obliga-
toirement être fournie en argument d'entrée.
La récupération des valeurs calculées par la fonction se fait par les paramètres de sortie
([y1 , ..., yn ] dans la dénition de nom_f onction ci-dessus).
Prenons l'exemple d'une fonction angle, qui doit calculer l'angle formé par le segment
d'extrémités (0, 0) et (x, y) avec l'horizontale et aussi le dessiner. On peut créer le chier
angle.m contenant les lignes :
f unction[s] = angle(x, y)
s = 180 ∗ atan(y/x)/pi;
patch([x, 0, x], [0, 0, y],0 y 0 )
axisequal
On sauvegarde ce chier sous le nom angle.m, puis dans la fenêtre de commandes on tape :
>> angle(4,5)
Il faut bien noté que Le nom du chier contenant la fonction porte obligatoirement le nom de
cette dernière. On peut mettre plusieurs fonctions dans le même M-le mais seule la fonction
du même nom que le chier peut être utilisée, appelée, à partir de la fenêtre de commandes
ou d'une autre fonction ou d'un script. Les autres fonctions éventuellement stockées dans le
chier peuvent s'appeler entre elles mais ne sont pas visibles de l'extérieur.
S'il n'y a qu'un résultat comme dans l'exemple de la fonction angle, on peut se dispenser
de le récupérer dans une variable. En revanche s'il y a plus d'un paramètre de sortie, il faut
récupérer leurs valeurs dans des variables dans le script d'appel. Regardons par exemple
l'utilisation de la fonction polaire dénie ci-dessous et sauvée dans le chier polaire.m
f unction[r, theta] = polaire(x, y)
r = sqrt(x2 + y 2 );
theta = atan(y/x);
Dans la fenêtre, pour appeler la fonction, Matlab on tape une des instructions suivantes :
>> r=polaire(2,3) % Si nous somme intéressé seulement par le rayons ou bien
>> polaire(2,3)
ans =
3.6056
ou bien
>>[r,t]=polaire(2,3) % si on veut récupérer à la fois le rayon et l'angle
r=
3.6056
t=
.9828
Instruction Description
nargin nombre d'arguments d'entrée d'une fonction
nargout nombre d'arguments de sortie d'une fonction
error interrompt l'exécution de la fonction, ache le message d'erreur
et retourne dans le programme appelant.
warning imprime le message mais ne retourne pas dans le programme appelant
pause interrompt l'exécution jusqu'à ce que l'utilisateur tape un return
pause(n) interrompt l'exécution pendant n secondes.
pause o indique que les pause rencontrées ultérieurement doivent être ignorées,
ce qui permet de faire tourner tous seuls des scripts requièrent normalement
l'intervention de l'utilisateur.
break sort d'une boucle while ou for.
return retourne dans le programme appelant sans aller jusqu'à la n de la fonction.
p(x) = x2 − x − 2
On peut écrire les instructions suivantes : >> p = inline(0 x2 − x − 20 )
>> x = f zero(p, −2.3)
ou bien : >> x = f zero(p, 2)
2) Trouver un zéro de la fonction paramétrée dénie par :
>> p = inline(0 x2 − a ∗ x − 20 ,0 x0 ,0 a0 ) % df initiondelaf onction >> a = 1
% df initionduparamtre
>> p(2, a) % doitrenvoyer0 >> y = f zero(p, 3, optimset(0 disp0 ,0 of f 0 ), a) Le 3me argument
de f zero indique qu'on ne veut pas acher les messages éventuels. Le 4me (et suivant)
argument passe le paramètre supplémentaire de la fonction (ici a). p(y, a) doit renvoyer 0.
Une description plus détaillée de la fonction f zero, mais en anglais... est bien sûr disponible
dans l'aide en ligne.
11
x=
16
Il faut bien noté que les deux types de boucles peuvent être interrompus par l'instruction
break . Dans les boucles imbriquées break n'interrompt que la boucle la plus interne.
• Deuxième variante
La traduction (d'un test simple) sous Matlab peut être comme suit : if (condition)
instruction1
...
instructionn
end
A noter que la condition peut être simple ou composée.
Exemple :
if ((a < 0&b < 0)k(a > 0&b > 0))
disp(' le produit de a et b est positif ')
end
Avec une autre variante où on a deux possibilités :
if (condition)
instructions1
else
instructions2
end
Si la condition n'est pas vérier alors les instructions 2 sont exécutées.
On peut trouver des tests imbriqué (l'une dans l'autre) comme suit :
if (condition1)
instructions 1
elseif (condition2)
instructions 2
elseif (condition3)
instructions 3
...
else (conditionN )
instructions N
end
Remarque :
On parle parfois de conditions au lieud'instructions la plus utilisé en programmation.
On a aussi la possibilité d'utiliser le switch-case, qui a son équivalent dans le langage C.
switch expression
case case_expr
commande,... ,commande
case case_expr1,case_expr2,case_expr3,...
commande,... ,commande
... otherwise
commande,... ,commande
end Cet élément de syntaxe permet de gérer plus élégamment les tests portant sur un seul
critère pouvant prendre plus de deux valeurs entières, comme dans l'exemple suivant
n=round(10*rand(1,1)) % plus proche valeur entière ex round (3.2)=3 et round (3.6)=4
switch n
case 0
f printf ('cas numero 0')
case 1
f printf ('cas numero 1')
case 2
f printf ('cas numero 2')
otherwise
f printf ('autre cas')
end
2.5 La Lecture
La commande input permet de demander à l'utilisateur d'un programme de fournir des
données. La syntaxe est var = input(' tapper la valeur de ...'). La phrase tapper la valeur
de ... est achée et MATLAB attend que l'utilisateur tape une donnée au clavier. Cette
donnée peut être une valeur numérique ou une instruction MATLAB. Une valeur numérique
est directement aectée à la variable var tandis qu'une instruction MATLAB est évaluée et
le résultat est aecté à la variable var. Il est possible de provoquer des sauts de ligne pour
aérer le présentation en utilisant le symbole \n de la manière suivante : var = input('\ n
une phrase :\ n ').
Pensez à mettre un point virgule ( ;) à la n de l'instruction si vous ne souhaitez pas voir
s'acher var =.
Sous cette forme il est impossible d'avoir une donnée de type chaîne de caractères dans la
mesure où MATLAB essaie d'interpréter cette chaîne de caractères comme une instruction.
Si l'on souhaite saisir une réponse de type chaîne de caractères on utilise la syntaxe
var = input(' une phrase ','s').
Exemple
rep = input(' Achage du resultat ? o/n [o] ','s') ;
if isempty(rep), rep = 'o' ;
end
if rep == 'o' | rep == 'y'
disp(['Le resultat vaut ', num2str (rep)])
end
2.6 Impressions
La commande sprintf permet l'impression de variables selon un modèle donné. Un
modèle d'édition se présente sous la forme du symbole pourcent (%) suivi d'indications
permettant de composer le contenu du champ à imprimer, en particulier sa longueur en
nombre de caractères. Le modèle d'édition utilisé par MATLAB est le modèle d'édition du
langage C.
La syntaxe de la commande sprintf est :
sprintf (format, variables )
où
Figure 2.2 This table shows conversion characters to format numeric and character data
as text.
♣ variables : est le nom des variables à imprimer suivant le modèle d'édition spécié dans
format ;
♣ format : est le format d'édition. Il s'agit d'une chaîne de caractères contenant les modèles
d'éditions des variables à imprimer.
Par exemple, pour représenter des courbes du type y = f (x) ou des surfaces z = f (x, y), les
données x,y,z doivent être des vecteurs colonnes (x et y) ou des matrices (z) aux dimensions
compatibles. L'instruction de dessin correspondante (par exemple plot(x,y) pour tracer des
courbes planes) est alors utilisée et éventuellement complétée par des arguments optionnels
(couleur, type de trait, échelle sur les axes, etc...).
La visualisation du résultat s'eectue dans une fenêtre graphique (avec possibilité de zoom,
de rotation, d'impression).
Prenons, comme exemple, le script suivant :
x = linspace(0, pi, 30) ; % crée un tableau de 30 composantes uniformément réparties
entre 0 et π
y = sin(x) ;
plot(x, y) % relie les points (xi,yi) par un trait continu noir
plot(x, y,0 p − b0 ) % relie les points (xi,yi) par un trait continu de couleur et matérialise les
points avec un symbole
xlabel(0 l00 axedesx0 ) % le titre de l'axe des x ylabel(0 sin(x)0 ) % le titre de l'axe des y
plot(x, y,0 pb0 ) % matérialise les points (xi,yi) avec un symbole de couleur Les points peuvent
être matérialisés par le symbole p prenant les valeurs suivants : o . ∗ + × Les couleurs sont
repérées par leur initiale en anglais : r(ed), b(lue), blac(k), w(hite), y(ellow), m(agenta),
g(reen) On peut rajouter un titre à la gure avec la commande title comme suit :
title('sin(x) sur l'intervalle [0,pi]'), gure (4.1)
Il faut remarquer qu'on peut tracer plus de courbes dans une même gure (4.2). A noter
que Matlab va donner automatiquement des couleurs (vous pouvez les changer sur l'éditeur
de gure ou bien les dénissez dans le script).
plot(x,cos(x),x,sin(x),x,exp(-x)) % Matlab va automatiquement utiliser des couleurs dié-
Par défaut la fenêtre graphique est eacée avant chaque commande plot. Pour superposer
(gure 4.2) des courbes par des appels successifs à cette fonction, il faut auparavant avoir
utilisé la commande hold on. Dans le script suivant nous donnons un exemple de fonctionne-
ment de la commande hold on.
hold on
plot(x,x*x,'o-r')
plot(x,sin(x),'x-b')
plot(x,exp(-x),'*-g')
legend('x2 ','sin(x)','exp(-x)')
Dans le tableau suivant nous donnons les principales fonctions utilisé dans la
représentation graphique tracé d'une courbe. Principales instructions graphiques.
Instruction Description
plot(x,y) tracé de la courbe passant par les points (x,y)
loglog(x,y) idem avec échelle logarithmique sur les deux axes
semilogx(x,y) idem avec échelle logarithmique sur l'axe Ox
semilogy(x,y) idem avec échelle logarithmique sur l'axe Oy
plotyy(x,y,x,z) courbe (x,y) avec l'axe (0y) à gauche,
et courbe (x,z) avec l'axe (0z) à droite
xlabel('label') légende pour l'axe (0x)
ylabel('label') légende pour l'axe (0y)
title('label') titre au dessus du graphique
legend('lab1','lab2','lab3',...) légende avec une chaîne de caractères pour chaque courbe
text(x,y,'label') chaîne de caractères à la position x,y
plot3(x,y,z) tracé de la surface passant par les points (x,y,z)
hold on, hold o activedésactive la conservation de la fenêtre graphique
à l'appel de la fonction plot
Remarque :
Outre la représentation cartésienne de courbes ou de surfaces, il existe d'autres possibilités
pour illustrer graphiquement un résultat. On peut citer parmi les plus utiles, les instructions
contour,ezmesh (pour tracer les courbes de niveau d'une surface paramétrique), mesh,ezplot 3
(courbes paramétriques dans l'espace), hist, rose (histogramme d'un échantillon de données
statistiques), etc...
Exemple :
Le script suivant produit la courbe présenté dans la (gure (4.3)).
[X, Y ] = meshgrid (−3 : .125 : 3) ;
Z =peaks (X, Y ) ;
meshc (X,Y,Z) ;
axis ([−33 − 33 − 105])
2.9 conclusion
Dans ce chapitre nous avons donné une présentation des principaux fonctions utilisés
sous matlab. La richesse du matlab réside dans la présence des toolboxes comme :
3.1 Introduction
Les méthodes numériques d'intégration doivent être utilisées lorsque :
L'intégrale ne peut pas être évaluée analytiquement
L'intégrande n'est pas donné sous forme analytique (mais numériquement pour un
certain nombre de valeurs discrètes)
Dans ce chapitre, nous aborderons les méthodes permettant de traiter les intégrales de fonc-
tions bornées sur un intervalle. Principalement nous décrivons les méthodes suivantes :
1. Méthode rectangles
2. Méthode des Trapèzes
3. Méthode des Trapèzes avec correction aux extrémités
4. Méthode de Simpson
35
3.2. MÉTHODE DES RECTANGLES 36
CHAPITRE 3. INTÉGRATION NUMÉRIQUE
Dans la gure 3.2 le coloriage en bleu (resp. en vert) indique des portions d'aires de rectangles
en excès (resp. en manque). Ce qui implique des erreurs ! !
(b − a)2
e≤ × sup |f 0 (x)| (3.2)
2n x∈[a,b]
Le lecteur intéressé par le calcul de cette majoration pourra se reporter au calcul similaire
plus ecace : à précision égale, 100 points de subdivision équivalent, grosso modo à 10000
points par la méthode des rectangles. Mais cela est très théorique. Tout dépend de la fonction
et de l'amplitude de l'intervalle d'intégration. Sans oublier les erreurs d'arrondis.
Z b
∆x
f (x)dx ' [(f0 + f1 ) + (f1 + f2 ) + ... + (fn−2 + fn−1 ) + (fn−1 + fn )]
a 2
n−1
∆x X
' [f0 + fn + 2 fi ] (3.3)
2 i=1
précise.
b n−1
(∆x)2
Z
∆x X
f (x)dx = [f0 + fn + 2 fi ] − (b − a)f ” (x) + θ(∆x4 )
a 2 i=1
12
2 0 0
Avec (∆x)
12
(b − a)f ” (x) + θ(∆x4 ) représente l'erreur commise où f ” (x) = f (b)−f
b−a
(a)
b n−1
(∆x)2 0
Z
∆x X 0
f (x)dx = [f0 + fn + 2 f( xi )] − [f (b) − f (a)]
a 2 i=1
12
On retranche l'équation (3.4) de l'équations (3.5), on obtient l'aire Ai des deux tranches
[xi−1 , xi ] et [xi , xi+1 ] centré sur xi :
Ai = I(xi+1 ) − I(xi−1 )
Ce qui nous donne :
3 00
Ai = 2∆xf (xi ) + (∆x) 3
f (xi ) + θ(∆x)5
00
On remplace f (xi ) par son expression utilisant les diérences centrales :
Ou encore
Z b
∆x X X
f (x)dx = [f (a) + f (b) + 4 fimpair + 2 fpair ] + θ(∆x)4 (3.8)
a 3
Il s'agit de la même formule que celle de la méthode des rectangles, avec des points répartis
aléatoirement sur l'intervalle.
En introduisant la variable aléatoire X , cette somme est une évaluation de l'espérance de
f (X), multipliée par (b − a). Pour obtenir une expression plus générale, considérons une
variable aléatoire réelle X sur l'intervalle [a, b] avec une densité de probabilité p(x).
Pour une fonction g , l'espérance de g(X) est :
Z b
E(g(x)) = p(x)g(x)dx (3.11)
a
Dans le cas d'une densité uniforme, on retrouve l'expression (3.10). Notons que σ 2 la variance
de f (x)/p(x), dénie par :
σ 2 = E((f /p)2 ) − [E(f /p)]2 (3.14)
La variance de la moyenne empirique est :
σ2
var(SN ) = (3.15)
N
Il s'en suit que l'écart-type se réduit comme l'inverse de la racine carré de N lorsqu'on
augmente le nombre d'échantillons. Ce résultat reste valable pour une intégrale double, triple,
etc. L'évolution de la variance de la somme avec N est indépendante de la dimension d
de l'espace. Pour une intégrale simple, cette convergence en 1/ (N ) est plus lente que la
p
convergence en 1/N de la méthode des rectangles, qui est la méthode de quadrature la plus
lente. La méthode de Monte-Carlo peut cependant devenir avantageuse pour les intégrales
triples ou en dimension supérieure à 3, lorsque la précision souhaitée est faible. Pour évaluer
la précision du résultat, il faut évaluer la variance σ 2 . Cela peut se faire avec le calcul de la
moyenne, en calculant la variance empirique :
N −1
1 X f (xi ) 2
VN = var(f /p, N ) = ( 2
) − SN (3.16)
N i=0 p(xi )
3.6 conclusion
Dans ce chapitre nous avons présenté les techniques de calcul d'integral numériquement
en passant de la technique des rectangles qui est très naturelle puisqu'elle sont basée sur
les formules qui permettent de construire l'intégrale (de Riemann) : les sommes de Darboux
ou de Riemann. La méthode méthodes du trapèze utilise l'approximation d'integral par un
polynôme d'ordre 1 passant par les points f (a) et f (b). La méthode de Simpson utilise l'ap-
proximation d'integral par un polynôme d'ordre 2 et nalement la méthode de Monte-carlo
qui se base sur l'utilisation d'une densité de probabilité uniforme sur l'intervalle considéré.
4.1 introduction
Lorsque on peut pas chercher analytiquement les zéros (ou les racines) d'une fonction
f nonlinéaire, nous cherchons numériquement les racines approchés de cette fonction. En
général, cette tâche ne peut être accomplie dans un ensemble ni en nombre d'opérations.
Par exemple, lorsque f est un polynôme générique de degré supérieur à quatre, il n'existe
pas de formules explicites pour calculer ses zéros. La situation est encore plus dicile lorsque
f n'est pas un polynôme. On doit faire appel aux méthodes itératives. A partir de l'une
ou plusieurs données initiales, ces méthodes consistent à construire une séquence de valeurs
x(k) qui convergera vers un zéro de la fonction f .
En résumé :
Un algorithme de recherche d'un zéro d'une fonction est une méthode numérique
ou un algorithme de recherche d'une valeur approchée d'un x vériant f (x) = 0,
pour une fonction donnée f . Ici, x est un nombre réel appelé zéro de f ou lorsque
f est polynomiale, racine de f .
Lorsque x est un vecteur, les algorithmes pour trouver x tel que f (x) = 0 sont généralement
appelés : algorithmes de résolution numérique d'un système d'équations. Ces algorithmes
sont une généralisation des algorithmes de recherche d'un zéro d'une fonction et peuvent
s'appliquer à des équations linéaires ou non linéaires. Certains algorithmes de recherche des
zéros (comme la méthode de Newton) peuvent être généralisés à la résolution numérique
des systèmes d'équations non linéaires.
43
CHAPITRE 4. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS NON LINÉAIRES
4.2.1 Principe
On considère deux nombres réels a et b et une fonction réelle f continue sur l'intervalle
[a, b] telle que f (a) et f (b) soient de signes opposés (4.1). Supposons que nous voulions
résoudre l'équation f (x) = 0. D'après le théorème des valeurs intermédiaires, f a au moins
un zéro dans l'intervalle [a, b]. La méthode de dichotomie consiste à diviser l'intervalle en
deux en calculant c = a+b 2
. Il y a maintenant deux possibilités : ou f (a) et f (c) sont de signes
contraires, ou f (c) et f (b) sont de signes contraires.
4.2.2 Algorithme
Suivant le signe de la valeur f (m), avec m = a+b
2
, voilà un pseudo code décrivant la
méthode de dichotomie.
Tant que (b − a) >
m ← (a + b)/2
Calcul f (m)
SAFI Said 44 Informatique et Analyse Numérique
CHAPITRE 4. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS NON LINÉAIRES
f (x) ' f (x0 ) + f 0 (x0 )(x − x0 ) Partant de là, pour trouver un zéro de cette fonction
d'approximation, il sut de calculer l'intersection de la droite tangente avec l'axe des
abscisses, c'est-à-dire résoudre l'équation ane :
ane
f (xk ) + f 0 (xk )(x − xk ) = 0.
Bien que la méthode soit très ecace, certains aspects pratiques doivent être pris en compte.
Avant tout, la méthode de Newton nécessite que la dérivée soit eectivement calculée. Dans
les cas où la dérivée est seulement estimée en prenant la pente entre deux points de la fonction,
la méthode prend le nom de méthode de la sécante, moins ecace et inférieure à d'autres
algorithmes. Par ailleurs, si la valeur de départ est trop éloignée du vrai zéro, la méthode
de Newton peut entrer en boucle innie sans produire d'approximation améliorée. À cause
de cela, toute mise en oeuvre de la méthode de Newton doit inclure un code de contrôle du
nombre d'itérations.
On teste le produit f (x2)f (x1). Si f (x2)f (x1) < 0 alors on met x2 dans x0 (f (x2)) dans
f (x0 )) Et on recommence jusqu'à validation de la condition d'arrêt |x2 − x0 | < . En général,
cette méthode converge plus vite que la méthode de la bissection.
4.5 conclusion
Dans ce chapitre nous avons présenté les principaux algorithmes de recherche des zéros
des fonctions non linéaires à savoir la méthode de dichotomie qui est basée sur le théorème
des valeurs intermédiaire et le changement de signe de la fonction. La deuxième méthode que
nous avons présenté dans ce chapitre est la méthode de Newton qui est plus ecace que celle
de dichotomie, elle est basée sur la développement au premier ordre de la fonction (supposé
de classe C 1 ). La troisième méthode est celle de Lagrange qui se base sur le théorème de
Tales est elle converge plus rapidement que celle de bisection.
5.1 Introduction
L'objet de ce chapitre est la résolution des équations diérentielles issues des phénomènes
physique à l'aide du logiciel MATLAB. Après modélisation et mise au point des équations,
intervient la programmation sous MATLAB. Ceci est eectué à travers un exemple très réel.
Volterra, spécialiste des systèmes dynamiques et des équations diérentielles qui les dé-
crivent, a eu vite fait de construire un modèle d'évolution de ces populations, qu'il publia en
1926.
Un mathématicien américain, Alfred James Lotka, publia indépendamment en 1924 (ou 25
les dates varient selon les sources), un modèle équivalent. On le désigne aujourd'hui sous le
nom de "modèle de Lotka-Volterra" pour ne pas faire de jaloux... Il a été étendu à plusieurs
domaines de la dynamique des populations et est utilisé aujourd'hui très largement en bio-
logie, écologie, ingénierie et même en chimie. Pour ne citer que le cours d'écologie de
Ricklefs et Miller, tout un chapitre (le 9) est consacré à l'étude des écosystèmes et au modèle
de Lotka-Volterra.
Le modèle de Lotka-Volterra est un système dynamique autonome non-lnéaire. Son
analyse mathématique aboutit très rapidement à des détours profonds dans la théorie des
équations diérentielles. Nous proposons d'aborder ce modèle sous sa forme continue et d'en
explorer les grandes lignes à travers une simulation.
48
5.1. INTRODUCTION 49 CHAPITRE 5. RÉSOLUTION DES ED
J'obtiens donc le système diérentiel autonome, c'est à dire dans lequel le temps n'apparait
pas explicitement, ci-dessous (5.1) :
Programmation du problème
Ce premier programme, LotkaVolterra-1, permet de tracer les courbes d'évolution des
populations de proies et de prédateurs et un portait de phase. Il permettra d'illustrer le carac-
tère périodique des solutions et leur déphasage. Quelque commentaires sur le code, et d'abord
la partie caractéristique de ce genre de programme, c'est à dire la fonction qui dénit le sys-
tème diérentiel :
f unction dy = LotkaV olterra(t, y)
dy = zeros(2, 1);
dy(1) = a ∗ y(1) − b ∗ y(1) ∗ y(2);
dy(2) = c ∗ y(1) ∗ y(2) − d ∗ y(2);
end
avec y1 représente la population des proies et y2 la population des prédateurs. Vous pouvez
bien sur changer les paramètres a, b, c et d de simulation.
La résolution du système se fait en un seul ligne, en faisant appel à la fonction ode45, avec
les paramètre a = 3, b = 1, c = 1 et d = 2 !
[T, Y ] = ode45(@LotkaV olterra, [020], [0.50.5]) ;
Et enn, l'achage des résultats est donné par la courbe de la gure (5.1)
plot(T, Y (:, 1),0 −0 , T, Y (:, 2)) ;
xlabel(0 T emps0 ) ;
legend(0 P roies0 ,0 P rdateurs0 );
title(0 Evolutiondespopulations0 );
Pour tracer l'évolution des prédateurs en fonction des proies en utilise la syntaxe suivante.
plot(Y (:, 1), Y (:, 2));%0 − .0 , T, Y (:, 3),0 .0 )
xlabel(0 P roies0 );
ylabel(0 P rdateurs0 );
title(0 P ortraitdephase0 );
6.1 introduction
Il arrive souvent que la fonction que l'on doive traiter (déterminer en certains points sa
valeur, sa dérivée, etc ...) soit dénie par les valeurs qu'elle prend pour un certain nombre de
valeurs discrètes de la variable.
Il est, dans ces cas, nécessaire de remplacer la fonction f (x) à traiter par une fonction
approchée g(x) plus simple ou plus généralement, par un ensemble de fonctions gk (x), puis
de traiter non pas f (x) mais g(x).
Une méthode d'approximation de f (x) par collocation impose à g(x) à coïncider avec f (x)
pour un certain nombre de valeurs de la variable x : g(xj ) = f (xj ) = fj , pour j = 0, 1, ..., n.
Le cas le plus fréquent est celui de fonctions connues en un ensemble discret x0 , x1 , ..., xn
de la variable. C'est le cas que nous traiterons.
On appelle support d'interpolation l'ensemble des points xj , (j = 0, 1, ..., n) où la fonc-
tion est connue, et base d'interpolation l'ensemble des fonctions suivant lesquelles f (x) est
développée.
L'approximation peut être globale, si g(x) est dénie à partir de tous les xj , ou par
morceaux, si g(x) est dénie à partir de sous-ensembles de points xj .
Une fois g(x) déterminée, il est souvent nécessaire de déterminer f (x) en 1 ou plusieurs
points x = t ne coïncidant pas avec les xj . C'est le problème de :
53
6.2. INTERPOLATION POLYNOMIALE
CHAPITRE DE
6. MÉTHODES54D'APPROXIMATION
LAGRANGE : INTERPOLATION
Lj (x) de degré n :
Les Lj (x) de l'equation (6.1) sont appelés les polynômes de Lagrange. Ces polynômes sont
utiliser pour interpoler une fonction.
Objectifs de la méthode
Trouver le polynôme Pn (x) de degré n qui passe par tous les points xj connus
(j = 0, 1, ..., n).
Nous avons n + 1 points, donc un polynôme d'ordre n. On remarque que :
(
1 si i = j
Lj (xi ) =
0 si i 6= j
Lj (xi ) s'identie au symbole de Kroenecker δij , Le polynôme de d'interpolation Pn (x) qui
passe par les n + 1 points x0 , x1 ,..., xn s'écrit :
n
X n
X
Pn (xi ) = f (xj )Lj (xi ) = f (xj )δij = f (xi )
j=0 j=0
Exemples
1. Deux points connus : degré 1
(
x0 = 0 y0 = 0
x1 = 1 y1 = 1.175
alors
x − x1 x − x0
P1 (x) = ( )y0 + ( )y1
x0 − x1 x1 − x0
x−1 x−0
= ( )0 + ( )1.175
0−1 1−0
donc : P1 (x) = 1.175x
2. trois points connus : degré 2
x0 = 0 y 0 = 0
x1 = 1 y1 = 1.175
x = 2 y = 3.626
2 2
Diérences à droite
∆0 fi = fi , ∆1 fi = fi+1 − fi et ∆2 fi = ∆1 fi+1 − ∆1 fi
maintenant nous construisons le polynôme de Newton :
xi : fi , x0 : f0 , x1 = x0 + h : f1 , x0 + 2h : f2 , ..., x0 + nh : fn . Donc :
Pn (x) = A0 +A1 (x−x0 )+A2 (x−x0 )(x−x1 )+...+An (x−x0 )(x−x0 −h)...(x−x0 )(x−(n−1)h),
avec :
A0 = ∆0 f0
∆1 f0
1
A =
h
.
..
n
An = ∆ f0
n!hn
Reprenons l'exemple précédent :
x0 = 0 y 0 =
0
x1 = 1 y1 = 1.175
x = 2 y = 3.626
2 2
A0 = f0 = 0
1
∆ f0 f1 − f0
A1 = = = 1.175
h h
2 1 1
A2 = ∆ f0 = ∆ f1 − ∆ f0 = f2 − f1 − (f1 − f0 ) = 1.813
2h2 2 2
Donc le polynôme de Newton sera de cette forme : P2 (x) = −1.175(x−0)+1.813(x−0)(x−1)
=⇒ P2 (x) = 0.638x2 + 0.537x
Nous obtenons la même expression qu'avec Lagrange.
Remarque :
Nous pouvons utiliser une autre méthode pour calculer les ∆f0 :
∆f0 ∆1 f0 ∆2 f0
x0 = 0 0
x1 = 1 1.175 1.175 1.276
x1 = 2 3.626 2.451
Diérences à gauche
Le polynôme de degré n s'écrit sous la forme :
Pn (x) = A00 + A01 (x − x00 ) + A02 (x − (x00 + h)) + ...
en utilisant les mêmes formules que précédemment et avec h0 = −1, nous obtenons :
xi x0i fi0
x0 = 0 x00 = 2 f00 = 3.626
x1 = 1 x01 = 1 f10 = 1.175
x2 = 2 x02 = 0 f20 = 0
avec
0
A0 = ∆0 f00
∆1 f00
0
A
1
=
h0
..
.
n 0
A0 = ∆ f0
n
n!h0n
En reprenons le même exemple on trouve :
∆f00 ∆1 f00 ∆2 f00
0
x0 = 0 3.626
x01 = 1 1.175 −2.451 1.276
x02 = 2 0
alors : P2 (x) = 3.626 + ( −2.451
−1
)(x − x00 ) + ( 1.276
2
)(x − x00 )(x − x01 )
57
Bibliographie
1. ALLAIRE, G., KABER, S.M. Cours d'Algèbre Linéaire Théorique. Ellipses, Paris (2002).
2. CROUZEIX, M., MIGNOT, A.-L. Analyse Numérique des Equations Diérentielles. Mas-
son, Paris (1983).
3. GANDER, W., HREBICEK, J. Solving Problems in Scientic Computing Using Maple
and Matlab Springer-Verlag (1991).
4. GUERRE-DELABRIERE, S., POSTEL, M. Méthodes d'Approximattion - Equations Dif-
férentielles - Applications Scilab. Ellipses, Paris (2004).
5. LAPRESTÉ, J.-T. Introduction à Matlab Ellipses (2000).
6. A. Quarteroni, F. Saleri et P. Gervasio, Calcul Scientique : Cours, exercices corrigés et
illustrations en Matlab et Octave. Deuxième édition, Spinger-Verlag Italia 2010.
7. J. l. Merrien, Analyse numérique avec Matlab : rappels de cours, méthodes, exercices et
problèmes avec corrigés détaillés, Dunod, 2007.
58