Vous êtes sur la page 1sur 111

Introduction aux mthodes de rsolution

numrique
Guide pratique pour les programmeurs

Ce document a pour but de vous prsenter une varit des mthodes utilises dans le domaine de la programmation
pour rsoudre les problmes mathmatiques varis. Tout le long de ce document, nous allons utiliser une approche
intuitive dans la prsentation et la rsolution des exercices en se souciant de lefficacit et de llgance de nos
solutions. Pour certains algorithmes, le code en C#, en C++ et/ou en Java sera offert en annexe afin de diriger le lecteur
vers lapplication des cas analyss.
Toute information contenue dans ce document a t dj publie et dcrite par des dizaines ou mme des milliers
dauteurs dans les 100 dernires annes. Toutefois, peu de documents crits de ce type visent les novices. Encore moins
de documents contiennent les informations varies qui touchent la fois lorganisation des donnes, la rsolution des
quations diffrentielles, les algorithmes dapprentissage classiques etc. Il est donc difficile de trouver une seule source
des algorithmes simple et facile comprendre qui intgre tous les lments mentionnes plus haut.

La version actuelle du document contient quelques images qui peuvent ne pas tre compatibles avec la licence actuelle.
Nous vous prions de contacter lauteur en cas de doute ou de litige suite lutilisation inapproprie ou un oubli
dindiquer des sources des images ou des donnes contenues dans ce document.

Ce(tte) uvre est mise disposition selon les termes de la Licence Creative Commons Attribution - Pas dUtilisation
Commerciale - Partage dans les Mmes Conditions 4.0 International. Une copie de licence est disponible
http://creativecommons.org/licenses/by-nc-sa/4.0/.
Auteur : A.Deichman
Dernire modification : 18/12/2016

Table des matires


TABLE DES MATIRES

LES REMARQUES PRLIMINAIRES

ALGORITHME
PSEUDOCODE

5
6

LES QUATIONS ET LES INQUATIONS AVEC LES PARAMTRES

LES (IN)QUATIONS DE PREMIER ORDRE ET DORDRE ZRO (DROITES)


LA VALEUR ABSOLUE AVEC LES (IN)QUATIONS DE PREMIER ORDRE ET DORDRE ZRO
QUELQUES AUTRES CAS DINTRT
UN POINT APPARTENANT UNE RGION DLIMITE PAR DES QUATIONS
LES (IN)QUATIONS DE SECOND ORDRE

7
8
11
13
15

LES ALGORITHMES DE TRAITEMENT DES DONNES (INTRODUCTION)

17

LES OPRATIONS DE BASE


RECHERCHE DUN MAXIMUM
LES OPRATIONS AVEC DES NOMBRES NATURELS
MANIPULATIONS DES LISTES
REMPLIR UNE LISTE
LES DONNES STATISTIQUES SIMPLES PARTIR DES VALEURS DANS UNE LISTE
MANIPULATION DES DONNES RPONDANTS UNE CONDITION
ALGORITHMES DAFFICHAGE DES DONNES
PRSENTATION TRIANGULAIRE
QUELQUES SOLUTIONS

17
17
18
25
25
26
26
31
31
36

LES ALGORITHMES DE TRAITEMENT DES DONNES (TRIAGE)

38

COMBINER DEUX LISTES ORDONNES


SUPPRIMER LES DOUBLONS
TRI BULLES OU PAR PROPAGATION (BUBBLE SORT)
TRI PEIGNE (COMB SORT)
TRI IMPAIREPAIRE (ODDEVEN SORT)
TRI COCKTAIL (COCKTAIL SORT)
GNOME SORT
TRI PAR INSERTION (INSERTION SORT)
TRI DE SHELL (SHELL SORT)
STRAND SORT

38
38
39
40
41
42
45
46
49
51

Auteur : A.Deichman
Dernire modification : 18/12/2016

QUELQUES SOLUTIONS

54

LES MATRICES

55

LES PROPRITS DES MATRICES


MATRICE CARRE
MATRICE TRIANGULAIRE
MATRICE DIAGONALE
MATRICE BI-DIAGONALE
MATRICE SYMTRIQUE
MATRICE IDENTIT
MATRICE NULLE
LES POINTS COLS (POINTS-SELLES)
CALCUL MATRICIEL
MATRICES GALES
ADDITION
SOUSTRACTION
DTERMINANT
MULTIPLICATION
PUISSANCES
TRANSPOSE DUNE MATRICE
QUELQUES SOLUTIONS

55
55
55
57
58
58
59
59
60
62
62
63
63
64
64
66
66
66

ALGBRE LINAIRE

69

PROGRAMMATION LINAIRE
MTHODE SIMPLEX
CRISS-CROSS ALGORITHME

69
69
69

LTUDE DES FONCTIONS

70

LES ZROS DUNE FONCTION


LA MTHODE DE DICHOTOMIE
LA MTHODE DE NEWTON OU DE NEWTON-RAPHSON
LA MTHODE DE DURAND-KERNER
LA MTHODE DE ABERTHEHRLICH

70
70
71
76
76

LES APPROXIMATIONS NUMRIQUES DES SOLUTIONS DES QUATIONS DIFFRENTIELLES

77

NOTATION
MTHODE DEULER
EN PEU DHISTOIRE
NOTIONS THORIQUES
FORMES
Auteur : A.Deichman
Dernire modification : 18/12/2016

78
79
79
79
80
3

EXEMPLES DAPPLICATION
COURTE DISCUSSION SUR LERREUR
LALGORITHME
MTHODE DE POINT MILIEU
EN PEU DHISTOIRE
NOTIONS THORIQUES
MTHODE TRAPZODALE
EN PEU DHISTOIRE
NOTIONS THORIQUES
RUNGE-KUTTA
EN PEU DHISTOIRE
FORMES DE RUNGE-KUTTA
EXEMPLE DAPPLICATION
RK4 POPULAIRE APPLIQU UNE QUATION DE PREMIER ORDRE
RK4 POPULAIRE APPLIQU UNE QUATION DE SECOND ORDRE
TABLEAU/REPRSENTATION DE BUTCHER POUR LES MTHODES RK
RK AVEC UN PAS ADAPTABLE
MTHODE DE FEHLBERG (RKF45)
MTHODE DE DORMAND-PRINCE (RKDP)
UNE COURTE RFLEXION SUR LES ERREURS
LE CAS DUNE FONCTION (, ) = 2
LE CAS DUNE FONCTION () = TAN()
LES TAPES SUIVRE POUR PROGRAMMER UNE SOLUTION PARTICULIRE DE RK
QUELQUES SOLUTIONS

81
87
88
88
88
88
89
89
89
89
90
90
91
91
93
94
95
95
98
100
102
103
105
105

BIBLIOGRAPHIE

110

Auteur : A.Deichman
Dernire modification : 18/12/2016

Les remarques prliminaires


Dans ce document, nous allons surtout se concentrer sur la logique et le dveloppement des algorithmes. Nous allons
aussi assumer que le lecteur va complter ses connaissances au fur et mesure en utilisant les ressources externes.
Toutefois, il est important de dfinir quelques termes essentiels et de prciser la syntaxe utilise dans ce document.

Algorithme
Intuitivement nous utilisons les algorithmes dans la vie de tous les jours. Par exemple, imaginons un tre humain qui
veut traverser une intersection routire Montral, Qubec, Canada en 2016 . De plus, imaginons que cet tre humain
ne sait pas quoi faire par ce que-il na jamais t en ville ou est encore trs jeune. ce moment, le comportement
habituel se rsume en :
Si droitepasdevoiture et gauchepasdevoiture alors
Traverser
Fin si

Mais il est aussi possible imaginer un autre type dintersection avec les feux de circulation de base (rouge, jaune et
vert). Ceci nous donne un comportement diffrent et en peu plus complexe :
Si lefeuestvert alors
Traverser
Si non
Attendre
Fin si

Il est ncessaire de combiner les deux pour rpondre lnonc initial et permettre notre humain imaginaire de
traverser efficacement les deux types dintersections :
Siilyaunfeudecirculation alors
Si lefeuestvert alors
Traverser
Si non
Attendre
Fin si
Si non
Si droitepasdevoiture et gauchepasdevoiture alors
Traverser
Fin si
Fin si

Toutefois, nous avons aussi des intersections avec les feux de circulation ddis aux pitons. En combinant la logique
dcrite plus haut avec la nouvelle vision du contexte nous avons :
complter

Nous pouvons encore modifier notre squence pour prendre en compte lge de la personne qui traverse (adulte, enfant
etc.), vrifier si la personne est en groupe (damis par exemple), est accompagne etc. Plus nous travaillons sur notre
suite dactions plus elle ressemble quelque chose que nous pouvons enseigner un enfant, un ordinateur, une voiture
intelligente. Autrement dit, nous dveloppons un algorithme de comportement dans un contexte spcifique.
Pareillement, nous pouvons dvelopper les algorithmes de rsolution des problmes mathmatiques, informatiques et
physiques varis comme celle prsentes plus loin dans ce manuel.
Auteur : A.Deichman
5
Dernire modification : 18/12/2016

Pseudocode
Dans toutes les sections de ce document nous allons viser la simplicit et la comprhension. Ainsi, nous allons utiliser
une version simplifie du langage communment utilis pour dcrire les algorithmes (pseudocode). Nos choix seront
toujours bass sur nos connaissances antrieures spcifiquement en mathmatiques. Ainsi dans toutes les expressions
mathmatiques, nous allons utiliser les symboles familiers et connus. Voici quelques exemples de la notation choisie :

racine carr de x (())


2 le carr de x (^2)
0 x plus grand ou gal zro ( >= 0)

La mme notation mathmatique simplifie sera utilise dans les expressions conditionnelles et les assignations. Par
exemple, linstruction = 0 signifiera une condition (est-ce que est gal zro ?) selle est utilise comme une
condition du choix (Si) ou dans une boucle de rptition. En mme temps, cette instruction signifiera une assignation
ou une initialisation de la variable sil est utilise seule comme une instruction daction.
Les instructions du contrle ont taient aussi modifies pour faciliter la lecture. Linstruction du dbranchement Si a t
simplifi aux formats suivants :
Si condition alors
Action

Si condition alors
Action(s)
Si non
Action
Si condition alors
Action(s)
Si non
Action(s)
Fin si

Si condition alors
Action(s)
Fin si

En mme temps, nous avons aussi simplifi la notation utilise pour dcrire les boucles. La boucle
Tant que faire
...
Fin tant que

va tre utilis dans toutes les situations ncessitants une boucle de type for ou une boucle de type while . Pour
les boucles du type do while nous allons employer le format :
Faire
...
Tant que

complter

Auteur : A.Deichman
Dernire modification : 18/12/2016

Les quations et les inquations avec les


paramtres
Imaginons que nous cherchons rsoudre une quation ou une ingalit dordre quelconque. Dans ce cas, nous devons
trouver toutes les solutions pour lesquelles cette quation est valide et statuer quand cette quation nest pas valide
(ex. : division par zro).

Les (in)quations de premier ordre et dordre zro (droites)


Dans cette section, nous allons discuter de toute forme dquation dinquation dordre zro ou dordre un dcrivant
des droites, incluant les droites brises de certaines formes (valeur absolue).
Commenons par analyser les quations de premier ordre de la forme + = .
Cas 1 : + = , ,
Si notre objectif consiste trouver toutes les valeurs de pour les quelles = 0 et, , , nous cherchons
effectivement rsoudre + = 0. De premire vue, la solution est = / avec lexception 0. Par contre, ce
nest quune rponse partielle la question. Nous savons, selon lnonc, que = 0 est une des valeurs possibles. Notre
solution doit donc inclure cette option ainsi que loption avec b=0. On a donc la suite logique suivante :
Si = 0 alors
Si = 0 alors
Rponse
Si non
Pas de solution
Si non
Rponse = /

Notons ici que le dernier si non est associ avec le premier si et non avec le second.
Cas 2 : + = , , ,
Nous allons maintenant modifier notre approche en cherchant toutes les valeurs de pour les quelles =
et, , , , nous cherchons donc rsoudre + = . En envoyant de ct gauche, nous pouvons voir
lquation comme + ( ) = 0. Si nous considrons que = , nous obtenons + = 0. Ce problme donc
revient rsoudre le cas prcdent avec quelques modifications mineures :
=
Si = 0 alors
Si = 0 alors
Rponse
Si non
Pas de solution
Si non
Rponse = /

Nous pouvons aussi rcrire la mme suite logique en rutilisant les mmes variables :
=
Si = 0 alors

Auteur : A.Deichman
Dernire modification : 18/12/2016

Si = 0 alors
Rponse
Si non
Pas de solution
Si non
Rponse = /

Rappelons-nous que la ligne b=b-c nest pas fausse de point de vue informatique. Nous devons la lire de droite
gauche, comme un ordinateur : effectuer lopration de soustraction( ), ensuite copier/assigner le rsultat dans
lespace mmoire rserv pour.
Cas 3 : + , ,
Dans le cas des ingalits de base, notre approche ne doit pas changer. Nous cherchons toujours les zros de la fonction
comme dans le premier exemple. Par contre, nous voulons y ajouter lintervalle des solutions appropries. Ainsi, ce
problme peut tre rsolu en utilisant la suite logique suivante :
Si = 0 alors
Si 0 alors
Rponse
Si non
Pas de solution
Si non
Si > 0 alors
Rponse /
Si non
Rponse /

Notons ici que le dernier test est ajout pour vrifier si le signe doit changer lors de division par. Remarquons aussi
que si lordinateur se rend la ligne /, il est certain que < 0.
Cas 4 : + , , ,
Ce cas revient la modification du cas + = . Comme prcdemment, nous devons simplement prendre en
compte le changement de signe lors de la division par.
=
Si = 0 alors
Si 0 alors
Rponse
Si non
Pas de solution
Si non
Si > 0 alors
Rponse /
Si non
Rponse /

La valeur absolue avec les (in)quations de premier ordre et dordre zro


Dans cette section, nous allons essentiellement revisiter les exemples prsents plus haut en y ajoutant la valeur
absolue. Durant la rsolution des (in)quations contenant la valeur absolue, il faut se rappeler que si votre quation a
t simplifie jusqu la forme || = il existe trois solutions possibles :

si > 0, il y a deux solutions = et = ;


si = 0, il y a une seule solution = 0;

Auteur : A.Deichman
Dernire modification : 18/12/2016

si < 0, lquation na pas de solution.

Notons quil est inacceptable de mlanger la premire et la seconde option : le nombre de racines/solutions nest pas le
mme. Ainsi, si le logiciel produit le rsultat = 0 et = 0 ou = 0 et = 0 pour un = 0, cette approche
est considre dtre errone.
Cas 5 : || = , ,
Idalement, nous cherchons transformer notre expression vers la forme prsente plus haut (soit|| = ). Nous
devons diviser les deux cots par ce qui implique que 0. Ensuite, nous pouvons procder la rsolution de
lquation tel que dcrit au dbut de cette section. Rsumons le tout :
Si = 0 alors
Si = 0 alors
Rponse
Si non
Pas de solution
Si non
Si / > 0 alors
Rponse = / et = /
Si non
Si / = 0 alors
Rponse = 0
Si non
Pas de solution

Cas 6 : || = , ,
premire vue, ce cas ressemble normment lexemple prsent plus haut. Vrifions ; est-ce vrai ? Notons
que|| = ||||. Ainsi, ce cas revient || = , 0. Nous pouvons donc reprendre la mme suite
logique et mme la simplifier lgrement :
Si = 0 alors
Si = 0 alors
Rponse
Si non
Pas de solution
Si non
Si > 0 alors
Rponse = /|| et = /||
Si non
Si = 0 alors
Rponse = 0
Si non
Pas de solution

Cas 7 : | + | = , , ,
Comme dans les cas prcdents, si = = = 0, lquation est valide pour ; si = = 0 et 0 il ny a pas de
solution etc. Autrement dit, nous avons :
Si = 0 alors
Si = 0 alors
Si = 0 alors
Rponse
Si non

Auteur : A.Deichman
Dernire modification : 18/12/2016

Pas de solution
Si non
Si = ou = alors
Rponse
Si non
Pas de solution
Si non
Si > 0 alors
Rponse = /|| et = /||
Si non
Si = 0 alors
Rponse = 0
Si non
Pas de solution

Cas 8 : | + | = + , , , ,
Ce cas ressemble, essentiellement, les cas vus prcdemment. Par contre, il est important de noter que nous avons ici
trois cas :
1. Pour + > 0, nous devons traiter le cas + = +
2. Pour + < 0, nous devons traiter le cas ( + ) = +
3. Pour + = 0, nous devons traiter le cas + = +
Nous pouvons donc continuer la rsolution mathmatique afin de trouver les zros dans ces cas.
Premier cas
+ = +
( ) + ( ) = 0
=

( )
( )

Deuxime cas
( + ) = +
( + ) + ( + ) = 0
=

( + )
( + )

Troisime cas
+ = 0
=

Notons que dans tous les cas il est important de valider pour les deux formes indtermines0 et0 .

Auteur : A.Deichman
Dernire modification : 18/12/2016

10

complter
Cas 9 : | + | = | + |, , , ,
Dans ce cas, il est essentiel de faire lanalyse prliminaire afin de mieux comprendre comment traiter les valeurs
absolues. En fait, ce cas doit dabord tre analys algbriquement ou gomtriquement et ensuite programm.
Nous pouvons reprendre lapproche utilise dans le cas prcdent en considrant les situations suivantes :
1.
2.
3.
4.
5.

+ > 0 et + > 0
+ > 0 et + < 0
+ < 0 et + > 0
+ < 0 et + < 0
+ = 0 et/ou + = 0

complter

Quelques autres cas dintrt


Avant de commencer avec des exemples de rsolution, nous devons dabord se rappeler que pour toute ingalit la
solution peut se prsenter comme un intervalle. De plus, nous devons porter une attention particulire aux signes du
()

dnominateur dans le cas des ingalits contenants des fonctions rationnelles de la forme() 0.
Cas 10 :

, ,

Commenons par traiter un cas relativement complexe de

0, , . Notons quil est conseill de diviser le

problme (principe Diviser pour conqurir ) en deux parties : les exceptions et la solution commune . Ainsi, nous
pouvons immdiatement remarquer que linquation na pas de solution si = 0 ou = 0. Dans le cas = 0, notre
1

expression devient 0 et nous donne pas de solution pour < 0 et /{0} pour > 0.
Maintenant, nous pouvons utiliser lapproche par intervalle pour valuer les solutions dans tous les autres cas :

Si = 0 et

o > 0, lingalit 0 est vraie pour les valeurs rels sauf = 0;


o

0 est toujours fausse ;

Si nous considrons > 0 et

o > 0, lingalit 0 est vraie pour les valeurs de < 0 et ;


o

< 0, lingalit

< 0, lingalit

0 est vraie pour les valeurs de > 0 et ;

Si nous considrons < 0 et

o > 0, lingalit 0 est vraie pour les valeurs 0 < ;


o

< 0, lingalit

0 est vraie pour les valeurs < 0;

Tous ces raisonnements nous donnent la suite logique suivante :


Si = 0 alors
Rponse Pas de solution
Si non
Si = 0 alors

Auteur : A.Deichman
Dernire modification : 18/12/2016

11

Si > 0 alors
Rponse Tous les rels sauf zro ou 0
Si non
Rponse Pas de solution
Si non
Si > 0 alors
Si > 0 alors
Rponse < 0 ou
Si non
Rponse ou > 0
Si non
Si > 0 alors
Rponse0 <
Si non
Rponse < 0

Notons que lapproche prsente plus haut et aussi efficace que nimporte quel autre solution bien rflchie mais elle
est aussi dsordonne et asymtrique : les comparaisons des valeurs et ne sont pas au mme niveau dans les
diffrents segments du logiciel. Ceci va inutilement complexifier le logiciel et les corrections futures.
Si = 0 alors
Rponse Pas de solution
Si non
Si > 0 alors
Si > 0 alors
Rponse < 0 ou
Si non
Si < 0 alors
Rponse ou > 0
Si non
Rponse Tous les rels sauf zro ou 0
Si non
Si > 0 alors
Rponse0 <
Si non
Si < 0 alors
Rponse < 0
Si non
Rponse Pas de solution

1.
2.

=
||

3. || >

4. ||
5.

Cas 11 : Triangle form par des droites


Dans les algorithmes de dtection des collisions ainsi que dans les logiciels danalyse graphique, il est souvent ncessaire
de dtecter si une srie des courbes forme une rgion et si cest une rgion ferme. Nous allons simplifier ce problme
en se limitant un triangle. Nous cherchons donc crire un algorithme qui calcule les sommets dun triangle form par
trois droites (si un triangle est form). Nous allons dfinir les trois fonctions comme :
Auteur : A.Deichman
Dernire modification : 18/12/2016

12

1 = 1 + 1
2 = 2 + 2
3 = 3 + 3
Malgr lapparence, ce cas est relativement difficile. Nous devons traiter plusieurs cas :
les droites peuvent tre tous parallles ou confondues ;
deux droites peuvent tre parallles ou confondues ;
les droites peuvent tous se couper dans le mme point ;
finalement, les trois droites peuvent former un triangle.
Organisons maintenant ces cas en ordre. Nous devons commencer par nous assurer que toutes les droites sont scantes
(aucune paire des droites nest parallle). Dans ce cas, il y a que deux possibilits : un triangle est form ou les droites
sont scantes dans le mme point. Autrement dit, nous devons effectuer les tapes suivantes :
Si 1 2 et 1 3 et3 2 , nous pouvons tenter de trouver les points dintersections
o Les points dintersections peuvent tre calculs de manire suivante :

1 (1 , 1 ) comme intersection de 1 et 2 avec 1 = 2 1 et 1 = 1 1 + 1 = 2 1 + 2
1

2 (2 , 2 ) comme intersection de 1 et 3 avec 2 = 3 1 et 2 = 1 2 + 1 = 3 1 + 3


1

3 (3 , 3 ) comme intersection de 2 et 3 avec 3 =

3 2
2 3

et 3 = 2 3 + 2 = 3 3 + 3

o SI les points ont des coordonnes diffrentes, un triangle est form.


o SI les points ont les mmes coordonnes, aucune figure na t forme.
Si au moins deux droites sont parallles, aucun triangle ne peut tre form.
La suite logique dcrite plus haut est suffisamment nuance et ordonne pour essayer de tout traduire en pseudocode.
complter
1. crivez un algorithme qui dtecte si un carr est form partir de quatre droites.
2. crivez un algorithme qui dtecte si un polygone cots est form partir de droites.

Un point appartenant une rgion dlimite par des quations


Dans les cas de la dtection des collisions et la position de souris/objet par rapport aux autres, il est ncessaire de savoir
si un point se trouve lintrieur dune rgion dlimit par lobjet de rfrence. Nous allons dfinir les frontires dun
objet laide dune ou plusieurs quations et se limiter deux dimensions pour la majorit des cas.
Cas 12 : ( , ) dans + =
Commenons par le cas classique dun point ( , ) se trouvant lintrieur dun cercle dcrit par 2 + 2 = 2 .
Rappelons-nous que :

La distance dun point ( , ) par rapport lorigine est dcrite par = 2 + 2

Le carr de la distance est donc 2 = 2 + 2


Le cercle 2 + 2 = 2 est centr sur lorigine

Remarquons que lquation du cercle dcrit une infinit de points (circonfrence) qui se trouvent une distance par
rapport lorigine. Nous devons donc satisfaire lquation 2 2 + 2 pour que le point se trouve dans le cercle.
Inversement, tout point se trouvant strictement lextrieur du cercle satisfait 2 2 + 2 .
Comme dans tous les autres cas, il suffit donc de vrifier que les coordonnes sont satisfaites.
Auteur : A.Deichman
Dernire modification : 18/12/2016

