Vous êtes sur la page 1sur 35

Ecole normale supérieure de Yaoundé IN112 DITE

COURS DE CALCUL SCIENTIFIQUE

Chapitre 1

INTRODUCTION

I-1) Définition

Le calcul scientifique qui a pour ancêtre l'analyse numérique pourrait simplement être
définit aujourd'hui comme la discipline qui traite de la conception et de l'analyse d'algorithmes et de
méthodes numériques pour la résolution de problèmes mathématiques issus des sciences et de
l'ingénierie. Il se distingue de la programmation informatique du fait qu'il s'intéresse aux problèmes
mathématiques non discrets, (notamment la manipulation de nombres réels et non des entiers
uniquement).
L'approche numérique introduite par le calcul scientifique à la faveur de l'apparition de
l'ordinateur, constitue aujourd'hui le troisième pilier de la science aux côtés de la théorie et de
l'expérimentation. En effet, cette approche et ses corollaires que sont en amont la modélisation et
en aval la simulation par ordinateur, permettent aujourd'hui d'explorer des problèmes du monde réel
que l'approche classique n'ose même pas aborder. Ex : simulations nucléaire, astrophysique,
validation de conjectures ou la démonstration « automatique » de théorèmes (quatre couleurs).... .
Ainsi, la stratégie généralement utilisée en calcul scientifique consiste à remplacer grâce à un
modèle mathématique, un problème difficile par un autre qui soit plus simple et dont les solutions
sont identiques ou proches de celles de premier problème. Ces modèles utilisent très souvent des
systèmes d'équations aux dérivées partielles (EDP) non-linéaires dont on ne connait pas de solutions
analytiques en général. Il faut alors résoudre le problème numériquement en transformant les
équations continues en un problème discret sur un certain domaine de calcul (le maillage). De
manière générale, l'on cherchera presque toujours à passer de l'infini au fini, du différentiel à
l'algébrique, du non linéaire au linéaire etc.
En résumé, la procédure de l’approche numérique pour la résolution d’un problème
complexe passe par les étapes suivantes:
 Recherche d'un modèle mathématique représentant le problème. Mise en équation.
 Elaboration d'un maillage. Discrétisation des équations mathématiques.
 Résolution des équations discrètes (souvent systèmes linéaires à résoudre).
 Transcription informatique et programmation des relations discrètes.
 Simulation numérique et exploitation des résultats.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 1/35


Ecole normale supérieure de Yaoundé IN112 DITE

I-2) Quelques champs d'application


Le calcul scientifique est presque omniprésent dans les sciences et l'ingénierie de nos jours,
juste à l'image du rôle que joue actuellement l'ordinateur dans le développement de ces domaines.
Voici juste un léger aperçu d'application du calcul scientifique :
 La cosmologie et l'étude des phénomènes géophysique : les théories sur la formation des
galaxies, l'impact potentiel d'un séisme ou d'un Tsunami... sont effectués par simulations
numériques ;
 L'Internet : le résultat d'une recherche sur Google est le vecteur propre d'une matrice
d'ordre moyenne de plus de 3 milliards déterminer exclusivement par la méthode
numérique ;
 Les sciences biologiques et chimiques : des molécules sont simulées et étudiées en
sciences pharmaceutiques grâce aux méthodes numériques. De même, l'étude et le
décryptage des gènes connaissent un essor sans précédent grâce à ces méthodes ;
 La finance et l'économie : les prévisions et les graphiques prévisionnels dans les marchés
s'appuient sur des méthodes de calcul scientifique.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 2/35


Ecole normale supérieure de Yaoundé IN112 DITE

Chapitre 2

APPROXIMATION ET ANALYSE D'ERREUR EN CALCUL


SCIENTIFIQUE
2-1) Introduction

Le calcul scientifique est avant tout une question d'approximation. Par conséquent, il impose
une contrainte majeure qui est celle de l'erreur qui caractérise toute approximation. Ainsi, l'analyse
de l'erreur occupe une place de choix dans le calcul scientifique. Des erreurs de calcul infimes
peuvent conduire à des conséquences dramatiques comme l'explosion de la fusée Ariane 5 le 4 juin
1996 (10 ans de travail et 7 milliard de $ en fumée) à cause du passage d'une précision de 64 bits à
une précision de 16 bits. De tels exemples existent aussi dans le monde financier et militaire.

Les sources d'approximation sont nombreuses en calcul scientifique :

 Avant le calcul proprement dit : la modélisation, les mesures empiriques et les calculs
précédents constituent déjà des approximations non négligeables.

 Pendant le calcul : la troncature ou discrétisation des quantités et les arrondis sont aussi
des sources d'approximation.

À ceci s'ajoute le fait que les incertitudes des données d'entrée peuvent être amplifiées par le
problème à résoudre, de même que les perturbations lors du calcul peuvent être amplifiées par
l'algorithme lui-même. L'exactitude du résultat finale reflète tous ces facteurs.

De ce fait, nous pouvons résumer les sources d'erreurs en trois points :

 les erreurs liées à l’imprécision des mesures physiques ou au résultat d’un calcul approché ;

 les erreurs liées à l’algorithme utilisé ;

 les erreurs de calcul liées à la machine,

Ce chapitre met l’accent sur les erreurs liées à la machine, notamment celles qui se rapportent à
l’encodage des données et aux méthodes ou encore aux algorithmes utilisés.

2-2) Évaluation de l'erreur

Rappelons d’abord quelques notions de base ;

Si X est une quantité à calculer et X* la valeur calculée, on dit que :

1. X - X* est l’erreur et | E |= |X - X*| est l’erreur absolue.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 3/35


Ecole normale supérieure de Yaoundé IN112 DITE

Exemple :
Si X = 2.224 et X* = 2.223 alors l’erreur absolue | E | = | X – X* | = 2.224 – 2.223 =
0.001.

2. Er = | | est l’erreur relative.
Xr ≠ 0. Xr est une valeur de référence pour X. En général, on prend Xr = X.

Exemple :
∗ | ∗|
Si X = 2.224 et X* = 2.223 alors, si on prend Xr = X, l’erreur relative Er = | |= | |
.
= .
= 4.496 x 10-4.
Cependant, si X est la valeur d’une fonction F(t) avec a ≤ t ≤ b, on choisira parfois une valeur de
référence globale pour toutes les valeurs de t.

Exemple :

sup sin (𝑡)
Si X = sin(t) avec 0 ≤ t ≤ , on pourra prendre Xr = =
0 ≤ 𝑡 ≤
En général, on ne connait pas le signe de l’erreur de sorte que l’on considère les erreurs absolues et
les erreurs relatives absolues.
Les opérations élémentaires propagent des erreurs. Dans la pratique, on considère que :
1) L’erreur absolue sur une somme est la somme des erreurs absolues.
2) L’erreur relative sur un produit ou un quotient est la somme des erreurs relatives.
On peut estimer l’effet d’une erreur E sur l’argument x d’une fonction f(x) au moyen de la dérivée
de f(x). En effet, f(x + E) ≈ f(x) + E f’(x).

Exemple :
Calculer la valeur de (11111111)2 , la valeur fournie par une petite calculatrice à cinq chiffres
est 1, 2345x1014. Mais la réponse exacte est 123456787654321.
La machine a donc tronqué le résultat à 5 chiffres et l’erreur absolue est de 6,7876 * 109.
L’erreur relative est de l’ordre de 0.005% soit 5,498x10-5.
Cet exemple montre qu’il faut établir clairement l’objectif visé.
Cet objectif est double ;
1) Nous voulons un bon ordre de grandeur (ici 1014) et avoir le maximum de décimales exactes,
2) Ce maximum ne peut excéder la longueur des mots permis par la machine et dépend donc de la
machine.

2-3) La mémoire de l’ordinateur


a) le stockage des nombres.
La mémoire d’un ordinateur est formée d’un certain nombre d’unités adressables appelées
OCTETS. Un ordinateur moderne contient des millions voir des milliards d’octets. Les nombres
sont stockés dans un ordinateur comme ENTIERS ou REELS.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 4/35


Ecole normale supérieure de Yaoundé IN112 DITE

b) Les nombres entiers :


Les nombres entiers sont ceux que l’on utilise d’habitude sauf que le plus grand nombre
représentable dépend du nombre d’octets utilisés :
- avec deux (2) octets, on peut représenter les entiers compris entre −32768 et 32767
- avec quatre (4) octets on peut représenter les entiers compris entre −2147483648 et 2147483647.

c) Les nombres réels :


Dans la mémoire d’un ordinateur, les nombres réels sont représentés en notation flottante.
Cette notation a été introduite pour garder une erreur relative à peu prés constante ; quelque soit
l’ordre de grandeur du nombre qu’on manipule. En notation flottante, un nombre a la forme :
x=±𝑌 × 𝑏

 b est la base du système numérique utilisé.


 Y est la mantisse : une suite de s entier y0,y1y2...ys avec y1 ≠ 0 si x ≠ 0 et 0 ≤ yi ≤ (b - 1).
 e est l’exposant (un nombre entier relatif)
La norme choisie est celle où la mantisse est comprise entre 0 et 1 (y0) et où le premier chiffre
après la virgule (y1) est différent de zéro.

2-4) Calcul de l’erreur


Nous terminons ce chapitre en définissant les notions de troncature et d’arrondie sur la
base de quelques illustrations.

a) Troncature
Exemple : En base 10, x = 1/15 = 0.066666666......
Dans le cas d’une représentation tronquée nous aurons, pour s = 5, fl(x) = 0.66666 * 10−1.
Remarquez comment a été modifié l’exposant afin de respecter la règle qui veut que le premier
chiffre de la mantisse après la virgule ne soit pas nul. Dans ce cas, l’erreur absolue X − fl(X) est de 6
× 10−7. L’erreur relative est de l’ordre de 10−5. De manière générale, dans une représentation
tronquée à s chiffres, l’erreur relative maximale est de l’ordre de 10−s.

b) Arrondis
Dans une représentation arrondie, lorsque la première décimale négligée est supérieure à 5,
on ajoute 1 à la dernière décimale conservée.
Exemple d’arrondi: x = 1 /15 = 0 .066666666 .
Nous écrirons fl(x) = 0.66667 × 10−1
L’erreur absolue serait alors 3.333 × 10−7et l’erreur relative serait 5 × 10−6
En général, l’erreur relative dans une représentation arrondie à s chiffres est de 5 × 10−(s+1) soit
la moitié de celle d’une représentation tronquée.

c) Les règles de base du modèle.


Pour effectuer une opération sur deux nombres réels, on effectue l’opération sur leurs
représentations flottantes et on prend ensuite la représentation flottante du résultat.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 5/35


Ecole normale supérieure de Yaoundé IN112 DITE

 l’addition flottante. x ⊕ y = fl (fl(x) + fl(y))


 la soustraction flottante. x ⊖ y = fl(fl(x) − fl(y))
 la multiplication flottante. x ⊗ y = fl(fl(x) × fl(y))
 la division flottante. x ⊘ y = fl (fl(x) / fl(y))
Chaque opération intermédiaire dans un calcul introduit une nouvelle erreur d’arrondi ou de
troncature. Dans la pratique, il faudra se souvenir du fait que deux expressions algébriquement
équivalentes peuvent fournir des résultats différents et que l’ordre des opérations peut changer les
résultats.
Pour l’addition et la soustraction on ne peut effectuer ces 2 opérations que si les exposants sont les
mêmes. On transforme le plus petit exposant et donc on ne respecte plus la règle voulant que le
premier chiffre de la mantisse ne soit pas nul.
Remarque :
On constate une déviation importante par rapport aux lois habituelles de l’arithmétique.
x + (y + z) peut être différent de (x + y) + z.
Exemple : Pour 4 chiffres significatifs (s = 4) on a :
(1 + 0 .0005) + 0 .0005 = 1 .000
Car
0 .1 × 101 + 0 .5 . × 10−3 = 0 .1 . × 101 + 0 .00005 . × 101 = 0 .1 × 101 + 0 .0000 . × 101 = 0 .1 × 101
Et
1 + (0 .0005 + 0 .0005) = 1 .001
Ainsi, l’addition flottante n’est pas associative. On constate aussi que si y est très petit par rapport à
x, l’addition de x et y donnera seulement x.

Exemple :
L’´equation 1 + x = 1 a x = 0 comme unique solution. Mais dans un système à 10 chiffres
significatifs, elle aura une infinité de solutions (il suffit de prendre | x | ‹ 5 × 10−11)
La distributivité de la multiplication par rapport à l’addition.
Exemple :
Considérons l’opération 122 × (333 + 695) = (122 × 333) + (122 × 695) = 125416
Si nous effectuons ces deux calculs en arithmétique à 3 chiffres (s = 3) et arrondi, nous obtenons :
122 × (333 + 695) = fl (122) × fl (1028) = (0.122 ×103) × (0.103 × 104) = fl (0.0125660×107) =
0.126 × 106 = 126000
(122 × 333) + (122 × 695) = fl(fl (0.040626×106) + fl (0.084790×106)) = fl(0.406 × 10 5+0.848 ×
105) = fl (1.254×105) = 0.125 × 106 = 125000.
Donc la distributivité de la multiplication par rapport à l’addition n’est pas respectée en
arithmétique flottante.

2-5) Propagation des erreurs.

Une étude de la propagation des erreurs d’arrondi permettra d’expliquer ce phénomène.


Soit à calculer ex à l’aide de son développement en série qui est convergent pour tout x :

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 6/35


Ecole normale supérieure de Yaoundé IN112 DITE

𝑥 𝑥 𝑥
𝑒 =1+ + + +⋯ , −∞ < 𝑥 < ∞
1! 2! 3!
Il est évident que dans la pratique il est impossible d’effectuer la sommation d’une infinité de
termes. On arrêtera donc lorsque le terme général !
devient inférieur à 10−t (on a t digits). Pour x
négatif on sait que le reste de la série est inférieur au premier terme négligé donc à 10−t (puisque la
série est alternée).
Les calculs suivant sont fait sur ordinateur pour t = 14.

On voit que pour x ≤ −20 les résultats obtenus sont dépourvus de sens. L’explication de ce
phénomène est la suivante : pour x = −30 les termes de la série vont en croissant jusqu’à !
=

8.1011 puis ils décroissent et !


≈ − 9.19.10−15.
L’erreur absolue sur le terme maximal (terme qui contribue le plus au résultat finale) est de
8.1011.10−15 = 8.10−4 (|E| = |Xmax| × |Er|, la valeur de référence ici est Xmax, Er est de l’ordre de 10
– (14+1)
). Ainsi le résultat obtenu pour S représente uniquement l’accumulation des erreurs d’arrondi
sur les termes de plus grand module de développement en série.
La propagation des erreurs est un des principaux problèmes en calcul numérique.
Considérons le cas d’une somme :
Dans l’addition, les erreurs absolues s’additionnent. Soit en effet ε1 et ε2 les erreurs absolues sur x1
et x2.
On peut écrire : (x1 ± ε1) + (x2 ± ε2) = (x1 + x2) ± (ε1 + ε2)
En arithmétique flottante, l’erreur relative δ est à peu près constante et les erreurs absolues peuvent
être approximativement explicités par :
ε1 = | x1| × δ, ε2 = | x2| × δ
Si les nombres en présence ont le même signe, l’erreur relative reste la même que celle qu’on avait
(| | | | )×
avec x1 et x2. En effet, | |
= | |
= ± δ.
Si par contre les nombres sont de signes différents, l’erreur relative peut être amplifiée de façon
spectaculaire.
Dans la multiplication, les erreurs relatives s’additionnent.
En effet, soient x1 et x2, on a : (x1 ± ε1). (x2 ± ε2) = x1x2 ± x1ε2 ± x2 ε1 ± ε1ε2 de plus ε1 = | x1| × δ,
ε2 = | x2| × δ. Alors en négligent certains termes on a :

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 7/35