13

Si 2 + 2 2 alors
Le point se trouve dans le cercle ou sur la circonfrence
Si non
Le point se trouve lextrieur du cercle

Par contre, quarrive-t-il si le cercle nest pas centr lorigine comme dans le schma ? Lquation gnrale du cercle
est( )2 + ( )2 = 2 . Lalgorithme peut tre modifi en remplaant la fonction :
Si ( )2 + ( )2 2 alors
Le point se trouve dans le cercle ou sur la circonfrence
Si non
Le point se trouve lextrieur du cercle

Notons que pour toutes les formes fermes dfinies par les coniques, lalgorithme restera toujours le mme : il suffit de
modifier la fonction.
Cas 13 : ( , ) dans un carr
0
2
Prenons le cas dun carr dfinit par le systme des quations{ 0 . Un point ( , ) se trouvant dans le carr doit
2
satisfaire toutes les conditions en mme temps :
Si 0 ET 2 ET 0 ET 2 alors
Le point se trouve dans le carr
Si non
Le point se trouve lextrieur du carr

Notons que la suite logique ci-haut change peu si le carr nest pas centr lorigine mais ces cots restent parallles
aux axes du plan cartsien.
Cas 14 : ( , ) dans un triangle
0
Prenons un cas relativement simple dun triangle rectangle form partir du carr prsent plus haut{ 2 . Un point

( , ) se trouvant dans le triangle doit satisfaire toutes ces conditions en mme temps :
Si 0 ET y 2 ET alors
Le point se trouve dans le triangle
Si non
Le point se trouve lextrieur du triangle

2
Maintenant considrons une modification de ce cas : un triangle dlimit par{ .

Si 2 ET y ET alors
Le point se trouve dans le triangle
Si non
Le point se trouve lextrieur du triangle

Cas 15 : ( , ) dans une rgion dlimite par une parabole et une srie des droites
1.5
0
Considrons une rgion dcrite par{
. Notre solution sera donc :
0
2
Auteur : A.Deichman
Dernire modification : 18/12/2016

14

Si 0 ET 0 ET x 1.5 ET 2 alors
Le point se trouve dans la rgion
Si non
Le point se trouve lextrieur de la rgion

Remarquons que dans tous les cas que nous avons tudi la solution a tait toujours de la mme forme :
Si alors
Le point se trouve dans la rgion
Si non
Le point se trouve lextrieur de la rgion

Considrant la simplicit de la solution gnrale pourquoi nous avons pris le temps de tout dvelopper ? La difficult se
trouve dans la ncessit de dfinir le systme des quations dlimitant la rgion dintrt. Il est donc primordial de
rviser les connaissances mathmatiques antrieures afin de bien comprendre la construction des systmes dquations
dcrites plus haut.

Les (in)quations de second ordre


Cas 16 : Recherche des racines dune fonction quadratique + + = , , ,
La recherche des solutions de lquation 2 + + = 0 est un problme classique qui se rsout par le calcul et
lanalyse des valeurs du discriminant. Par contre, nous devons aussi nous assurer que nous sommes capables de
rsoudre la fonction qui a les facteurs, et/ou nulles. La suite logique se prsente comme suit :
Si = 0 alors
Si = 0 alors
Si = 0 alors
Rponse
Si non
Pas de solution
Si non

Rponse =

Si non
= 2 4
Si < 0 alors
Pas de solution
Si non
Si = 0 alors

Rponse =
2
Si non
Rponse =
Fin si

+
2

et =

Autrement dit, nous devons dabord nous assurer que nous traitons bel et bien une fonction quadratique (! = 0) . Si
non, nous avons une droite :

constante parallle non confondu avec laxe des abscisses : pas de zros ,
constante confondue avec laxe des abscisses : tous les valeurs sont les zros ,

ou oblique avec la racine : un zro 0 = .

Par contre si ! = 0, nous devons (dans cet ordre):

nous assurer quau moins un zro existe en testant pour < 0;

Auteur : A.Deichman
Dernire modification : 18/12/2016

15

si au moins un zro existe, vrifier si = 0

trouver le zro par 0 =

si non, trouver les deux zros avec la formule =

si cest le cas

Cas 17 : Rsolution de + + = + , , , , ,
Ce cas, revient trouver les racines dune fonction quadratique car :
2 + + = + , , , , ,
2 + ( ) + ( ) = 0
2 + + = 0
o = , = et = , , , , ,
Nous vous suggrons donc revoir le cas prcdent dans cette section.
Cas 18 : Rsolution de + + = + + , , , , , ,
Ce cas, revient trouver les racines dune fonction quadratique car :
2 + + = 2 + + , , , , , ,
( ) 2 + ( ) + ( ) = 0
2 + + = 0
o = , = et = , , , , , ,
Nous vous suggrons donc revoir le cas prcdent dans cette section.
complter

Auteur : A.Deichman
Dernire modification : 18/12/2016

16

Les algorithmes de traitement des donnes


(introduction)
Dans cette section, nous allons aborder lanalyse et le triage des donnes contenus dans les ensembles de tout type
(vecteurs, tableaux, chaines des caractres etc.) Pour toutes les structures nous allons assumer que le premier item se
trouve lindex zro et que tous les items sont accessibles par leurs indexes.
Dans certains contextes nous allons aussi comparer les solutions utilisant lindex dbutant par zro, par un et les
solutions dynamiques indpendantes de la structure interne des donnes. Pour le dernier cas, nous allons assumer que
certaines commandes de reprage des structures sont disponibles (comme cest le cas dans les langages de dernire
gnration tels que C#).

Les oprations de base


Avant daborder les algorithmes avancs du triage commenons par le traitement fondamental des donnes tel que la
recherche des maximums etc.

Recherche dun maximum


Pour deux nombres quelconques et, nous pouvons chercher le nombre le plus grand en utilisant une instruction de
condition :
Si > alors
Rponse a
Si non
Rponse b

Pour trois nombres quelconques, et, nous avons intuitivement :


Si > et > alors
Rponse a
Si non
Si > et > alors
Rponse b
Si non
Si > et > alors
Rponse c

Par contre, cette solution est la moins efficace. Nous cherchons rduire le nombre des tests et arriver la solution le
plus rapidement possible. Nous pouvons donc remarquer que si la premire condition nest pas satisfaite ( > et >
), le ne peut pas tre le max et donc il nous reste choisir entre et :
Si > et > alors
Rponse a
Si non
Si > alors
Rponse b
Si non
Rponse c

Nous pouvons encore plus simplifier la mthode de rsolution dcrite plus haut :
Si > alors
Si > alors

Auteur : A.Deichman
Dernire modification : 18/12/2016

17

Rponse a
Si non
Rponse c
Si non
Si > alors
Rponse b
Si non
Rponse c

Finalement, nous pouvons aussi utiliser lapproche avec la variable temporaire1 :


Si > alors
=
Si non
=
Si > alors
Rponse
Si non
Rponse

Pour quatre nombres quelconques,, et, nous pouvons extrapoler la mme ide avec la variable temporaire :
Si > alors
=
Si non
=
Si > alors
=
Si > alors
Rponse
Si non
Rponse

Les oprations avec des nombres naturels


Il est souvent ncessaire de sauvegarder ou traiter les donnes dans un format moins convenable pour ltre humain
(base hexadcimale (16) ou base binaire).
Par exemple, notons que les oprations fondamentales (addition etc.) se font naturellement plus vite en base binaire
par rapport aux mmes oprations avec les nombres dcimaux. Ainsi, double et integer se trouvent en mmoire
dans la forme binaire et sont converties vers la forme normale que durant laffichage.

Changement de base
Pour rsoudre ce type des problmes, il suffit de connaitre lalgorithme classique de conversion des nombres naturels en
base 10 vers des nombres dans une autre base quelconque. Lapproche le plus simple, non rcursif, consiste :
1) diviser le nombre de dpart par la base numrique avec un reste (opration modulus souvent reprsente
par %)
2) noter le reste et le nombre
3) rpter les deux tapes prcdentes avec le dernier nombre trouv tant que ce nombre nest pas gal zro
4) Afficher les restes trouvs dans le bon ordre (ordre inverse celui trouv).

Cette approche est utile pour extrapoler variables et utiliser notre algorithme dans une collection.

Auteur : A.Deichman
Dernire modification : 18/12/2016

18

Autrement dit dans le pseudocode simple nous avons :


Si = 0 alors
= "0"
Si non
= ""
Tant que > 0 faire
+= (%)
/=
Fin tant que
Fin si
Afficher s

Nous pouvons aussi analyser cet algorithme laide de lexemple suivant :


Tableau 1: Changement de base avec = 32 et = 2

32

16

16

00

000

0000

00000

100000

Le nombre = 32 peut donc tre reprsent en base binaire ( = 2) comme = 100000.


1. crivez un logiciel convertissant un nombre dcimal vers la base hexadcimale.
2. crivez un logiciel convertissant un nombre dcimal vers la base binaire.

Recherche de plus petit diviseur dun nombre naturel


Rappelons-nous que pour trouver le plus petit diviseur nous devons trouver un nombre premier2 le plus petit possible
qui divise la valeur de dpart sans reste.
Si nous dfinissons le plus petit nombre comme, nous pouvons tout simplement parcourir (en dbutant par 2) tous les
nombres entiers plus petits que. Le premier diviseur trouv sera le nombre premier le plus petit. Par contre, cette
mthode nest pas trs efficace car nous allons potentiellement parcourir des nombres qui ne peuvent pas tre des
diviseurs. Par exemple, tous les nombres suprieures /2 sauf vont ncessairement produire une fraction comme
rsultat dune division. En effet, si nous dpassons /2 sans avoir trouv un nombre premier alors est un nombre
premier.
Mais cette approche nest toujours pas optimale. La meilleure solution est de sarrter sur. Pour en tre convaincu
imaginons que = 100. Il est donc divisible par 2 et le rsultat de cette division nous donne50. Il est aussi divisible
par4 et le rsultat de la division nous donne25. Nous pouvons arranger toutes ces observations dans le tableau :
2

Un nombre premier est un nombre qui est seulement divisible par lui-mme et par un.

Auteur : A.Deichman
Dernire modification : 18/12/2016

19

Diviseur
Complmentaire
2
50
4
25
5
20
10
10
20
5
25
4
50
2
Remarquons que le nombre complmentaire est aussi un diviseur de. De plus, les paires des diviseurs se rptent
quand nous dpassons(10, 10). Ce qui signifie que nous nallons jamais trouver aucun nouveau diviseur si nous
dpassons = 100 = 10.
=2
Tant que ( () et % 0) faire
++
Fin tant que
Si % = 0 alors
Afficher k
Si non
Afficher x

1. Trouvez tous les diviseurs dun nombre donn.


2. Trouvez tous les diviseurs dun nombre donn et affichez les dans lordre suivant :
le_plus_petit, le_plus_grand; le_second_plus_petit,
le_second_plus_grand; etc. sans rpter aucun nombre deux fois.

Base de 2 exposants
Il est souvent utile de reprsenter un nombre comme une base leve un exposant (pensez la notation scientifique,
les nombres binaires etc.). Par exemple, nous pouvons chercher si un nombre naturel spcifique est de la forme 2 o n
est aussi un nombre naturel diffrent de zro.
Cet algorithme va reprendre la logique utilise lors de recherche du plus petit diviseur, de changement de base etc.
Nous allons diviser le nombre donn autant de fois que possible par 2 (tant que le rsultat de division est plus grand que
1/diffrent de 1 et tant que le nombre est divisible par deux). Si le nombre de divisions est nul, ce nombre ne peut pas
tre reprsent comme2 . Si non, on peut reprsenter le nombre comme2 .
=0
Tant que ( > 1 et %2 = 0) faire
= /2
++
Fin tant que
Si = 0 alors
Afficher Ce nombre ne peut pas tre reprsent en base de 2
Si non
Afficher Ce nombre peut tre reprsent comme 2 exposant +

3. crire un algorithme qui reprsente un nombre en base de 10 ?


4. crire un algorithme reprsentant un nombre en forme scientifique arrondie : 10 o
et sont des nombres naturels.
Auteur : A.Deichman
Dernire modification : 18/12/2016

20

Nombre parfait
Nous pouvons aussi nous intresser par les proprits des nombres. Par exemple, un algorithme vrifiant quun nombre
entier positif est un nombre parfait3 peut tre utile pour encryptions des donnes, les analyses numriques etc.
Afin de trouver un nombre parfait nous devons :
1. Trouver le diviseur dun nombre diffrent de zro (nous allons adapter lalgorithme vu prcdemment)
2. Calculer la somme des diviseurs trouvs ce moment
3. Vrifier si la somme dpasse le nombre lui-mme
a. Si oui ce nest pas un nombre parfait
4. Rpter les trois premires tapes tant quil reste encore des chances trouver des diviseurs.
Si = 0 alors
Afficher "Le nombre 0 nest pas parfait"
Si non
=2
= 1
Tant que ( < et ) faire
Si (% = 0)
= 1 +
++
Fin tant que
Si = alors
Afficher "Le nombre est parfait"
Si non
Afficher "Le nombre nest pas parfait"
Afficher "La somme est : " + somme
Fin si
Fin si

Ajustez lalgorithme plus haut afin dafficher tous les diviseurs dun nombre parfait ainsi que ce
mme nombre.
Vrifiez si un nombre est triparfait4.
Vrifiez si un nombre est multiparfait5.

Nombre premier
Le nombre premier est un nombre divisible sans reste seulement par un ou par lui-mme. Lalgorithme le plus simple
consiste donc trouver tous les diviseurs dun nombre donne ce qui implique que nous pouvons rutiliser lalgorithme
de recherche de plus petit diviseur vu prcdemment (voir page 19). Si aucun diviseur na t trouv, cest un nombre
premier. Si un diviseur existe, ce nombre nest pas premier.
=2
Tant que ( () et % 0) faire

Un nombre entier est parfait si la somme de ses diviseurs (sauf lui-mme) est gale ce nombre. Les diviseurs d'un nombre entier
sont tous les nombres entiers entre 1 et le nombre tel que le reste de la division entire du nombre par le diviseur vaut 0. Par
exemple 6 est un nombre parfait, ses diviseurs sont : 1, 2 et 3 et leur somme donne1 + 2 + 3 = 6.
4
Un nombre entier est triparfait si la somme de ses diviseurs, y compris lui-mme, est gale trois fois le nombre. Par exemple, 120
est un nombre triparfait car 1 + 2 + 3 + 4 + 5 + 6 + 8 + 10 + 12 + 15 + 20 + 24 + 30 + 40 + 60 + 120 = 3 120.
5
Un nombre est multiparfait si la somme de ses diviseurs, y compris lui-mme, est gale fois le nombre. Par exemple : pour =
3, 120 est nombre triparfait; pour = 4, 30240 est un nombre tetraparfait.

Auteur : A.Deichman
Dernire modification : 18/12/2016

21

++
Fin tant que
Si % = 0 alors
Afficher Nest pas premier
Si non
Afficher Nombre premier

Par contre, cette mthode est peu efficace : plus le nombre est grand plus le nombre dtapes de validation augmente.
Les mathmaticiens et les informaticiens cherchent encore des thormes et des mthodes qui permettront de trouver
les nombres premiers plus rapidement.
Une des techniques alternatives pour trouver le nombre premier sappelle crible dratosthne. Cest une mthode
permettant de trouver les nombres premiers compris entre 2 et. Commenons par placer tous les nombres de 2 N
dans un tableau. Ensuite, supprimons successivement tous les multiples du premier nombre trouv dans le tableau :
commenons ainsi par supprimer tous les multiples de 2. Une fois le processus de suppression termin, avanons au
prochain nombre et rptons la procdure : supprimons ensuite les multiples du plus petit entier restant suivant (3) et
ainsi de suite. la fin, il ne reste donc que les nombres qui ne sont multiples daucun autre entier. Nous nous arrtons
lorsque est atteint (pour explications de ce choix voir lalgorithme du plus petit diviseur).
Organisons cette dmarche en forme dun plan (ou dun liste dactions) :
1.
2.
3.
4.
5.

Placer tous les nombres de 2 N dans un tableau.


Dfinir la position courante comme = 0
Supprimer successivement tous les multiples du nombre se trouvant la position courante dans le tableau.
Avancer au prochain nombre dans la liste rsultante ( = + 1).
Rpter les tapes prcdentes partir 3, tant que la valeur la position donne rpond la
condition .
6. Afficher la liste rsultante car elle ne contient que les nombres premiers.
En forme de lalgorithme ceci nous donne :
=
=2
Tant que faire
[ 2] =
++
Fin tant que
=0
Tant que [] faire
=+1
Tant que < () faire
Si []%[] = 0 alors
Retirer []
Si non
++
Fin si
Fin tant que
++
Fin tant que
=0
Tant que < () faire
Afficher[]

Auteur : A.Deichman
Dernire modification : 18/12/2016

22

++
Fin tant que

Nous pouvons remarquer que la boucle daffichage peut tre combine avec la boucle de tri et dlimination. Si
ncessaire, nous pouvons aussi rduire le nombre des modifications de la liste initiale en utilisant une liste
bidimensionnelle et un marqueur qui identifie les lments ignorer sans les liminer de la liste.
Toutefois, cet algorithme nest toujours pas le plus rapide avec la complexit( log log ). Nous allons devoir analyser
dautres propositions comme crible dAtkin ou la roue de factorisation ( Wheel factorization ) pour obtenir la
complexit de ().
Commenons par crible dAtkin qui consiste
terminer

Factoriel !
Les factoriels6 sont invitables en mathmatiques. En effet, beaucoup des sries et des suites contiennent des factoriels
(ils sont aussi prsents en calcul diffrentiel). Il est donc utile de traiter ce petit algorithme ici.
=2
= 1
Tant que faire
=
++
Fin tant que
Afficher

Nous pouvons aussi approcher le problme lenvers : utiliser ! = ( 1) ( 2) 1


=
= 1
Tant que > 1 faire
=

Fin tant que


Afficher

Pouvez-vous vrifier quun nombre donn est nombre premier factoriel7.

Racine carre inverse rapide ou Fast inverse square root (Fast InvSqrt())
1

Racine carr inverse rapide est une mthode qui permet destimer la valeur de . Cette opration est souvent utile

pour calculer lorientation (langle) dun vecteur et peut tre utilise dans le domaine du graphisme 3D (animations ou
dessin).
Lalgorithme a t dvelopp pour traiter des nombres virgule flottante (dcimaux) de 32 bits.

Factoriel est dfinie comme! = 1 2 3 4 . Par exemple, 7! = 1 2 3 4 5 6 7 = 5040. Notons aussi que 0! = 1! = 1
Un nombre premier factoriel est un nombre qui est gal une factorielle plus 1 ou moins 1 et qui est aussi un nombre premier. Par
exemple, les dix plus petits nombres premiers factoriels sont : 1! + 1, 2! + 1, 3! 1, 3! + 1, 4! 1, 6! 1, 7! 1, 11! + 1, 12! 1
et 14! 1.
7

Auteur : A.Deichman
Dernire modification : 18/12/2016

23

terminer

Nombre Catalan - le nombre darbres binaires


Euler avaient abord ltudie des polygones rguliers formes partir des triangles. Mais cest au dbut du 19e sicle,
Catalan et Segner introduisent la suite de nombres qui reprsente la dcomposition d'un polygone rgulier convexe en
triangles, par des diagonales non scantes en dbutant par un triangle quilatral.
Le nombre de Catalan donne le nombre de dcoupages d'un polygone de + 2 cts en n triangles en traant 1
diagonales (lorsque est au moins gal 1).

Figure 1: Dcomposition des premiers nombres de Catalan (carr, pentagone, hexagone) [1]

Les nombres de Catalan sont des entiers naturels qui se rencontrent souvent dans les problmes de mathmatique
combinatoire. Les premiers nombres de Catalan pour n = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ... sont 1, 1, 2, 5, 14, 42, 132, 429, 1430,
... Ils forment une suite dont le terme d'indice n, appel nme nombre de Catalan est dfini par
(2)!
1
2
2
= +1 ( ), o( ) = (!)2

On peut aussi trouver le prochain nombre de Catalan partir de la valeur 1 connue (aussi appele la formule de
rcurrence) en utilisant
= 1

2(2 1)
+1

Finalement, nous pouvons aussi exprimer ce nombre ne fonction de la somme des nombres prcdents

= 1
=0

On souhaite construire un algorithme qui calcule Cn pour n'importe quel n fourni.

Auteur : A.Deichman
Dernire modification : 18/12/2016

24

Nous pouvons prendre lapproche non rcurrente avec les factoriels. En utilisant lalgorithme de ! dvelopp plus haut,
nous avons :
2

= (2)/ (( + 1)(()) ) o (2) = (2)! et () = !

1. crire en dtailles (sans se rfrer () directement) lalgorithme utilisant la formule avec


les factoriels.
2. crire lalgorithme qui utilise la formule de rcurrence.

Manipulations des listes


Une des oprations fondamentales effectuer avec une liste est de la remplir avec des valeurs.

Remplir une liste


Normalement, si nous voulons remplir une liste avec des nombres, nous pouvons tout simplement mettre des zros :
=0
Tant que < faire
[] = 0
++
Fin tant que

Un autre cas commun est de remplir la liste avec les indices :


=0
Tant que < faire
[] =
++
Fin tant que

Un cas plus complexe consiste remplir une liste avec les nombres de Fibonacci8.
[0] = 1
[1] = 1
=2
Tant que < faire
[] = [ 1] + [ 2]
++
Fin tant que

1.
2.
3.
4.

crivez un algorithme remplissant une liste avec la suite suivante : 2, 4, 6, 8, ...


crivez un algorithme remplissant une liste avec la suite suivante : 2, 5, 8, 11, ...
crivez un algorithme remplissant une liste avec la suite suivante : 2, 4, 8, 16, 32, ...
crivez un algorithme remplissant une liste avec la suite suivante : 1, 3, 7, 15, 31, ...

Une suite Fibonacci est une suite qui commence par 1 et dont le nombre suivant est la somme des deux prcdents : 1, 1, 2, 3, 5, 8
etc.

Auteur : A.Deichman
Dernire modification : 18/12/2016

25

Les donnes statistiques simples partir des valeurs dans une liste
Somme des donnes dans une liste
Cet algorithme ne demande pas dexplications additionnelles et est relativement simple.
= [0]
=1
Tant que < faire
+= []
++
Fin tant que

Moyenne des donnes dans une liste


Cet algorithme est une modification mineure de celui vu prcdemment. Observez :
= [0]
=1
Tant que < faire
+= []
++
Fin tant que
/=

cart moyen des donnes dans une liste


Encore une autre fois nous allons reprendre les donnes que nous avons dj afin de calculer E.M. (cart Moyen).
= [0]
=1
Tant que < faire
+= []
++
Fin tant que
/=
= |[0] |
=1
Tant que < faire
+= |[] |
++
Fin tant que
/=

Remarquons que dans ce cas, nous allons devoir parcourir la liste deux fois. Il nest pas possible de rduire encore plus le
nombre dtapes mais nous avons trouv la moyenne en mme temps.
1. crivez un algorithme calculant la variance.
2. crivez un algorithme calculant lcart type.

Manipulation des donnes rpondants une condition


Commenons par trouver le nombre des donnes rpondant une certaine condition. Par exemple, trouvons le nombre
des lments pairs :
Auteur : A.Deichman
Dernire modification : 18/12/2016

26

= 0
=0
Tant que < faire
Si []%2 = 0 alors
+ +
++
Fin tant que

Bien sr, nous pouvons gnraliser ce code pour nimporte quelle condition relativement simple :
= 0
=0
Tant que < faire
Si ([]) alors
+ +
++
Fin tant que

Manipulation des donnes


Nous pouvons, par exemple, doubler toutes les valeurs paires. Pour ce faire, reprenons lalgorithme vue prcdemment
et modifions les lignes responsables de calcul de.
=0
Tant que < faire
Si []%2 = 0 alors
[] = 2
++
Fin tant que

1. crivez un algorithme mettant zro tous les lments ngatifs et calculant la somme des
lments restants. Utilisez une seule boucle.
2. crivez un algorithme diminuant tous les lments pairs de deux fois, augmentant tous les
lments impairs ngatifs de 2 et changeant le signe des autres lments.
Il peut tre aussi utile dinverser lordre des lments dans une liste. Il serait judicieux de procder par inversion des
lments correspondants du dbut et de la fin de la liste :
=0

Tant que < faire


2
= []
[] = [ 1 ]
[ 1 ] =
++
Fin tant que

1. crivez un algorithme dplaant gauche tous les lments dune liste de manire cyclique
(le premier lment doit se retrouver la fin de la liste).
2. crivez un algorithme dplaant droite tous les lments dune liste de manire cyclique
(le dernier lment doit se retrouver au dbut de la liste).

Auteur : A.Deichman
Dernire modification : 18/12/2016

27

Les proprits dune liste


En poursuivant nos manipulations des listes, pouvons-nous vrifier quau moins un lment de la liste rpond une
condition spcifique ? Par exemple, nous voulons vrifier quau moins un lment de la liste est un lment pair.
Une mthode relativement efficace est de vrifier combien de donnes remplissent la condition. Si la valeur trouv est
zro, on a aucune donne qui remplit la condition. Si la valeur est suprieure zro, nous avons au moins une donne
qui a satisfait la condition.
=0
= 0
Tant que < faire
Si []%2 = 0 alors
+ +
++
Fin tant que
Si = 0 alors
Afficher Aucune valeur paire a t trouve
Si non
Afficher Au moins une valeur paire a t trouve

videmment, si notre objectif est de savoir si au moins une donne satisfait la condition, nous pouvons arrter notre
recherche ds quune donne de ce type a t trouve.
=0
Tant que < faire
Si []%2 = 0 alors
Afficher Au moins une valeur paire a t trouve
=
Fin si
++
Fin tant que
Si = alors
Afficher Aucune valeur paire a t trouve

Dcortiquons en peu cet algorithme :

Nous allons parcourir tous les lments de la liste


=0
Tant que < faire

++
Fin tant que

Pour chaque lment, nous allons vrifier sil satisfait la condition


Si []%2 = 0 alors

Si oui, nous allons afficher notre trouvaille


Afficher Au moins une valeur paire a t trouve

En mme temps, nous allons forcer la boucle quitter en sautant tous les autres items de la liste : chercher pour
les autres valeurs paires est inutile car on a besoin de savoir si au moins une existe.
=

Si nous avons vrifi tous lments de la liste sans trouver une valeur paire, sera ncessairement gal

Auteur : A.Deichman
Dernire modification : 18/12/2016

28

Si = alors
Afficher Aucune valeur paire a t trouve

Notons que si une valeur paire a t trouve la boucle va quitter avec = + 1

Dans les pires des cas, les deux algorithmes prsents plus haut sont quivalentes. Mais si une valeur paire existe au
dbut de la liste, le dernier algorithme peut savrer beaucoup plus rapide.
1. crivez un algorithme vrifiant que tous les lments dans la liste sont positifs.
2. crivez un algorithme vrifiant que tous les lments dans la liste sont gaux.
3. crivez un algorithme vrifiant quau moins un lment dans la liste est gal la valeur
spcifie.
En travaillant avec les listes, il est essentiel de savoir si une liste est ordonne ou pas. Ceci permet de rduire
considrablement le temps de traitement de plusieurs algorithmes. Ainsi, si nous voulons vrifier si la liste est en ordre
croissant (liste monotone croissant), nous pouvons adopter lalgorithme trouv prcdemment. Comme
prcdemment, nous allons nous arrter ds quau moins un lment ne satisfait pas la condition.
= 0
=0
Tant que < 1 faire
Si [] > [ + 1] alors
Afficher Nest pas en ordre croissant
=
Fin si
++
Fin tant que
Si = 1 alors
Afficher En ordre croissant

Il est aussi important de trouver la valeur maximale ou minimale contenue dans une liste. Nous avons dj dvelopp
un algorithme de recherche dun maximum allant jusqu 4 nombres sur la page 17. Pouvez-vous ladapter pour une liste
de taille ?
= [0]
=1
Tant que < faire
Si [] > alors
= []
++
Fin tant que
Afficher

1. crivez un algorithme recherchant la position de la valeur maximale.


2. crivez un algorithme recherchant la valeur minimale.
Imaginons maintenant que nous cherchons une valeur maximale avec une condition. Par exemple, la recherche dune
valeur maximale ngative peut tre fort utile dans certaines conditions. Par contre, il est en peu plus difficile rsoudre
un tel problme car il est dabord ncessaire de trouver la premire valeur ngative et ensuite rechercher la valeur
maximale.
=0
Tant que [] 0 et < faire

Auteur : A.Deichman
Dernire modification : 18/12/2016

29

++
Fin tant que
Si < alors
= []
Tant que < faire
Si [] < 0 alors
Si [] > alors
= []
++
Fin tant que
Afficher
Si non
Afficher Aucune valeur ngative dans la liste

Comme prcdemment, analysons cet algorithme :

Premirement, nous devons parcourir la liste et trouver la premire valeur ngative. Nous allons nous arrter
quand nous allons atteindre la fin de la liste ou nous allons trouver la premire valeur ngative.

=0
Tant que [] 0 et < faire
++
Fin tant que

partir de ce moment, vrifions si une valeur ngative a t trouve.

Si < alors

Si au moins une valeur ngative existe, nous allons continuer nos recherches partir de la valeur sur laquelle
nous nous sommes arrts.

= []
Tant que < faire
Si [] < 0 alors
Si [] > alors
= []
++
Fin tant que

Finalement, si aucune valeur ngative nexiste dans la liste, il nous reste que lafficher aux utilisateurs.

Si non
Afficher Aucune valeur ngative dans la liste

Remarquons quune autre solution existe. Elle nest pas aussi facile comprendre mais beaucoup plus lgante. Cette
solution se base sur le fait que nous pouvons rechercher la position de la valeur sans ncessairement sauvegarder la
valeur elle-mme :
=0
=0
Tant que < faire
Si [] < 0 alors
Si = 0 ou [] > [] alors
=
++
Fin tant que
Si > 0 alors
Afficher []
Si non

Auteur : A.Deichman
Dernire modification : 18/12/2016

30

Afficher Aucune valeur ngative dans la liste

1.
2.
3.
4.
5.

crivez un algorithme recherchant la valeur minimale paire.


crivez un algorithme recherchant la valeur minimale deux chiffres.
crivez un algorithme recherchant la position du second lment gale dans la liste.
crivez un algorithme recherchant la position de llment impair dans la liste.
crivez un algorithme recherchant la position du dernier lment positif dans la liste.

Algorithmes daffichage des donnes


Certains de ces algorithmes nous proviennent de lpoque quand linterface graphique tait inexistante - lpoque de la
ligne de commande. Ainsi, plusieurs problmes dcrits dans cette section sont dactualit seulement comme exercices
dentrainement pour les dbutants en informatique.

Prsentation triangulaire
Triangle croissant vers le bas
Produire un algorithme affichant la chaine des caractres en forme de triangle croissant vers le
bas, contenant des o et dlimit par des x .

x
xx
xox
xoox
xooox
xoooox
xxxxxxxx

Imaginons que nous devons produire le triangle de lignes avec > 0. Il est plus facile de
prendre lapproche naturel : la premire ligne est la ligne 1 (et non zro). Nous allons avoir
besoin de deux boucles : une pour changer de ligne (variable ) et une pour afficher les caractres (variable ). De plus,
nous devons dfinir les conditions pour dterminer le choix appropri des caractres : au dbut de ligne, la fin de ligne
et la dernire ligne doivent avoir des x , tous les autres doivent tre des o .
=1
Tant que faire
=1
Tant que faire
Si = 1 ou = ou = alors
Afficher x
Si non
Afficher o
++
Fin tant que
Sauter une ligne
++
Fin tant que

Naturellement, il est aussi possible de construire le mme algorithme mais en choisissant les indexes et comme les
indexes dbutant par zro : la premire ligne est la ligne = 0.
=0
Tant que < faire
=0
Tant que faire
Si = 0 ou = ou = 1 alors
Afficher x
Si non
Afficher o

Auteur : A.Deichman
Dernire modification : 18/12/2016

31

++
Fin tant que
Sauter une ligne
++
Fin tant que

Comparons les deux en soulignant les diffrences. Nous remarquons que les modifications naffectent pas la structure
de lalgorithme. Les seuls changements concernent seulement les conditions absolues : les comparaisons de et de
avec dautres constantes (nombre spcifique ou).
=1

=0

Tant que faire


=1
Tant que faire
Si = 1 ou = ou = alors
Afficher x
Si non
Afficher o
++
Fin tant que
Sauter une ligne
++
Fin tant que

Tant que < faire


=0
Tant que faire
Si = 0 ou = ou = 1 alors
Afficher x
Si non
Afficher o
++
Fin tant que
Sauter une ligne
++
Fin tant que

Autrement dit, le changement de base de dcompte naffecte que les paramtres qui sont cods de manire statique et
qui dpendent directement de cette mesure. Intuitivement, nous pouvons donc conclure que dans plusieurs situations,
voir mme tous, nous pouvons rapidement et facilement ajuster lalgorithme en fonction du type de la rfrence
utilise. Dans le cas dutilisation des listes, nous pouvons aussi imaginer quun code dynamique peut tre construit pour
tre indpendant de la structure de rfrence si certaines commandes sont disponibles.

Triangle dcroissant vers le bas


Comme dans le cas prcdent, nous voulons produire un triangle. Mais cette fois si il sera
dcroissant vers le bas et align droite. Cette fois-ci le triangle va contenir des nombres (voir
droite). En assumant que tous les caractres occupent le mme espace et que lopration
aligner droite nest pas disponible, quel peut tre lalgorithme qui produit un tel
affichage ?
Comme dhabitude, nous allons adapter lalgorithme dvelopp prcdemment en modifiant le
comportement de boucle avec et laffichage :

0000000000
111111111
22222222
3333333
444444
55555
6666
777
88
9

=0
Tant que < faire
=
Tant que > 0 faire
Afficher k

Fin tant que


Sauter une ligne
++
Fin tant que

Par contre, ces modifications ne produisent pas lalignement vers la droite voulue. Pour rsoudre ce problme, nous
devons ajouter une autre boucle qui va nous permettre dinsrer le nombre suffisant despaces :
Auteur : A.Deichman
Dernire modification : 18/12/2016

32

=0
Tant que < faire
=
=0
Tant que < faire
Afficher
++
Fin tant que
Tant que > 0 faire
Afficher k

Fin tant que


Sauter une ligne
++
Fin tant que

Nous pouvons encore modifier lalgorithme propos plus haut en utilisant une boucle avec allant de 0
exclusivement, une boucle avec allant de 0 9 inclusivement et une condition pour diffrentier laffichage (espace ou
nombres). Cet exercice sera laiss aux lecteurs.
1. crivez un algorithme bas sur le triangle croissant plus haut, adapt pour la base
hexadcimale et affichant tous les nombres de cette base.
2. crivez un algorithme bas sur le triangle dcroissant, utilisant deux boucles seulement.

Triangle de Pascal
Le triangle de Pascal t tudi bien avant Pascal mais pour des raisons historiques ce nom a t retenu. Le triangle de
Pascal est une prsentation des coefficients binomiaux en forme de triangle. Un lment spcifique de triangle peut tre
trouv en utilisant la formule suivante :
, = 1, + 1,1
Triangle de Pascal de degr = 6:
n=0
n=1
n=2
n=3
n=4
n=5
n=6

1
1
1
1
1
1
1

1
2
3
4
5
6

1
31
641
10 10 5 1
15 20 15 6 1

Affichage

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1

Notre objectif est dcrire un programme qui construit le triangle de PASCAL de degr et le prsente dans un tableau
carre (ou, ventuellement, dans une matrice carre).
=
=0
Tant que < faire
=1
=1
Tant que 2 ( 1 ) faire
Afficher
++
Fin tant que

Auteur : A.Deichman
Dernire modification : 18/12/2016

33

=0
Tant que faire
Afficher +

=
+1
++
Fin tant que
Sauter une ligne
++
Fin tant que

Dcortiquons en peu cet algorithme :


=
Tant que < faire
=1
=1

Tant que 2 ( 1 ) faire


Afficher
++
Fin tant que

=0
Tant que faire
Afficher +

=
+1
++
Fin tant que
Sauter une ligne
++
Fin tant que

Nombre de linges entr par lutilisateur.


La boucle extrieure qui sarrte quand toutes les lignes ont tait
crites ( < ). Comme commence par llment zro, nous
devons nous arrter un lment avant.
Dfinissons la valeur de dpart sur une ligne.
Dfinissons le compteur despaces au dbut dune ligne.
Il est important remarquer que le nombre des espaces au dbut
dune ligne dpend des deux facteurs : le numro de linge () et le
nombre de lignes en tout (). Autrement dit, nous devons prendre
en compte le fait que la dernire ligne doit tre bien centre. Ceci
implique que la premire ligne doit avoir environs la moiti des
espaces de tous les caractres crits sur la dernire ligne. La mme
logique sapplique aussi sur les autres lignes.
terminer

terminer

Nous avons termin lcriture dune ligne complte


Fin de la boucle extrieure. Nous allons recommencer la boucle.

Notons que cet algorithme produit un affichage centr et dynamique en assumant que tous les lments sont affiches
dans un champ dentr textuel avec la largeur des caractres fixe.
1. crivez un algorithme qui reprend laffichage de triangle de Pascal mais aligne la liste
droite.
2. crivez lalgorithme qui sauvegarde les valeurs du triangle de Pascal dans une matrice de
taille appropri en substituant tous les espaces par un zro.
3. crivez un algorithme recherchant les nombres premiers pairs et laffichant comme un
nombre binaire en forme dun triangle :
n=6
110
11100
n=28
111110000
n=496
1111111000000
n=8 128
1111111111111000000000000
Auteur : A.Deichman
111111111111111110000000000000000
34
Dernire modification : 18/12/2016

n= 33 550 336
n= 8 589 869 056

Triangles de Sierpiski
Le triangle de Sierpiski est en fait un fractal de Sierpiski dont l'objet de dpart est un triangle plein quilatral. Il y a
plusieurs manires pour construire le fractal :
1. Chaque figure suivante est obtenue en arrangeant les triangles en pyramide pour former un nouveau triangle
quilatral.
2. Chaque figure suivante est obtenue en retirant un triangle quilatral de chaque triangle plein disponible de
ltape prcdente.

Figure 2: reprsentation du triangle de Sierpiski [2]

Nous pouvons aussi reproduire ce dessin(en format en peu pixlis) si nous reprenons le triangle de Pascal et :

n=0
n=1
n=2
n=3
n=4
n=5
n=6
n=7
n=8
n=9

noircissant les cases o apparat un nombre impair,


blanchissant les cases o apparat un nombre pair et
en liminant tous les espaces

1
1
11
11
121
121
1331
1331
Affichage
14641
14641
Affichage Pascal
1
5
10
10
5
1
Sierpiski
1 5 10 10 5 1
1 6 15 20 15 6 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

1
11
121
1331
14641
152251
1652561
17233271
122222281
1922222291

Il est donc intressant de voir comment nous pouvons modifier lalgorithme utilis pour le triangle de Pascal et
reproduire ce dessin. Intuitivement, il est ncessaire de reprendre lalgorithme de Pascal et ajouter une condition qui
permet dafficher un rectangle blanc ou noir selon la valeur obtenue : blanc pour un nombre pair et noir pour un
nombre impair. En assumant que la commande pour le rectangle blanc est blanc et le rectangle noir est noir nous
obtenons :
=
=0
Tant que < faire
=1
=1
Tant que 2 ( 1 ) faire
Afficher

Auteur : A.Deichman
Dernire modification : 18/12/2016

35

++
Fin tant que
=0
Tant que faire
Si %2 = 0 alors
Afficher + blanc
Si non
Afficher + noir

=
+1
++
Fin tant que
Sauter une ligne
++
Fin tant que

Toutefois, cet algorithme se repose sur la mme assomption que celui du triangle de Pascal : la largeur des caractres
est la mme pour tous les caractres. De plus, nous devons liminer les espaces entre les nombres pour produire leffet
de pixellisation et coller les rectangle noirs un lautre.
crivez un algorithme qui amliore la proposition plus haut en corrigeant, quand possible, les
dfauts mentionns plus haut.

Quelques solutions
Changement de base dun nombre
Version en [C]
int s[64];
if (x==0)
printf(0 );
else
{
k=0;
while(x>0)
{
s[k]=x%a;
k++;
x/=a;
}
for(i=k-1; i>=0; i--)
printf("%d",s[i]);
}

Recherche de plus petit diviseur dun nombre naturel


Version en [C]
k=2;
while(k<=sqrt(x) && x%k!=0)
k++;
if (x%k==0)
printf(%d,k);
else
printf(%d,x);

Auteur : A.Deichman
Dernire modification : 18/12/2016

36

Triangle de Pascal
Version en [C] [3]
void pascaltriangle(unsigned int n)
{
unsigned int c, i, j, k;
for(i=0; i < n; i++) {
c = 1;
for(j=1; j <= 2*(n-1-i); j++) printf(" ");
for(k=0; k <= i; k++) {
printf("%3d ", c);
c = c * (i-k)/(k+1);
}
printf("\n");
}
}
int main()
{
pascaltriangle(8);
return 0;
}

Auteur : A.Deichman
Dernire modification : 18/12/2016

37

Les algorithmes de traitement des donnes


(triage)
Les algorithmes de triages permettent darranger les lments dune liste dans certain ordre, souvent, croissant. Les
algorithmes sont majoritairement classs selon leur complexit algorithmique, leur structure (rcursive ou pas), leur
stabilit, leur adaptabilit etc.
Nous allons surtout nous intresser la complexit algorithmique et leur structure.

Combiner deux listes ordonnes


partir des deux listes (1 et2) ordonnes (par exemple, en ordre croissant), nous voulons obtenir une troisime
liste (3) contenant les lments des deux listes aussi ordonnes de la mme manire.
La solution la plus simple consiste copier les donnes des deux premires listes et ensuite les ordonner. Malgr le fait
que cette mthode vous amne au but, elle nest pas efficace et prends beaucoup trop de temps par rapport aux autres
mthodes qui soffrent vous.
Il est judicieux dutiliser le fait que les deux listes existantes sont dj tries. Cest--dire, nous allons immdiatement
placer les lments dans le bon ordre :
= 0, = 0
Tant que ( < et < ) faire
Si 1[] < 2[] alors
3[ + ] = 1[]
++
Si non
3[ + ] = 2[]
++
Fin si
Fin tant que
Tant que ( < ) faire
3[ + ] = 1[]
++
Fin tant que
Tant que ( < ) faire
3 = 2[]
++
Fin tant que

Supprimer les doublons


Un algorithme permettant de supprimer les doublons (lments dj prsents) dans une liste trie donne peut savrer
utile durant les manipulations des chaines de caractres, durant la recherche des donnes uniques etc. Imaginons une
liste contenant [3, 3, 6, 9, 9, 9, 9, 11], aprs le nettoyage on obtiendra la liste [3, 6, 9, 11].
On va utiliser deux indices, et. Lindice parcourt la liste initiale1, lindice correspond la liste rsultat2.
Llment 2[] correspond alors au dernier lment conserv. Si 1[] est un nouvel lment, on le recopie
dans2[], sinon on avance dans la liste.
= 1, = 1
2[0] = 1[0]

Auteur : A.Deichman
Dernire modification : 18/12/2016

38

Tant que ( < ) faire


Si 1[] 2[ 1] alors
2[] = 1[]
++
Fin si
++
Fin tant que

Soulignons que cet algorithme assume que la liste source est dj trie. Si ce nest pas le cas, il est prfrable de dabord
trier la liste et ensuite retirer les doublons : en assumant lutilisation de lalgorithme de triage efficace, cette approche
sera toujours plus rapide que toutes les autres options.
Toutefois, si lalgorithme de triage nest pas disponible, nous avons deux options qui soffrent nous :
1. Pour chaque valeur dans la liste initiale1[], vrifier de manire explicite quelle nest pas dj contenue
dans la liste finale2[] non trie.
Cette approche est la plus facile faire mais est aussi la moins efficace de tous car elle peut ncessiter ! de
vrifications pour une liste initiale de taille sans doublons.
2. Pour chaque valeur dans la liste initiale1[] place dans la liste finale2[] vrifier quelle nest pas dj
contenue dans la liste et la placer dans le bon ordre (trier par insertion voir page 46 en page 46).
Cette approche est une meilleure solution car seulement dans les pires des cas (liste tri mais pas dans lordre
prvu) elle ncessitera ! de vrifications.
1. crivez un algorithme bas sur lapproche 1 dcrit plus haut.
2. crivez un algorithme bas sur lapproche 2 dcrit plus haut.

Tri bulles ou par propagation (Bubble Sort)


Tri a bulles ou Bubble Sort est lalgorithme de triage le plus simple, non rcursif et aussi le moins efficace de tous.
Lide consiste comparer les lments deux par deux et les changer de place si llment de droite est infrieure
celui de gauche. De cette manire, nous progressons de gauche droite dans la liste tant que la fin de liste nest pas
atteinte. Lalgorithme recommence le triage tant quil reste au moins un lment qui nest pas a place (en ordre
croissant).
La version la plus simple de lalgorithme parcourt tous les items du dbut la fin tant quil y a encore des items
changer de place. Autrement dit, lalgorithme arrte quand le parcours travers la liste au complet ne fait aucun
dplacement ditems.
= ()
Faire
=
=1
Tant que 1 faire
Si [ 1] > [] alors
= [ 1]
[ 1] = []
[] =
=
Fin si
++
Fin tant que
Tant que

Auteur : A.Deichman
Dernire modification : 18/12/2016

39

Par contre, cet algorithme nest pas optimal car il ne prend pas en compte le fait que la donne la plus grande va se
trouver dans sa position finale aprs une itration complte. Ainsi, nous avons toujours un item de moins parcourir
aprs chaque itration. De plus, il se peut que certains items la fin de la liste soient dj tris. On peut donc amliorer
la performance en rduisant le nombre des comparaisons (mais pas le nombre des dplacements) de 50% dans les pires
des cas.
= ()
Faire
= 0
=1
Tant que 1 faire
Si [ 1] > [] alors
= [ 1]
[ 1] = []
[] =
=
Fin si
++
Fin tant que
=
Tant que 0

Cet algorithme a la complexit de (2 ) pour le cas de meilleure et de pire performance. Lalgorithme est surtout trs
lent car les petites valeurs se trouvant la fin de la liste (les tortues) peuvent ncessiter itrations compltes travers
la liste de la taille.

Tri peigne (Comb sort)


Tri peigne (Comb sort) reprends lalgorithme de tri bulles (Bubble sort) mais en comparant les lments se trouvant
une certaine distance dans la liste. Le but principal est de migrer le plus rapidement possible les valeurs extrmes vers
leurs positions finales. Ainsi, une petite valeur la fin de la liste (la tortue) va plus rapidement se trouver vers le milieu
ou fin de la liste quavec un tri a bulles classique.
chaque itration la distance (pas) diminue pour ventuellement revenir un pas de 1 et faire un tri bulles. La
distance est choisie de manire empirique en utilisant la formule =

o =
9

__ au dpart et est le facteur de rduction plus grand que 1 et plus petit que7 1.2857. Selon la nature
de la liste (taille, type des donnes etc.), une valeur de spcifique peut donner de meilleurs rsultats quune autre
choisit dans le range propose. Toutefois, restera relativement aussi efficace quel que soit dans lintervalle propose.
1

Dans le texte original, Dobosiewicz [4] propose une valeur de = 3. Nous allons donc utiliser cette valeur dans
lalgorithme. En modifiant le tri bulles propos plus haut nous obtenons :
= ()
=
Faire

1.3
Si < 1 alors
= 1
Fin si
= 0
=1
Tant que faire
=

Auteur : A.Deichman
Dernire modification : 18/12/2016

40

Si [ ] > [] alors
= [ ]
[ ] = []
[] =
=
Fin si
++
Fin tant que
=
Tant que = 0

Notons que lalgorithme ci-haut est quasi identique tri bulles. Nous avons seulement :

Ajout la variable qui est dfinit au dbut comme la taille de liste ;

est rduit =

Tous les endroits avec intervalle de tri bulles de 1 ont t remplaces par

Par exemple : 1

1.3

, avant de faire la premire itration ;

Cet algorithme a la complexit de (2 ) dans le cas de la pire performance et (()) dans le cas de la meilleure
performance.

Tri ImpairePaire (OddEven Sort)


Cet algorithme de triage est fortement apparent lalgorithme de triage bulles (voir page 39). Lalgorithme compare
chaque lment impair avec llment sa droite. Si les lments compars ne sont pas en ordre, leurs positions sont
changes. Le processus continue jusqu la fin de la liste et recommence avec les lments pairs. Les triages alternatifs
impaires-paires se rptent tant quil reste au moins un lment qui nest pas a place.
= ()
Faire
=
=1
Tant que < 1 faire
Si [] > [ + 1] alors
= [ + 1]
[ + 1] = []
[] =
=
Fin si
+= 2
Fin tant que
=0
Tant que < 1 faire
Si [] > [ + 1] alors
= [ + 1]
[ + 1] = []
[] =
=
Fin si
+= 2
Fin tant que
Tant que

Cet algorithme a la complexit de ()pour le meilleur cas et de (2 ) pour les autres.


Auteur : A.Deichman
Dernire modification : 18/12/2016

41

Tri cocktail (Cocktail Sort)


Lalgorithme de triage cocktail se base sur le tri bulles (voir page 39) mais effectue un aller-retour travers la liste. De
mme manire quon mlange un cocktail (aller-retour), lalgorithme utilise lapproche de tri bulles mais en avanant
et en reculant travers la liste. Ce changement amliore un peu le tri bulles en dplaant les tortues lgrement plus
vite.
Pour cette algorithme nous allons encore une fois choisir lapproche comparant llment actuel et celui qui lui prcde.
Observons le comportement de lalgorithme durant le triage de notre liste modle. :
1. Commenons par le deuxime item dans la liste
a) Comparons llment actuel llment prcdent
Si les lments ne sont pas en ordre, changeons-les
Avanons dune position dans la liste
b) Si nous ne sommes pas la fin de la liste, revenons ltape a)
c) Comparons llment actuel llment prcdent
Si les lments ne sont pas en ordre, changeons-les
Reculons dune position dans la liste
d) Si nous ne sommes pas au dbut de la liste, revenons ltape c)
2. Si durant le parcours prcdent (tape a) ltape d) ) nous avons dplac au moins un item revenons ltape
1. Si non, nous avons tri la liste au complet.

Auteur : A.Deichman
Dernire modification : 18/12/2016

42

Dbut

Suite

14

33

27

10

35

19

14

33

27

10

35

19

14

14

27

27

33

10

10

33

35

35

19

19

42

42

42

42

44

44

10

33

35

19

42

44

14

27

10

33

19

35

42

44

14

27

10

33

19

35

42

44

14

27

10

33

19

35

42

44

14

27

10

33

19

35

42

44

14

27

10

33

19

35

42

44

10

33

19

35

42

27

19

33

35

42

44

10

14

27

19

33

35

42

44

10

14

27

19

33

35

42

44

10

14

27

19

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

10

14

19

27

33

35

42

44

44

27

27

10

44

14

14

14

44

14

27

10

19

33

35

42

44

10

14

19

27

33

35

42

44

14

27

10

19

33

35

42

44

10

14

19

27

33

35

42

44

En modifiant lalgorithme de trie bulles intuitif, nous obtenons :


= ()

Auteur : A.Deichman
Dernire modification : 18/12/2016

43

Faire
=
=1
Tant que 1 faire
Si [ 1] > [] alors
= [ 1]
[ 1] = []
[] =
=
Fin si
++
Fin tant que
Tant que 1 faire
Si [ 1] > [] alors
= [ 1]
[ 1] = []
[] =
=
Fin si