Ecole normale supérieure de Yaoundé IN112 DITE

Des formules équivalentes peuvent donner des résultats différents ; on peut améliorer le résultat en
utilisant une formule mathématique équivalente nécessitant des opérations différentes.
Exemple :
Considérons les nombres √7001 et √7000
En arithmétique flottante à 8 chiffres, on a :
√7001 = 0 .83671979 × 102
√7000 = 0 .83666003 × 102 donc :
√7001 - √7000 = fl((0 .83671979 − 0 .83666003 ) × 102) = 0 .59760000 × 10−2
On peut obtenir un résultat plus précis en utilisant l’identité suivante :

2-6) Notion de conditionnement et de stabilité numérique

Le fait que certains nombres ne soient pas représentés de façon exacte dans un ordinateur
entraîne que l’introduction même des données d’un problème en machine modifie quelque peu le
problème initial ; Il se peut que cette petite variation des données entraîne une variation importante
des résultats. C’est la notion de conditionnement d’un problème. On dit qu’un problème est bien (ou
mal) conditionné, si une petite variation des données entraîne une petite (une grande) variation sur
les résultats. Cette notion de conditionnement est liée au problème mathématique lui même et est
indépendante de la méthode utilisée pour le résoudre.

Une autre notion importante en pratique est celle de stabilité numérique. Un problème peut
être bien conditionné, mais la méthode utilisée pour le résoudre sujette à une propagation
importante des erreurs numériques. Si les erreurs introduites dans les étapes intermédiaires ont un
effet négligeable sur le résultat final, on dira que le calcul ou l’algorithme est numériquement
stable. Ou encore si elle n’est pas sujette à une propagation importante des erreurs numériques de
discrétisation et d'arrondi. Sinon, on dira que l’algorithme est numériquement instable.

Ces notions de conditionnement d’un problème et de stabilité numérique d’une méthode de


résolution sont fondamentales en calcul scientifique. Si un problème est mal conditionné alors la
solution exacte du problème tronqué ou arrondi à t digits pourra être très différente de la solution
exacte du problème initial. Aucune méthode n'y pourra rien ; il faudra essayer de donner une autre
formulation mathématique au problème.

Exemple d'instabilité numérique

Nous cherchons à calculer la valeur de :


où a est une constante plus grande que 1, pour

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 8/35


Ecole normale supérieure de Yaoundé IN112 DITE

plusieurs valeurs de n. Pour ce faire, nous allons exprimer In récursivement, i.e. nous allons
exprimer In en fonction de n et In−1.

1
, ∫ 𝑥 𝑑𝑥 = = par récurrence sur n ?
0

Or comme, on peut calculer In pour toutes les valeurs de n.

Mais l’algorithme est numériquement instable car toute erreur dans le calcul de I0 va se
propager. En effet si on note par I0* la valeur approchée de I0 et si I0*= I0 + ε alors :

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 9/35


Ecole normale supérieure de Yaoundé IN112 DITE

FICHE D'EXERCICE N°1

Exercice 1 : Étudier la distributivité de la multiplication sur l'addition en effectuant l'opération suivante en arith
arithmétique
à 3 chiffres avec arrondi, et en comparant le résultat avec la réponse exacte:
122 x (333 + 695)

Exercice 2 : En arithmétique flottante avec 3 chiffres significatifs et arrondi, illustrer la non


non-validité des lois
d’associativité et de distributivité.
(On pourra prendre : x = 854, y = 251 et z = 852)

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 10/35


Ecole normale supérieure de Yaoundé IN112 DITE

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 11/35


Ecole normale supérieure de Yaoundé IN112 DITE

Chapitre 3

INTRODUCTION AU LOGICIEL DE CALCUL SCIENTIFIQUE OCTAVE

Octave est un logiciel gratuit de calcul numérique à 90% identique au logiciel propriétaire
MATLAB, développé par John W. Eaton et des bénévoles de la communauté du logiciel libre. Il
s'agit de la plateforme qui sera utilisé pour la partie pratique de ce cours. Octave n’est pas un
logiciel de calcul symbolique comme MAPLE : il ne fait généralement pas de calcul exact, mais
permet de faire très rapidement des calculs numériques approchés et dispose de nombreuses
fonctionnalités graphiques.

III- 1) Le menu d’aide

Le point d’entrée pour la prise en main de tout logiciel est le menu d’aide. Pour accéder à
l’aide sur Octace, on peut utiliser le menu « Aide » puis cliquer sur le sous-menu
« Documentation ». On peut également saisir la commande help :
−− > help sin
Cette aide est essentiellement en anglais. Les manuels contiennent des exemples
d’utilisation que l’on peut exécuter dans Octave en utilisant le copier/coller entre la fenêtre d’aide et
la fenêtre Octave.

III-2) Calculs numériques simples

Dans Octave tous les calculs sont numériques.


−− > 2 + 3
ans = 5
On peut, dans la fenêtre de Octave copier et coller des lignes à l’aide de la souris (y compris
les exemples donnés par l’aide) ; on peut aussi naviguer dans l’historique des commandes au moyen
des flèches ↑ ou ↓.
Chaque instruction doit être tapée sur une ligne. Si une instruction est trop longue, on peut la
continuer sur la ligne suivante en terminant la première ligne par trois points :
-->a=...
-->7
a=7
Les constantes e, π et i sont prédéfinies ; elles sont notées e, pi et i respectivement.
Par défaut les réels sont affichés avec au plus 5 décimales. On peut cependant, si besoin est,
changer cet affichage par défaut en utilisant la commande format (cette commande ne change que
l’affichage, et non la valeur des variables en mémoire) :
-->pi
pi = 3.1416
-->format long ; pi

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 12/35


Ecole normale supérieure de Yaoundé IN112 DITE

pi = 3.141592653589793
En fait, les réels sont codés dans Octave sur 64 bits : un bit pour le signe, 11 bits pour
l’exposant et 52 bits pour la mantisse, ce qui permet de coder des réels entre environ 2.10e−308 et
2.10e308 avec une précision de l’ordre de 2.10e−16. Cette valeur est celle de la variable prédéfinie
eps :
-->eps
eps = 2.220D-16
Le nombre de mots en mémoire (un mo t= un réel en double précision) peut être très grand
(de l’ordre de 5000000 par défaut). Si l’espace alloué n’est pas suffisant, on peut l’augmenter en
utilisant l’une des commandes single, uint8, int64, etc.

La commande who liste les variables utilisées. Un éditeur de variables, accessible par le
menu, permet également de visualiser et de modifier ces variables.
Chaque variable a un type. Les principaux types qui nous intéresseront sont :
– les constantes (matrices réelles ou complexes) ;
– les booléens (vrai : true ou faux : false) ;
– les chaînes de caractères (’x’ ou "x", qui représentent le même objet).
Il en existe d’autres (complexe, fonctions, . . .). On obtient le type d’une variable x en tapant
class(x).
Les types des variables ne doivent pas être déclarés et ils peuvent changer à tout instant : on
peut toujours affecter à une variable déjà existante une valeur d’un autre type.

III-3) Algèbre linaire

Dans Octave, tout (ou presque) est matrice : un réel est simplement une matrice 1×1. Les
matrices peuvent avoir des coefficients réels, complexes, booléens, chaînes de caractères, . . .. Les
coefficients d’une matrice doivent cependant tous être de même type.
Il faut, chaque fois qu’on le peut, utiliser les opérations matricielles prédéfinies. Le gain de
temps, par rapport à l’utilisation de boucles, peut être considérable :
-->tic -->tic
-->for j=1:100 -->C=rand(100,100);
-->for i=1:100 -->toc
-->B(i,j)=rand(1,1); Elapsed time is 38.2589 seconds.
-->end
-->end
-->toc
Elapsed time is 43.148 seconds.