Fin tant que


Tant que

Comme dans la majorit des cas prcdents, nous pouvons optimiser cet algorithme. En analysant lalgorithme, nous
pouvons remarquer que certaines tapes peuvent tre combines et/ou simplifis :
1. Initialisation = 1 est ncessaire seulement la premire itration.
2. Si nous effectuons un parcours daller complet sans inverser les lments, la liste est tri et nous pouvons
quitter immdiatement.
3. Les deux boucles internes peuvent tre combines dans une seule.
4. Comme dans le tri bulles, chaque parcours complet de la boucle place litem maximal ou minimal (selon le cas)
la bonne place. Nous pouvons donc prendre ceci en compte et rduire le nombre des comparaisons
Nous pouvons dbuter le processus doptimisation en travaillant sur les deux premires remarques. Ceci nous donne :
= ()
=1
Faire
=
Tant que 1 faire
Si [ 1] > [] alors
= [ 1]
[ 1] = []
[] =
=
Fin si
++
Fin tant que
Si ! alors
break
Tant que 1 faire
Si [ 1] > [] alors
= [ 1]
[ 1] = []
[] =

Auteur : A.Deichman
Dernire modification : 18/12/2016

44

=
Fin si

Fin tant que


Tant que

Il nous reste maintenant de travailler sur les deux autres remarques mentionnes plus haut. Reformulons les deux
suggestions en y ajoutant nos rflexions :
1. Comme dans le cas de tri bulles, cet algorithme peut tre amlior en prenant en compte le fait que chaque
parcours complet travers la liste va placer un lment sa place finale. Ainsi, llment le plus grand va se
trouver la fin de la liste ds le premier parcours en aller . De plus, llment le plus petit va se trouver au
dbut de la liste ds le premier parcours de retour .
2. De plus, nous pouvons dj voir que les deux boucles effectuent essentiellement la mme tache. Les seules
diffrences sont : les conditions darrt( 1 ou 1) et lorientation du parcours(aller + + ou retour
). Nous pouvons donc utiliser une ou deux variables qui vont encoder ces diffrences et vont nous donner la
possibilit dliminer une des boucles.
4. crivez un algorithme qui reprend le tri cocktail en utilisant toutes les amliorations
mentionnes plus haut.
5. crivez lalgorithme de tri cocktail avec toutes les amliorations et la comparaison des
lments [] et [ + 1].
Comme plusieurs autres algorithmes que nous avons tudi prcdemment, cet algorithme a la complexit de ()
pour le meilleur cas et de (2 ) pour les autres.

Gnome Sort
Cet algorithme est, selon certains, lalgorithme le plus simple de tous. Initialement propos comme stupid sort par
Dr. Hamid Sarbazi-Azad en 2000 [5] et dcrit par Dick Grune comme Gnome sort , il fonctionne par principe de
slection de gnome fleuriste (Dutch Garden Gnome) :

Il compare le pot de fleurs devant lui et le pot qui lui prcde.


o Si les pots sont dans le bon ordre, il avance au pot suivant
o Si non, il change la position de ces deux pots et recule dun pot
Sil y a aucun pot prcdant, il avance au pot suivant
Sil y ny a pas de pot suivant, le triage est termin.

Utilisons un exemple pour, voir le comportement de lalgorithme.


terminer- exemple
Notons que cet algorithme utilise des principes de triage de slection et de triage bulles : on place le bon item sa
place en reculant dun item la fois.
= ()
=0
Tant que < faire
Si = 0 ou [ 1] [] alors
++

Auteur : A.Deichman
Dernire modification : 18/12/2016

45

Si non
= []
[] = [ 1]
[ 1] =

Fin si
Fin tant que

Bien sur cet algorithme peut tre optimis lgrement :

en dbutant par le deuxime lment dans la liste = 1 nous allons viter une vrification inutile au dbut ;
en liminant la possibilit de reculer vers litem la position = 0 nous allons viter le vas et viens inutiles.
Cest--dire, nous pouvons sarrter litem = 1 tout en faisant la comparaison et lchange, si ncessaire,
entre cet item et litem prcdent.

Tous ces changements mineurs peuvent tre dcrits dans le pseudocode suivant :
= ()
=1
Tant que < faire
Si [ 1] [] alors
= []
[] = [ 1]
[ 1] =
Si > 1

Si non
++
Si non
++
Fin si
Fin tant que

Notons que ces amliorations sont mineures et ne changent pas la nature ou la complexit de lalgorithme. Nous
pouvons penser un changement plus important en sachant que lalgorithme produit une liste partiellement tri
gauche de la position courante. Il est donc possible de sauter beaucoup dtapes en mmorisant la position du premier
item non tri dans la sous-liste comme on le fait dans le tri par insertion (voir p.46 ci-dessous). Dailleurs, si nous
effectuons ce changement, nous allons retrouver une des variantes du tri par insertion.
Comme plusieurs autres algorithmes que nous avons tudi prcdemment, gnome sort a la complexit de ()
pour le meilleur cas et de (2 ) pour les autres.

Tri par insertion (Insertion Sort)


Plusieurs variantes de cet algorithme existent. Ici-bas, nous allons tudier lapproche qui compare llment et celui qui
lui prcde tout en faisant le triage sur place [6, 7]. Il est aussi possible de comparer llment et celui qui lui succde
et/ou placer les lments dans le bon ordre dans une nouvelle liste.
tapes de tri :
1. Commencer par llment lindex 2 de la liste.
2. Vrifier si cet lment courant est en ordre par rapport llment gauche (index de position plus petit) ou est
le premier de la liste.
a. Si oui, rien faire.
Auteur : A.Deichman
Dernire modification : 18/12/2016

46

b. Si non,
i. sauvegarder la position de llment courant et
ii. changer les lments de place.
3. Rpter ltape prcdente tant que la condition retourne non .
4. Revenir la position sauvegarde en 2.b.i. et sauter au prochain lment droite (index+1).
5. Vrifier si lindex obtenu en 4 existe dans la liste en cours
a. Si oui, revenir ltape 2.
b. Si non, la liste a t trie.
La traduction dans le pseudocode, nous donne la structure suivante :
= ()
=1
Tant que < faire
=
= []
Tant que > 0 et [ 1] > faire
[] = [ 1]

Fin tant que


Si alors
[] =
= +1
Si non
++
Fin si
Fin tant que

Visuellement, nous pouvons voir lalgorithme dans lexemple plus bas. Le carre noir identifie llment en cours et le V2
identifie la valeur comparer. Finalement, le rectangle bleu identifie la position sauvegarde en tape 2.b.i. Notons que
la reprsentation visuelle sarrte avant la fin de triage : il nous reste encore comparer 42 vs. 35 (dernire tape
affich) et 44 vs. 42.

Auteur : A.Deichman
Dernire modification : 18/12/2016

47

Dbut
14

33

27

10

Suite

35

19

42

44

V2
14

33

27

10

35

19

42

14

33

27

27

27

33

10

10

35

35

19

19

42

42

35

19

42

44

10

14

27

33

35

19

42

44

35

19

42

44

V2

33

10

35

19

42

33

10

35

19

42

44

14

27

10

33

35

19

42

44

V2

33

35

19

42

27

33

V2

10

14

27

33

35

19

42

44

10

14

27

33

19

35

42

44

V2

44

27

10

14

44

14

27

33

44

V2

14

27

10

V2
14

10

44

V2

14

14

44

10

14

27

33

19

35

42

44

10

14

27

19

33

35

42

44

V2

10

14

27

19

33

35

42

44

10

14

19

27

33

35

42

44

19

27

33

35

42

44

V2
14

10

27

33

35

V2

19

42

44

10

14

V2

Comme lalgorithme de triage impaire-paire, cet algorithme a la complexit de ()pour le meilleur cas et de (2 )
pour les autres.
Auteur : A.Deichman
Dernire modification : 18/12/2016

48

Tri de Shell (Shell Sort)


Lalgorithme a t initialement dvelopp par Donald Lewis Shell en 1959 [8] et publi par Marlene Metzner en 1961
environs [9].
Tri de Shell est essentiellement une variante de tri par insertion (voir page 46) mais qui compare les lments spars
par un certain espace appel gap . chaque parcours, lespacement entre les items compars gap diminue pour
ventuellement sarrter un. Ceci revient faire le tri par insertion.
Toutefois, lefficacit de cet algorithme dpend largement de choix de gap appropri. Pour les fin de lexercice et
sans sattarder trop sur lanalyse de lefficacit des valeurs choisies nous allons considrer la proposition originale de

D.L. Shell avec gap comme2.


Il existe plusieurs propositions de Shell sort qui emploient les gap diffrents. Par exemple,

Thomas N. Hibbard en 1963 [10] proposa une amlioration lalgorithme original qui dfinit
le gap comme 2 1, ce qui permet de rduire la complexit (

Vaughan Ronald Pratt publie une thse en 1979 [11] qui propose (entre autres) que gap
soit dfinit comme
de (

2
3 ).

31
2

mais toujours plus petit que ce qui rsulte dans la complexit


3

2
3 ).

Marcin Ciura propose en 2001 [12] des valeurs exprimentales pour gap qui produisent
des bons rsultats pour une liste moyenne . Il dfinit le gap comme
1, 4, 10, 23, 57, 132 etc.

Autrement dit, nous avons besoin de

dfinir le gap comme 2 o N est la taille de liste trier, k est le tour de triage fait prsentement [8];
sassurer que le gap ne peut pas tre plus petit quun ;
effectuer le tri de type Insertion (voir page 46) en considrant seulement les valeurs distantes de gap .

Exemple 1
7

1. En ayant 7 valeurs, = 2 = 3
7

2. Maintenant, = 4 = 1

Auteur : A.Deichman
Dernire modification : 18/12/2016

49

2
11

11
66

22

11

22

15

66

55

77

22

15

66

55

77

1
77

44

44

55

44

15
P

77

11

66

66

22

11

22

77

44

44

55

55

11

44

22

15

66

55

77

11

22

44

15

66

55

77

15

15

11

11

66

44

22

77

77

22

44

66

55

55

11

22

44

15

66

55

77

11

15

22

44

66

55

77

55

77

15

15
P

P
11
11

44

22

77

66

55

15

22

44

66

15
P
P

11

11

44

44

22

22

77

15

Auteur : A.Deichman
Dernire modification : 18/12/2016

66

66

55

55

11

15

22

44

66

55

77

11

15

22

44

55

66

77

15

77

50

Intuitivement, nous pouvons penser au pseudocode suivant :


= ()
=0
Tant que < ou > 1 faire

= ( )
2
Si < 1 alors
= 1
Fin si
=
Tant que < faire
=
= []
Tant que 0 et [ ] > faire
[] = [ ]
=
Fin tant que
Si alors
[] =
= +1
Si non
++
Fin si
Fin tant que
++
Fin tant que

Toutefois ce code nest que partiellement semblable lalgorithme dcrit dans le tri par insertion. En effet, il est possible
de rorganiser les conditions et certains lments du pseudocode plus haut afin de produire une version en peu plus
lgante.
terminer

Strand Sort
La premire rfrence cet algorithme a t retrace vers la publication en ligne de lalgorithme de triage J sort faite
par John Cohen. Cet algorithme a t dcrit comme une partie de J sort en 1997 [13, 14] dans une publication faite
par Sergey Erokhin qui se rfre lauteur original et publie mme le contenu de son message retrouv sur I-NET .
Malgr peu dinformation sur les origines et le crateur de cet algorithme, sa performance rend lalgorithme trs
attrayant pur certaines types de triage. En fait, pour le triage de listes relativement petites, lalgorithme est souvent
meilleur que de tous ces confrres avec la mme complexit.
Lalgorithme consiste parcourir la liste de gauche droite en slectionnant des lments qui sont dj en bon ordre.
Ensuite, il est ncessaire de placer ces lments (en ordre appropri) dans une autre liste dlments dj tris. De plus,
il faut rpter tant que la liste originale nest pas vide. Dans dautres mots, nous devons :

Slectionner les lments de la liste originale qui sont en ordre croissant commenant par le premier lment.
Retirer ces lments de la liste et les placer dans une liste temporaire.
Retirer ces lments de la liste temporaire et les fusionner (placer en bonne position) avec la liste rsultats .
Rpter les tapes prcdentes tant que la liste originale nest pas vide.

Auteur : A.Deichman
Dernire modification : 18/12/2016

51

Exemple 1 : en jaune sont les lments slectionns/dplacs

Originale

Temp

Rsultat

31542
142

35

142
2

35
14

35
1345

1345
12345

Exemple 2 : en jaune sont les lments slectionns/dplacs

Originale

Temp

Rsultat

57034261
034261

57
57

034261
21

0346

034567

21
1

57

034567
0234567

0234567
01234567

En dfinissant, comme la liste avec les donnes sources, comme la liste de stockage temporaire et
comme la liste trie la logique dcrite plus haut peut tre traduite en pseudocode comme :
Tant que () > 0 faire
vider
[0] = [0]
effacer[0]
=0
Tant que < () faire
Si [] [() 1] alors
ajouter[]lafinde
effacer[]
Si non
++
Fin si
Fin tant que
Si () > 0 alors
=0
Tant que () > 0 faire
Si [0] < [] ou []n' existepas alors

Auteur : A.Deichman
Dernire modification : 18/12/2016

52

insrer[0]lapositiondans
effacer[0]
Fin si
++
Fin tant que
Si non
Tant que () > 0 faire
insrer[0]lapositiondans
effacer[0]
++
Fin tant que
Fin si
Fin tant que

Dtaillons ce pseudocode lment par lment pour mieux comprendre chaque instruction :
terminer
Notons toutefois que cet algorithme contient quelques lments qui peuvent tre simplifis :

La troisime boucle qui sert copier les premiers items ne sera pas utile aucun autre moment sauf la fin de
la premire itration. De plus, elle trs similaire la boucle qui lui prcde.
Nous nous assurons que liste est vide au dbut de chaque itration (voir troisime ligne du code) mais
est-ce ncessaire ? Les boucles qui lui succdent ont comme condition darrt () 0 ce qui
garantit que cette liste est toujours vide au dbut de chaque itration.
Utilisation dune liste de stockage temporaire augmente le nombre des lectures/critures et des manipulations
de mmoire : nous dplaons les items en ordre croissant dans une liste temporaire juste pour les dplacer
encore dans la liste finale. On peut donc chercher amliorer lalgorithme en utilisant seulement deux listes
( et ).

SI nous considrons que les deux premires remarques plus haut, nous pouvons relativement rapidement rduire notre
algorithme :
Tant que () > 0 faire
[0] = [0]
effacer[0]
=0
Tant que < () faire
Si [] [() 1] alors
ajouter[]lafinde
effacer[]
Si non
++
Fin si
Fin tant que
=0
Tant que () > 0 faire
Si [0] < [] ou []n' existepas alors
insrer[0]lapositiondans
effacer[0]
Fin si
++
Fin tant que
Fin tant que

Auteur : A.Deichman
Dernire modification : 18/12/2016

53

En intgrant aussi la troisime remarque dans la liste des notes plus haut (liminer la liste temporaire), nous
pouvons obtenir un algorithme encore plus compact. Pour rsoudre ce problme, nous allons utiliser une double boucle
similaire celles employes prcdemment avec deux compteurs et qui vont contrler notre positions dans la liste
correspondante ( ou ) :
Tant que () > 0 faire
= [0]
=0
=0
Tant que < () faire
Si [] alors
= []
Si [] > [] ou []n' existepas alors
insrer[]lapositiondans
effacer[]
++
Fin si
Si non
++
Fin si
Fin tant que
Fin tant que

Notons toutefois que cette variante nest pas un Strand sort classique mme si nous avons gard le principe et lide9.
Dans cette version, nous utilisons beaucoup moins doprations tout en gardant la robustesse et la vitesse de
lalgorithme original incluant la mthode utilise pour reclasser les lments.
terminer

Quelques solutions
Gnome sort
Version en [C] [15]
gnomesort(int n, int ar[]) {
int i = 0;
while (i < n) {
if (i == 0 || ar[i-1] <= ar[i]) {
i++;
}
else {
int tmp = ar[i]; ar[i] = ar[i-1]; ar[--i] = tmp;
}
}
}

Toutefois, les recherches limits de lauteur de ce texte nont par russi de retrouver lauteur original ou le titre de cet algorithme.

Auteur : A.Deichman
Dernire modification : 18/12/2016

54

Les matrices
La manipulation des matrices est invitable si nous voulons effectuer le travail en trois dimensions, ou si nous cherchons
appliquer les mthodes avances de rsolution des systmes dquations. Dans cette section, nous allons aborder les
proprits des matrices et les oprations de base avec celles-ci.
Premirement il est important dobserver que dans la majorit des cas ncessitant laccs tous les lments dune
matrice nous allons devoir parcourir toutes les lignes et toutes les colonnes. Ainsi, nous allons avoir besoin dune boucle
pour les lignes et dune boucle pour les colonnes. De plus, pour chaque ligne, nous allons devoir recommencer la boucle
des colonnes.
=0
Tant que < faire
=0
Tant que < faire
Opration(s) faire avec [, ]
Fin tant que
Fin tant que

Les proprits des matrices


Matrice carre
Il est relativement facile de trouver le test qui vrifie si la matrice en question est carre : il suffit de vrifier que le
nombre des lignes est gal au nombre des colonnes.
Si = alors
Afficher La matrice est carre
Si non
Afficher La matrice nest pas carre

Par contre, les autres proprits des matrices peuvent demander considrablement plus de travail.

Matrice triangulaire
Ce sont les matrices carres dont tous les coefficients en haut ou en bas de la diagonale sont nuls. Il est prfrable de
dabord dvelopper les algorithmes pour la matrice triangulaire suprieure et la matrice triangulaire infrieure. Ensuite,
nous pouvons combiner ces deux solutions pour dterminer quand une matrice est triangulaire.

Triangulaire suprieure
Ce sont les matrices carres dont tous les coefficients strictement au-dessus de la diagonale (cest--dire , avec < )
sont nuls. Par exemple :
1
= [0
0
0

2
7
0
0

3
0
5
0

4
0]
9
8

Lalgorithme doit dbuter par la vrification de la matrice est carre. Si cest le cas, poursuivons en validant que tous les
lments , avec < sont nulles. Notre approche est base sur lassomption que la matrice rpond aux conditions.
Nous allons arrter notre validation quand au moins un lment ne satisfait pas aux conditions ou quand tous les
lments ont t valids.
Auteur : A.Deichman
Dernire modification : 18/12/2016

55

=
Si = alors
=0
Tant que < et = faire
=0
Tant que < et = faire
Si < et [, ] 0 alors
=
Fin tant que
Fin tant que
Si = alors
Afficher La matrice est triangulaire suprieure
Si non
Afficher La matrice nest pas triangulaire suprieure
Si non
Afficher La matrice nest pas carre

Remarquons que lalgorithme propos plus haut dclare la matrice comme fausse quand au moins un item hors
diagonale nest pas nul. Cette dcouverte est suffisante pour arrter compltement notre validation : nous devons donc
ajouter la condition = dans les deux boucles pour forcer lalgorithme vers la condition et laffichage
appropri.
Toute en tant logique et facile comprendre, cette solution nutilise pas le plein potentiel de la condition < , car
mme les lments qui ne rpondent pas cette condition seront parcouru. Il est donc judicieux de faire quelques
modifications :
=
Si = alors
=1
Tant que < et = faire
=0
Tant que < et = faire
Si [, ] 0 alors
=
Fin tant que
Fin tant que
Si = alors
Afficher La matrice est triangulaire suprieure
Si non
Afficher La matrice nest pas triangulaire suprieure
Si non
Afficher La matrice nest pas carre

Triangulaire infrieure
Ce sont les matrices carres dont tous les coefficients strictement au-dessous de la diagonale (cest--dire , avec >
) sont nuls. Par exemple :
1
= [2
3
4

0
7
0
0

0
0
5
9

0
0]
0
8

Suite notre exprience avec la matrice triangulaire suprieure (voir page 55) nous savons que nous devons intgrer la
condition > dans les boucles de rptition. Nous allons aussi minimiser le nombre de vrifications en inversant les
deux boucles. Nous allons commencer par les colonnes et parcourir les lignes :
Auteur : A.Deichman
Dernire modification : 18/12/2016

56

=
Si = alors
=1
Tant que < et = faire
=0
Tant que < et = faire
Si [, ] 0 alors
=
Fin tant que
Fin tant que
Si = alors
Afficher La matrice est triangulaire suprieure
Si non
Afficher La matrice nest pas triangulaire suprieure
Si non
Afficher La matrice nest pas carre

Revenons maintenant notre question principale : est-ce que la matrice donne est une matrice triangulaire ? Nous
pouvons rpondre cette question en appliquant les deux algorithmes dvelopps plus haut. Nous pouvons aussi
combiner les deux approches dans un seul algorithme.
crivez un algorithme combin capable de dterminer si la matrice est une matrice triangulaire et
spcifier le type (inferieure, suprieure ou les deux).

Matrice diagonale
Une matrice diagonale est une matrice carre dont les coefficients en dehors de la diagonale principale sont nuls. Les
coefficients de la diagonale peuvent tre ou ne pas tre nuls. Nous pouvons aussi voir la matrice diagonale comme une
matrice la fois triangulaire inferieure et triangulaire suprieure.
1
= [0
0
0

0
7
0
0

0
0
5
0

0
0]
0
8

Nous pouvons bien sur coller ensemble les deux algorithmes (triangulaire suprieure, page 55, et infrieure, page 56). Si
la matrice rpond aux exigences des deux algorithmes, les conditions sont satisfaites. Mais nous pouvons aussi combiner
les deux algorithmes dans un seul :
=
Si = alors
=0
Tant que < et = faire
=0
Tant que < et = faire
Si et [, ] 0 alors
=
++
Fin tant que
++
Fin tant que
Si = alors
Afficher La matrice est une matrice diagonale
Si non

Auteur : A.Deichman
Dernire modification : 18/12/2016

57

Afficher La matrice nest pas une matrice diagonale


Si non
Afficher La matrice nest pas carre

Matrice bi-diagonale
Matrice bi-diagonale est une matrice carre ayant tous les nombres gales zro en dehors des deux diagonales.
Autrement dit, tous les lments rpondant aux critres , avec = ou + + 1 = = peuvent contenir toute
valeur incluant zro ; tous les autres lments doivent tre nuls.
1
= [0
0
4

0
7
3
0

0
2
5
0

1
0]
0
8

La solution la plus logique est de complmenter lalgorithme propos pour la matrice diagonale (voir page 57) avec un
autre test pour la condition + + 1 = = :
=
Si = alors
=0
Tant que < et = faire
=0
Tant que < et = faire
Si ( ou + + 1 ) et [, ] 0 alors
=
Fin tant que
Fin tant que
Si = alors
Afficher La matrice est une matrice bi-diagonale
Si non
Afficher La matrice nest pas une matrice bi-diagonale
Si non
Afficher La matrice nest pas carre

Notons que dans ce cas nous avons utilis une condition imbrique qui sera valu spcifiquement dans lordre forc
par les parenthses :
1. Est-ce que llment se trouve sur la diagonale principale ou sur la diagonale secondaire ?
( ou + + 1 )

2. Est-ce que llment [, ] est nul


[, ] 0

3. Si les deux tapes prcdentes donnent une rponse OUI, effectuer lopration =

Matrice symtrique
La matrice symtrique est une matrice carr tel que, = , , /{0}. Nous allons utiliser une stratgie
semblable celle utilise pour vrifier si la matrice est diagonale. Nous allons donc inspecter en mme temps les
lments en haut et en bas de la diagonale sans toucher la diagonale elle-mme : ce qui veut dire que la seconde
boucle va respecter < .
=
Si = alors
=1
Tant que < et = faire
=0

Auteur : A.Deichman
Dernire modification : 18/12/2016

58

Tant que < et = faire


Si [, ] [, ] alors
=
Fin tant que
Fin tant que
Si = alors
Afficher La matrice est une matrice symtrique
Si non
Afficher La matrice nest pas une matrice symtrique
Si non
Afficher La matrice nest pas carre

Matrice identit
Cest la matrice scalaire dont tous les coefficients diagonaux valent 1 et tous les autres lments sont nuls. On note la
matrice identit dordre. Par exemple :
1 0
3 = [0 1
0 0

0
0]
1

Pour vrifier que la matrice respecte ces conditions, il faut vrifier que la matrice est diagonale avec tous les lments
sur la diagonale ayant la valeur de1. Nous allons donc reprendre lalgorithme utilis pour la matrice diagonale (voir page
57) et y ajouter le test vrifiant les valeurs sur la diagonale elle-mme :
=
Si = alors
=0
Tant que < et = faire
=0
Tant que < et = faire
Si et [, ] 0 alors
=
Si non
Si = et [, ] 1 alors
=
Fin tant que
Fin tant que
Si = alors
Afficher La matrice est une matrice identit
Si non
Afficher La matrice nest pas une matrice identit
Si non
Afficher La matrice nest pas carre

Matrice nulle
Cest la matrice quelconque (pas ncessairement carre) dont tous les coefficients sont nuls. On la note 0, ou 0 si
elle a lignes et colonnes, 03 ou 0 sil ny a pas dambigit. Par exemple :
0
03 = [0
0

0 0
0 0 0
]
0 0] ou 02,3 = [
0 0 0
0 0

=
=0
Tant que < et = faire

Auteur : A.Deichman
Dernire modification : 18/12/2016

59

=0
Tant que < et = faire
Si [, ] 0 alors
=
Fin tant que
Fin tant que
Si = alors
Afficher La matrice est une matrice nulle
Si non
Afficher La matrice nest pas une matrice nulle

Les points cols (points-selles)


Un point col dans la matrice est un lment qui est la fois la valeur maximale de la ligne est la valeur minimale
de la colonne dans lesquelles il se trouve.
Exemples (les points cols sont en parenthses) :
1 8 3 4
[
6 (7) 2 7

0
]
0

3 5
[4 2
6 3

6 (7) (7)
2 8 9 ]
2 9 7

1 2 (3)
[4 5 6 ]
7 8 9

Lapproche qui nous vient naturellement lesprit implique de suivre la description prsente plus haut la lettre, cest
dire :

Trouver le(s) maximum(s) sur la premire ligne.


o Pour chaque maximum trouv, vrifier si cette valeur est aussi la valeur minimale sur sa colonne.
Rpter ltape prcdente pour toutes les lignes.

Notons que tout algorithme de ce type recherche surtout la position des points-cols et des fois les valeurs. Nous allons
donc faire les deux.
=0
Tant que < faire
max_ =
max_ = 0
=0
Tant que < faire
Si [_, max_] < [, ] alors
max_ =
max_ =
Fin Si
Fin tant que
= max_
Tant que < faire
Si [_, max_] = [, j] alors
=0
=
Tant que < faire
Si [_, max_] > [, ] alors
=
Quitter la boucle de rptition
Fin Si
Fin tant que
Si = alors

Auteur : A.Deichman
Dernire modification : 18/12/2016

60

Afficher Le point col +[_, max_] + se trouve la


position ( + _ + , + max_ + )
Fin Si
Fin tant que
Fin tant que

Toutefois cette approche implique que nous allons inspecter/vrifier certaines valeurs plusieurs fois. Par exemple, pour
3 5 6 (7) (7)
la matrice prsente plus haut[4 2 2 8 9 ], nous allons effectuer les tapes suivantes10 :
6 3 2 9 7
31
[4
6

51
2
3

61 71 71
2 8 9]
2 9 7

partir du premier maximum trouv sur la ligne courante, vrifier si cest


aussi un minimum sur sa colonne

31
[4
6

51
2
3

61
2
2

Cest un point col confirm

31
[4
6

51
2
3

61
2
2

(73 ) 71
81 9 ]
91 7

Vrifier si la valeur suivante sur la mme ligne (nous sommes toujours sur
ligne 1) est gale notre candidat[_, max_]

31
[4
6

51
2
3

61
2
2

(73 ) 72
81 9 ]
91 7

Vrifier si cest un minimum dans sa colonne

31
[4
6

51
2
3

61
2
2

(73 ) 73
81 91 ]
91 71

Parcourir la premire ligne pour trouver la valeur maximale

73
81
91

71
9 ]
7

Cest un point-col confirm

31
[4
6

51
2
3

61 (73 ) (73 )
2
81 91 ]
2
91 71

Parcourir la deuxime ligne pour trouver la valeur maximale

31
[ 41
6

51
21
3

61 (73 ) (73 )
21 82 92 ]
2
91 71

partir du premier maximum trouv sur la ligne courante, vrifier si cest


aussi un minimum sur sa colonne

31
[ 41
6

51
21
3

61 (73 ) (74 )
21 82 94 ]
2
91 72

31
[41
61

51
21
31

61 (73 ) (74 )
21 82 94 ]
21 92 73

31
[41
61

51
21
31

61 (74 ) (74 )
21 83 94 ]
21 94 73

Le candidat nest pas un point col


Parcourir la troisime ligne pour trouver la valeur maximale
partir du premier maximum trouv sur la ligne courante, vrifier si cest
aussi un minimum sur sa colonne

10

Nous allons noter le nombre des vrifications de chaque position en indice. Le candidat identifi par [_, max_] sera
soulign en jaune.

Auteur : A.Deichman
Dernire modification : 18/12/2016

61

Le candidat nest pas un point col.

31
[41
61

51
21
31

61 (74 ) (74 )
21 83 94 ]
21 94 73

Ainsi, dans certains cas, nous vrifions la mme valeur 4 fois et ceux pour plusieurs valeurs pour un total de 31
comparaison. De plus, nous ne pouvons pas garantir un certain temps de compltion pour notre algorithme car tout
dpend de la structure de la matrice vrifier. Il est donc raisonnable rviser notre approche initiale afin de minimiser,
voir liminer, les vrifications inutiles. Pour ce faire, nous allons devoir enregistrer plus dinformation dans la mmoire
et utiliser certaines connaissances pralables. Notre approche peut tre rsume comme suit :

Trouver toutes les valeurs maximales sur chaque ligne et sauvegarder dans une liste (ou matrice) part
Trouver toutes les valeurs minimales sur chaque colonne et sauvegarder dans une liste (ou matrice) part
Comparer les deux listes : si une valeur est la fois maximum sur la ligne et minimum sur la colonne cest un
point col.

Cette approche nous donne un temps de parcours garanti avec exactement deux comparaisons pour chaque item et un
parcours travers les matrices rsultantes. Autrement dit, une matrice 3 5 (comme celle de lexemple prcdent)
rsultera dans 30 comparaisons des valeurs sources quel que soit la distribution des valeurs. Certes, le gain par rapport
lexemple plus haut est minimal et on peut mme argumenter quil est ngligeable. Il est aussi possible que la
dmarche dcrite plus haut soit considrablement plus lente que lalgorithme original. Par contre, notre objectif nest
pas toujours celui de rapidit. Des fois, il est ncessaire dassurer le comportement prvisible et la dure dexcution
indpendante des donnes.

crivez un algorithme dcrit dans les trois paragraphes plus haut.

Calcul matriciel
Certains algorithmes de calcul matriciel posent encore des dfis de programmation :

Ils sont utiliss en


o programmation linaire
o rsolution des quations diffrentielles
o algbre linaire
o etc.
Le temps dexcution de la version nave est souvent polynomial et pire (trs lent) car chaque membre doit tre
accd au moins une fois.

Ainsi, ltude des diffrentes approches reste encore au cur de loptimisation des diffrents logiciels de manipulation
des donnes numriques.

Matrices gales
Deux matrices A et B sont gales, ce quon note A = B si
elles ont mme nombre de lignes ;
elles ont mme nombre de colonnes ;
les coefficients la mme position sont gaux.
Auteur : A.Deichman
Dernire modification : 18/12/2016

62

Il est donc essentiel de commencer notre algorithme par la vrification de la taille des matrices. Ensuite, nous allons
parcourir les deux matrices et sarrter ds que nous trouvons au moins un lment correspondant diffrent.
=
Si = et = alors
=0
Tant que < et = faire
=0
Tant que < et = faire
Si [, ] [, ] alors
=
Fin tant que
Fin tant que
Si = alors
Afficher Les deux matrices sont gales
Si non
Afficher Les deux matrices ne sont pas gales
Si non
Afficher Les matrices ne sont pas de mme taille

Addition
Soit A et B deux matrices coefficients dans ayant mme nombre de lignes et mme nombre de colonnes, la
somme + de et est la matrice lignes et colonnes dont chaque coefficient est somme des coefficients de
mme position de et de : si = (, )1 et = (, ) 1 alors + = (, + , )1 .
1

Comme pour les matrices gales, nous devons dbuter par validation de la taille des matrices. Ensuite, nous allons
construire une nouvelle matrice de la mme taille avec les lments contenant la somme approprie.
Si = et = alors
=0
Tant que < faire
=0
Tant que < faire
[, ] = [, ] + [, ]
Fin tant que
Fin tant que
Si non
Afficher Les matrices ne sont pas de mme taille

Soustraction
Considrant que laddition et la soustraction sont des oprations mathmatiques complmentaires, lalgorithme est
aussi identique un signe de prs.
Si = et = alors
=0
Tant que < faire
=0
Tant que < faire
[, ] = [, ] [, ]
Fin tant que
Fin tant que
Si non
Afficher Les matrices ne sont pas de mme taille

Auteur : A.Deichman
Dernire modification : 18/12/2016

63

Dterminant
Le dterminant dune matrice carre = [

] dune taille 2 2 est dfinit comme :

() =

Pour une matrice dune taille quelconque on peut utiliser lexpansion de Laplace

() = (1)1+ 1 1
=1

o 1 est un dterminant dune sous matrice obtenue en retirant la ligne 1 et la colonne.


1
Ainsi pour une matrice = [2
3

1 2
3 4], le dterminant peut tre crit comme
4 5

3 4
2 4
2 3
() = 1 1 [
] + (1) 1 [
]+12[
] = (3 5 4 4) (2 5 4 3) + 2 (2 4 3 3)
4 5
3 5
3 4
= 1 + 2 2 = 1
Lapproche classique consiste utiliser les fonctions rcursives :

si la matrice est 2 2 calculer le dterminant et quitter


si la matrice est suprieure appliquer lexpansion de Laplace et utiliser la sous-matrice

Si = 2 et = 2 alors
= terminer
Si non
=0
Tant que < faire
= + (1) [0, ] (0, )
Fin tant que
Fin Si
Retourner

terminer

Multiplication
1,1 1,
1,1 1,

] est dfinie comme = =