a) Vecteurs et matrices
En petite dimension, la façon la plus simple de définir une matrice n × m est d’en écrire
entre crochets les éléments séparés par des virgules, les lignes étant séparées par des points-virgules
:

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 13/35


Ecole normale supérieure de Yaoundé IN112 DITE

x=[a11, ... , a1m ; ... ;an1, ... ,anm].


-->A=[1,1,1;3,0,0;2,0,1]
A=
1 1 1
3 0 0
2 0 1
On peut aussi séparer les colonnes par des espaces au lieu de virgules : ainsi [1 -2,2] et [1,-
2,2] définissent le même objet (la deuxième écriture est cependant fortement conseillée).
De nombreuses matrices sont prédéfinies : matrice nulle, matrice unité, matrices aléatoires,
intervalles.
La commande rand(7) ne produit pas un vecteur aléatoire à 7 éléments, mais une matrice
aléatoire de taille 7 x 7.
Si x est un vecteur, la commande diag(x) construit la matrice diagonale de diagonale x. Par
contre, si A est une matrice, cette commande renvoie le vecteur formé par la diagonale de A.

Ainsi, la commande diag(diag(A)) renvoie la matrice diagonale dont la diagonale est celle de A.
Il existe deux façons de définir une suite de points régulièrement espacés : la commande
linspace(a,b,k+1) renvoie un vecteur ligne de k + 1 points régulièrements espacés (par défaut k + 1
= 100), le premier étant égal à a et le dernier à b ; la commande a:h:b renvoie sous forme de
vecteur ligne la progression arithmétique de premier terme a et de raison h, le dernier terme étant le
plus grand élément de cette progression ≤ b (si h > 0). Les commandes linspace(0,1,11) et 0:0.1:1
sont donc équivalentes. Par défaut, h est égal à 1 : les commandes a:1:b et a:b sont équivalentes.
--> 0 : pi
ans =
0 1 2 3
La raison h peut également être négative :

--> 10:-1:pi
ans =
10 9 8 7 6 5 4

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 14/35


Ecole normale supérieure de Yaoundé IN112 DITE

b) Extraction
Pour accéder à l’élément ai,j d’une matrice A, on tape A(i,j). Plus généralement, si A est une
matrice n × m et v = (v1 , v2 , . . . , vk ), w = (w1 , . . . , wp ) deux vecteurs d’indices (non
nécessairement distincts) vérifiant :
a) 1 ≤ vi ≤ n pour tout i ∈ {1, . . . , k}
b) 1 ≤ wi ≤ m pour tout i ∈ {1, . . . , p}
alors B=A(v,w) est la sous-matrice de A formée des éléments ai,j pour i parcourant v1 , . . . , vk et j
parcourant w1 , . . . , wp .
-->A = [1:6]’*[2:7]

A=
2 3 4 5 6 7
4 6 8 10 12 14
6 9 12 15 18 21
8 12 16 20 24 28
10 15 20 25 30 35
12 18 24 30 36 42

-->v=1:2:6
v=
1 3 5

-->A(v,v) //extraction par copie: A n’est pas modifiée


ans =
2 4 6
6 12 18
10 20 30

-->A(2*ones(1,3),:)

ans =
4 6 8 10 12 14
4 6 8 10 12 14
4 6 8 10 12 14

Le symbole : représente le vecteur de tous les indices lignes ou colonnes. Si A est une
matrice, A(:) est le vecteur colonne obtenu en concaténant toutes les colonnes de A. Pour un vecteur
(ligne ou colonne), on peut se contenter de n’indiquer qu’un indice :
-->v=5:-1:1;v([3:$])
ans =
3. 2. 1.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 15/35


Ecole normale supérieure de Yaoundé IN112 DITE

La variable end représente le dernier indice (de ligne ou de colonne). La commande size(A)
renvoie la taille de la matrice A sous forme d’un vecteur ligne à deux éléments. La longueur d’un
vecteur v (ligne ou colonne) est obtenue par la commande length(v).
La commande matrix permet de remodeler une matrice :
-->matrix(1:6,2,3)
ans =
1. 3. 5.
 4. 6.

Exercice: Que vaut matrix(A(:),6,6), dans le cas cité ci-dessus?

c) Modification, insertion, suppression


La commande a(i,j)=x, où a est une matrice scalaire déjà définie et x un scalaire, affecte la
valeur x au coefficient a(i,j). On peut de même modifier une sous-matrice de a en remplaçant les
indices i et j par des vecteurs d’indices. Si l’un des indices i ou j est supérieur au nombre de lignes
ou de colonnes de a, la matrice a est automatiquement complétée par des 0 :
-->a=diag(1:2);a(3,1)=5
a=
1. 0.
0. 2.
5. 0.

e) Opérations matricielles
Les opérations ont en général deux versions : l’une correspond à l’opération usuelle sur les
matrices, l’autre à l’opération effectuée élément par élément. Ainsi, les opérations .∗, .^, ./ sont
les versions élément par élément alors que les opérations *, ^, / représentent les opérations usuelles
sur les matrices (produit, puissance, division) lorsque ces opérations ont un sens. Une fonction
usuelle f (sin, cos, exp, abs, int, floor. . .) appliquée à la matrice A = (ai,j ) donne la matrice (f (ai,j
)). Par exemple, si A = (ai,j ), exp(A) = (exp(ai,j )). Par contre, si A est une matrice carrée,
l’exponentielle matricielle s’obtient par la commande expm(A). On trouve de même les fonctions
cosm, sinm, etc .
Exemple :
-->x=rand(2,2) -->U=bool2s(x>0.1)
x= U=
! 0.2113249 0.0002211 ! ! 1. O !
! 0.7560439 0.3303271 ! ! 1. 1. !
Les commandes min et max retournent respectivement le plus petit et le plus grand élément
de A si elles sont employées avec un seul argument A (matrice ou vecteur) ; si elles sont employées
avec plusieurs arguments A1 , . . . , An (matrices ou vecteurs de même taille), elles s’interprètent
coefficient par coefficient ; on peut également obtenir les plus petits (ou plus grands) éléments de
chaque ligne (ou colonne) :
-->x=rand(2,3)

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 16/35


Ecole normale supérieure de Yaoundé IN112 DITE

x=
0.7783129 0.1121355 0.1531217
0.2119030 0.6856896 0.6970851
-->min(x)
ans =
0.1121355
-->min(x,’c’)
ans =
0.1121355
0.2119030
-->y=rand(x)
y=
0.8415518 0.4094825 0.1138360
0.4062025 0.8784126 0.1998338
-->min(x,y)
ans =
0.7783129 0.1121355 0.1138360
0.2119030 0.6856896 0.1998338

L’addition d’un scalaire à une matrice s’interprète comme l’addition à chaque coefficient. De même
la multiplication, la division par un scalaire, l’élévation à une puissance :
-->2^(0:6)
ans =
1. 2. 4. 8. 16. 32. 64.
-->eye(2,3)-1
ans =
0. - 1. - 1.
- 1. 0. - 1.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 17/35


Ecole normale supérieure de Yaoundé IN112 DITE

Notez cependant que A^2 renvoie le vecteur des carrés de A si A est un vecteur, mais le carré
matriciel de A si A est une matrice carrée (et un message d’erreur si A est une matrice
rectangulaire).
Attention : la commande 1./ ne donne pas le résultat escompté :
-->1./(1:3)
ans =
0.0714286
0.1428571
0.2142857
En effet Octave l’interprète comme (1.)/ et non comme 1 ./ et résout un système linéaire au
sens des moindres carrés.
Le rang d’une matrice A, le déterminant et le spectre d’une matrice carrée A, l’inverse d’une
matrice carrée inversible A, sont donnés respectivement par les commandes rank(A), det(A),
spec(A), inv(A) (ou A^(-1)). La diagonalisation (quand elle est possible) s’obtient par la commande
bdiag(A).
De nombreuses autres fonctions ou décompositions matricielles sont implémentées (voir la
rubrique d’aide Algèbre linéaire).
 La commande find