Une multiplication des matrices = [
] et = [
,1 ,
,1 ,
1,1 1,
1,1

[
] o 1,1 = [ 1,1
1, ] [ ] = 1,1 1,1 + + 1, ,1 etc.
,1 ,
,1
Pour trouver chaque lment de la matrice, il suffit donc de calculer la somme des produits des lments
correspondants de et. Les implmentations particulires utilisant cette approche sont souvent regroupes sous
lappellation multiplication nave . Voici un exemple de tel algorithme :
=0

Auteur : A.Deichman
Dernire modification : 18/12/2016

64

=0
=0
Tant que < faire
Tant que < faire
Tant que < faire
[, ] = [, ] + [, ] [, ]
Fin tant que
Fin tant que
Fin tant que

Premirement, notons que lalgorithme propos plus haut ne valide pas la taille des deux matrices. En fait, nous avons
assum que les nombre de lignes et des colonnes des deux matrices reste toujours. Une solution plus gnrale doit
prendre en compte les matrices non carres. Ainsi, pour les matrices et :
Si = alors
=0
=0
=0
Tant que < faire
Tant que < faire
Tant que < faire
[, ] = [, ] + [, ] [, ]
Fin tant que
Fin tant que
Fin tant que
Si non
Afficher Les tailles des matrices ne correspondent pas
Fin Si

Depuis la publication de Strassen en 1969 [16] et jusqu les annes 2000, cet algorithme avec complexit
algbriqueO(3 ) a t considre relativement lent pour une fonction communment utilise dans beaucoup de
solutions informatiques. Cette opinion a chang avec les derniers dveloppements en matriel informatique et le
recherche dans les sciences informatiques. Aujourdhui, lanalyse de complexit de lalgorithme inclut aussi les besoins
en mmoire cash et en communication entre les processeurs pour le dveloppement des algorithmes de multiplication
utilisant plusieurs curs de processeur en parallle. Toutefois, les rcents dveloppements [17] [18] [19] restent quand
mme bass sur les versions originales de Strassen [16] et Coppersmith-Winograd [20].
Nous allons donc tudier les mthodes de complexit algbrique inferieure dveloppes dans les dernires 25 annes
telles que la solution de Strassen et Coppersmith-Winograd algorithme.

Algorithme de Strassen
7

Cet algorithme est beaucoup plus rapide que la multiplication nave avecO(2.807 ) ou O (2 ). Par contre, il nest pas
stable numriquement.
Lalgorithme utilise le principe de diviser pour conqurir . Commenons par un exemple de multiplication des deux
matrices de la taille2 2.
11
(
21

12
11
22 ) = (21

12 11
22 ) (21

12
)
22

Ma mthode intuitive de multiplication ncessitera 8 multiplications et 4 additions. Nous allons chercher une mthode
rduire le nombre de multiplications 7. Posons :
1 = (12 22 )(21 + 22 )
Auteur : A.Deichman
Dernire modification : 18/12/2016

65

2 = (11 22 )(11 + 22 )
3 = (11 21 )(11 + 12 )
4 = (11 + 12 )22
5 = 11 (12 22 )
6 = 22 (21 11 )
7 = (21 + 22 )11
Ainsi, les lments de la matrice rsultante peuvent tre obtenus laide des sommes suivantes :
11 = 1 + 2 4 + 5
12 = 4 + 5
21 = 6 + 7
22 = 2 3 + 5 7
Notre approche rsulte dans 7 multiplications mais 18 additions. premire vue nous ne gagnons rien de majeur et
cest le cas pour une multiplication des matrices de la taille2 2. La situation change de manire dramatique quand
nous appliquons le mme algorithme pour une matrice de la taille |%2 = 0.
terminer

Coppersmith-Winograd (CW) algorithme


Jusqu 2010, cette algorithme a t considr le plus rapide de tous avec la complexit deO(2.375477 ). Malgr un
avantage clair de cet algorithme, il est utilis rarement en pratique car ces avantages sont surtout visibles pour des
matrices extrmement larges ncessitant lutilisation des composantes matriels et logiciels spcialises.
terminer

Puissances
Essentiellement, calculer la puissance dune matrice carre quivaut lapplication rptitive de lalgorithme de
multiplication de choix. Par exemple, la puissance dune matrice carre peut tre crite comme 2 = ou plus
gnralement = 1 2 . Ainsi, une boucle rptitive qui encapsule lalgorithme de multiplication de notre
choix suffit rsoudre ce problme.

Transpose dune matrice


terminer

Quelques solutions
Recherche des points-cols
Version en [C] [3]
/*Filename: Saddle.c
Author: Jithu Sunny
Blog: http://jithusunnyk.blogspot.com/
Date: 06-03-11

Auteur : A.Deichman
Dernire modification : 18/12/2016

66

Description: This program finds out the saddle points and their positions in a matrix of
any order.*/
/*Change these macros to change the order*/
#define ROWS 3
#define COLUMNS 3
#include <stdio.h>
struct saddle
{
int num;
int row, column;
};
/*Returns 1 if element at p is the smallest in its row. Returns 0 otherwise*/
int is_min_in_row(int* p, int col)
{
int *i;
int *first_in_row = p - col;
int *last_in_row = first_in_row + COLUMNS - 1;
for(i = first_in_row; i <= last_in_row; i++)
if(*p <= *i)
continue;
else
return 0;
return 1;
}
/*Returns 1 if element at p is the largest in its column. Returns 0 otherwise*/
int is_max_in_col(int* p, int row)
{
int *i;
int *first_in_col = p - (COLUMNS * row);
int *last_in_col = first_in_col + COLUMNS * (ROWS - 1);
for(i = first_in_col; i <= last_in_col; i += COLUMNS)
if(*p >= *i)
continue;
else
return 0;
return 1;
}
/*Returns 1 if element at p is a saddle point. Returns 0 otherwise*/
int is_saddle(int* p, int row, int col)
{
if((is_min_in_row(p, col)) && (is_max_in_col(p, row)))
return 1;
return 0;
}
int main()

Auteur : A.Deichman
Dernire modification : 18/12/2016

67

{
int i, j, k = 0;
int a[ROWS][COLUMNS];
struct saddle saddles[1000];
printf("Enter the %dx%d matrix:", ROWS, COLUMNS);
for(i = 0; i < ROWS; i++)
for(j = 0; j < COLUMNS; j++)
scanf("%d", &a[i][j]);
for(i = 0; i < ROWS; i++)
for(j = 0; j < COLUMNS; j++)
if(is_saddle(&a[i][j], i, j))
{
saddles[k].num = a[i][j];
saddles[k].row = i;
saddles[k].column = j;
++k;
}
for(i = 0; i < k; i++)
printf("Saddle point: %d at position %d,%d\n", saddles[i].num,
saddles[i].row, saddles[i].column);
return 1;
}

Auteur : A.Deichman
Dernire modification : 18/12/2016

68

Algbre Linaire
terminer

Programmation Linaire
Mthode simplex
terminer

Criss-cross algorithme
terminer

Auteur : A.Deichman
Dernire modification : 18/12/2016

69

Ltude des fonctions


Plusieurs mthodes et algorithmes peuvent tre inclus dans cette catgorie. Nous allons nous concentrer sur ltude des
fonctions dordre et de dimension. Nous allons souvent nous intresser dcouvrir, de manire numrique, les
proprits des fonctions :

zros,
sommets,
points critiques
etc.

Par exemple, la recherche des zros dune fonction polynomiale dordre 3 de manire analytique est un processus
relativement fastidieux. Les fonctions dordre suprieur sont encore plus difficiles. Il est dons prfrable dutiliser la
mthode numrique pour trouver la solution.

Les zros dune fonction


Nous avons dj mentionn que les zros dune fonction peuvent tre difficiles trouver tout dpendamment de la
fonction tudie. Il est donc intressant de discuter des mthodes de rsolution de ce problme :

La mthode de dichotomie
La mthode de Newton (Newton-Raphson)
La mthode de la scante
La mthode de la fausse position (Regula falsi)
La mthode de Mller
La mthode de linterpolation quadratique inverse
La mthode de Brent
La mthode de gradient conjugu
La mthode de Durand-Kerner
etc.

La mthode de dichotomie
En sachant que nous avons une fonction continue() en 2 , la mthode de dichotomie consiste trouver le zro
dune fonction dans un intervalle [, ] en rduisant lintervalle de moiti chaque itration. Plus prcisment, il
sagit de :
1. Vrifier que () et () sont de signe oppos et ne contiennent pas la solution
a. Trouver un point tel que =

+
2

(point milieux)

b. Choisir lintervalle [, ] ou [, ] en sassurant quil vrifie la condition de ltape 1


c. Vrifier si | | ou | | selon lintervalle choisit
i. Si la condition est satisfaite, nimporte quelle des extrmits est une approximation
suffisamment bonne du zro de la fonction
ii. SI la condition nest pas satisfaite rpter tous les tapes prcdentes avec le nouveau
intervalle.
2. Si la condition nest pas satisfaite, il nest pas possible dutiliser cette mthode.
Voici lalgorithme tel quil est dcrit plus haut :
Auteur : A.Deichman
Dernire modification : 18/12/2016

70

= 0, = 0
Si () = 0 alors
Afficher La solution est : +()
Si non
Si () = 0 alors
Afficher La solution est : +()
Si non
Si

()
()

< 0 alors
Tant que ( < | |)
= ( + )/2
()
Si
> 0 alors
()

=
Si non
=
Fin si
Fin tant que
Afficher La solution est entre + a + et + b
Si non
Afficher lintervalle spcifi ne contient pas de zro ou contient
plus quun zro.
Fin si
Fin si
Fin si

Notons que cet algorithme a plusieurs variantes dont la plus triviale consiste dfinir lerreur comme la diffrence des
valeurs de la fonction : |() ()| ou |() ()|. De plus, il peut tre adapt relativement facilement
trois dimensions ou plus.
Analysons cette approche partir de lexemple propos par Newton lui-mme() = 3 2 5 = 0. Notons que la
fonction sous ltude est une fonction polynomiale continue et drivable sur tout son domaine.
terminer

La mthode de Newton ou de Newton-Raphson


Initialement dveloppe par Newton vers 1669, amliore par Raphson 10 ans plus tard et tudie par Mouraille,
Lagrange, Fourrier et Cauchy, cette mthode recherche la solution dune quation en utilisant les zros des tangentes
la courbe qui convergent vers le zro de la fonction.
Autrement dit, lalgorithme consiste :
1. commencer par un point 0 proche de la solution ;
2. trouver la fonction de la tangent en 0 :
o trouver (0 )
o trouver lordonne lorigine dune droite tangente dcrite par (), passant par (0 , (0 )) et ayant
une pente (0 )
o trouver le zro de la fonction(), soit (1 , (1 ))
3. rpter ltape prcdente en utilisant la nouvelle valeur de trouv, soit 1 ensuite 2 etc.
4. arrter les calculs selon le critre choisit.

Auteur : A.Deichman
Dernire modification : 18/12/2016

71

Afin daccomplir les objectif des deux premiers tapes dcrits plus haut, il suffit de se souvenir que pour une droite
tangente de lquation = + , nous avons
= (0 ) et (0 , (0 ))
Ainsi, nous pouvons trouver lordonne lorigine par substitution
(0 ) = (0 ) 0 +
= (0 ) (0 ) 0
Ceci nous permet de trouver le zro de la tangente
1 =

(0 ) (0 ) 0
(0 )
=
= 0

(0 )
(0 )

Nous pouvons gnraliser cette quation pour tout


+1 =

( )
( )
( )

Cette gnralisation nous donne aussi un trs bon candidat de fin de boucle avec ( ) < o est un nombre positif

aussi petit quon veut.


En somme, lalgorithme consiste approcher la solution en utilisant les tangentes comme des bonnes approximations
locales de la fonction continue. Toutefois, nous devons nous assurer que

la fonction soit drivable sur tout lintervalle se situant entre 0 et la solution ;


la drive nest pas nulle sur cet intervalle (pas de sommets) ;
la suite est convergente.

Analysons cette approche partir de lexemple propos plus haut() = 3 2 5 = 0. Notons que la fonction
sous ltude est une fonction polynomiale continue et drivable sur tout son domaine. De plus, la drive de la fonction
est() = 3 2 2.

Auteur : A.Deichman
Dernire modification : 18/12/2016

72

Figure 3: Fonction () = 3 2 5

Cette fonction, a les sommets () = 0 = 3 2 2. Ce qui nous donne


2
2
= 2 = 0.816
3
3
Tableau 2: Tableau des variations de() = 3 2 5

()

0
3.911

0
6.089

+
+

+
+

()

Auteur : A.Deichman
Dernire modification : 18/12/2016

73

partir du tableau, nous remarquons que le seul intervalle contenant un seul zro est celui en rouge : la fonction est
strictement croissante et passe dune valeur ngative vers une valeur positive. Nous pouvons utiliser lalgorithme de
dichotomie (voir page 70) ou une mthode dessai-erreur pour affiner lintervalle : (2) = 1 et (3) = 16.
Commenons par 0 = 2 (il est plus proche de la solution) :
Tableau 3: Itrations de Newton-Raphson

( )

( )

2
2.1
2.09457

1
0.061
2 104

10
11.23
11.16

( )
( )
0.1
0.00543
2 105

+
2.1
2.09457
2.09455

Figure 4: Fonction () = 3 2 5 intervalle [2; 2.12]

Auteur : A.Deichman
Dernire modification : 18/12/2016

74

Figure 5: Fonction () = 3 2 5 intervalle [2.01; 2.1]

Figure 6: Fonction () = 3 2 5 intervalle [2.094; 2.095]

Auteur : A.Deichman
Dernire modification : 18/12/2016

75

Notons que seulement aprs trois itrations notre solution atteint une prcision de plus de103. Si nous comparons
cette mthode avec celle de la dichotomie en comptant le nombre des itrations, nous allons remarquer une
convergence beaucoup plus rapide pour Newton-Raphson :
Tableau 4: Comparaison du nombre des boucles (dichotomie et Newton-Raphson)

Newton-Raphson

Dichotomie

10

20

30

Prcision

terminer

La mthode de Durand-Kerner
terminer

La mthode de AberthEhrlich
terminer

Auteur : A.Deichman
Dernire modification : 18/12/2016

76

Les approximations numriques des solutions des


quations diffrentielles
Plusieurs mthodes de rsolution existent. Pour les fins de notre cour, nous pouvons les sparer en deux catgories
principales : les mthodes pour les quations de premier ordre et les mthodes pour les quations de second ordre. Il
est possible de convertir les quations dordre en un systme dquations de premier ordre. Par contre,
lomniprsence des quations diffrentielles dordre deux a pouss les chercheurs vers les mthodes dapproximation
spcifiquement dveloppes pour ce type de problme.
Dans la catgorie des quations dordre 1, les mthodes les plus communment utilises sont :

Mthodes une tape


o Mthode dEuler (voir page 79)
o Mthode de point milieu et la mthode modifie de point milieu (Graggs method)
o Mthode Trapzodale
o La famille des mthodes de Runge-Kutta (voir page 90) incluant celles avec un pas adaptable (embedded
Runge-Kutta) (voir page 95)
o Mthode de Gragg-Bulirsch-Stoer
Mthodes plusieurs tapes
o La famille des mthodes dAdams (Adams-Bashforth, Adams-Moulton etc.)

Les mthodes une tape utilisent un algorithme (complexe ou simple) pour calculer la prochaine position sur la
fonction en se basant seulement sur la position du point prcdent. Tandis que les mthodes plusieurs tapes utilisent
deux et plus de points prcdents pour estimer la nouvelle position sur la fonction.
Considrant la quantit des options, la question la plus importante se poser est : Quelle mthode doit-on utiliser?
Gnralement, pour toute solution ncessitant un temps de rsolution contrl nous devons choisir les mthodes de
rsolution explicites telles quEuler, point milieu, point milieu modifi et Runge-Kutta (avec un pas fixe). Si le temps de
rsolution nest pas un critre important, toute mthode peut tre considre.
Toutefois, la communaut informatique semble de prfrer la mthode Runge-Kutta dordre 4 (RK4 voir page 90). Cette
mthode est relativement facile programmer. Elle convient plusieurs fonctions et produit des rsultats relativement
stables avec une erreur relativement petite.
Quand on rcent un besoin de rduire lerreur, il est gnralement attendu que les mthodes avec un pas adaptable de
la famille Runge-Kutta dordre 5 (RK5) et Runge-Kutta dordre 6 (RK6) rduisent lerreur mais avec une perte significative
de la vitesse de rsolution. Il est donc souvent conseill dutiliser les mthodes plusieurs tapes de famille Adams pour
rduire lerreur tout en gardant la vitesse de rsolution comparable celle de RK4.
Dans la catgorie des quations dordre 2, les mthodes plus ou moins populaires sont :

Forme = (, )
o Correction de diffrence arrire
o Mthode explicite de diffrence centre
o Mthode de Numerov (Cowell)
Forme = (, , )
o Mthode implicite de diffrence centre (Implicit Central Difference Method)

Auteur : A.Deichman
Dernire modification : 18/12/2016

77

Mthode Runge-Kutta pour les quations de second ordre

Notation
Dans ce document nous allons utiliser la notation populaire dans le domaine de physique.
Plus prcisment, la notation des drives en fonction du temps sera :

= la vitesse instantane selon y

2
= 2 = lacclration instantane selon

Auteur : A.Deichman
Dernire modification : 18/12/2016

78

Mthode dEuler
Un aperu rapide
Cette mthode est aussi souvent nomme comme La mthode de lintgration dEuler , le schma dEuler etc.
Cette mthode est base sur les notions et les principes de lapproximation utilisant les diffrentiels. Autrement dit, la
solution locale de la fonction est considre trs proche de lestimation obtenue en valuant la tangente de la fonction.
Cette mthode est caractrise comme explicite car le nouveau point est calcul (dcrit) explicitement par la relation.
De plus, la mthode est souvent dcrite comme une mthode un pas ou une mthode de dgre un, car la nouvelle
valeur est calcule en utilisant la somme du point prcdent et de laccroissement estime.

En peu dhistoire
La mthode dEuler a t publi en 1678 dans le recueille des dcouvertes
dEuler sur les quations diffrentielles qui sintitule Institutionum calculi
integralis.

Notions thoriques
Pour toute fonction(), la mthode propose dvaluer le nouveau point
partir des conditions initiales0 (0 , 0 , 0 ) et de lquation diffrentielle
dordre un11.
Analysons lapproche propose par cette mthode. Nous pouvons estimer le
nouveau point en utilisant lquation suivante :
(0 + ) = (0 ) + (0 ) +
(0 + ) (0 ) + (0 )

Figure 7: Leonhard Euler [29]

11

En gnral, cette mthode est applicable pour une fonction continue, drivable dordre 1. Autrement dit, il nest pas ncessaire
davoir une fonction en deux dimensions qui dpend de manire explicite du temps.

Auteur : A.Deichman
Dernire modification : 18/12/2016

79

()

= (0 ) +

=
Cette mthode est trs facile implanter et trs rapide calculer. Par contre, elle est trs sensible au niveau de la valeur
de choisie. Autrement dit, le doit tre suffisamment petit pour rduire lerreur. De plus, lerreur a la tendance de
se cumuler et la fonction diverge aprs un nombre suffisamment grand ditrations.
Il existe aussi une variante plus gnrale permettant le traitement des fonctions dordre 2. Il suffit tout simplement
dassumer que la drive seconde et/ou premire ne varient pas sur lintervalle (voir ci-dessous). Toutefois, la nature
de lalgorithme (sensibilit aux variations rapides, erreur relativement leve et le pas fixe) ne permet pas lapplication
dans des cas avec () . Nous allons donc nous concentrer sur ltude de ces situations et des erreurs qui y sont
associs partir des exemples simples tirs de physique.

Formes
On reconnait en gnral deux formes :

La mthode dEuler simple


La mthode dEuler invers

La mthode dEuler simple propose les tapes suivantes :


1. Identifier les donnes initiales

0 (0 , 0 , 0 )

2. valuer lacclration initiale

0 = (0 , 0 , 0 )

3. valuer la position finale

= 0 + 0

4. valuer la vitesse finale

= 0 +

5. valuer le temps final

= 0 +

Autrement dit, nous allons assumer ici que la vitesse est constante durant lintervalle.
La mthode dEuler invers suggre un ordre un peu diffrent :
Auteur : A.Deichman
Dernire modification : 18/12/2016

80

1. Identifier les donnes initiales

0 (0 , 0 , 0 )

2. valuer lacclration initiale

0 = (0 , 0 , 0 )

3. valuer la vitesse finale

= 0 +

4. valuer la position finale

= 0 +
= 0 +

5. valuer le temps final

Dans ce cas, nous allons assumer que lacclration est constante durant lintervalle.

Exemples dapplication
Pour tous nous cas dapplication, nous allons choisir des modles physiques relativement simples tudis dans les cours
antrieurs des programmes en sciences.

Cas 1
Commenons par un cas relativement simple : chute libre comme exemple de () = . Dans ce cas, nous avons
seulement la force gravitationnelle qui affecte le mouvement.
=
=
Autrement dit,
= () = !
Assumons que 0 = 0, 0 = 0, 0 = 0 et que = 0.1 ( = 9.81 2).
Itration 1
Appliquons les tapes de la mthode dEuler invers pour la premire fois :
1. Identifier les donnes initiales

0 (0 , 0 , 0 ) = (0, 0, 0)

2. valuer lacclration initiale

0 = (0 , 0 , 0 ) = = 9.81

3. valuer la vitesse finale

1 = 0 + 0 = 0 + = = 0.981

4. valuer la position finale

1 = 0 + 1 = 0 + 2 = 2 = 0.0981

5. valuer le temps final

1 = 0 + = = 0.1

Itration 2
1. Identifier les donnes initiales

1 (1 , 1 , 1 ) = (0.1, 0.0981, 0.981)

2. valuer lacclration initiale

1 = (1 , 1 , 1 ) = = 9.81

3. valuer la vitesse finale

2 = 1 + 2 = 0.981 + = 1.962

4. valuer la position finale

2 = 1 + 2 = 0.0981 + 1.962 = 0.2943

5. valuer le temps final

Auteur : A.Deichman
Dernire modification : 18/12/2016

2 = 1 + = 0.1 + 0.1 = 0.2

81

Itration 3
1. Identifier les donnes initiales

2 (2 , 2 , 2 ) = (0.2, 0.2943, 1.962)

2. valuer lacclration initiale

2 = (2 , 2 , 2 ) = = 9.81

3. valuer la vitesse finale

3 = 2 + 3 = 1.962 + = 2.943

4. valuer la position finale

3 = 2 + 3 = 0.2943 + 2.943 = 0.5886


3 = 2 + = 0.2 + 0.1 = 0.3

5. valuer le temps final

Nous pouvons continuer indfiniment, mais la logique devrait tre claire partir de ces tapes.
Le graphique de la position ainsi obtenu semble dtre identique celui de la fonction obtenue par la rsolution
analytique. La ligne courbe orange dcrit la solution analytique et la courbe bleu dcrit la solution obtenue par la
mthode dEuler.
12000

10000

8000

6000

4000

2000

0
0

10

15

20

25

30

35

40

45

50

Figure 8: Position en fonction de temps

En observant le mouvement de premires 5 secondes, nous obtenons un graphique en peu plus facile tudier.

Auteur : A.Deichman
Dernire modification : 18/12/2016

82

135

115

95

75

55

35

15

-5 0

0.5

1.5

2.5

3.5

4.5

Figure 9: Position en fonction de temps (0 5 sec)

Nous remarquons maintenant que lcart entre les deux fonctions est quand mme prsent ! Mais quel est t-il ? Quelle
est lerreur dans ce cas ?
Tableau 5: Comparaison des postions (Euler vs. Analytique)

t
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6

Euler

Analytique

cart

[m]

[m]

[m]

0
0,0981
0,2943
0,5886
0,981
1,4715
2,0601
2,7468
3,5316
4,4145
5,3955
6,4746
7,6518
8,9271
10,3005
11,772
13,3416

0
0,04905
0,1962
0,44145
0,7848
1,22625
1,7658
2,40345
3,1392
3,97305
4,905
5,93505
7,0632
8,28945
9,6138
11,03625
12,5568

0
-0,04905
-0,0981
-0,14715
-0,1962
-0,24525
-0,2943
-0,34335
-0,3924
-0,44145
-0,4905
-0,53955
-0,5886
-0,63765
-0,6867
-0,73575
-0,7848

cart
relatif12

[%]
| |

-100
-50
-33,33
-25
-20
-16,67
-14,29
-12,5
-11,11
-10
-9,099
-8,33
-7,69
-7,14
-6,67
-6,25

12

Notons que nous avons omis la valeur absolue au numrateur (mais appliqu au dnominateur) dans la formule de calcul derreur.
Ainsi, le signe vas nous permettre de dduire la position relative de la fonction estime par rapport la solution analytique : nous
allons plus facilement voir si la mthode numrique surestime ou sous-estime les rsultats pour un intervalle donne.

Auteur : A.Deichman
Dernire modification : 18/12/2016

83

1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
5

15,0093
16,7751
18,639
20,601
22,6611
24,8193
27,0756
29,43
31,8825
34,4331
37,0818
39,8286
42,6735
45,6165
48,6576
51,7968
55,0341
58,3695
61,803
65,3346
68,9643
72,6921
76,518
80,442
84,4641
88,5843
92,8026
97,119
101,5335
106,0461
110,6568
115,3656
120,1725
125,0775

14,17545
15,8922
17,70705
19,62
21,63105
23,7402
25,94745
28,2528
30,65625
33,1578
35,75745
38,4552
41,25105
44,145
47,13705
50,2272
53,41545
56,7018
60,08625
63,5688
67,14945
70,8282
74,60505
78,48
82,45305
86,5242
90,69345
94,9608
99,32625
103,7898
108,35145
113,0112
117,76905
122,625

-0,83385
-0,8829
-0,93195
-0,981
-1,03005
-1,0791
-1,12815
-1,1772
-1,22625
-1,2753
-1,32435
-1,3734
-1,42245
-1,4715
-1,52055
-1,5696
-1,61865
-1,6677
-1,71675
-1,7658
-1,81485
-1,8639
-1,91295
-1,962
-2,01105
-2,0601
-2,10915
-2,1582
-2,20725
-2,2563
-2,30535
-2,3544
-2,40345
-2,4525

-5,88
-5,56
-5,26
-5
-4,76
-4,55
-4,35
-4,17
-4
-3,85
-3,70
-3,57
-3,45
-3,33
-3,23
-3,125
-3,03
-2,94
-2,86
-2,78
-2,70
-2,63
-2,56
-2,5
-2,44
-2,38
-2,33
-2,27
-2,22
-2,17
-2,13
-2,08
-2,04
-2

Si nous regardons de plus prs, nous pouvons voir que lcart entre la solution analytique et la solution estime (
) augmente continuellement. Mais cette croissance est infrieure au taux de croissante de la valeur elle-mme. Ceci
rsulte dans une erreur relative qui diminue avec le temps : passant de 100% 2% derreur mais toujours en
surestimant les valeurs de la solution. Autrement dit, nous ne constatons pas le cumul derreur nonc antrieurement.
partir de cet exemple, nous pouvons donc conclure que la mthode dEuler est un candidat trs fort (rapide et
relativement prcis) pour la solution numrique des cas avec () = .

Cas 2
Modifions notre premier exemple pour une chute verticale avec la rsistance de lair afin dobtenir un cas relativement
simple de () . Pour les fins de lexercice, assumons que :

la rsistance de lair est = ,


la force gravitationnelle
= est constante pour une masse donne,
0 = 0, 0 = 0, 0 = 0,
= 0.1 et

Auteur : A.Deichman
Dernire modification : 18/12/2016

84

= 9.81 2.

Ainsi, nous pouvons appliquer nos connaissances en physique pour tablir que la force rsultante est
= + =
=
=

Autrement dit, lacclration de lobjet est dfinie comme


= (, , ) =

Afin de faire les calculs, nous devons prciser quelques constantes :

= 0.5
= 1

Itration 1
Appliquons les tapes de la mthode dEuler invers pour la premire fois :
1. Identifier les donnes initiales

0 (0 , 0 , 0 ) = (0, 0, 0)

2. valuer lacclration initiale

0 = (0 , 0 , 0 ) = = 9.81

3. valuer la vitesse finale

1 = 0 + 0 = 0 + = = 0.981

4. valuer la position finale

1 = 0 + 1 = 0 + 2 = 2 = 0.0981

5. valuer le temps final

1 = 0 + = = 0.1

Itration 2
1. Identifier les donnes initiales

1 (1 , 1 , 1 ) = (0.1, 0.0981, 0.981)

2. valuer lacclration initiale


3. valuer la vitesse finale

0.5
= 9.31
1
2 = 1 + 2 = 0.981 + 9.31 = 1.912

4. valuer la position finale

2 = 1 + 2 = 0.0981 + 1.912 = 0.2893

5. valuer le temps final

1 = (1 , 1 , 1 ) =

2 = 1 + = 0.1 + 0.1 = 0.2

terminer

Cas 3
Prenons cette fois si un cas compltement diffrent dun ressort idal oscillant verticalement en prsence de la force de
gravitation dans un milieu sans friction ou rsistance :

la force gravitationnelle
= est constante pour une masse donne,

Auteur : A.Deichman
Dernire modification : 18/12/2016

85

0 = 0, 0 = 1, 0 = 0,
la constante de rappel du ressort = 300 ,
la masse = 2
= 0.1 et
= 9.81 2.

=
+

La force gravitationnelle disparait dans lquation si nous choisissions notre rfrentiel zro bien. Voir cours de
modlisation pour plus dinfo.
=
= (, , ) =

Itration 1
Appliquons les tapes de la mthode dEuler invers pour la premire fois :
1. Identifier les donnes initiales
2. valuer lacclration initiale
3. valuer la vitesse finale
4. valuer la position finale

5. valuer le temps final

0 (0 , 0 , 0 ) = (0, 0, 0)
0 = (0 , 0 , 0 ) =

= 150

) = 150 0.1 = 15

1 = 0 + 1 = 1 + ( ) 2 = 1 15 0.1

= 0.5

1 = 0 + 0 = 0 + (

1 = 0 + = = 0.1

Notons immdiatement que = 0.1 choisi est beaucoup trop grand pour traitement de cette situation : la position
passe de 0 = 1 1 = 0.5 donc de150%. Il existe une possibilit de voir la solution diverger un cas peu
intressant pour nous ce moment. Nous allons donc recommencer notre dmarche avec = 0.01 soit 10 fois plus
petit.
Itration 1 prise deux
1. Identifier les donnes initiales
2. valuer lacclration initiale
3. valuer la vitesse finale
4. valuer la position finale

5. valuer le temps final


Auteur : A.Deichman
Dernire modification : 18/12/2016

0 (0 , 0 , 0 ) = (0, 0, 0)
0 = (0 , 0 , 0 ) =

= 150

) = 150 0.01 = 1.5

1 = 0 + 1 = 1 + ( ) 2 = 1 1.5 0.01

= 0.985

1 = 0 + 0 = 0 + (

1 = 0 + = = 0.01

86

Notons que cette fois, avec = 0.01, la position varie de

|10.985|
1

100 = 1.5% aprs la premire itration ce qui

nous semble, tout fait subjectivement, plus raisonnable. Nous allons donc continuer avec cette valeur de.
Itration 2
1 (1 , 1 , 1 ) = (0.01, 0.985, 1.5)

1. Identifier les donnes initiales

3. valuer la vitesse finale

300
=
0.985 = 147,75

2
2 = 1 + 2 = 1.5 + 147,75 = 2,9775

4. valuer la position finale

2 = 1 + 2 = 0.985 2.9775 = 0,955225

2. valuer lacclration initiale

1 = (1 , 1 , 1 ) =

2 = 1 + = 0.01 + 0.01 = 0.02

5. valuer le temps final

Itration 3
2 (2 , 2 , 2 ) = (0.02,0,955225, 2,9775)

1. Identifier les donnes initiales

300
=
0,955225

2
= 143,28375

2 = (2 , 2 , 2 ) =

2. valuer lacclration initiale


3. valuer la vitesse finale

3 = 2 + 3 = 2,9775 143,28375
= 4,4103375

4. valuer la position finale

3 = 2 + 3 = 0,955225 4,4103375
= 0,911121625
3 = 2 + = 0.02 + 0.01 = 0.03

5. valuer le temps final

Ainsi de suite, rsultant dans le graphique suivant :

terminer

Courte discussion sur lerreur


Nous avons dj abord, dune manire pratique, le taux derreur entre la solution analytique et la solution obtenue
avec la mthode dEuler pour les exemples vus ci-dessus. Par contre, notre analyse serait incomplte sans lapprciation
globale de lerreur engendre lors de lutilisation de cette mthode.
Ainsi lerreur locale lerreur qui se produit aprs une seule tape de calcul peut tre exprime comme
2
De plus, lerreur cumule aprs tapes de calcul peut tre approxim comme

Auteur : A.Deichman
Dernire modification : 18/12/2016

87

De plus, il est essentiel de remarquer que pour des h suffisamment larges appliques dans les quations diffrentielles
raides, la mthode peut devenir instable et exploser. Par exemple, dans le cas de = 2.3 avec (0) = 1 et =

terminer

Lalgorithme
Pour un (, ) donne, lalgorithme dimplmentation est gnralement semblable :
Dfinir0 ,0 , et
Tant que < faire
= (0 , 0 )
1 = 0 +
1 = 0 +
Afficher ou Sauvegarder1 et 1
0 = 1
0 = 1
Fin tant que

terminer

Mthode de point milieu


En peu dhistoire
terminer

Notions thoriques
La mthode du point milieu reprend essentiellement la mthode dEuler (voir la page Mthode dEuler79) qui utilise la
drive calcule au milieu entre le point connu et celui recherch. Cette mthode produit essentiellement le mme
rsultat que la mthode dEuler pour un pas suffisamment petit mais a moins tendance de surestimer ou sous-estimer
les fonctions pour un pas lgrement plus large. La mthode du point milieu explicite peut tre dfinie comme :
+1 = +
O

est dfinit comme = ( + 2 , + 2 (, ))


Autrement dit, nous avons

+1 = + ( + , + (, ))
2
2
Auteur : A.Deichman
Dernire modification : 18/12/2016

88

Dans le cas dune fonction qui dpend seulement de temps nous pouvons calculer le nouveau point dune fonction

(0 + ) en utilisant les valeurs du point prcdent(0 ) et la drive calcul dans le point entre les deux (0 + )
2

(0 + ) = (0 ) + (0 + )
2
Graphiquement, il sagit dappliquer les sommes de Riemann sur la fonction drive :

Nous pouvons aussi voir la situation autrement, en se basant sur la fonction elle-mme :

terminer

Mthode Trapzodale
En peu dhistoire
terminer

Notions thoriques
terminer

Runge-Kutta
Mthode de rsolution numrique des quations diffrentielles de Runge-Kutta (RK)

accepte les quations de degr 1,


ncessite des conditions initiales,
est considr relativement stable (surtout si on utilise un pas adaptable),
relativement rapide et
surtout avec une dure dexcution fixe (si le pas nest pas adaptable).

Malgr le fait que la majorit des exemples prsents ici et sur Internet travaillent avec les quations diffrentielles
dpendantes du temps, ceci nest pas une condition obligatoire. Toutes les variables doivent tre dpendantes dune
variable commune quelconque (de manire explicite ou implicite) et les quations diffrentielles doivent tre
construites en fonction de cette variable.

Ex. : si tout dpend de on va parler de et non de . Ainsi = 2 est une quation valide pour la mthode de
Runge-Kutta.

Auteur : A.Deichman
Dernire modification : 18/12/2016

89

En peu dhistoire
La mthode de lapproximation des solutions en utilisant des itrations multiples a t initialement propose par Runge
dans sa publication de 1895 [21]. Essentiellement Runge a propos une approche pour approximer la variation dune
fonction dcrite par une quation diffrentielle partir de point donn. En 1900, Karl Heun [22] a retravaill la
proposition originale jusqu lordre 4 et a introduit entre autres la mthode dordre 3. Tout de suite aprs, en 1901,
Kutta [23] a pouss la mthode plus loin lordre 5, a classifi tous les autres ordres et a introduit la fameuse mthode
Runge-Kutta en plusieurs autres variantes. Par contre, tous ces travaux ont classifi les mthodes de rsolution pour une
seule quation diffrentielle. Les travaux ont continu jusqu 1978 avec la classification des algorithmes dordre
suprieur et les quations diffrentielles multiples plusieurs variables.

Formes de Runge-Kutta
Lalgorithme est au moins dcrit par son ordre et trs souvent par lapproche choisie. Ainsi, RK4 signifie Runge-Kutta
dordre 4 mais de version inconnue; RKF45 signifie Runge-Kutta dordre 4-5 de Fehlberg (voir page 95).

Ordre
o 1 - mthode dEuler (voir la section ci-dessus)
o 2 - mthode de Heun
o 4 mthode originale, populaire et plusieurs autres adaptations existent
o etc.
Quelques versions de Runge-Kutta 4 pour un systme dquations plusieurs variables:
o Originale mthode propose par Runge-Kutta [23] souvent appele mthode de 3/8 .

1 = ( , , , )
1 = ( , , , )
1
1
1

2 = ( + , + 1 , + 1 , )
3
3
3
1
1
1
2 = ( + , + 1 , + 1 , )
3
3
3
2
1
1

3 = ( + , 2 , 2 , )
3
3
3
2
1
1
3 = ( + , 2 , 2 , )
3
3
3

4 = ( + , + 1 2 + 3 , + 1 2 + 3 , )
4 = ( + , + 1 2 + 3 , + 1 2 + 3 , )
1

+1 = + (1 + 32 + 33 + 4 )
8
1
+1 = + (1 + 32 + 33 + 4 )
8

Mthode Populaire qui marie bien la simplicit et la robustesse souvent appel Classique .

Auteur : A.Deichman
Dernire modification : 18/12/2016

90

1 = ( , , , )
1 = ( , , , )
1
1
1

2 = ( + , + 1 , + 1 , )
2
2
2
1
1
1
2 = ( + , + 1 , + 1 , )
2
2
2
1
1
1

3 = ( + , + 2 , + 2 , )
2
2
2
1
1
1
3 = ( + , + 2 , + 2 , )
2
2
2

4 = ( + , + 3 , + 3 , )

4 = ( + , + 3 , + 3 , )
1

+1 = + (1 + 22 + 23 + 4 )
6
1
+1 = + (1 + 22 + 23 + 4 )
6

Les autres mthodes telles que RKF45 (voir page 95) ou Dormand-Prince (RKDP) (voir page 98).

Exemple dapplication
Ain de mieux comprendre la mthode, il est intressant dtudier quelques exemples simples. Comme Runge et Kutta,
nous allons commencer par une seule quation diffrentielle dordre un. Ensuite, nous allons progresser dans le temps
et travailler avec une quation dordre deux.

RK4 populaire appliqu une quation de premier ordre


+ 2 = 1.3 o est une fonction de temps et (0) = 5
Isolons :
= 1.3 2
Nous avons donc une quation dordre 1 = (, ) = 1.3 2
Si nous voulons trouver (1) en utilisant un certain pas = 0.25, nous allons faire 4 itrations de calcul bas sur la
mthode Runge-Kutta.
Itration 1
1 = (0 , 0 ) = 1.3 0 2 (0) = 1.3 0 2 5 = 8.7
Auteur : A.Deichman
Dernire modification : 18/12/2016

91

1
0.25
1
1
1
1
(0+ )
(0+
)
2 2 ((0) + 1 ) = 1.3
2
2 = (0 + , 0 + 1 ) = 1.3
2 (5 + 0.25 (8.7))
2
2
2
2
= 6.7775
1
1
1
1
(0+ )
2 2 ((0) + 2 )
3 = (0 + , 0 + 2 ) = 1.3
2
2
2
0.25
1
(0+
)
2
= 1.3
2 (5 + 0.25 (6.7775)) = 7.15838
2

4 = (0 + , 0 + 3 ) = 1.3 (0+) 2 ((0) + 3 ) = 1.3 (0+0.25) 2 (5 + 0.25 (7.15838))


= 5.40837
1
1

1 = 0 + (1 + 22 + 23 + 4 ) = 5 + (8.7 + 2 (6.7775) + 2 (7.15838) + (5.40837)) 0.25


6
6
= 3.25083
Itration 2
Ici nous avons 1 = 0 = 0.25 et 0 = 1 = 3.25083. Autrement dit, notre point de dpart est maintenant le point
calcul durant litration prcdente.
1 = (0 , 0 ) = 1.3 0 2 0 = 1.3 0.25 2 3.25083 = 5.48922
1
1
1
1
( + )
2 = (0 + , 0 + 1 ) = 1.3 0 2 2 (0 + 1 )
2
2
2
0.25
1
(0.25+
)
2
= 1.3
2 (3.25083 + 0.25 (5.48922)) = 4.23588
2
1
1
1
1
( + )
3 = (0 + , 0 + 2 ) = 1.3 0 2 2 (0 + 2 )
2
2
2
0.25
1
(0.25+
)
2
= 1.3
2 (3.25083 + 0.25 (4.23588)) = 4.54921
2

4 = (0 + , 0 + 3 ) = 1.3 (0 +) 2 (0 + 2 )
= 1.3 (0.25+0.25) 2 (3.25083 + 0.25 (4.54921)) = 3.43857
1

2 = 1 + (1 + 22 + 23 + 4 )
6
1
= 3.25083 + (5.48922 + 2 (4.23588) + 2 (4.54921) + (3.43857)) 0.25 = 2.14675
6
Itration 3

terminer
Itration 4
terminer

Auteur : A.Deichman
Dernire modification : 18/12/2016

92

RK4 populaire appliqu une quation de second ordre


+ 2 + = ou varie en fonction de temps et (0) = 1, (0) = 2
Nous allons dabord isoler
= 2
et convertir cette quation dordre deux vers un systme dquations dordre 1
=
{

= 2
Notons que nous avons maintenant deux quations diffrentielles interdpendantes dordre 1 :
1. = (, , ) =
2. = (, , ) = 2
avec (0) = 0 = 1, (0) = 0 = 2
Si nous voulons trouver (1) en utilisant un certain pas = 0.25, nous allons faire 4 itrations de calcul bas sur la
mthode Runge-Kutta. Dans chaque itration, nous allons calculer et correspondants.

Itration 1
A. Calcul des 1 pour chaque quation diffrentielle
Pour la premire quation, la dmarche suivre est plus ou moins mcanique au dbut :

1 = (0 , 0 , 0 ) = 0 = 2
Vous avez probablement remarqu que, malgr le fait que nous avons utilis la notation complte, ne dpend
pas de ou de explicitement (comme dailleurs le 1 ). Par contre, dpend de z. Ainsi, nous ne pourrons pas

calculer le 2 tout de suite. Nous allons avoir besoin de 1 dans nos calculs de 2 .
Pour la seconde quation, le dpart nous demandera en peu plus dattention :
1 = (0 , 0 , 0 ) = 0 20 0 = 0 2 2 1 = 4
B. Calcul des 2 pour chaque quation diffrentielle

Maintenant, nous pouvons calculer 2

1
1
1
1
1

2 = ( + , + 1 , + 1 ) = 0 + 1 = 2 + 0.25 (4) = 1.5


2
2
2
2
2
Nous allons continuer ainsi de suite
1
1
1
1
1
1
( + )
2 = (0 + , 0 + 1 , 0 + 1 ) = 0 2 2 (0 + 1 ) (0 + 1 )
2
2
2
2
2
0.25
1
1
(0+
)
2
=
2 (2 + 0.25 (4)) (1 + 0.25 2) = 3.36750
2
2

C. Calcul des 3 pour chaque quation diffrentielle

Auteur : A.Deichman
Dernire modification : 18/12/2016

93

1
1
1
1
1

3 = ( + , + 2 , + 2 , ) = 0 + 2 = 2 + 0.25 (3.36750) = 1.57906


2
2
2
2
2
1
1
1
1
1
1
( + )
3 = (0 + , 0 + 2 , 0 + 2 ) = 0 2 2 (0 + 2 ) (0 + 2 )
2
2
2
2
2
0.25
1
1
(0+
)
2
=
2 (2 + 0.25 (3.36750)) (1 + 0.25 1.5) = 3.46313
2
2

D. Calcul des 4 pour chaque quation diffrentielle

4 = ( + , + 3 , + 3 , )

4 = (0 + , 0 + 3 , 0 + 3 )
E. Calcul des solutions pour chaque quation diffrentielle
1

1 = 0 + (1 + 22 + 23 + 4 )
6
1
1 = 0 + (1 + 22 + 23 + 4 )
6
Itration 2
terminer
Ainsi de suite pour les autres itrations

Tableau/reprsentation de Butcher pour les mthodes RK


Il est commun de noter les coefficients de la mthode en utilisant le tableau de Butcher qui a ncessairement la forme
dune matrice triangulaire inferieure pour toutes les mthodes explicites.
En gnral, on peut voir que la mthode RK calcule le point en utilisant

+1 = +
=1

o
1 = ( , )
2 = ( + 2 , + (21 1 ))
3 = ( + 3 , + (31 1 + 32 2 ))

= ( + , + (1 1 + 2 2 + + ,1 1 ))
On peut donc reprsenter les coefficients dans une forme matricielle ou tout simplement dans un tableau :
0
2

21

31

Auteur : A.Deichman
Dernire modification : 18/12/2016

32
94

,1

Pour les algorithmes avec un pas adaptable, nous allons considrer la matrice suivante :
0
2

21

31

32

,1

1
2

o les coefficients seront utiliss pour estimer le nouveau pas.

RK avec un pas adaptable


Cette famille des mthodes adaptables utilise une approximation derreur base sur le calcul de la solution courante
pour dterminer la largeur du pas ( utiliser lors de litration suivante) telle que la solution est lintrieur des marges
derreur spcifie.

Mthode de Fehlberg (RKF45)


Cette mthode a t dveloppe par Erwin Fehlberg [24] en 1969. La mthode utilise RK4 pour calculer la solution et la
comparaison des solutions RK4 et RK5 pour estimer lerreur ainsi permettant dtablir la largeur du pas
automatiquement.
Tableau 6: Representation Butcher de RKF45

0
1
4
3
8

1
4
3
32

12
13

1932
2197

1
1
2

439
216
8

27
16
135
25
216

Auteur : A.Deichman
Dernire modification : 18/12/2016

9
32

7200
2197
8
2
0
0

7296
2197
3680
513
3544

2565
6656
12825
1408
2565

845
4104
1859
4104
28561
56430
2197
4104

11
40
9

50
1

2
55
0

95

1 = ( , , , )
1 = ( , , , )
1
1
1

2 = ( + , + 1 , + 1 , )
4
4
4
1
1
1
2 = ( + , + 1 , + 1 , )
4
4
4
3
3
9
3
9

3 = ( + , + 1 + 2 , + 1 + 2 , )
8
32
32
32
32
3
3
9
3
9

3 = ( + , + 1 + 2 , + 1 + 2 , )
8
32
32
32
32
4 = ( +

12
1932 7200 7296
1932 7200 7296
, +

+
, +

+
, )
13
2197 1 2197 2 2197 3 2197 1 2197 2 2197 3

4 = ( +

12
1932 7200 7296
1932 7200 7296
, +
1
2 +
3 , +

+
, )
13
2197
2197
2197
2197 1 2197 2 2197 3

5 = ( + , +

439
3680
845
439
3680
845

1 82 +
3
4 , +
1 82 + +
3
, )
216
513
4104
216
513
4104 4

5 = ( + , +

439
3680
845
439
3680
845

1 82 +
3
4 , +
1 82 + +
3
, )
216
513
4104
216
513
4104 4

1
8
3544 1859 11
8
3544

6 = ( + , 1 + 22
3 +
4 5 , 1 + 22

2
27
2565
4104
40
27
2565 3
1859 11
+
, )
4104 4 40 5
1
8
3544 1859 11
8
3544

6 = ( + , 1 + 22
3 +
4 5 , 1 + 22

2
27
2565
4104
40
27
2565 3
1859 11
+
, )
4104 4 40 5
Lapproximation de solution est donne par13
25 1408 2197 1
+1 = + (
+
+
)
216 1 2565 3 4104 4 5 5
25 1408 2197 1
+1 = + (
+
+
)
216 1 2565 3 4104 4 5 5

Afin de calculer le nouveau pas, nous devons dabord trouver la solution dordre 5

13

Notons que certains manuels rcents proposent dutiliser la solution dordre 5 comme la valeur accepte.

Auteur : A.Deichman
Dernire modification : 18/12/2016

96

16
6656 28561
9
2

+1
= + (
1 +
3 +
4 5 + 6 )
135
12825
56430
50
55
16
6656 28561
9
2

+1
= + (
1 +
3 +
4 5 + 6 )
135
12825
56430
50
55

Nous pouvons maintenant calculer la valeur du pas pour chaque quation diffrentielle.

+1 = = (

1
4

2 |+1
+1 |

+1
= = (

1
4

2 |+1
+1 |

cette tape, il est essentiel de faire quelques remarques. Considrons la valeur de tolrance. Cette valeur doit tre
suffisamment petite (selon la fonction, aussi petite que = 2 105 ) pour produire les rsultats quivalents un RK4
avec un pas relativement large (Ex. : = 0.1). Nous allons en discuter plus en dtails dans la section cette tape, il
est essentiel de faire quelques remarques. Considrons la valeur de tolrance. Cette valeur doit tre suffisamment
petite (selon la fonction, aussi petite que = 2 105 ) pour produire les rsultats quivalents un RK4 avec un pas
relativement large (Ex. : = 0.1). Nous allons en discuter plus en dtails dans la section Error! Not a valid bookmark
self-reference. .
Notons aussi que pour tout , les conditions suivantes doivent toujours tre vraies :

Si > 4.0, =
Si < 0.1, =
sMax et sMin doivent tre dfinies selon le contexte mais nous pouvons choisir les mmes valeurs que dans
RKF45.

Finalement, le nouveau pas est dfinit comme

+1 = {+1 , +1
,}

Une courte rflexion sur les erreurs .


Notons aussi que pour tout , les conditions suivantes doivent toujours tre vraies :

Si > 4.0, = 4.0


Si < 0.1, = 0.1

Finalement, le nouveau pas est dfinit comme

+1 = {+1 , +1
,}

Auteur : A.Deichman
Dernire modification : 18/12/2016

97

Mthode de Dormand-Prince (RKDP)


Cette mthode a t dveloppe par Dormand et Prince en 1980. Cette fonction comporte sept tapes de calcul mais
seulement six sont utilises par tape. Elle a t spcifiquement dveloppe pour minimiser lerreur de quatrime
ordre.
Tableau 7: Representation Butcher de RKDP

0
1
5
3
10

1
5
3
40

4
5

44
45

8
9

19372
6561
9017
3168
35
384
35
384
5179
57600

1
1

9
40
56
15

32
9

25360
2187
355

33

64448
6561
46732
5247
500
1113
500
1113
7571
16695

0
0
0

212
729
49
176
125
192
125
192
393
640

5103
18656
2187

6784
2187

6784
92097

339200

11
84
11
84
187
2100

0
1
40

1 = ( , , , )
1 = ( , , , )
1
1
1

2 = ( + , + 1 , + 1 , )
5
5
5
1
1
1
2 = ( + , + 1 , + 1 , )
5
5
5
3 = ( +

3
3
9
3
9

, + 1 + 2 , + 1 + 2 , )
10
40
40
40
40

3 = ( +

3
3
9
3
9

, + 1 + 2 , + 1 + 2 , )
10
40
40
40
40

4
44 56 32
44
56
32

4 = ( + , + 1 2 + 3 , + 1 2 + 3 , )
5
45
15
9
45
15
9
4
44 56 32
44
56
32
4 = ( + , + 1 2 + 3 , + 1 2 + 3 , )
5
45
15
9
45
15
9

Auteur : A.Deichman
Dernire modification : 18/12/2016

98

8
19372 25360 64448 212
19372 25360

5 = ( + , +
1
2 +
3
4 , +
1
2
9
6561
2187
6561
729
6561
2187
64448 212
+
3
, )
6561
729 4
8
19372 25360 64448 212
19372 25360 64448
5 = ( + , +
1
2 +
3
4 , +
1
2 +
3
9
6561
2187
6561
729
6561
2187
6561
212

, )
729 4

9017 355 46732


49
5103
9017 355

1
2 +
3 +
4
5 , +

2
3168
33
5247
176
18656
3168 1
33
46732
49
5103
+
3 +
4
, )
5247
176
18656 5

6 = ( + , +

9017 355 46732


49
5103
9017 355

1
2 +
3 +
4
5 , +

2
3168
33
5247
176
18656
3168 1
33
46732
49
5103
+
3 +
4
, )
5247
176
18656 5

6 = ( + , +

35
500
125 2187 11
35
500
125

1 +
3 +
4
5 + 6 , +
1 +
3 +

384
1113
192
6784
84
384
1113
192 4
2187 11

+ , )
6784 5 84 6

7 = ( + , +

35
500
125 2187 11
35
500
125

1 +
3 +
4
5 + 6 , +
1 +
3 +

384
1113
192
6784
84
384
1113
192 4
2187 11

+ , )
6784 5 84 6

7 = ( + , +

Lapproximation de solution est donne par


5179
7571 393
92097
187
1
+1 = + (
1 +
3 +
4
5 +
6 + 7 )
57600
16695
640
339200
2100
40
+1 = + (

5179
7571 393
92097
187
1
1 +
3 +
4
5 +
6 + 7 )
57600
16695
640
339200
2100
40

Afin de calculer le nouveau pas, nous devons dabord trouver la solution dordre 5
35
500 125 2187 11

+1
= + (
1 +
+

+ )
384
1113 3 192 4 6784 5 84 6
35 500 125 2187 11

+1
= + (
+
+

+ )
384 1 1113 3 192 4 6784 5 84 6

Nous pouvons maintenant calculer la valeur du pas pour chaque quation diffrentielle.

+1

Auteur : A.Deichman
Dernire modification : 18/12/2016

= (

1
5

2 |+1
+1 |

99


+1

= (

1
5

2 |+1
+1 |

cette tape, il est essentiel de faire quelques remarques. Considrons la valeur de tolrance. Cette valeur doit tre
suffisamment petite (selon la fonction, aussi petite que = 2 105 ) pour produire les rsultats quivalents un RK4
avec un pas relativement large (Ex. : = 0.1). Nous allons en discuter plus en dtails dans la section Error! Not a valid
bookmark self-reference. .
Notons aussi que pour tout , les conditions suivantes doivent toujours tre vraies :

Si > 4.0, =
Si < 0.1, =
sMax et sMin doivent tre dfinies selon le contexte mais nous pouvons choisir les mmes valeurs que dans
RKF45.

Finalement, le nouveau pas est dfinit comme

+1 = {+1 , +1
,}

Une courte rflexion sur les erreurs


Commenons par tudier le comportement de la mthode la plus simple : mthode dEuler ou RK1. Pour une fonction
sinusodale (, ) = () nous avons la courbe bleu comme fonction originale, la courbe orange avec = 1 et la
courbe verte avec = 0.25.

Figure 10: RK1 pour un sin(x) [25]

Premirement, remarquons que pour tous le pas tests lalgorithme rcupre et ventuellement se rapproche
rattrape la fonction relle. Ainsi, on ne peut pas quantifier lerreur aprs un certain nombre dtapes ni lerreur pour
une tape en gnral : cela dpend de la fonction. On ne peut parler que dune erreur maximale que nous allons tudier
plus bas. Comme on peut voir sur le segment de la mme fonction (voir Figure 11), la distance entre la courbe relle et
Auteur : A.Deichman
Dernire modification : 18/12/2016

100

lapproximation peuvent varier grandement. Lerreur est donc une mesure de variation maximale de lapproximation par
rapport la solution parfaite (fonction relle).

Figure 11: RK1 pour sin(x) - segment [25]

Si nous revenons rapidement sur les mthodes disponibles, nous pouvons remarquer que leur ordre dfinit le nombre
dtapes de calcul. De plus, on peut thoriquement dmontrer que :
Exemple
h
erreur
(environs)
3
0.001
Euler
1
1 1
1.3
1.3 10
2
6
0.002
Heun
2
0.45
2 (2 )
1.8 10
0.004
Toutes les variantes RK4
4
0.023
4 (4 )4
5.8 1012
- En sachant que lexemple est pour = avec (0) = 1, est le pas entre les calculs et est une constante
spcifique variant selon la mthode et de la fonction sous ltude.
Mthode

Ordre

Erreur14

En ce qui concerne lexemple, il faut prendre en note que chaque mthode dordre suprieur exige plus dtapes des
calculs. Pour bien comparer les diffrentes mthodes nous devons prendre en compte leur dure dexcution et essayer
de la garder constante. Par exemple, pour comparer RK1 et RK2 nous devons prendre
2 = 21
Ce qui veut dire que pour RK2 lerreur peut tre quantifie comme
2 (2 )2 = 2 (21 )2 = 42 (1 )2
Ainsi, mme ci 2 > 1 pour toute valeur suffisamment petite de 1 , 42 (1 )2 < 1 1. Dans notre exemple plus haut,
on parle dune diffrence de 103 !!!

14

Lerreur en question est lerreur maximale par tape de calcul. Attention : lerreur nest pas ncessairement additive (cela dpend
des mthodes).

Auteur : A.Deichman
Dernire modification : 18/12/2016

101

Le cas dune fonction (, ) = 2


Ceci tant dit, dans certains cas les algorithmes RK avec un pas fixe suffisamment large peuvent savrer trs instables.
Par exemple, on peut tudier le comportement de mthode dEuler pour (, ) = 2 (voir Figure 12).
De plus, nous pouvons voir le comportement de lalgorithme pour la fonction (, ) = (voir Figure 13).

Figure 12: Mthode d'Euler avec h qui diverge [25]

Remarquons que pour la fonction prsente ci-dessus le choix de bon pas est essentiel : le pas trop grand produit une
solution qui diverge de plus en plus en oscillant autour de la solution.

Figure 13: Mthode d'Euler avec h qui diverge [25]

Auteur : A.Deichman
Dernire modification : 18/12/2016

102

Dans le cas dcrit ci-dessus, nous pouvons voir que toutes les valeurs de rsultent dans une fonction qui se trouve
relativement loin de la solution. Autrement dit, la variation relativement faible autour du sommet cre une erreur
importante qui ne sera pas corrige durant les calculs subsquents.

Le cas dune fonction () = tan()


Nous pouvons aussi se demander quelle est la diffrence entre la mthode RK4 populaire et RKF45 tel que dcrit
dans les sections prcdentes. Pour faire cette analyse nous allons dabord nous adresser J.J Mathews and K.K. Fink
[26]. Ils nous proposent de comparer les deux mthodes en tudiant la fonction = 1 + 2 avec (0) = 0 sur un
intervalle[0, 1.4] dont la solution est = tan(). Pour RKF45 et RK4 respectivement, nous allons utiliser = 2 105
et = 0.1.
(iteration)
RKF45

RK4

0
1
2
3
4
5
6
7
8
9
10
11
12
13

1
2
3
4
5
6
7
8
9
10

14

Solution
exacte

0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.2
1.3
1.35
1.4

0
0.1003347
0.2027100
0.3093362
0.4227931
0.5463025
0.6841368
0.8422884
1.0296386
1.2601582
1.5774077
1.9647597
2.5721516
3.6021024
4.4552218
5.7978837

RKF45

Erreur de
RKF45

0.2027100

0.0000000

0.4227933

0.0000002

0.6841376

0.0000008

1.0296434

0.0000048

1.5574398
1.9648085
2.5722408
3.6023295
4.4555714
5.7985045

0.0000321
0.0000488
0.0000892
0.0002271
0.0003496
0.0006208

RK4

Erreur de
RK4

0
0.1003347
0.2027100
0.3093362
0.4227932
0.5463025
0.6841368
0.8422884
1.0296386
1.2601582
1.5574077
1.9647597
2.5721516
3.6021024

0
0.0000001
0.0000001
0.0000002
0.0000002
0.0000002
0.0000000
0.0000002
0.0000005
0.0000006
0.0000013
0.0000131
0.0000798
0.0005390

5.7978837

0.0059089

cart entre
RKF45 et
RK4
0
0
0,0000001
0,0000008
0,0000048
0,0000321
0,0000488
0,0000892
0,0002271
0,0006208

Plusieurs observations peuvent tre faites partir de ces donnes.

Le dernier point calcul selon la mthode RKF45 45 (1.4) = 5.7985045 sapproche de la solution exacte
(1.4) = 5.7978837 en produisant une erreur de10 = 0.0006208. Par contre, la solution trouve par la
mthode RK4 4 (1.4) = 5.7978837 produit une erreur plus leve14 = 0.0059089.
Pour cette fonction, RKF45 surestime tous les points calculs. Par contre, RK4 produit une erreur de signe
variable (des fois surestime et des fois sous-estime la fonction).
Vers la fin, lerreur produite par RK4 explose en augmentant de plus de 10 000 fois sur lintervalle des quatre
dernires itrations. l'inverse, RKF45 sajuste continuellement ce qui rsulte dans une erreur qui est toujours
au moins 10 fois plus petite que la plus grande erreur dans RK4.

Notons aussi le saut brusque de lerreur autour de = 1.3. Pourquoi? Regardons sur les graphiques ci-dessous pour
mieux comprendre les variations et prsenter une hypothse.

Auteur : A.Deichman
Dernire modification : 18/12/2016

103

Figure 14: Fonction () = ()

Figure 15: Fonction = 2 ()

La fonction prsente sur Figure 14 semble suffisamment lisse et a une croissance continue sans pointes ou
changements brusques. Par contre, un regard plus attentif sur la fonction drive (Figure 15) montre qu partir
denvirons = 1.3 la fonction croie trs rapidement :
Drive

(
1.25) 7.65
(1.25) 10.2
(1.3) 13.98
(1.35) 20.25
(1.4) 34.03
Auteur : A.Deichman
Dernire modification : 18/12/2016

Variation moyenne de la drive


(1.25) (1.2) = 2.55
(1.3) (1.25) = 3.78
(1.35) (1.3) = 6.27
(1.4) (1.35) = 13.78
104

Ainsi, nous pouvons supposer que les deux mthodes semblent tre incapables de rattraper la fonction. Un
comportement dont nous avons dj vu sur la Figure 13 pour la fonction(, ) = .

Les tapes suivre pour programmer une solution particulire de RK


1. crire les quations diffrentielles en isolant la drive de degr le plus lev.
2. Convertir les quations vers un systme dquations diffrentielles dordre 1
3. Programmer le logiciel pour calculer :
a. les et les solutions pour toutes les quations une variable indpendante (si cette variable napparait
pas dans les autres quations gauche);
b. le 1? pour chaque quation restante;
c. le 2? pour chaque quation restante;
d. le 3? pour chaque quation restante;
e. le 4? pour chaque quation restante;
f.
g. le ? pour chaque quation restante;
h. et les solutions pour chaque quation restante.
4. Programmer le logiciel pour sauvegarder, afficher etc. les solutions de ltape en cour.
5. Programmer le logiciel pour rpter les calculs (tant que ncessaire) en utilisant les donnes de ltape
prcdente comme le point de dpart.

Quelques solutions
RK4 Populaire (en C) [27]
double Runge_Kutta( double (*f)(double, double), double y0, double x0,
double h, int number_of_steps )
{
double k1, k2, k3, k4;
double h2 = 0.5 * h;
while ( --number_of_steps >= 0 )
k1 = h * (*f)(x0,y0);
k2 = h * (*f)(x0+h2, y0 + 0.5
k3 = h * (*f)(x0+h2, y0 + 0.5
x0 += h;
k4 = h * (*f)(x0, y0 + k3);
y0 += one_sixth * ( k1 + k2 +
}
return y0;

{
* k1);
* k2);
k2 + k3 + k3 + k4 );

RK4 mthode 3/8 (en C) [27]


double Runge_Kutta_3_8( double (*f)(double, double), double y0, double x0,
double h, int number_of_steps )
{
double k1, k2, k3, k4;
double h13 = one_third * h;
double h23 = two_thirds * h;
double h18 = one_eighth * h;

Auteur : A.Deichman
Dernire modification : 18/12/2016

105

while ( --number_of_steps >= 0


k1 = (*f)(x0,y0);
k2 = (*f)(x0+h13, y0 + h13
k3 = (*f)(x0+h23, y0 + h *
x0 += h;
k4 = (*f)(x0, y0 + h * ( k1
y0 += h18 * ( k1 + 3.0 * k2
}
return y0;

) {
* k1);
(k2 - one_third * k1) );
- k2 + k3 ) );
+ 3.0 * k3 + k4 );

RK4 adaptable mthode de Fehlberg (en C, adapt partir de [27])


#define ATTEMPTS 12
#define MIN_SCALE_FACTOR 0.1
#define MAX_SCALE_FACTOR 4.0
int Embedded_Fehlberg_4_5( double (*f)(double, double), double y[], double x,
double h, double xmax, double *h_next, double tolerance ) {
double scale;
double temp_y[2];
double err;
double yy;
int i;
int last_interval = 0;
// Verify that the step size is positive and that the upper endpoint //
// of integration is greater than the initial enpoint.
//
if (xmax < x || h <= 0.0) return -2;
// If the upper endpoint of the independent variable agrees with the //
// initial value of the independent variable. Set the value of the //
// dependent variable and return success.
//
*h_next = h;
y[1] = y[0];
if (xmax == x) return 0;
// Insure that the step size h is not larger than the length of the //
// integration interval.
//
h = min(h, xmax - x);
// Redefine the error tolerance to an error tolerance per unit
// length of the integration interval.

//
//

tolerance /= (xmax - x);


// Integrate the diff eq y'=f(x,y) from x=x to x=xmax trying to
// maintain an error less than tolerance * (xmax-x) using an
// initial step size of h and initial value: y = y[0]

//
//
//

temp_y[0] = y[0];
while ( x < xmax ) {
scale = 1.0;
for (i = 0; i < ATTEMPTS; i++) {

Auteur : A.Deichman
Dernire modification : 18/12/2016

106

err = fabs( Runge_Kutta(f, temp_y, x, h) );


if (err == 0.0) { scale = MAX_SCALE_FACTOR; break; }
yy = (temp_y[0] == 0.0) ? tolerance : fabs(temp_y[0]);
scale = 0.8 * sqrt( sqrt ( tolerance * yy / err ) );
scale = min( max(scale,MIN_SCALE_FACTOR), MAX_SCALE_FACTOR);
if ( err < ( tolerance * yy ) ) break;
h *= scale;
if ( x + h > xmax ) h = xmax - x;
else if ( x + h + 0.5 * h > xmax ) h = 0.5 * h;
}
if ( i >= ATTEMPTS ) { *h_next = h * scale; return -1; };
temp_y[0] = temp_y[1];
x += h;
h *= scale;
*h_next = h;
if ( last_interval ) break;
if ( x + h > xmax ) { last_interval = 1; h = xmax - x; }
else if ( x + h + 0.5 * h > xmax ) h = 0.5 * h;
}
y[1] = temp_y[1];
return 0;
}
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static
static

const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const
const

double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double
double

a2 = 1.0/4.0;
a3 = 3.0/8.0;
a4 = 12.0 / 13.0;
a6 = 1.0/2.0;
b21 = 1.0/4.0;
b31 = 3.0 / 32.0;
b32 = 9.0 / 32.0;
b41 = 1932.0 / 2197.0;
b42 = -7200.0 / 2197.0;
b43 = 7296.0 / 2197.0;
b51 = 439.0 / 216.0;
b52 = -8.0;
b53 = 3680.0 / 513.0;
b54 = -845.0 / 4104.0;
b61 = -8.0 / 27.0;
b62 = 2.0;
b63 = -3544.0 / 2565.0;
b64 = 1859.0 / 4104.0;
b65 = -11.0 / 40.0;
c1 = 25.0 / 216.0;
c3 = 1408.0 / 2565.0;
c4 = 2197.0 / 4104.0;
c5 = -1.0/5.0;
d1 = 16.0 / 135.0;
d3 = 6656.0 / 12825.0;
d4 = 28561.0 / 56430.0;
d5 = -9.0/50.0;
d6 = 2.0 / 55.0;

static double Runge_Kutta(double (*f)(double,double), double *y, double x0,


double h) {
double k1, k2, k3, k4, k5, k6;
double h2 = a2 * h, h3 = a3 * h, h4 = a4 * h, h6 = a6 * h;

Auteur : A.Deichman
Dernire modification : 18/12/2016

107

k1 = (*f)(x0, *y);
k2 = (*f)(x0+h2, *y + h * b21 * k1);
k3 = (*f)(x0+h3, *y + h * ( b31*k1 + b32*k2) );
k4 = (*f)(x0+h4, *y + h * ( b41*k1 + b42*k2 + b43*k3) );
k5 = (*f)(x0+h, *y + h * ( b51*k1 + b52*k2 + b53*k3 + b54*k4) );
k6 = (*f)(x0+h6, *y + h * ( b61*k1 + b62*k2 + b63*k3 + b64*k4 + b65*k5) );
*(y+1) = *y + h * (c1*k1 + c3*k3 + c4*k4 + c5*k5);
return d1*k1 + d3*k3 + d4*k4 + d5*k5 + d6*k6;
}

RK6 mthode de Butcher (en C) [27]


double Runge_Kutta_Butcher( double (*f)(double, double), double y0, double x0,
double h, int number_of_steps ) {
double
double
double
double
double
double
double
double
double
while
k1
k2
k3
k4
k5

k1, k2, k3, k4, k5, k6, k7;


h3 = one_third * h;
h2_3 = two_thirds * h;
h2 = one_half * h;
h12 = one_twelfth * h;
h16 = one_sixteenth * h;
h8 = one_eighth * h;
h44 = one_fortyfourths * h;
h120 = one_onetwentieth * h;

k6

(
=
=
=
=
=

k7
y0
x0

--number_of_steps >= 0 ) {
(*f)(x0,y0);
(*f)(x0 + h3, y0 + h3 * k1);
(*f)(x0 + h2_3, y0 + h2_3 * k2 );
(*f)(x0 + h3, y0 + h12 * ( k1 + 4.0 * k2 - k3 ) );
(*f)(x0 + h2, y0
+ h16 * ( -k1 + 18.0 * k2 - 3.0 * k3 - 6.0
= (*f)(x0 + h2, y0 + h8 * ( 9.0 * k2 - 3.0 * k3 - 6.0 * k4
+ 4.0
= (*f)(x0 + h, y0 + h44 * ( 9.0 * k1 - 36.0 * k2 + 63.0 * k3
+ 72.0 * k4 - 64.0
+= h120 * ( 11.0 * (k1 + k7) + 81.0 * (k3 + k4) - 32.0 * (k5
+= h;

* k4 ) );
* k5 ) );
* k6) );
+ k6) );

}
return y0;
}

RK6 mthode de Dormand-Prince (en C) [28]


//exprim en langage qui ressemble C
...
eps=0.000001; //lerreur maximale permise dans un tape de calcul
t0=0; //initialisation des variables
y0=0;
h0=0.1;
while(t0<=tf) //tf est le temps de fin pour le calcul en cours
{
k1=h*f(t0,y0);
...

Auteur : A.Deichman
Dernire modification : 18/12/2016

108

k7=h*f(t0+h,...);
y1=y0 + 35/384*k1 + ...
z1=y0 + 5179/57600*k1 + ... //estimation derreur
err=abs(z1-y1); //estimation derreur
s=pow(eps*h0/(2*err),1/5);
h1=s*h0; //lintervalle de temps utilis pour le prochain calcul
if(h1<hmin)
h1=hmin; //validation de lintervalle de temps(limit par hmin et hmax)
else if(h1>hmax)
h1=hmax;
t0=t0+h0; //prparer la prochaine itration
y0=y1;
h0=h1;
}

Auteur : A.Deichman
Dernire modification : 18/12/2016

109

Bibliographie
[1] Wolfram, Mathworld, [En ligne]. Available: http://mathworld.wolfram.com/images/epsgif/CatalanPolygons_700.gif. [Accs le 31 07 2016].
[2] Wikipedia, [En ligne]. Available:
https://en.wikipedia.org/wiki/Sierpinski_triangle#/media/File:Sierpinski_triangle_evolution.svg. [Accs le 02 08
2016].
[3] J. Sunny, Saddle points of a matrix, [En ligne]. Available:
https://gist.githubusercontent.com/jithusunny/856257/raw/e581d210129b290bcdf48f16918be1b9aafcac72/saddl
e.c. [Accs le 07 08 2016].
[4] W. DOBOSIEWICZ, An efficient variation of bubble sort, Information Processing Letters, vol. 11, n %11, pp. 5-6,
1980.
[5] H. Sarbazi-Azad, Stupid Sort: A new sorting algorithm, Department of Computing Science Newsletter, n %1599,
p. 4, 2000.
[6] C. J. Shaw et T. N. Trimble, Algorithm 175: shuttle sort, Commun. ACM, vol. 6, n %16, pp. 312-313, 1963.
[7] P. E. Black, Insertion sort, 24 11 2008. [En ligne]. Available:
https://xlinux.nist.gov/dads/HTML/insertionSort.html. [Accs le 02 12 2016].
[8] D. Shell, A high-speed sorting procedure, Commun. ACM, vol. 2, n %17, pp. 30-32, 1959.
[9] P. E. Black, Shellsort sort, 10 08 2015. [En ligne]. Available: https://xlinux.nist.gov/dads/HTML/shellsort.html.
[Accs le 02 12 2016].
[10 T. N. Hibbard, An empirical study of minimal storage sorting, Communications of the ACM, vol. 6, n %15, pp.
]
206-213, 1963.
[11 V. R. Pratt, Shellsort and Sorting Networks (Outstanding Dissertations in the Computer Sciences), New York:
]
Garland, 1979.
[12 M. Ciura, Best Increments for the Average Case of Shellsort, chez Fundamentals of Computation Theory, Latvia,
]
2001.
[13 P. E. Black, Strand sort, 24 11 2008. [En ligne]. Available: https://xlinux.nist.gov/dads/HTML/strandSort.html.
]
[Accs le 02 12 2016].
[14 S. Erokhin, J-SORT, 26 11 1997. [En ligne]. Available:
]
https://groups.google.com/forum/#!msg/fido7.ru.algorithms/dL4SAH96OPY/s4oABNtMCCYJ. [Accs le 02 12
2016].

Auteur : A.Deichman
Dernire modification : 18/12/2016

110

[15 D. Grune, Gnome Sort - The Simplest Sort Algorithm, [En ligne]. Available:
]
http://dickgrune.com/Programs/gnomesort.html. [Accs le 04 11 2016].
[16 V. Strassen, Gaussian elimination is not optimal, Numerische Mathematik, vol. 13, n %14, pp. 354-356, 1969.
]
[17 A. Buluc et J. R. Gilbert, Challenges and advances in parallel sparse matrix-matrix multiplication, 37th
]
International Conference on Parallel Processing, pp. 503-510, 2008.
[18 G. Ballard, J. Demmel, O. Holtz, B. Lipshitz et O. Schwartz, Communication-optimal parallel algorithm for
]
strassen's matrix multiplication., Proceedings of the twenty-fourth annual ACM symposium on Parallelism in
algorithms and architectures, pp. 193-204, 2012.
[19 S. Bagga, G. Akshay, Y. Rajun et L. Zihan, Virtualization Approach to Cluster Based Winograd's Variant of Strassen's
]
Method Using RMI, Second International Conference on Computational Intelligence & Communication
Technology, pp. 82-88, 2016.
[20 D. Coppersmith et S. Winograd, Matrix multiplication via arithmetic progressions, Proceedings of the nineteenth
]
annual ACM symposium on Theory of computing, pp. 1-6, 1987.
[21 C. Runge, ber die numerische Auflsung von Differentialgleichungen, Mathematische Annalen, vol. 46, n %12,
]
pp. 167-178, 1985.
[22 K. Heun, Neue Methoden zur approximativen Integration der Differentialgleichungen einer unabhngigen
]
Vernderlichen, Z. Math. Phys, vol. 45, pp. 23-38, 1900.
[23 W. Kutta, Beitrag zur nherungweisen Integration totaler Differentialgleichungen, 1901.
]
[24 E. Fehlberg, Klassische Runge-Kutta-Formeln fnfter und siebenter Ordnung mit Schrittweiten-Kontrolle,
]
Computing, vol. 4, n %12, pp. 93-106, 1969.
[25 H. Miller, EULER'S METHOD: MIT Mathlets, [En ligne]. Available: http://mathlets.org/mathlets/eulers-method/.
]
[Accs le 01 01 2016].
[26 J. H. Mathews et K. K. Fink, Numerical methods using MatLab, 4th edition d., Upper Saddle River, New Jersey:
]
Prentice-Hall Inc., 2004.
[27 RLH, http://www.mymathlib.com/diffeq/runge-kutta/, RLH, 2004. [En ligne]. [Accs le 27 06 2015].
]
[28 T. Kimura, 24 09 2009. [En ligne]. Available:
]
http://depa.fquim.unam.mx/amyd/archivero/DormandPrince_19856.pdf. [Accs le 20 08 2015].
[29 J. E. Handmann, Leonhard Euler, 1753.
]

Auteur : A.Deichman
Dernire modification : 18/12/2016

111

Vous aimerez peut-être aussi