La fonction find permet de trouver, et donc d’extraire etc..., les éléments d’un vecteur (ou
d’une matrice) vérifiant une propriété donnée.
-->a=rand(2,3)
a=
0.2113249 0.0002211 0.6653811
0.7560439 0.3303271 0.6283918
-->find(a<0.5)
ans =
1. 3. 4.
-->x=a(find(a<0.5))
x=
0.2113249
0.0002211
0.3303271
On peut remplacer la commande a(find(a<0.5)) par la commande a(a<0.5) :
-->a(a<0.5)=0
a=
0. 0. 0.6653811
0.7560439 0. 0.6283918
De même si b est une matrice booléenne de la même taille que a, a(b) équivaut à a(find(b)).

 Le Tri
La fonction sort permet de trier les éléments d’un vecteur ou d’une matrice, soit dans leur
ensemble, soit ligne par ligne ou colonne par colonne ; l’ordre peut être croissant ou décroissant

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 18/35


Ecole normale supérieure de Yaoundé IN112 DITE

(pour les divers arguments de cette commande, voir la rubrique d’aide). Par exemple, pour trier
chaque colonne de la matrice A par ordre croissant, on utilise sort(A,’r’,’i’) (’r’ pour ’row’ : on trie
sur les lignes) :
---->A=rand(3,2) -->sort(A,’c’,’i’)
A= ans =
! 0.4368588 0.4051954 ! ! 0.4051954 0.4368588 !
! 0.2693125 0.9184708 ! ! 0.2693125 0.9184708 !
! 0.6325745 0.0437334 ! ! 0.0437334 0.6325745 !

III-4) Commandes graphiques de base

Les possibilités graphiques de Octave sont importantes. Nous n'introduisons ici que les cas
usuels des courbes planes, des courbes paramétrées et des surfaces à trois dimensions.
e) 1- Courbes planes et nuages de points
La commande de base pour tracer des courbes planes est plot. Cette commande prend en
arguments les vecteurs des abscisses et des ordonnées d’une suite de points et représente la ligne
brisée joignant ces points. De nombreux arguments facultatifs permettent de régler l’affichage
(couleur, échelle, axes . . .), d’ajouter un titre (xtitle) ou des légendes (legends). Si le nombre de
points est suffisant, on peut ainsi représenter le graphe d’une fonction :
Exemples :
On définit d’abord un vecteur de 100 valeurs régulièrement espacées entre −π et π :
--> x=linspace(-2*pi,2*pi,200);
On trace la courbe de la fonction sinus avec la commande suivante :
--> plot(x, sin(x), axesflag=5, style=5)
La couleur du graphique est définie par la commande "style = *" où * star est un nombre.
Par défaut Octave représente un cercle comme une ellipse comme dans cet exemple :
--> t=linspace(0,2*pi);plot(cos(t),sin(t))
Si on veut représenter plusieurs courbes sur le même graphique, on utilise la fonction hold.

e) 2- Courbes paramétrées et surfaces en dimension 3


La commande de base pour représenter une surface est plot. Dans sa version la plus simple,
la surface d’équation z = f (x, y) est obtenue en entrant les intervalles de définition discrétisés de x
et y, de longueurs respectives n et m, et une matrice z à n lignes et m colonnes donnant les valeurs
de la fonction en les points de la grille ainsi définie :
--> x=linspace(-pi,pi,40);
--> y=linspace(-pi/2,pi/2,20);
--> z=cos(x)’*sin(y);
--> plot(x,y,z);

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 19/35


Ecole normale supérieure de Yaoundé IN112 DITE

III-5) Programmation

III-5-1) Les fichiers


En règle générale, on utilise un éditeur de texte, le plus souvent l’éditeur intégré dans
Octave, acces
sible par le menu 'Application' de la fenêtre de commande. On enregistre le fichier obtenu avec le
suffixe .sce puis on exécute le fichier dans Octave au moyen du menu exécuter ou par la commande
exec(’nom_fichier.sce’) .
Afin de rendre lisible votre programme, il est conseiller d'y mettre des commentaires. Une
ligne de commentaires commence par //. L’éditeur de Octave permet de commenter et de
décommenter simplement des blocs de texte, ce qui est particulièrement utile si vous voulez
n’exécuter qu’une partie de votre programme.

III-5-2) Fonctions
Pour définir une fonction, on utilise la syntaxe :
function y=nomdefonction(x)
Où y est la valeur retournée par la fonction, nomdefonction le nom de la fonction que l’on
veut définir et x l’argument d’entrée. La définition de la fonction se termine par le mot-clé
endfunction :
-->function y=sq(x)
-->y=x.^2
-->endfunction;
-->sq(1:4)
ans =
1. 4. 9. 16.

Une fonction peut avoir plusieurs arguments tant en entrée qu’en sortie. Par exemple la
fonction prédéfinie max peut renvoyer à la fois le maximum des coefficients d’un vecteur (ou d’une
matrice) de scalaires et le premier indice où ce maximum est atteint. Si on appelle cette fonction
seule, elle ne renvoie que le maximum :
-->x=floor(3*rand(1,10))
x=
2. 2. 1. 1. 1. 2. 2. 1. 1. 2.
-->max(x)
ans =
2.
Si on veut obtenir aussi l’indice, on appelle la fonction en explicitant deux valeurs en sortie :
-->[y,k]=max(x)
k=
1.
y=
2.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 20/35


Ecole normale supérieure de Yaoundé IN112 DITE

La même remarque vaut pour la fonction de tri gsort qui permet de récupérer le rang de chacun
des éléments d’un vecteur :
-->x=rand(1,7)
x=
0.26395 0.41481 0.28064 0.12800 0.77831 0.21190 0.11213
-->[y,ind]=gsort(x,’g’,’i’)
ind =
7. 4. 6. 1. 3. 2. 5.
y=
0.11213 0.12800 0.21190 0.26395 0.28064 0.41481 0.77831
De manière générale, si une fonction retourne plusieurs valeurs, il faut lui demander
explicitement de retourner ces valeurs en les nommant sous forme d’un vecteur si on veut toutes les
obtenir ; sinon seul le premier argument de sortie (en général le plus important) est retourné.
Une fonction peut être récursive (s’appeler elle-même au cours de son exécution). Ainsi
pour calculer la factorielle d’un entier naturel, on pourrait définir la fonction :
function x=fact(n)
if n<=1 then x=1;else x=n*fact(n-1);end;
endfunction;

III-5-3) Variables locales et variables globales

Une fonction peut très bien ne pas renvoyer de valeur, mais effectuer une action (par
exemple dessiner une figure ou afficher un message). La fonction affichercarre(x) définie par :
-->function affichercarre(x)
-->disp(x^2);
-->endfunction;
-->affichercarre(5)
25.
affiche à l’écran le carré de son argument, mais ne renvoie aucune valeur.
Les résultats des calculs intermédiaires effectués lors de l’exécution d’une fonction ne
s’affichent jamais à l’écran, si bien qu’il est indifférent de terminer les instructions à l’intérieur
d’une fonction par un point-virgule ou un passage à la ligne. La commande disp permet d’afficher la
valeur d’une variable ; on peut y ajouter un texte sous forme de chaîne de caractères, comme
disp(’Valeur de x: ’+string(x)).
Une fonction peut accéder en lecture à toutes les variables déjà définies, mais ne peut pas
modifier en cours d’exécution une variable existante, sauf si celle-ci a été déclarée globale. Par
exemple la fonction double() définie par :
function double()
a=2*a;
endfunction;
ne modifie pas la variable a dans le script suivant :
-->a=2;double();a

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 21/35


Ecole normale supérieure de Yaoundé IN112 DITE

a=
2.
Pour qu’elle modifie a, il faudrait déclarer cette variable globale :
-->global a;
-->function double()
-->global a;
-->a=2*a;
-->endfunction;
-->a=3;double();a
a=
6.
Le plus simple est naturellement de définir la fonction autrement :
-->function y=double(x)
-->y=2*x;
-->endfunction;
-->a=3;a=double(a)
a=
6.
et d’éviter ainsi l’utilisation de variables globales.

III-5-4) Opérateurs logiques

== égal à
< inférieur à
> supérieur à
<= inférieur ou égal à
>= supérieur ou égal à
∼= ou <> différent de
∼ négation
& ou and et logique
| ou or ou logique (non exclusif)

Ces opérateurs s’appliquent coefficient par coefficient sur des matrices de même taille :
-->a=rand(2,3),b=rand(a),b<a,or(b<a)
a=
0.2113249 0.0002211 0.6653811

0.7560439 0.3303271 0.6283918


b=

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 22/35


Ecole normale supérieure de Yaoundé IN112 DITE

0.8497452 0.8782165 0.5608486

0.6857310 0.0683740 0.6623569


ans =
FFT
TTF
ans =
T

III-5-1) Boucles et conditions

a) La boucle for itère sur les composantes d’un vecteur ligne. Elle s’écrit :
for variable=indices, instruction(s), end (ne pas oublier le end).
-->v=zeros(1,4);for i=1:2:5, v(i)=i^2;end;v
v=
1. 0. 9. 0. 25.

b) La boucle while permet de répéter une instruction tant qu’une condition est vraie. Sa syntaxe est
:
while condition, instruction(s); end
Ne pas oublier le end et se méfier des boucles sans fin du type :
-->while 1
-->i=i+1;
-->end
(Octave transforme la constante non nulle 1 en le booléen %t). On peut dans ce cas arrêter
l’exécution du programme au moyen de la commande stop du menu control de la barre de menu.
La commande break interrompt l’exécution d’une boucle :
-->for k=1:100, if k^2>50 then break;end;end;k
k=
8.

c) L'instruction conditionnelle if then else s’écrit :


if condition(s) then instruction(s), else instructions, end
L’alternative else n’est pas obligatoire. Si elle est suivie d’un if, on peut contracter les deux mots-
clés en elseif.
Attention : le mot-clé then doit être situé sur la même ligne que if ou elseif ; il peut être remplacé
par un passage à la ligne ou une virgule.

d) L'instruction de choix multiple select case s’écrit :


select n,case n1 instruction,case n2 instruction,...else instruction,end
Un exemple suffira à l’illustrer :
-->nom=’jean’;select nom, case ’pierre’ y=1, case ’jean’ y=2,else y=3,end

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 23/35


Ecole normale supérieure de Yaoundé IN112 DITE

y=
2.

III-6) Exercices

Exercice 1 :
Écrire un programme Octave qui permet de calculer le PGDC de deux entiers a et b à l'aide de la
méthode d'Euclide.

Exercice 2 :
Écrire un programme Octave qui permet le calcul du nième terme de la suite de Fibonacci

Exercice 3 :
a) Créer les matrices suivantes en utilisant un minimum de commandes de création de matrice
(eye, ones, et diag).

A= 1 2 3 4 ; B= 0 4 4 4 ; C= 1 , 1.5 , 2 , 2.5 , 3 , 3.5 , 4 ,...,10


5 6 7 8 4 0 4 4
9 10 11 12 4 4 0 4
4 4 4 0

D= 1.0000 3.4000 0 0 0 0 5.0000


1.0000 0 3.4000 0 0 0 6.0000
1.0000 0 0 3.4000 0 0 7.0000
1.0000 0 0 0 3.4000 0 8.0000
1.0000 0 0 0 0 3.4000 9.0000

b) Écrire une commande optimisée composée de commandes élémentaires (eye, ones, et diag)
permettant de créer les matrices A en fonction d'une variable n telle que on ait pour n = 2, 3, 4 les
résultats ci-dessous.
Pour n = 2 : Pour n = 3 : Pour n = 4 :

0 0 0 2 0 0 0 0 3 0 0 0 0 0 4
3 0 0 3 3 0 0 0 4 3 0 0 0 0 5
A= 0 3 0 4 A= 0 3 0 0 5 A= 0 3 0 0 0 6
1 1 1 1 0 0 3 0 6 0 0 3 0 0 7
1 1 1 1 1 0 0 0 3 0 8
1 1 1 1 1 1 Chapitre
4.

RESOLUTION NUMERIQUE DES EQUATIONS ET DES


SYSTÈMES D'ÉQUATIONS NON LINÉAIRES

Introduction

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 24/35


Ecole normale supérieure de Yaoundé IN112 DITE

La solution de plusieurs problèmes peut être définit comme la limite d’une suite de
nombres ou de vecteurs. C’est le cas des problèmes admettant une modélisation
mathématique donnant lieu à des équations ou système d’équation non linéaires. Le
problème se pose de la façon suivante :
Soit f une fonction numérique d’une variable réelle (nous simplifions au cas f est à
valeurs réelles, nous verrons en la fin du cours comment on peut généraliser la
méthode de résolution au cas des fonctions à valeurs dans Rn, n>1). Il est question de
déterminer les solutions de l’équation :
f(x) = 0

Cette résolution d’un point de vue numérique s’appuie sur des méthodes itératives qui
permettent de déterminer un nombre fini, suffisamment grand, d’éléments d’une suite,
de telle sorte que le dernier élément calculé soit une valeur approchée de la solution
cherchée. Ainsi, pour une suite récurrente x0, x1,…xn qui admet une limite α, on
calcule les valeurs successives de xn jusqu’à une valeur suffisamment grande de n,
déterminée par un critère d’arrêt qui peut être basé sur l’erreur absolue (|xn-xn-1 ≤) ou
sur l’erreur relative (|xn-xn-1 ≤|xn|) où  a été fixé à l’avance..
Les principales méthodes que nous allons explorer dans ce cours sont les suivantes :

 la méthode de la bissection ou de la dichotomie


 la méthode du point fixe
 la méthode de Newton-Raphson
 et la méthode de la sécante.

2.1 La méthode de la bissection ou de la dichotomie

a) Principe

Cette méthode se fonde sur le théorème des valeurs intermédiaires. Pour f continue,
nous cherchons x0 tel que f(x0) = 0. On suppose qu’on a localisé un intervalle [a,b] tel
que f change de signe. On pose c = (a+b)/2 :
- Si f(a)*f(c) = 0, alors c = x0 ;
- Si f(a)*f(c) <0 alors on remplace b par c ;
- Sinon on remplace a par c.
Autrement dit, en fonction du signe de f(c), on sait dans quel demi-intervalle trouve
nécessairement la racine. On réitère donc l’opération sur le nouvelle intervalle jusqu’à
obtenir un intervalle de longueur inférieure à la précision souhaitée, par exemple (b-
a)/2n pour n itérations.

b) Algorithme / programme

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 25/35


Ecole normale supérieure de Yaoundé IN112 DITE

L’objectif est de trouver une approximation de la solution de f(x) = 0 dans [a, b] en


construisant une suite d’intervalles ([an, bn])n contenant la racine et tels que an ou bn
est le milieu de l’intervalle [an−1, bn−1].
Ainsi en entrée, on prend les bornes a et b de l’intervalle de départ, la précision  et
N0 nombre maximal d’itérations. En sortie, c’est la valeur approchée x0 telle que : f(x0)
=0

Algorithme :

1. Si f(a) = 0 imprimer la solution est a. Si f(b) = 0 imprimer la solution est b, aller


à 10
2. si f(b) * f(a) > 0, imprimer (pas de changement de signe). Aller à 10
3. poser N = 1
4. Tant que N ≤ N0, faire les étapes 5 à 8
5. poser x0 = (a+b)/2
6. Si f(x0) = 0 ou (b−a)/2 ≤, imprimer x0. Aller `a 10
7. poser N = N + 1
8. Si f(a) * f(p) > 0, alors poser a = p, sinon poser b = x0
9. Imprimer après N0 itérations l’approximation obtenue est p et l’erreur maximale
est (b−a)/2
10. Fin

c) Avantages

Cette méthode à l’avantage d’être simple et de toujours converger, par ailleurs


pour  donné, on connaît le nombre d’itérations nécessaires :

d) Inconvénient
La convergence de la méthode de bissection est linéaire, donc assez lente. De
plus, on ne tient compte que du signe de f(c) ce qui signifie qu’on perd beaucoup
d’information. Par ailleurs, s’il y a plusieurs racines on n’en obtient qu’une et on ne
sait pas laquelle. Il faut trouver a et b tels que f(a) et f(b) sont de signe différents et
f doit être continue.

e) Exemple

Vérifier qu’on trouve une solution à 10-10 près de l’équation xex-1=0 en 34 itérations,
et que cette solution vaut x = 0.5671432904.
Que se passe-t-il si f est discontinue ? Exemple :

2.1 La méthode du point fixe

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 26/35


Ecole normale supérieure de Yaoundé IN112 DITE

a) Principe

Il est question de rechercher une fonction  telle que f(x) =0 soit équivalent à (x) =
x. Notons qu’il peut y avoir une infinité de possibilités car par exemple, quelque soit la
fonction g s’annulant en même temps que f, on a (x) = x ± g(x). Toutefois, ce ne sont
pas toutes les possibilités qui convergent ou qui sont rapide pour la résolution du
problème.
Rappels :
Soit (xn)n une suite récurrente définie par xn+1 = (xn), un point fixe de cette suite
est un nombre p tel que p = (p). On démontre que si  est continue et que (xn)n
converge, alors sa limite est un point fixe.
Soit (xn)n une suite récurrente admettant p pour limite lorsque n tend vers l’infini.
On pose en = xn – p (l’écart entre l’itération d’ordre n et la solution) ; Rappelons qu’on
dit que la formule converge de façon monotone à partir du rang n0, lorsque |en|
décroît et tend vers 0. Si D est le plus grand intervalle contenant p tel que pour tout x0
dans D, la formule converge de façon monotone à partir de 0, on dit alors que D est la
zone de convergence de la formule.
Supposons qu’on a ’(p) = ’’(p) =…=(k-1)(p)=0 et (k)(p) ≠ 0, alors la formule
itérative est dite d’ordre k. Dans ce cas le développement de Taylor-Young au
voisinage de p à l’ordre k permet d’avoir :

Ceci montre que la rapidité de la convergence augmente avec l’ordre de la formule


récurrente.
Soit D = [p – e0, p+e0], supposons que  est dérivable, que ’ est continue et que pour
tout t dans D on a |’(t)| < 1, alors il y a convergence monotone. Si de plus |’(t)| = c
contant, la convergence est dite linéaire. L’écart avec la solution se réduit alors à
chaque itération d’un rapport constant. Par ailleurs, si  et ’ sont dérivable, ’’
continue sur D, et pour tout t dans D on a |’’(t)e02/2| < 1, alors il y a encore
convergence monotone et si de plus |’’(t)| est contant sur D, on parle de
convergence quadratique. Dans ce dernier cas en est proportionnel au carré de en-1,
la convergence est plus rapide que dans le cas linéaire. On pourrait continuer de
proche en proche vers des méthodes toujours plus rapides, mais dans la pratique elles
sont aussi plus difficiles à mettre en œuvre. Ainsi, on se limite le plus souvent aux
méthodes permettant une convergence quadratique.

b) Algorithme / programme

Le but ici est de trouver une solution de g(x) = x. Pour se faire, nous prendrons en
entrée une approximation initiale p0, la précision désirée  et le nombre maximal

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 27/35


Ecole normale supérieure de Yaoundé IN112 DITE

d’itérations N0. En sortie, nous aurons la valeur approchée de p ou un message


d’échec.
Algorithme :
1. N = 1
2. Tant que N ≤ N0, faire les étapes 3 à 6.
3. Poser p = g(p0)
4. Si| p − p0 |≤  alors imprimer p, aller à l’étape 8.
5. Poser N = N + 1.
6. Poser p0 = p.
7. Imprimer : la méthode a échoué après N itérations.
8. Fin.

c) Avantages

La méthode peut être très rapide et ne nécessite qu’une valeur initiale. Elle ne
nécessite pas de comparaisons de signes.

d) Inconvénient

Il n’est pas toujours possible de choisir avec certitude la valeur initiale x0 dans la
zone de convergence. Ainsi, même si la suite converge, il faudra passer par une phase
de recherche dans laquelle l’erreur ne diminue pas progressivement ; il pourrait
même y avoir divergence. Par ailleurs, la méthode n’est pas toujours simple à mettre
en œuvre (critères de continuité et de dérivabilité). Enfin, en cas de racine multiple, la
méthode ne convergent pas toujours vers la plus proche de x0.

e) Exemple

Résoudre numériquement x2-2 = 0, avec les fonctions 1(x) = 2/x, 2(x) = 2x – 2/x ;
3(x) = (1/3)(2x+2/x) et 4(x) = (1/2)(x+2/x). Que constatez-vous ?

2.3 La méthode de Newton-Raphson

a) Principe

Cette méthode est un cas particulier de la méthode du point fixe où pour f(x) = 0 et
sous certaines conditions, on prend (x) = x – f(x)/f’(x). Ainsi, on suppose que f est
continue et dérivable. On se donne x0 et on définit la suite récurrente de manière à ce
que xn+1 = xn – f(xn)/f ’(xn). D’un point de vue géométrique, xn+1 représente l’abscisse de
l’intersection avec l’axe des x de la tangente à la courbe au point (xn, f(xn)).
En calculant ’(x) et ’’(x) à partir de (x) = x – f(x)/f’(x), on peut discuter la
convergence de la méthode :
- Si f ’(p) et f ‘’(p) ≠ 0 la méthode est de second ordre et donc converge

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 28/35


Ecole normale supérieure de Yaoundé IN112 DITE

quadratiquement dans la zone de convergence ;


- Si f ‘(p) ≠ 0 et f ‘’(p) = 0, il y a un point d’inflexion, et la méthode est d’ordre > 2
- Si f ‘(p) = 0, il y a une racine multiple et une convergence linéaire, donc
ralentissement de la convergence.

b) Algorithme / programme

En entrée, on prend une approximation initiale p0,  la précision souhaitée, N0, le


nombre maximum d’itérations. En sortie, on a la valeur approchée de p ou un message
d’´echec.
Algorithme :
1. N = 1
2. Tant que N ≤ N0, faire les étapes 3 à 6.
3. Poser p = p0 − f(p0)/f ’(p0)
4. Si| p − p0 |≤  alors imprimer p, aller à l’étape 8.
5. Poser N = N + 1.
6. Poser p0 = p.
7. Imprimer la méthode a échoué après N itérations.
8. Fin.

c) Avantages

En cas de convergence, elle est généralement quadratique ou linéaire si la racine p


est multiple. En plus, elle nécessite un seul point initial.

d) Inconvénient

La fonction f doit être continue et dérivable. De plus, il faut calculer la dérivée en


question. La méthode ne converge pas nécessairement.

e) Exemple

Résoudre numériquement f(x) = xex – 1, x0 = 0, à 10-10 (7 itérations). Idem pour f(x) = x


– cos(x), x0 = 1, à 10-10 (5 itérations).

2.4 La méthode de la sécante.

a) Principe

La méthode de Newton-Raphson exige le calcul de f ’(x), dont l’existence est


supposée. La méthode de la sécante consiste à remplacer cette valeur à un rang donné

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 29/35


Ecole normale supérieure de Yaoundé IN112 DITE

(f ’(xn)) par l’expression (f (xn) - f (xn-1)) / (xn - xn-1). En effet, la tangente est remplacée
par la sécante dans la conception géométrique de la méthode de Newton-Raphson.
D’où la récurrence :

𝑥 − 𝑥
𝑥 = 𝑥 + 𝑓(𝑥 )
𝑓(𝑥 ) − 𝑓(𝑥 )

b) Algorithme / programme

Nous avons besoin en entrée de deux approximations initiales p0 et p1,  la


précision souhaitée, N0, le nombre maximum d’itérations. En sortie, c’est la valeur
approchée de p ou un message d’´echec.

(1) poser N = 1, q0 = f(p0), q1 = f(p1)


(2) Tant que N ≤ N0 + 1, faire les étapes 3 à 6
(3) poser p = p1 − q1(p1−p0)/(q1−q0)
(4) Si | p − p1 |≤  alors imprimer p, aller à l’étape 8
(5) Poser N = N + 1
(6) Poser p0 = p1, q0 = q1, p1 = p, q1 = f(p)
(7) Imprimer la méthode a échoué après N0 itérations
(8) Fin

c) Avantages

Ici, pas besoin que la fonction f soit dérivable. La méthode est plus rapide que celle
de la bissection.

d) Inconvénient

Il faut deux valeurs initiales. Le méthode est plus lente en général par rapport à
celle de Newton-Raphson.

2.5 Généralisation à Rn

Il existe plusieurs approches de généralisation de la résolution numérique des


équations non linéaire aux systèmes non-linéaires. Nous nous limitons ici à présenter
celle permettant de généraliser la méthode de Newton-Raphson à la résolution d’un
système de deux équations non linéaires à deux inconnues. Soit le système suivant :

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 30/35


Ecole normale supérieure de Yaoundé IN112 DITE

A partir d’un couple de valeurs approchées (x1, y1) d’une solution du système, on
peut déterminer deux accroissements h et k à donner à x1 et y1 de manière à ce que :

En développant en 1er ordre, il vient :

Où l’on a posé :

Les quantités h et k s’obtiennent donc, en résolvant le système linéaire suivant :

Le calcul est alors relancé jusqu’à ce que h et k deviennent inférieurs à une valeur 
que l’on se donne (selon la précision voulue pour le calcul).
Ainsi, l’algorithme correspondant est :

Avec :

Ou encore :

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 31/35


Ecole normale supérieure de Yaoundé IN112 DITE

Cette méthode de résolution peut être facilement généralisée pour la résolution


de système de n équations non-linéaires à n inconnues.
Nous concluons ainsi cette note de cours sur les méthodes de résolution
numérique des équations et systèmes d’équation non linéaires.

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 32/35


Ecole normale supérieure de Yaoundé IN112 DITE

FICHE D'EXERCICE N°2

EXERCICE : Résolution d'équations non linéaires.


Dans cet exercice, on souhaite utiliser sur des exemples les différentes méthodes
d'approximation d'un zéro d'une fonction vues en cours.

1. On considère tout d'abord la fonction 𝑓(𝑥) = – sin(𝑥) + − sur
l’intervalle [− ; 𝜋] en observant qu'elle y possède deux zéros.
a. Définir la fonction f dans octave en utilisant la fonction f = inline(‘expression
de f(x)’ , ’x’).
b. A l’aide d’un graphe de la fonction f, expliquer pourquoi la méthode de
dichotomie ne peut être utilisée que pour calculer ‘un de ces deux zéros, que l’on notera
ξ dans la suite.
c. Compléter les lignes manquantes du fichier dichotomie.m ci-dessous afin
d’obtenir une fonction [zero, iter, res, inc] = dichotomie(f,a,b,tol,nmax) implémentant la
méthode de dichotomie pour l’approximation d’un zéro de la fonction f compris dans
l’intervalle [a,b] tel que f(a)f(b) < 0. Les autres paramètres d’entrée tol et nmax
représentent respectivement la tolérance pour le critère d’arrêt et le nombre maximum
d’itérations, les paramètres de sortie zero, iter, res et inc étant pour leur part
l’approximation du zéro obtenue, le nombre d’itérations nécessaires au calcul de cette
approximation, la valeur de la fonction func en ce point et un vecteur contenant la
suite des valeurs absolues des différences entre deux approximations successives (dite
suite des incréments).
d. Utiliser la fonction dichotomie pour calculer une approximation de ξ avec une
tolérance égale à 10-10 pour critère d’arrêt et en choisissant un intervalle [a,b]
convenable.
e. Au moyen de la commande semilogy, tracer le graphe de la suite des
incréments |x(k+1)-x(k)| avec une échelle semilogarithmique et déterminer la loi selon
laquelle ces quantités tendent vers 0 quand k tend vers l’infini.
f. Compléter les lignes manquantes du fichier newton.m afin d'obtenir une
fonction [zero,iter,res,inc]=newton(f,df,x0,tol,nmax) implémentant la méthode de
Newton pour l'approximation un zéro de la fonction f . Les paramètres d'entrée df, x0,
tol et nmax représentent respectivement le nom de la fonction correspondant à la
fonction dérivée f’', l'initialisation de la méthode, la tolérance pour le critère d'arrêt de
la méthode et le nombre maximum d'itérations à effectuer. En sortie, les paramètres
sont identiques à ceux de la fonction dichotomie.
a. Définir les fonctions g et g' dérivée de g dans octave.
b. Utiliser la fonction newton pour essayer d'approcher un zéro de g en prenant
x(0) = 0 pour initialisation et une tolérance égale à 10e−10 pour le critère d'arrêt.
c. Tracer le graphe de g sur l'intervalle [−1, 1] et tenter de donner une
explication qualitative du fait la méthode de Newton ne converge pas avec

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 33/35


Ecole normale supérieure de Yaoundé IN112 DITE

l'initialisation précédente.
d. Appliquer cinq itérations de la méthode de dichotomie à la fonction g sur
l'intervalle [−1, 1] et utiliser le point obtenu comme initialisation de la méthode de
Newton pour la recherche d'un zéro de g.
e. Écrire une fonction qui implémente la méthode de la sécante à partir du
fichier newton.m.

--------------------------------------------------------------Dichotomie.m---------------------------------------
function [zero,iter,res,inc]=dichotomie(func,a,b,tol,nmax)
fa=feval(a,func,);
fb=feval(b,func);
if fa*fb>0 then
error('Le signe de la fonction doit differer en chaque extremite de l''intervalle.');
elseif fa==0
zero=a;
res=0;
iter=0;
return
elseif fb==0
zero=b;
res=0;
iter=0;
return
end
iter=0 ;
fin=1;
inc=(a+b)*0.5;
err=(b-a)*0.5;
while (err>=tol&iter<=nmax)
iter=iter+1;
fin+1;
x=inc(fin);
% COMPLETER
inc(fin+1)=(a+b)*0.5;
inc(fin-1)=abs(inc(fin)-x);
end
if iter>nmax then
fprintf('Le nombre maximum d''iterations a ete atteint sans convergence avec la
tolerance desiree.\n');

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 34/35


Ecole normale supérieure de Yaoundé IN112 DITE

end
zero=inc(fin);
inc(fin)=[];
res=feval(zero,func);
endfunction

-------------------------------------------------Newton.m--------------------------------------------------------
function [zero,iter,res,inc]=newton(func,dfunc,x0,tol,nmax)
x=x0;
iter=0;
diff=tol+1;
while (abs(diff)>=tol&iter<=nmax)
iter=iter+1;
% COMPLETER
end
if iter>nmax then
fprintf(['Le nombre maximum d''iterations a ete atteint sans convergence avec la…
tolerance desiree.\n']);
end
zero=x;
res=feval(x,func);
endfunction

© 2020 Victor LOUMNGAM K. vloumngam@gmail.com 35/35

Vous aimerez peut-être aussi