Académique Documents
Professionnel Documents
Culture Documents
1 Introduction générale 5
1.1 Utilité des langages informatiques . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Utilité et limitations des méthodes numériques . . . . . . . . . . . . . . . . 6
1.2.1 Nécessité des méthodes numériques . . . . . . . . . . . . . . . . . . 6
1.2.2 Limitations des méthodes numériques . . . . . . . . . . . . . . . . . 7
1.3 Outils de base des méthodes numériques . . . . . . . . . . . . . . . . . . . 7
Chapitre 1
Introduction générale
On peut alors, dans un langage évolué, écrire des suites d’instructions ou programme.
Le rôle du compilateur (qui est lui-même un programme en langage machine) est alors
au préalable de contrôler la syntaxe du programme, ( càd de voir s’il respecte les règles
d’orthographe du langage évolué), puis de traduire en langage machine. Pour passer déjà
des modèles physiques à l’écriture d’un programme, il y a tout un art à maı̂triser: les
méthodes numériques
6 CHAPITRE 1. INTRODUCTION GÉNÉRALE
Par ailleurs un phénomène différentielle, par exemple, est par nature continu : sa
résolution signifie l’obtention des valeurs d’une ou de plusieurs inconnues en fonction d’une
variable comme le temps t qui prend une infinité de valeurs possibles. Si l’on est capable
de résoudre analytiquement ce problème différentiel, càd d’exprimer sa solution à l’aide
d’une formule incluant éventuellement des quadratures, ou le calcul de fonctions spéciales
par série, formule approchée ou développement asymptotique alors tout va bien : il suffira,
à posteriori, d’appliquer cette formule à telle ou telle valeur de t que choisira l’utilisateur.
L’ordinateur, tout comme l’homme qui l’a créé est ” fini ” dans toutes les direc-
tions : il est limité en place mémoire, en précision, en durée de fonctionnement. Résoudre
numériquement le problème continu est une utopie. Il faut donc discrétiser le problème,
càd le remplacer par un problème discret sensé lui être proche en certains sens. On peut
réaliser une approximation d’un problème aux dérivées partielles par :
On peut de même approcher une équation intégrale singulière selon une méthode de sin-
gularité. Les méthodes sont nombreuses mais leur choix ou leur emploi représente tout un
art : c’est l’analyse numérique ou méthodes numériques.
1.3. OUTILS DE BASE DES MÉTHODES NUMÉRIQUES 7
En fait, pour approximer la fonction f (x), on ne tient compte dans (1.1) que d’un
nombre fini de termes : on effectue une troncature de la série. On a donc l’expression
approchée :
(x − a)n+1 £ (n+1) ¤
E(x) = f (x) max (1.4)
(n + 1)!
£ ¤
où f (n+1) (x) max est la valeur maximale de la dérivée d’ordre n+1 de f (x) dans l’intervalle
[a,x]. On voit que cette erreur est de l’ordre de (x − a)n+1 , ce qu’on écrit couramment :
Chapitre 2
2.1.2 Mot
On appelle ” mot” une suite de caractères délimitée par des caractères spéciaux ou
blancs, il peut représenter un nombre, un mot réservée ou un ” identificateur ”. Le compi-
lateur Pascal reconnaı̂t les caractères spéciaux et les mots et ne distingue pas les majuscules
des minuscules. Il ne connaı̂t pas non plus les indices ; ainsi la variable x1 peut être écrite
comme x1. Le caractère retour chariot ” CR ” ou ” ENTREE ” ou encore ” ENTER ”
selon les claviers est interprété comme un caractère blanc.
La partie effective d’un identificateur est limitée aux n premières lettres, le nombre
n dépend des implantations. Bien que cela ne soit pas standard, la plupart des implan-
tations admettent aussi le caractère souligné, on l’utilise pour séparer les mots indicatifs
d’un identificateur. Cependant, dans le même but, on préférera utiliser les majuscules (ex.
TemperatureMax) pour assurer la transportabilité du programme. Pour améliorer la lisi-
bilité du programme, il est conseillé de choisir le nom des variables judicieusement. Par
exemple, si nous écrivons un programme calculant la température maximale atteinte par
un système pendant une certaine période, il sera préférable d’appeler TemperatureMax la
variable destinée à contenir la valeur de la température maximale calculée.
Les noms des variables doivent satisfaire à certaines règles. Ils sont composés des ca-
ractères alphabétiques et numériques et du blanc souligné.
10 CHAPITRE 2. ÉLÉMENTS DE BASE DU LANGAGE TURBO PASCAL
Les types standards sont les suivants : INTEGER, REAL, CHAR, BOOLEAN,
TEXT. Les trois derniers appartiennent à la classe des scalaires et les deux premiers
sont des données numériques. En mode étendu, on utilisera EXTENDED pour les réels,
LONGINT pour les entiers et STRING pour les chaı̂nes de caractères.
– Le mot-clé Begin qui commence le corps du programme, suivi d’une suite d’instruc-
tions séparées par des points-virgules et le mot-clé end suivi d’un point qui annonce
la fin du programme. Cette structuration est schématisée par le tableau suivant:
(a) Program nomduprogramme
(b) Label
(c) Const
(d) Type
(e) Var
Procedure Nomdelaprocedure (déclaration des paramètres)
Begin
(f) instructions
end;
FunctionNomdelafonction(déclaration des paramètres): déclaration de la fonction
Begin
(f’) instructions
end;
(g)
corps Begin
instructions
end.
Write(’ Nombre de lignes :’, var1, ’et Nombre de colonnes :’, var2) ;
2.3. LES ACTIONS DE BASE DANS UN PROGRAMME : LIRE, ÉCRIRE ET CALCULER13
Si au moment où cette instruction est effectuée, les variables var1 et var2 ont pour valeurs
respectives 15 et 8, l’effet de l’instruction sera d’afficher à l’écran la ligne
Pour afficher des nombres réels, nous pouvons préciser quel doit être l’encombrement
du résultat affiché. Par exemple, soit à afficher la valeur de x=123.09876543, l’instruction
Valeur de x :**1.2309876543E+02
(noter qu’il y a 2 blancs qui sépare deux points du premier chiffre 1 du nombre à écrire).
Valeur de x :**1.2E+02
Valeur de x :**123.10
Valeur de x :*****123.0987654300.
La procédure Readln ne diffère de la précédente que dans le fait que les éventuelles
valeurs excédentaires seront ignorées.
14 CHAPITRE 2. ÉLÉMENTS DE BASE DU LANGAGE TURBO PASCAL
autres. Or cela ne suffit pas pour résoudre même des problèmes élémentaires comme, par
exemple, le calcul des racines d’une équation du second degré : de nombreux traitements
ne peuvent ainsi être effectués que si certaines conditions sont remplies. Dans cette section,
nous exposons comment se réalise, en Pascal, cette décision d’exécution conditionnelle.
2.6.2 L’alternative
2.6.2.1 Action simple : le If logique simple
Supposons que nous voulions faire à ce que la plus grande valeur de deux nombres réels
A et B soit mise dans B. L’algorithme correspondant est :
Si A > B alors B = A sinon B reste inchangé.
L’instruction Pascal permettant de traduire un tel schéma se note:
Fig. 2.1 –
Fig. 2.2 –
On peut constater qu’ entre ” alors ” et ” sinon ” il y a plus d’une expression. Cette
séquence en Pascal se traduit par :
IF (A>B) Then
Begin
Temp:=B;
B:=A ;
A:=Temp;
End;
Writeln(’le plus grand nombre est B=’,B ,’ et le plus petit A= ’,A)
qu’une proposition est vraie, la séquence associée est exécutée, et le programme reprend
à la suite. L’organigramme est celui de la figure (2.3). Ce schéma peut aussi être visualisé
Fig. 2.3 –
sous forme d’une arborescence dont chaque nœud représente une question à deux issues :
Fig. 2.4 –
IF(Prop1) Then
Seq.1
Else if (Prop2) then
Seq.2
Else if (Prop.3) then
Seq.3
2.6. TEXTS ET CHOIX : INSTRUCTIONS CONDITIONNELLES 19
:
Else if(prop. N) Then
Seq. n
Else
Seq. n+1.
NB Dans le cas où la sequence n+1 est vide, càd ne contient aucune instruction , le
”else ” final disparaı̂t.
• Propgramme.
Program Equa1degre;
Var a, b, x :Real;
Begin {debut du programme principal}
Witeln(’donner dans l"ordre les valeurs des coefficients de
l’equation du premier degre, a et b’);
Readln(a,b);
{****Fin enregistrement des donnees ****}
If (a<>0.0) Then
Begin
x=b/a;
writeln(’la solution de l"equation’, a,’X=’,b,’ est ’, x :7 :5);
end
else if (b<>0.0) Then
20 CHAPITRE 2. ÉLÉMENTS DE BASE DU LANGAGE TURBO PASCAL
Fig. 2.6 –
IF (cond1) Then
If (cond2) then
Trait1
else
Trait2
Elseif (Cond3) then
Trait3
Elseif (cond4) Then
Trait4
Elseif (Cond5) then
Trait5
Else
Trait6;
2.7. LES BOUCLES 21
For i:=a to b do
Begin
...
Traitement
...
22 CHAPITRE 2. ÉLÉMENTS DE BASE DU LANGAGE TURBO PASCAL
Fig. 2.7 –
End;
Exemple1. Soit à calculer la somme des n premiers entiers naturels non nuls; la séquence
du programme est la suivante:
Toutes les instructions comprises dans la boucle sont exécutées b − a + 1 fois au total,
successivement pour i = a,a + 1,a + 2,...,b.
Lorsque la valeur initiale de l’indice a est supérieure à la valeur finale b, alors la boucle
est sautée. Le seul effet sera de donner à l’indice de la boucle la valeur initiale a.
Le compilateur a prévue que la boucle peut aussi être parcouru de la plus grande valeur
de l’indice à sa plus petite. Càd a > b. dans ce cas on utilise la syntaxe
NB Il est strictement interdit de modifier l’indice d’une boucle ”for” à l’intérieur de son
corps .
2.7. LES BOUCLES 23
End;
”Traitement ” sera répété jusqu’à ce que la valeur booléenne de ”condition” soit fausse.
Le mécanisme de cette boucle est le suivant :
La valeur booléenne de ”condition” est évaluée, si elle est vraie alors le corps de la boucle
est exécutée, puis ”condition” est à nouveau évaluée, etc.... L’éxécution de la boucle
s’arrêtera dès que la valeur booléenne de ”condition” sera ” faux ”. Si nous voulons que
l’éxécution de la boucle cesse, il faut bien sûr que le corps de la boucle rende fausse
”condition”.
La boucle ne peut pas être exécutée, si ”condition” possède la valeur ”faux” à l’entrée de
la boucle. De même la boucle peut être exécutée perpétuellement si la valeur de ”condition”
est toujours ” vrai ”.
L’organigramme d’une telle boucle est donné par la figure(2.10). En pascal cette boucle
– Dans le premier cas, pour s’épargner la peine de recopier une même suite d’instruc-
tion, et aussi pour diminuer la ” taille ” du programme ;
– dans le second cas , par ce qu’il est commode et agréable de disposer une fois pour
toutes d’un outil réalisant un traitement spécifique donné,
on écrira qu’une seule fois ce traitement, sous la forme d’un morceau de programme compilé
séparément, qu’on appelle module ou procédure, et qui est utilisable (on dit appelable) par
toute autre procédure chaque fois qu’il sera nécessaire, exactement comme si le texte de la
partie de programme correspondante était physiquement présent à chaque point d’appel.
L’utilisation des services rendus par une procédure se fait par une instruction dont la
syntaxe est :
Nom de la procédure (liste des paramètres) ;
Exemple. La procédure permut s’appelle par l’instruction P ermut(a,b); où a et b sont des
réels.
Si nous voulons par contre ouvrir un fichier déjà existant, nous pouvons adopter la
syntaxe suivante: le nom de la procédure est lecture,
Procedure lecture(varf :text ; nomf :string);
Begin
Assign(varf, nomf);
Reset(varf);
End;
Comme précédemment, Il suffira d’appeler cette procédure dans votre programme principal
par exemple par l’instruction
Lecture(varf2, ’c:fichier2.dat’);
Pour y lire, on peut utiliser l’instruction
Readln(varf 2,x,0 ,0 ,y);
où varf2 est une variable de type ”text” préalablement déclarée qui permet de repérer le
fichier C : f ichier2.dat ouvert.
2.10. EXERCICES ET PROBLÈME 29
2.10.2 Problème
On désire écrire un programme Pascal permettant de traiter les notes des étudiants de
Physique 3. La liste des matières est constituée de 04 UV dénommés UV1, UV2, UV3, et
UV4. Ces UV ont toutes les mêmes coefficients. L’effectif de la classe est N.
Chapitre 3
∆+ fj = fj+1 − fj . (3.1)
et plus généralement
∆n+ fj = ∆+ (∆n−1
+ fj ). (3.4)
32CHAPITRE 3. DÉRIVATION DE FONCTIONS : MÉTHODE DE DIFFÉRENCES FINIES
L’équation (3.5) montre que les coefficients de fj+k sont ceux du développement du binôme
(1 − x)n , multipliés par (−1)n . On vérifiera aisément (3.5) à partir des équations (3.1) à
(3.4), en faisant tendre n = 1,2,3.
h2
f (x + h) = f (x) + hf 0 (x) + f ”(x) + ..., (3.6)
2
d’où,
f (x + h) − f (x) h f (x + h) − f (x)
f 0 (x) = − f ”(x) + ... ≡ + °(h). (3.7)
h 2 h
fj+1 − fj ∆+ fj
fj0 = + °(h) ≡ + °(h). (3.8)
h h
Une interprétation géométrique nous montre que la relation (3.8) revient à remplacer la
tangente en un point Mj par la sécante Mj Mj+1 (Fig.3.1).
Fig. 3.1 –
3.2. DIFFÉRENCES À DROITE 33
calcul de f (n) On peut poursuivre les calculs des différentes dérivées de f(x) à l’ordre 1
en h et montrer qu’en général on a:
(n) ∆n+ fj
fj = + °(h). (3.12)
hn
En utilisant la relation (3.5), on obtient:
n
(n) (−1)n X k k k n!
fj = (−1) Cn f j+k , C n = (3.13)
hn k=0 k!(n − k)!
D’après (3.10), on a :
f (x) − 2f (x + h) + f (x + 2h) h (3)
f ”(x) = − f (x) + ... (3.17)
h2 2
Cette valeur portée dans (3.16), donne :
· ¸ 2
0 f (x + h) − f (x) h f (x) − 2f (x + h) + f (x + 2h) h (3) h (3)
f (x) = − − f (x) + ... − f (x)...
h 2 h2 2 6
(3.18)
après simplification, nous avons:
−3f (x) + 4f (x + h) − f (x + 2h) h2 (3)
f 0 (x) = − f (x)... (3.19)
2h 3
Au point x = xj , nous avons:
−3fj + 4fj+1 − fj+2
fj0 = + °(h2 ). (3.20)
2h
Le tableau ci-dessous donne les dérivées ainsi calculées jusqu’à l’ordre 4:
h2
f (x − h) = f (x) − hf 0 (x) + f ”(x) + ..., (3.25)
2
d’où,
f (x) − f (x − h) h
f 0 (x) = + f ”(x) + ... (3.26)
h 2
Ainsi, au point x = xj , on a:
fj − fj−1 ∆− fj
fj0 = + °(h) ≡ + °(h). (3.27)
h h
(n) ∆n− fj
fj = + °(h). (3.28)
hn
En d’autres termes,
n
(n) 1 X
fj = n (−1)k Cnk fj−k , (3.29)
h k=0
(2p) ∆2p 2p
− fj+p + ∆+ fj−p
fj = + °(h2 ). (3.36)
2h2p
– Pour n impair (n=2p+1), on a:
2p+1 2p+1
(2p+1) ∆− fj+p + ∆+ fj−p
fj = 2p+1
+ °(h2 ). (3.37)
2h
Il est très aisé de calculer toutes les dérivées à l’ordre 2 en h. On peut aussi obtenir des
approximations à l’ordre 4 en h. Les tableaux ci-dessous donnent les quatre premières
dérivées, à l’ordre 2 et à l’ordre 4.
A l’ordre 2 on a:
A l’ordre 4 on a le tableau:
Il apparait de ces résultats que les différences centrées donnent des résultats bien plus
précis que les différences à droite ou à gauche. Par conséquent, chaque fois qu’il sera
posssible, on utilisera les différences centrées. Toutefois, le nombre de valeurs x étant
limité, en bord de domaine on devra aussi utiliser (Fig.3.2) les différences à droite (au
voisinage de x0 ) ou à gauche (au voisinage de xn ).
Fig. 3.2 – Graphe d’une courbe limitée entre x0 et xn . Au point x0 , il n’est pas pos-
sible d’utiliser les différences à gauche, tandis qu’au point xn , on ne peut pas utiliser les
différences à droite.
38CHAPITRE 3. DÉRIVATION DE FONCTIONS : MÉTHODE DE DIFFÉRENCES FINIES
39
Chapitre 4
Pour engendrer une suite, on remplace l’équation f (x) = 0 par une équation équivalente
dans l’intervalle considéré, x = g(x), où g(x) est encore une fonction continue. Par exemple
on peut avoir x − f (x) = g(x), càd qu’on pose g(x) = x − f (x). On peut aussi poser
g(x) = x − f (x)/α, avec α 6= 0. Ensuite, on choisit x0 ∈ [a,b] et on construit x1 = g(x0 ),
x2 = g(x1 ),...,xn+1 = g(xn ).
bf (a) − af (b)
x1 = − (4.1)
f (b) − f (a)
Si f (x1 ) ∗ f (b) < 0, on considère maintenant l’intervalle [x1 ,b] et on reprend le même pro-
cessus pour calculer x2 .
On remarque qu’en prenant x0 = b, on a :
af (x0 ) − x0 f (a)
x1 = − . (4.3)
f (a) − f (x0 )
Ainsi, on peut donc prendre l’expression de g(x) comme suit:
Fig. 4.1 –
y = f 0 (x)(x − xi ) + yi . (4.6)
L’intersection de cette droite avec l’axe ox donne le point suivant xi+1 , d’où
f (xi )
f 0 (xi )(xi+1 − xi ) + yi = 0 → xi+1 = xi − (4.7)
f 0 (xi )
f (xi )
xi+1 = xi + h ≡ g(xi ) avec h = − . (4.8)
f 0 (xi )
Remarque.
– Le choix de x0 est très important. Sur la figure ci-dessous (Fig.4.3), on s’aperçoit
que la tangente en A coupe l’axe ox en dehors du segment [a,b]. Pour éviter cette
éventualité et assurer rapidement la convergence, x0 doit être suffisamment proche de
la racine `. C’est le choix de la valeur initiale qui rend cette méthode peu avantageuse
en général.
– Toutefois si f (a)f (b) < 0, f (x) et f 0 (x) strictement monotones sur [a,b], la racine
simple peut être calculée avec la précision voulue partant de x0 ∈ [a,b] tel que
f (x0 )f 00 (x0 ) > 0.
– Si la courbe Cf de f (x) est presque horizontale au voisinage de la racine, la méthode
de Newton n’est pas recommandée.
La figure (4.2) montre l’organigramme de la procédure de Newton: Le test d’arrêt | h |< ²
ne garantit pas que la précision sur la racine soit ². En effet, il existe des cas pathologiques
pour lesquels la courbe est presque verticale (voir figure). De même, pour que la précision
sur ` soit de ², on choisit d’arrêter l’algorithme lorsque | xn+1 − xn |<= ²/10.
42 CHAPITRE 4. RÉSOLUTION NUMÉRIQUES D’ÉQUATIONS
Dans le cas des racines multiples, la convergence est lente. On sait qu’une racine mul-
tiple d’ordre r de f (x) est aussi racine d’ordre r − 1 de f 0 (x). On a, au voisinage de cette
racine ` :
Fig. 4.3 –
Les relations (4.9) montrent que ` est racine simple pour u(x). On peut alors appliquer la
méthode de Newton à u(x) et écrire :
u(x)
xn+1 = xn − , (4.11)
u0 (x)
f (x)f 00 (x)
u0 (x) = 1 − . (4.12)
[f 0 (x)]2
Remarque. Si on ne sait pas que ` est racine simple ou multiple de f (x), on peut appli-
quer systématiquement cette méthode, valable pour les racines simples ou multiples.
Program Newton;
(****************************************************************
*****************************************************************
******* *****
******* *****
******* Ce programme calcule la racine de l’equation f(x)=0 ****
******* par la methode de Newton. la precision est de epsi *****
******* *****
*****************************************************************
*****************************************************************)
const epsi=1.0E-10;
zero=1.0E-34;
Var
j,count,Maxiter:integer;
44 CHAPITRE 4. RÉSOLUTION NUMÉRIQUES D’ÉQUATIONS
x,x0,l,h:real;
Function f(x:real):real;
begin
f:=(x-5)*exp(x)+5;
end;
Function fp(x:real):real;
begin
fp:=(x-4)*exp(x);
end;
Begin
Maxiter:=50;
j:=0;
repeat
if (j=0) then
begin
writeln(’donner la valeur de x0’);
readln(x0);
end
else
begin
writeln(’fprime(x0)=0.0, entrer de nouveau la valeur de x0’);
readln(x0);
end;
j:=j+1;
until (fp(x0) <> 0.0);
if (f(x)=0.0) then
l:=x
else
begin
count:=0;
repeat
count:= count+1;
h:=-f(x)/fp(x);
x:=x+h;
until ((abs(h)<epsi/10) or (count>=Maxiter));
if (abs(h)<epsi/10) then
l:=x
else
begin
writeln(’il n" y a pas eu de convergence’);
writeln(’apres ’, count,’ iterations’);
writeln(’Revoir la valeur de x0 ou de Maxiter’);
Readln;
Halt;
end;
end;
writeln;
writeln(’la solution de l"equation est l=’, l:10:8);
writeln(’ obtenue apres ’,count,’ iterations’);
writeln;
writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Fin du programme $$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
alors ∀x0 ∈ [a,b] la suite récurrente définie par xn+1 = g(xn ) converge vers l’unique solu-
tion ` de l’équation x = g(x) avec ` ∈ [a,b]. Si g est dérivable, il est souvent commode
d’exprimer une condition suffisante sur g 0 que de vérifier que g est une fonction strictement
contractante. D’où les propositions suivantes:
Proposition1
Soit g dérivable sur [a,b]. si g 0 vérifie M ax | g 0 (x) |= L < 1, alors g est une application
strictement contractante dans [a,b].
| en |≤ ² est n ≥ N , avec
log ² − log e0
N= (4.13)
log L
Il est souvent délicat de déterminer un intervalle [a,b] dans lequel les hypothèses du
théorème du point fixe sont vérifiées. Si on peut calculer ou estimer g 0 (`) on a le résultat
suivant:
Proposition2
Soit ` une solution de l’équation g(x) = x avec g 0 continue. Si | g 0 (`) |< 1 alors il existe un
intervalle [a,b] contenant ` pour lequel la suite définie par:
½
x0 ∈ [a,b],
(4.14)
xn+1 = g(xn )
converge vers `.
Proposition 3
Soit ` une solution de l’équation x = g(x). Si g 0 est continue au voisinage de ` et si
| g 0 (`) |> 1 alors ∀x0 6= ` la suite définie par (4.14) ne converge pas vers `.
En résumé:
On estime g 0 (`).
– Si | g 0 (`) |> 1 on élimine la méthode (on la change)
– Si | g 0 (`) |< 1, la méthode est bonne. Il faut trouver l’intervalle dans lequel M ax |
g 0 (x) |= L < 1 et g([a,b]) ⊂ [a,b].
Remarque. Le cas | g 0 (`) |= 1 est plus délicat à traiter car on peut avoir convergence ou
non. En plus la méthode ne sera pas bonne à cause des erreurs d’arrondi qui perturbent
les données.
Fig. 4.4 –
Cette méthode, illustrée par la figure (4.4), a l’avantage de convenir dans tous les cas où
on a déterminé a et b tel que f (a)f (b) < 0.
La figure (4.5) montre l’organigramme correspondant à cette procédure
48 CHAPITRE 4. RÉSOLUTION NUMÉRIQUES D’ÉQUATIONS
Program Bissection;
(****************************************************************
*****************************************************************
******* *****
******* *****
******* Ce programme calcule la racine de l’equation f(x)=0 ****
******* par la methode de la Bissection, *****
******* la precision est de epsi *****
******* *****
*****************************************************************
*****************************************************************)
const epsi=1.0E-010;
Var
4.6. MÉTHODE DE DICHOTOMIE OU PAR BISSECTION 49
count, j,Maxiter:integer;
x,a,b,c,l,diff,ll:real;
Function f(x:real):real;
begin
f:=(x-5)*exp(x)+5;
end;
Begin
Maxiter:=100;
j:=0;
repeat
if (j=0) then
begin
writeln(’entrer les valeurs de a et b’);
readln(a,b);
end
else
begin
writeln(’f(a)*f(b)>0, entrer de nouveau les valeurs de a et b’);
readln(a,b);
end;
j:=j+1;
until (f(a)*f(b)<=0.0);
count:=0;
repeat
count:=count+1;
c:=(a+b)/2.0;
if (f(c)=0.0) then begin
l:=c;
diff:=epsi;
end
else
begin
if(f(a)*f(c)<0) then
b:=c
else
a:=c;
diff:=abs(b-a);
end;
until (diff<=epsi) or (count>=Maxiter);
if (diff<=epsi) then
begin
l:=c;
ll:=f(l);
writeln(’la solution est l=’,l:10:8,’ f(l)=’,ll:10:8);
writeln(’obtenue apres ’, count,’ iterations’);
end
else
begin
writeln(’apres’,count,’iterations il n"y a pas eu convergence’);
writeln(’Revoir peut-etre le nombre d"iterations maximale Maxiter’);
end;
writeln; writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$ Fin du programme $$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
Si xn−1 et xn sont de part et d’autre de `, on voit que xn+1 est en général plus proche
de ` que 21 (xn−1 + xn ) (méthode de la bissection). Mais xn−1 et xn peuvent être aussi du
même côté de `. On voit alors que cette méthode dérive directement de celle de Newton
en remplaçant, dans l’équation (4.8), f 0 (xn ) par la différence finie :
f (xn ) − f (xn−1 )
f 0 (xn ) = . (4.18)
xn − xn−1
Avec (4.18), l’équation (4.8) redonne directement (4.17).
En général, cette méthode converge moins vite que celle de Newton. Cependant, elle
évite le calcul de f 0 (x) : si ce calcul est long, la méthode peut être intéressante. Elle nécessite
4.7. MÉTHODE DA LA SÉCANTE 51
Fig. 4.6 –
de plus, de calculer initialement f (x) en deux points x0 et x1 , qui peuvent être les réels a
et b, d’où on déduit par l’équation (4.17), x2 , x3 ,....
(****************************************************************
*****************************************************************
******* *****
******* *****
******* Ce programme calcule la racine de l’equation f(x)=0 ****
******* par la methode de la Secante. *****
******* la precision est de epsi *****
******* *****
*****************************************************************
*****************************************************************)
Function f(x:real):real;
begin
f:=(x-5)*exp(x)+5;
end;
Begin
Maxiter:=100;
j:=0;
repeat
if (j=0) then
begin
writeln(’entrer les valeurs de a et b’);
readln(a,b);
end
else
begin
writeln(’f(a)*f(b)>0, entrer de nouveau les valeurs de a et b’);
readln(a,b);
end;
j:=j+1;
until (f(a)*f(b)<=0.0);
count:=0;
repeat
count:=count+1;
h:=-(b-a)*f(b)/(f(b)-f(a));
c:=b+h;
{ c:=(a+b)/2.0;}
if (f(c)=0.0) then begin
l:=c;
h:=epsi/10;
end
else
begin
if(f(a)*f(c)<0) then
b:=c
else
a:=c;
end;
until (abs(h)<=epsi) or (count>=Maxiter);
if (abs(h)<=epsi) then
begin
l:=c;
writeln(’la solution est l=’,l:10:8);
writeln(’obtenue apres ’, count,’ iterations’);
end
4.7. MÉTHODE DA LA SÉCANTE 53
else
begin
writeln(’apres’,count,’iterations il n"y a pas eu con vergence’);
writeln(’Revoir peut etre le nombre d"iterations maximale Maxiter’);
end;
writeln; writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’Fin du programme’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
On envisage donc le problème de la recherche des extrêma d’une fonction f (x,y) de deux
variables (la méthode est identique si le nombre de variables est plus grand) : on utilise
généralement une méthode dérivée de celle de Newton. On doit résoudre le système :
∂f (x,y)
p(x,y) = = 0,
∂x (4.19)
∂f (x,y)
q(x,y) = = 0.
∂y
Etant donné un couple (x0 ,y0 ), on pose x = x0 + ∆x et y = y0 + ∆y où ∆x et ∆y sont
solutions du système:
½
p(x0 + ∆x,y0 + ∆y) = p(x0 ,y0 ) + ∆xp0x (x0 ,y0 ) + ∆yp0y (x0 ,y0 ) = 0,
(4.20)
q(x0 + ∆x,y0 + ∆y) = q(x0 ,y0 ) + ∆xqx0 (x0 ,y0 ) + ∆yqy0 (x0 ,y0 ) = 0.
en résolvant ce système, nous obtenons:
£ ¤
∆x = −p(x0 ,y0 )qy0 (x0 ,y0 ) + q(x0 ,y0 )p0y (x0 ,y0 ) /D,
∆y = [p(x0 ,y0 )qx0 (x0 ,y0 ) − q(x0 ,y0 )p0x (x0 ,y0 )] /D, (4.21)
D = p0x (x0 ,y0 )qy0 (x0 ,y0 ) − p0y (x0 ,y0 )qx0 (x0 ,y0 )
Cette équation (4.21) permet d’obtenir un nouveau couple (x1 = x0 +∆x, y1 = y0 +∆y) qui
remplace (x0 ,y0 ). On continue ainsi jusqu’à ce que ∆x et ∆y soient suffisamment petits.
Pn (x) = (x2 +px+q)(b0 xn−2 +b1 xn−3 +b2 xn−4 +...+bn−4 x2 +bn−3 x+bn−2 )+Rx+S (4.23)
Au bout de n/2 étapes, il restera à trouver les racines d’un polynôme de degré 1 ou 2.
L’algorithme est simple : le problème est de trouver seulement p et q ou ∆p et ∆q comme
4.9. RACINES D’UN POLYNÔME : MÉTHODE DE BAIRSTOW 55
En posant:
3. On recommence cette opération jusqu’à obtenir un couple (pj ,qj ) sensiblement égal
à (pj−1 ,qj−1 ), càd jusqu’à ce que ∆p et ∆q soient inférieurs à la précision voulue ².
4. On calcule ensuite les racine de x2 +pj x+qj , où j est le nombre d’itérations effectuées
pour avoir le couple (pj ,qj ) cherché. On donne ainsi les 2 premières racines de Pn (x).
5. On recommence le processus ci-dessus (étapes 1 à 4) avec le polynôme Pn−2 (x) dont
les coefficients sont b0 ,b1 ,...,bn−2 jusqu’à réduire finalement le degré du polynôme à
2, 1 ou 0.
Le programme Pascal permettant de concrétiser cette procédure est:
Program Bairstow ;
Uses crt, printer, dos, graph ;
Const degremax = 15 ;
Epsi=1.0e-07 ;
Epsi2=1.0e-14 ;
a00=1.0 ;
itmax=50 ; {nbre d "iterations pour obtenir deltap et deltaq cherches}
Type Vecteur = array[0..degremax] of Real ;
Var a, b, c:Vecteur;
N,i,j,k1,k2,itmax,k,degre :Integer ;
x1r, x1i, x2r, x2i, x, p, q, deltap, deltaq: Real;
Ce:char;
Procedure Equa2(var a1, b1, c1, x1r, x2r, x1i, x2i :real) ;
Var delta:real;
Begin
58 CHAPITRE 4. RÉSOLUTION NUMÉRIQUES D’ÉQUATIONS
Delta:=b1*b1-4*a1*c1;
if (abs(delta)<epsi2) then delta:=0.0;
if (delta>0.0) then
begin
x1r:=(-b1-sqrt(delta))/(2*a1);
x2r:=(-b1+sqrt(delta))/(2*a1);
x1i:=0.0; x2i:=0.0;
writeln(’deux racines reelles’);
writeln(’x1:=’, x1r:9:5);
writeln(’x2:=’, x2r:9:5);
end else
if (delta<0.0) then
begin
x1r:=-b1/(2*a1); x2r:=x1r;
x1i:=-sqrt(-delta))/(2*a1); x1i=abs(x1i); x2i:=-x1i;
writeln(’deux solutions complexes conjuguees’);
writeln(’x1 =’, x1r :9 :5,’+i(’,x1i :9 :5,’)’) ;
writeln(’x2 =’, x2r :9 :5,’-i(’,x1i :9 :5,’)’) ;
end else
begin
x1r:=-b1/(2*a1); x2r:=x1r; x1i:=0.0; x2i:=0.0;
writeln(’Une racine double’);
writeln(’x1=x2=’,x1r:9:5);
end;
end; {Fin de la procedure}
(*\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S*)
Begin
Writeln(’entrer a[’, i,’]’);
Readln(a[i]);
End;
(**************** Fin enregistrement des donnees*****************)
{Debut de la procedure de Bairstow}.
If (n<=2) then
Begin
If (n=1) then Equa1(a[0],a[1],x)
Else Equa2(a[0],a[1],a[2],x1r,x2r,x1i,x2i)
End else
Begin
Repeat
p:=2.0;
q:=1.0;
b[0]:=a[0]; c[0]:=b[0];
j:=0; {j est le compteur des iterations}
Repeat{factorisation du polynome; calcul de p et q}
j:=j+1; b[1]:=a[1]-p*b[0];
c[1]:=b[1]-p*c[0];
for k:=2 to n do {calcul des termes des suites bn et cn}
begin
k1:=k+1; k2:=k-2;
b[k]:=a[k]-p*b[k1]-q*b[k2];
c[k]:=b[k]-p*c[k1]-q*c[k2];
end; { fin calcul des termes de la suite bn et cn}
deltapq(b,c,n,deltap,deltaq);
p:=p+deltap;
q:=q+deltaq;
until ((abs(deltap)<= epsi) or (abs(deltaq)<= epsi)or (j>= itmax);
(**************** Fin factorisation de Pn et calcul de p et q*****************)
if (j<= itmax) then {il y a eu convergence}
begin
writeln(’solutions obtenues apres’,j,’iterations :’);
equa2(a00, p, q, x1r, x2r, x1i, x2i);
end else
begin
writeln(’pas de convergence’);
writeln(’ l"execution du programme est suspendue’);
ce:=upcase(readkey);
halt;
end;
(**** reinitialisation en vue d"une nouvelle factorisation ******)
n:=n-2;
for k:=1 to n do a[k]:=b[k];
until (n<=2);
60 CHAPITRE 4. RÉSOLUTION NUMÉRIQUES D’ÉQUATIONS
4.10 Conclusion
La méthode de Newton est celle qui est plus avantageuse car elle est d’ordre 2. Mais
elle suppose généralement que l’on a localisé la racine cherchée. On emploie souvent la
méthode de Dichotomie au début des itérations puis dès que l’intervalle contenant ` est
petit, on utilise la méthode de Newton. Lorsqu’on ne peut pas calculer aisément la dérivée
de f , alors on peut utiliser la méthode de la sécante.
61
Chapitre 5
Introduction à la résolution
numérique des systèmes linéaires
5.1 Introduction
La résolution d’un système de n équations à n inconnus intervient dans de nombreux
problèmes :
– Résolution numérique des équations différentielles ordinaires et aux dérivées par-
tielles
– Analyse structurelle (voir calcul dynamique),
– Analyse des réseaux (réseaux atomiques),
– Analyse des données, ...
Soit à résoudre le système :
a11 x1 + a12 x2 + ... + a1n xn = y1
a21 x1 + a22 x2 + ... + a2n xn = y2
. (5.1)
...
an1 x1 + an2 x2 + ... + ann xn = yn
Ce système peut se mettre sous la forme d’une équation matricielle
AX = B, (5.2)
où les n inconnues x1 ,x2 ,...,xn et y1 ,y2 ,,yn sont rangés dans les matrices uni-colonnes sui-
vantes :
x1 y1
x2 y2
.
= X et . = Y, (5.3)
. .
. .
xn yn
et A est une matrice carrée n × n réelle donnée par :
a11 a12 ... a1n
a21 a22 ... a2n
. . . .
= A ≡ [aij ] (5.4)
. . . .
. . . .
an1 an2 ... ann
62CHAPITRE 5. INTRODUCTION À LA RÉSOLUTION NUMÉRIQUE DES SYSTÈMES LINÉAIR
Dans aij , l’indice ”i” représente le numéro de la ligne et l’indice ”j” celui de la colonne. A
ce stade, il est utile de remarquer que la résolution du système linéaire, s’il est possible,
est équivalente à l’inversion d’une matrice car, si le déterminant de A est différent de zéro,
on a :
X = A−1 Y. (5.5)
Le choix d’une bonne méthode de résolution du système (5.1) doit se faire en fonction du
critère de précision et de coût :
Un mauvais exemple serait celui qui consisterait à résoudre le système (5.1) par la méthode
de Cramer car, par cette méthode, xj = detAj /detA, où Aj est la matrice obtenue par
remplacement de la jième colonne de A par Y.
– Méthode de Gauss-Jordan,
– Méthode de Gauss,
– Méthode de Choleski
– Méthodes de Gauss-Seidel
– Méthode de Jacobi.
La méthode du pivot est commode pour les systèmes denses, peu élevés ainsi que pour les
matrices bandes même d’ordre élevé. La méthode itérative est mieux adaptée aux autres
matrices d’ordre élevé comportant de nombreux éléments nuls.
Pratiquement, tous les calculateurs ont des programmes optimisés de résolution des
systèmes d’équation. Lorsque cela est possible, il est préférable d’utiliser ces programmes
plutôt que d’en écrire un soi-même car ils sont optimisés et adaptés aux calculateurs
utilisés. Cependant, de nombreuses situations spécifiques peuvent se présenter où il est
plus avantageux d’écrire un programme adapté.
5.2. MÉTHODE DU PIVOT 63
On choisit successivement chaque ligne comme ligne pivot. Le pivot étant le premier
élément non nul de la ligne. (le but principal de la méthode étant de diagonaliser la ma-
trice).
Première étape
On divise la première ligne de (5.6) par a11 . Ce qui donne:
0
1 a012 a013 a014 x1 y1
a21 a22 a23 a24
x2 y2
= . (5.7)
a31 a32 a33 a34 x3 y3
a41 a42 a43 a44 x4 y4
Ensuite, on annule le premier terme de chacune des autres lignes en procédant comme
suit :
– A la 2ième ligne, on retranche la première multipliée par a21
– A la 3ième ligne, on retranche la première multipliée par a31
– A la 4ième ligne, on retranche la première multipliée par a41 ,
ce qui donne :
0
1 a012 a013 a014 x1 y1
0 a022 a023 a024 x2 y20
0 a032 a033 a034 x3 = y30 . (5.8)
0 a042 a043 a044 x4 y40
Deuxième étape
On prend maintenant la 2ième ligne comme ligne pivot, et a022 comme élément pivot. On
répète sur la deuxième ligne les opérations précédentes faites sur la première ligne, càd :
0
1 a012 a013 a014 x1 y1
0 1 a”23 a”24 x2 y”2
0 a032 a033 a034 x3 = y30 . (5.9)
0 a042 a043 a044 x4 y40
Troisième étape
On prend ensuite la 3ième ligne comme ligne pivot et a0033 comme élément pivot, puis la
4ième ligne comme ligne pivot et a0044 comme élément pivot, ce qui donne finalement:
(4)
1 0 0 0 x1 y1
0 1 0 0 x2 (4)
y2
= . (5.11)
0 0 1 0 x3 y (4)
3
0 0 0 1 x4 (4)
y4
Et on obtient donc:
(4) (4) (4) (4)
x1 = y1 , x2 = y2 , x3 = y3 , x4 = y4 , (5.12)
AX = Y (5.13)
(k)
Y (k) est le vecteur dont la iieme composante est yi . L’étape suivante consiste à prendre
(k)
ak+1,k+1 comme élément pivot. On divise la (k + 1)ieme ligne par cet élément, ce qui donne
pour j = k + 1,
première étape
(
(k) (k)
a0ij = aij et yi0 = yi , si i 6= k + 1
(k) (k) (k) (k) (5.16)
a0k+1,j = ak+1,j /ak+1,k+1 et yk+1
0
= yk+1 /ak+1,k+1 , si i = k + 1.
5.2. MÉTHODE DU PIVOT 65
(k)
Puis à chaque ligne i 6= k + 1, on retranche la ligne (k + 1) multipliée par ai,k+1 , ce qui
donne pour i 6= k + 1:
Deuxième étape
(
(k+1) (k) (k)
aij = aij − ai,k+1 × a0k+1,j
(k+1) (k) (k) 0
(5.17)
yi = yi − ai,k+1 × yk+1 si i = k + 1.
On remarque à partir des équations (5.16) et (5.17) que les formules désignant y identiques
à celles définissant a. On obtient donc les relations sur les composantes du vecteur Y en
(k) (k)
posant yi = ai,n+1 (matrice d’ordre n). On n’a plus qu’à considérer les équations sur les
éléments aij . Il suffit de faire varier j de k + 1 à n + 1 au lieu de k + 1 à n.
En portant dans (5.17) les valeurs de [aij ] tirées des équations (5.16), on obtient fina-
lement la procédure suivante :
• Initialisation
(0) (0)
A(0) = A et ai,n+1 = yi (5.18)
pour i allant de 1 à n
• Traitement
Pour k allant de 0 à n − 1
– i = k + 1 (ligne pivot) et j = k + 1 à n + 1
(k+1) (k) (k)
ak+1,j = ak+1,j /ak+1,k+1 (5.19)
– i allant de 1 à n, i 6= k + 1, et j = k + 1 à n + 1
(k+1) (k) (k) (k+1)
ai,j = ai,j − ai,k+1 × ak+1,j (5.20)
Le nombre d’opérations nécessaires pour résoudre le système est environ n3 /2, (n ≥ 10).
ce qui supprime tous les calculs relatifs aux termes situés au dessus de la diagonale. Il en
résulte deux modifications par rapport aux équations (5.19) et (5.20) :
5.2.3.2 Calcul
Première phase : Triangularisation de la matrice A
• Initialisation
(0) (0)
A(0) = A et ai,n+1 = yi , i = 1,2,..,n (5.21)
• Traitement
Pour k allant de 0 à n − 1 on a :
– i = k + 1 (ligne pivot) et j = k + 1 à n + 1
(k+1) (k) (k)
ak+1,j = ak+1,j /ak+1,k+1 (5.22)
– i allant de k + 2 à n et j = k + 1 à n + 1
(k+1) (k) (k) (k+1)
ai,j = ai,j − ai,k+1 × ak+1,j (5.23)
La méthode de Gauss est en butte aux mêmes difficultés que celle de Gauss-Jordan
pour les pivots nuls et pivots petits. Les précision des résultats dépend de la grandeur du
(k)
module de ak+1,k+1 par rapport aux autres coefficients. Deux techniques de choix du pivot
(k)
ak+1,k+1 permettent de limiter les erreurs :
5.2. MÉTHODE DU PIVOT 67
? Pivot partiel
(k) (k)
On permute les lignes A(k) de façon à avoir | aii | supérieur à | aji | pour j allant de i + 1
à n. cette méthode est sans influence sur l’ordre des inconnues x1 , x2 ,..., xn .
? Pivot Glogal
(k) (k)
On permute les lignes et colonnes de A(k) de façon à avoir | aii | supérieur à | ajk | pour
j et k allant de i + 1 à n. Cette méthode induit une perturbation des variables dont il faut
garder la trace pour le résultat.
Le passage d’une notation à double indice à une notation à simple indice montre que la
matrice peut être décrite par 3n données : càd a1 ,a2 ,...,an , b1 ,b2 ,...,bn et c1 ,c2 ,...,cn , avec
a1 = cn = 0. L’avantage principale des matrices bandes est d’occuper une place mémoire
bien plus réduite qu’une matrice normale (ici nous avons un tableau à 3 n dimensions au
lieu de n2 ), ce qui est un gain considérable pour les systèmes de grande taille.
On résout ces systèmes en utilisant la méthode de Gauss et non celle de Gauss Jordan
car cette dernière fait apparaı̂tre des éléments non nuls, dans les étapes intermédiaires, à
des places où il y avait des zéros dans la matrice initiale. Dans le cas de systèmes tridia-
gonnaux, cette méthode du pivot est parfois appelée méthode du double balayage ou de
Choleski.
ou encore,
ci yi − ai Bi−1
xi = − xi+1 + (5.32)
ai Ai−1 + bi ai Ai−1 + bi
On peut donc écrire
Xi = Ai xi+1 + Bi , (5.33)
avec
ci yi − ai Bi−1
Ai = − , Bi = . (5.34)
ai Ai−1 + bi ai Ai−1 + bi
A0 = B0 = 0. (5.35)
Les équations (5.33), (5.34) et (5.35) nous permettent de calculer aisément de proche en
proche, étant donné que A0 = 0 = B0 , les couples (A1 ,B1 ), (A2 ,B2 ),..., (Ai ,Bi ), etc. Le
calcul des coefficients Ai a donc été rendu possible en utilisant un premier balayage de
i = 1an.
an xn−1 + bn xn = yn . (5.36)
Ce qui s’écrit en remplaçant xn−1 par sa valeur tirée de (5.33) et (5.34), où on a fait :
i = n − 1:
D’où,
yn − an Bn−1
xn = . (5.38)
an An−1 + bn
x n = Bn . (5.39)
Ce nouvel ensemble porté dans le 2nd membre de (28) donne un autre ensemble:
(2)
0 0
x1 = (y1 − a12 x2 − a13 x3 )/a11 ,
(2)
x2 = (y2 − a21 x01 − a23 x03 )/a22 , (5.44)
x(2) = (y − a x0 − a x0 )/a ,
3 3 31 1 32 2 33
et ainsi de suite.
(0)
La convergence du procédé ne dépend pas du choix des valeurs initiales xj , mais seule-
ment des valeurs du coefficient.
La convergence est assurée si on a, pour chaque valeur de i (càd pour chaque ligne) :
n
X
|aii | ≥ aij , (5.49)
j=1,i<>j
En pratique, on peut aussi observer une convergence dans les conditions moins restric-
tives.
Facteur de Relaxation
(0)
Si le choix initial, xj n’influe pas sur la convergence, ou la divergence de la méthode, il
influe par contre considérablement sur la rapidité de la convergence, si convergence il y a.
Plus, les valeurs initiales sont proches des valeurs réelles, et plus la convergence est rapide.
La figure suivante montre l’évolution possible de l’une des quantités xj :
(k)
Fig.2 Evolution possible des xj . ici, xj est la valeur recherchée.
(0) (1) (1)
Partant de xj on obtient xj . Au lieu de réutiliser xj pour l’itération suivante, on
(1)
voit que la convergence serait plus rapide si on prenait à la place de xj
∗(1) (0) (1) (0)
xj = xj + λ(xj − xj ), λ > 1. (5.50)
Si λ > 2, le processus diverge souvent. En général, 1 < λ < 2 est utilisé pour accélérer la
convergence d’un processus itératif déjà convergent et 0 < λ < 1 permet souvent de faire
converger un processus divergent.
On peut soit utiliser la même valeur de λ pour tout l’ensemble soit utiliser des λ
différents pour différents blocs.
En pratique, λ n’est pas connu à l’avance, il faut faire des essais. On peut suivre
(k) (k)
l’évolution de xj puis injecter une valeur de λ et voir comment évolue les xj suivants.
La méthode itérative est plus utilisée pour la résolution des systèmes de grande taille
et des systèmes non linéaires.
Begin
(* donnees du systeme lineaire de n equations a n inconnues*)
writeln(’entrer la valeur de n, n etant le nombre d"equations’);
readln(n);
while (n>rangmax) do
begin
writeln(’n doit etre >= a ’, rangmax);
writeln(’entrer de nouveau n’);
readln(n);
end;
(* elements de la matrice*)
np1:=n+1;
nm1:=n-1;
writeln;
writeln(’entrer les elements de la matrice A’);
for i:=1 to n do
for j:=1 to n do
5.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES ÉTUDIÉES 73
begin
writeln(’entrer a[’,i,’,’,j,’]’);
readln(a0[i,j]);
end;
writeln;
writeln(’entrer les elements du second membre Y’);
for i:=1 to n do
begin
writeln(’entrer y[’,i,’]’);
readln(y0[i]);
end;
writeln;
writeln(’Premiere Phase, INITIALISATION’);
for i:=1 to n do
for j:=1 to n do a[i,j]:=a0[i,j];
for i:=1 to n do a[i,np1]:=y0[i];
test:=5;
{ecriture du systeme d"equations}
writeln(’voulez-vous suivre les diffrentes etapes de la diagonalisation?’);
writeln(’Tapez " 1" si vous le desirez et " 0 " sinon’);
readln(test);
if (test=1) then
begin
writeln(’systeme d"equations AX=Y’); writeln;
ecriture(a0,y0,n);
end;
(*********** Diagonalisation ****)
permutligne(a,n,kp1,Lpivot);
if ( test=1) then writeln(’permutons les lignes’, k+1,’ et ’, Lpivot);
end;
{fin de la recherche de pivot maximal}
{ Autres lignes}
For i:= 1 to n do
begin
if (i=k+1) then
begin
for j:=k+1 to n+1 do a[k+1,j]:=m[j];
end
else
begin
for j:=k+2 to n+1 do a[i,j]:=a[i,j]-(a[i,k+1])*m[j];
a[i,k+1]:=0.0; (* cle du pb*)
end;
y[i]:=a[i,np1]; (* necessaire si on veut suivre les differentes etapes *)
end; {boucle i}
writeln;
writeln(’ solution du systeme precedent’);
writeln;
for i:=1 to n do
5.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES ÉTUDIÉES 75
begin
x[i]:=a[i,np1];
writeln(’x[’,i,’]=’, x[i]:10:5);
end;
writeln;
writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Gauss-Jordan $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
const
rangmax=50;
rangmax1=51;
epsi=1.0E-7;
Type
Matrice=array[1..rangmax,1..rangmax1] of real;
Vecteur=array[1..rangmax] of real;
Var
a,a0:Matrice;
X,Y,Y0,m:Vecteur;
ii,i,j,k,Lpivot, n,nm1,np1, test:integer;
Pivotmax, somme:real;
ce:char;
76CHAPITRE 5. INTRODUCTION À LA RÉSOLUTION NUMÉRIQUE DES SYSTÈMES LINÉAIR
var i,j:integer;
begin
for i:=1 to n do
begin
write(’ ’, a[i,1]:5:4,’x1’, ’ ’);
for j:=2 to n do
begin
if (a[i,j]>=0.0) then write(’+’);
write(a[i,j]:5:4,’x’,j:1,’ ’);
end;
writeln(’= ’, y[i]:5:4);
end;
end;
Begin
{ clrscr; }
(* donnes du systeme lineaire de n equations a n inconnues*)
writeln(’entrer la valeur de n, n etant le nombre d"equations’);
readln(n);
while (n>rangmax) do
begin
writeln(’n doit etre >= a ’, rangmax);
writeln(’entrer de nouveau n’);
readln(n);
end;
(* elements de la matrice*)
np1:=n+1;
nm1:=n-1;
writeln;
5.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES ÉTUDIÉES 77
end;
if (Lpivot<>k+1) then permutligne(a,n,k+1,Lpivot);
{fin de la recherche de pivot maximal}
writeln;
writeln;
5.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES ÉTUDIÉES 79
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Gauss $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
const
rangmax=50;
rangmax1=51;
epsi=1.0E-14;
Type
Matrice=array[1..rangmax,1..rangmax] of real;
Vecteur1=array[1..rangmax] of real;
Vecteur2=array[0..rangmax] of real;
Var am:matrice;
a, b,c, X,Y:Vecteur1;
Ga, Gb : Vecteur2;
i,j,n:integer;
Deno:real;
ce:char;
singu:boolean;
var i,j:integer;
begin
for i:=1 to n do
begin
write(’ ’, a[i,1]:5:4,’x1’, ’ ’);
for j:=2 to n do
begin
if (a[i,j]>=0.0) then write(’+’);
write(a[i,j]:5:4,’x’,j:1,’ ’);
end;
writeln(’= ’, y[i]:5:4);
end;
end;
Begin
{ clrscr; }
singu:=false;
(* elements de la matrice A *)
writeln;
for i:=1 to n do for j:=1 to n do am[i,j]:=0.0; {initialisation de A}
for i:=1 to n do
begin
if (i=1) then
begin
writeln(’donner dans l"ordre les valeurs de A[’,i,’,’,i,’]’,
’ A[’,i,’,’,i+1,’]’, ’ et y[’,i,’]’);
readln(am[i,i],am[i,i+1],y[i]);
end
else if (i=n) then
5.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES ÉTUDIÉES 81
begin
writeln(’donner dans l"ordre les valeurs de A[’,i,’,’,i-1,’]’,
’ A[’,i,’,’,i,’]’, ’ et y[’,i,’]’);
readln(am[i,i-1], am[i,i], y[i]);
end
else
begin
writeln(’donner dans l"ordre les valeurs de A[’,i,’,’,i-1,’]’,
’ A[’,i,’,’,i,’]’, ’ et A[’,i,’,’,i+1,’]’, ’y[’,i,’]’);
readln(am[i,i-1], am[i,i], am[i,i+1], y[i]);
end;
end;
(**** ecritue du systeme d"equations a resoudre****)
writeln;
ecriture(am,y,n);
(* for i:=1 to n do
begin
writeln(’entrer dans l"ordre a[’,i,’]’,
’ b[’,i,’]’, ’ c[’,i,’]’,’ et y[’,i,’]’);
readln(a[i], b[i], c[i], y[i]);
end;
a[1]:=0.0;
c[n]:=0.0; *)
Ga[0]:=0.0; Gb[0]:=0.0;
i:=1;
while (i<=n) and not singu do
begin
if (i=1) then
begin
Gb[i]:=y[i]/b[i];
Ga[i]:=-c[i]/b[i];
end
else
begin
Deno:=a[i]*Ga[i-1]+b[i];
if abs(Deno)<=epsi then singu:=true
82CHAPITRE 5. INTRODUCTION À LA RÉSOLUTION NUMÉRIQUE DES SYSTÈMES LINÉAIR
else
begin
Gb[i]:=(Y[i]-a[i]*Gb[i-1])/Deno;
Ga[i]:=-c[i]/Deno;
end;
end;
i:=i+1;
end;
writeln;
writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Choleski $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
83
Chapitre 6
En d’autres termes, cette technique est utilisée lorsqu’une fonction f (x) d’une variable
réelle est connue par une table de valeurs. Elle peut également être exploitée quand on
dispose aussi de l’expression d’une fonction. En effet, si la fonction est utilisée plusieurs au
cours du programme et que son calcul requiert beaucoup trop de temps machine, on pourra
alors construire une table de valeurs {xi ,f (xi )}i=0,...,n (les abscisses étant judicieusement
choisies) à partir de laquelle on estimera la fonction par une interpolation. L’interpolation
a lieu entre les points {xi ,fi } équidistants de h , où h est le pas de la table.
La question qu’on peut se poser est de savoir s’il existe un tel polynôme. Pour répondre à
cette question, considérons la base naturelle de l’espace des polynômes de degré inférieur
84 CHAPITRE 6. APPROXIMATION DES FONCTIONS NUMÉRIQUES...
où les λj sont des scalaires à déterminer à l’aide des contraintes (6.1). En écrivant que
(6.1) doit être satisfaite par l’expression (6.3) de Pn , on obtient :
λ0 ϕ0 (x0 ) + λ1 ϕ1 (x0 ) + ... + λn ϕn (x0 ) = f0 ,
λ 0 ϕ0 (x1 ) + λ1 ϕ1 (x1 ) + ... + λn ϕn (x1 ) = f1 ,
...
(6.4)
...
...
λ0 ϕ0 (xn ) + λ1 ϕ1 (xn ) + ... + λn ϕn (xn ) = fn ,
Ce système équivaut à :
λ0 x00 + λ1 x10 + ... + λn xn0 = f0 ,
λ0 x01 + λ1 x11 + ... + λn xn1 = f1 ,
...
(6.5)
...
...
λ0 x0n + λ1 ϕ1 x1n + ... + λn ϕn xnn = fn ,
Soit :
1 x10 x20 xn0 λ1 f0
1 x11 x21 xn1 λ2 f1
=
. . . . ... . . (6.6)
1 x1n x2n xnn λn fn
Soit A la matrice carrée d’ordre n + 1 du système (6.6), il est clair que AT (transposée de
A) est de Van Dermonde. D’autre part, on a (résultat de l’algèbre linéaire):
Or,
Y
detAT = (xi − xj ). (6.8)
0≤j<i≤n
Comme x0 < x1 < ... < xn , on déduit que det(A) 6= 0, donc Pn existe et de façon unique.
Maintenant, on sait que Pn existe, mais on ne dispose pas encore de son expression
explicite. On peut y accéder par la résolution du système linéaire (6.6). Mais on peut
procéder autrement.
6.2. INTERPOLATION DE LAGRANGE 85
On va chercher une base dans laquelle les (fi )ni=0 sont les composantes de Pn . Pour cela,
on introduit les polynômes de degré inférieur ou égale à n, Φi vérifiant :
où δij est le symbole de Kronecker. On rappelle que δij = 1sii = j et δij = 0 si i 6= j. En
prenant :
n
Y
Φ0 (x) = γ0 (x − xk ), ∀x ∈ <, (6.10)
k=1
on a :
n
Y n
Y
−1
Φ0 (x0 ) = 1 ⇒ γ0 = [ (x0 − xk )] = (x0 − xk )−1 . (6.11)
k=1 k=1
Supposons, pour l’instant, que les (Φi )i=0,...,n) forment une base de l’espace des polynômes
de degré inférieur ou égale à n et montrons que les (fi )i=(0,...,n) sont les composantes de Pn
dans cette base.
X
Pn = µi Φ i , (6.13)
Pour x = xj , on a :
n
X n
X
fj = Pn (xj ) = µi Φi (xj ) = µi δij = µj ,∀j = 0,1,...,n. (6.15)
i=0 i=0
D’où la démonstration.
Il reste maintenant à démontrer que {Φi }i=0,...,n est une base. Il suffit de montrer que
cette famille est libre.
X X
γi Φi = 0 == γi Φi (x) = 0,∀x. (6.16)
En particulier, pour x = xj , on a :
X
γi Φi (xj ) = 0 ⇒ γi = 0 ∀i. (6.17)
Soit f une fonction numérique définie sur [a,b], avec −∞ < a < b < +∞ données.
Soit a ≤ x0 < x1 < ... < xn ≤ b, n + 1 points réels donnés. On note fi la valeur de f
au points xi pour i = 0,...,n alors il existe un unique polynôme de degré n noté Pn , qui
coı̈ncide avec f aux points xi (i = 0,1,...,n). Ce polynôme est donné par :
n
X Yn µ ¶
x − xk
Pn (x) = fi Φi (x) avec Φi (x) = . (6.18)
i=0 k=0,k6=i
xi − xk
Proposition I.1
En posant
n
Y
ωn (x) = (x − xk ) (6.19)
k=0
Proposition I.2
Cette proposition donne une expression qui offre l’avantage de réduire sensiblement le
temps de calcul sur ordinateur de Pn (x) pour un réel x donné.
Pn fk
0
k=0 (x−xk )ωn (xk )
Pn (x) = Pn 1 . (6.21)
0
k=0 (x−xk )ωn (xk )
P
Pour démontrer cette proposition, on part de la remarque nk=0 Φk (x) = 1 (on a pris le cas
particulier d’une fonction définie f (x) = 1, ceci implique que fi = 1 et considérer (6.18),
ceci implique que
n
X 1
ωn (x) = 1/ . (6.22)
k=0
(x − xk )ωn0 (xk )
Théorème III.2
6.3. INTERPOLATION DE HERMITE 87
Soit f une fonction numérique de variable réelle définie sur [a,b], avec a < b des réels
donnés.
Soient Pn l’interpolé de Lagrange aux points a ≤ x0 < ... < xn ≤ b. Si f est de classe
C n+1 sur [a,b], alors on a :
Démonstration admise.
Ce résultat que nous admettons est une version généralisée du résultat de Lagrange
énoncé à la section précédente. En effet, lorsque αi = 0, ∀i = 0,1,...,n , le problème revient
à chercher un polynôme de P tel que : P (xi ) = f (xi ),∀i = 0,1,...,n.
On a alors d’après Hermite P qui existe de façon unique et qui est de degré m = n.
Ceci est un résultat déjà énoncé sous le nom de Théorème de Lagrange.
Corollaire
Soit les n+1 triplets {xi ,f (xi ),f 0 (xi )}i=0,1,...,n où les xi sont des points donnés distincts.
Alors il existe un polynôme P unique de degré inférieur ou égal à 2n tel que
½
P (xi ) = f (xi ),
(6.28)
P 0 (xi ) = f 0 (xi ), pour i = 0,1,...,n.
88 CHAPITRE 6. APPROXIMATION DES FONCTIONS NUMÉRIQUES...
où on a posé
0
hi (x) = [1 − 2(x − xi )Φi (xi )]Φ2i (x) (6.30)
et
n
Y x − xk
ki (x) = (x − xi )Φ2i (x), Φi (x) = ( ) (6.31)
k=0,k6=i
xi − xk
Preuve.
Il est clair que hi et ki sont des polynômes de degré 2n + 1 puisque Φi est de degré n,
∀i ∈ 0,1,...,n.
On a déjà montré dans ce qui précède que Φ vérifie Φi (xj ) = δij où δij est le symbole
de Kronecker. Donc pour
j 6= i on a :
0
hi (xj ) = [1 − 2(xj − xi )Φi (xi )]Φ2i (xj ) = 0, car Φi (xj ) = δij = 0. (6.33)
i = j, on a :
0
hi (xi ) = [1 − 2(xi − xi )Φi (xi )]Φ2i (xi ) = 1 car Φi (xi ) = δii = 1. (6.34)
et pour i = j,
h0i (x) = −2Φ0i (xi )Φ2i (x) + 2[1 − 2(x − xi )Φ0i (xi )]Φ0i (x)Φi (x)
(6.38)
ki0 (x) = Φ2i (x) + 2(x − xi )Φ0 − i(x)Φ − i(x)
6.4. INTERPOLATION PAR LES SPLINES 89
Théorème 4
Soit f une fonction de classe C (2n+2) sur [a,b], a ≤ x0 < x1 < ... < xn ≤ b (n+1) points
d’interpolations de f pour la méthode de Hermite. Alors, on a pour tout x ∈ [a,b]
(x − x0 )2 (x − x1 )2 ...(x − xn )2 (2n+2)
en (x) = f (x) − p(x) = f (θx ), (6.39)
(2n + 2)!
Remarque
On peut obtenir des formulas d’interpolation dites mixtes où
Indications : commencer par exemple par x0 ,x1 ,x2 puis x0 ,x1 ,x2 ,x3 et généraliser.
Exercice 2
On considère le carré Ω = [0,1] × [0,1]. Les Mi sont les points expérimentaux:
1) définir les Φi (x1 ,x2 ) tel que Φi (Mj ) = δij
2) Monter que la famille {Φi }3i=0 est une base de l’espace des polynômes de degré inférieur
ou égal à 1 par rapport à chacune des variables.
souhaite interpoler f par une fonction s dont la restriction en chaque [xi ,xi+1 ] notée si ,
est un polynôme vérifiant :
Si (xi ) = f (xi ) = fi
Si (xi+1 ) = f (xi+1 ) = fi+1
(6.42)
s0i−1 (xi ) = s0i (xi )
s”i−1 (xi ) = s”i (xi )
Les deux première équations assurent que s coı̈ncide avec f aux nuds {xi }ni=1 , alors que
les deux dernières assurent la régularité C 2 de s sur [a,b]. Le problème revient à chercher
des polynômes si définis sur [a,b] satisfaisant aux relations () et de plus bas degré.
On vérifie ainsi aisément que le degré le plus bas de de si (x) vaut 3. Ce qui conduit
naturellement à poser :
x − xi+1 x − xi
s”i (x) = αi + αi+1 , (6.43)
xi − xi+1 xi+1 − xi
où αi et αi+1 sont des inconnues réelles. De la relation (6.43), on peut écrire :
x − xi+2 x − xi+1
s”i+1 (x) = αi+1 + αi+2 , (6.44)
xi+1 − xi+2 xi+2 − xi+1
On voit que cette expression de la dérivée seconde de s(x) vérifie déjà la dernière relation
de (6.42) car s”i (xi+1 ) = s”i+1 (xi+1 ) = αi+1 .
Jusqu’à présent, on a utilisé que les deux premières conditions et la dernière condition de
(6.42), il reste donc à exploiter l’avant-dernière condition dans l’espoir de trouver les αi .
En dérivant (6.47), on obtient :
· ¸ · ¸
0 hi (xi+1 − x)2 hi (x − xi )2 fi fi+1
si (x) = αi − + αi+1 − + − + , i = 0,1,...,n − 1.
6 2hi 6 2hi hi hi
(6.48)
Cette condition est satisfaite si s0i (xi ) = s0i−1 (xi ), soit :
hi hi fi fi+1 hi−1 hi−1 fi−1 fi
−2αi − αi+1 − + = αi−1 + 2αi − + i = 1,...,n − 1. (6.49)
6 6 hi hi 6 6 hi−1 hi−1
En écrivant cette equation sous une forme convenable, on obtient :
µ ¶
fi+1 − fi fi − fi−1
hi−1 αi−1 + 2(hi + hi−1 )αi + hi αi+1 = 6 − i = 1,...,n − 1. (6.50)
hi hi−1
On a donc, (n-1) équations à (n+1) inconnues. On suppose connu α0 et αn . Ce qui conduit
au système suivant :
2(h0 + h1 )α1 + h1 α2 = γ1
h1 α1 + 2(h1 + h2 )α2 + h2 α3 = γ2 ,
h2 α2 + 2(h2 + h3 )α3 + h3 α4 = γ3 ,
(6.51)
...
h α + 2(hn−3 + hn−2 )αn−2 + hn−2 αn−1 = γn−2 ,
n−3 n−3
hn−2 αn−2 + 2(hn−2 + hn−1 )αn−1 = γn−1 .
La matrice de ce système est alors :
2(h0 + h1 ) h1 0 0 0 0
h1 2(h1 + h2 ) h2 0 0 0
0 h (2h + h ) h 0 0
A=
2 2 3 3
. . . . . .
0 0 0 hn−3 2(hn−3 + hn−2 ) hn−2
0 0 0 0 hn−2 2(hn−2 + hn−1 )
(6.52)
Cette matrice est une matrice tridiagonale par points.
Définition On appelle matrice tridiagonale par points une matrice A carré d’ordre N
ayant la structure suivante :
a11 a12 0 0 0 0
a21 a22 a23 0 0 0
0 a32 a33 a 0 0
34 (6.53)
. . . . . .
0 0 0 an−1,n−2 an−1,n−1 an−1,n
0 0 0 0 an,n−1 an,n
92 CHAPITRE 6. APPROXIMATION DES FONCTIONS NUMÉRIQUES...
Définition Une matrice carrée A vérifiant les conditions (i) et (ii) du rappel précédent
s’appelle une matrice à dominance diagonale ou encore une matrice à diagonale dominante.
Lorsque l’inégalité (i) est stricte ∀i = 1,2,...,n, la matrice A est dite à diagonale stric-
tement dominante.
Ceci montre que les αi peuvent bien être obtenus. Ils sont calculés numériquement soit
par une méthode directe, soit par une méthode itérative.
93
Chapitre 7
de sorte que
Z b Z b Z bX
n
f (x)dx ' Pn (x)dx = fi Φi (x)dx. (7.6)
a a a i=0
soit
Z b n Z
X b n µZ
X b ¶ n
X
f (x)dx ' fi Φi (x)dx = Φi (x)dx fi = Ani fi (xi ), (7.7)
a i=0 a i=0 a i=0
avec
Z b
Ani = Φi (x)dx. (7.8)
a
Remarque
Lorsqu’il n’y a aucun risque de confusion, on note Ai au lieu de Ani . Dans le cas général,
l’intégrale
Z b n
X
µ(x)f (x)dx = Ani fi (xi ), (7.9)
a i=0
avec
Z b
Ani = Φi (x)µ(x)dx, (7.10)
a
Définition 2
Une quadrature à (n + 1) points est de type interpolation si la condition suivante est
satisfaite:
Z b
n
Ai = Φi (x)µ(x)dx, ∀i = 0,1,...,n. (7.11)
a
Définition 3
L’erreur associée à une quadrature de type interpolation est
Z b n
X
Rn (f ) = f (x)µ(x)dx − Ani fi (xi ), (7.12)
a i=0
Rn (f ) = I(f ) − In (f ) = 0, ∀f ∈ E. (7.15)
Théorème 1 Soit (7.14) une quadrature à (n + 1) points. Cette quadrature est de type
interpolation si elle est exacte sur E ≡ Pn espace des polynômes de dedré inférieur ou égal
à n.
Définition 5
Une quadrature définie par (7.14) a un degré de précision égal à p si elle est exacte sur
℘p (espace des polynômes de degré ≤ p) et Rn (x(p+1) ) 6= 0, Rn (xk ) = 0, ∀0 ≤ k ≤ p.
Proposition 1
Si la quadrature définie par 7.14) est de type interpolation, alors son degré de précision
est supérieur ou égal à n.
Application du théorème 3
Le théorème 3 fournit un moyen de calcul des Ai .
Exemple. calculer les coefficients A0 et A1 dans la quadrature suivante:
Z 1
f (x)dx ' A0 f (−1) + A1 f (1), (7.16)
1
de telle sorte qu’elle soit de type interpolation et expliciter l’erreur qui y est associée.
Solution.
• Elle est de type interpolation ssi elle est exacte sur P1 6=< 1,x > (n=1 car on a n+1
points qui est 2).
R1
– La formule est donc exacte pour f (x) = 1, soit 1 1dx = A0 + A1 ⇒ A0 + A1 = 2.
R1
– Elle est aussi exacte pour f (x) = x ⇒ 1 xdx = A0 f (−1)+A1 f (1) ⇒ −A0 +A1 = 0.
On obtient finalement un système de 2 équations à deux inconnues qui s’écrit:
½
A0 + A1 = 2,
(7.17)
A0 − A1 = 0
où
Z 1
(x + 1)(x − 1) (2)
R1 (f ) = f (θx )dx, (7.19)
−1 2!
où θx est une application continue de [−1,1] dans lui-même. On a par le théorème de la
moyenne
Z
f ”(α) 1
R1 (f ) = (x + 1)(x − 1)dx, − 1 ≤ α ≤ 1, (7.20)
2 −1
96 CHAPITRE 7. INTÉGRATION NUMÉRIQUE DES FONCTIONS.
Donc la formule est exacte sur P1 mais ne l’est pas sur P2 . Le degré de précision est donc
1.
αj
n X
X
In (f ) = Anjk f (k) (xj ), (7.23)
j=0 k=0
où, f (k) désigne la dérivée d’ordre k de f . La relation (7.23) s’appelle formule de qua-
drature généralisée. Comme on le verra dans l’exemple ci-dessous, on peut déterminer les
coefficients Ajk de telle sorte que la quadrature généralisée (7.23) soit exacte sur Pn+|α| . Au-
trement dit, de telle sorte que la quadrature généralisée ait un degré de précision ≥ n+|α|.
Exemple. Déterminer les coefficients A00 ,A01 ,A10 ,A20 ,A21 dans la quadrature suivante:
Z 1
f (x)dx = A00 f (−1) + f 0 (−1)A01 + f (0)A10 + f (1)A20 + f 0 (1)A21 + R(f ) (7.24)
−1
de telle sorte que cette quadrature ait un degré de précision au moins égal à 4.
Solution. Cette quadrature a un degré de précision ≥ 4 entraine qu’elle est exacte sur
P4 =< 1,x,x2 ,x3 ,x4 >. On écrit donc successivement que la quadrature est exacte pour
f (x) = 1,x,x2 ,x3 , et x4 et on trouve: A00 = A20 = 7/15, A01 = −A21 = 1/15, A10 = 16/15.
La quadrature s’écrit donc:
Z 1
7 1 16 7 1
f (x)dx = f (−1) + f 0 (−1) + f (0) + f (1) − f 0 (1) + R(f ). (7.25)
−1 15 15 15 15 15
˜ ) = b − a [f (a) + f (b)] .
I(f (7.27)
2
Par rapport aux notations de la section précédente, on obtient A00 = A01 = (b − a)/2.
On va utiliser la formule des trapèzes pour calculer les intégrales sur [xi ,xi+1 ], ce qui donne:
Z xi+1
h h3
f (x)dx = [f (xi ) + f (xi+1 )] − f ”(θi ), xi < θi < xi+1 . (7.29)
xi 2 12
soit encore,
Z " n−1
#
b
h X
f (x)(x)dx = f (a) + f (b) + 2 f (a + ih) . (7.31)
a 2 i=1
Cette formule est connue sous le nom de la formule Composite des trapèzes.
98 CHAPITRE 7. INTÉGRATION NUMÉRIQUE DES FONCTIONS.
on en déduit que
(b − a)3
R(f ) ≤ max|f ”(x)|x∈[a,b] . (7.34)
12n2
NB Ainsi, pour f de classe C 2 sur [a,b], l’erreur est de l’ordre 1/n2 .
avec
Z n
y(y − 1)(y − 2)...(y − k + 1)(y − k − 1)...(y − n)
Ck = dy (7.38)
0 k(k − 1)(k − 2)...[k − (k − 1)][k − (k + 1)]...(k − n)
L’erreur associée à cette formule est: • Pour n impair:
Z
hn+2 f (n+1) (α) n
R(f ) = y(y − 1)(y − 2)...(y − n)dy (7.39)
(n + 1)! 0
• Pour n pair:
Z ³
hn+3 f (n+2) (α) n
n´
R(f ) = y− y(y − 1)(y − 2)...(y − n)dy, (7.40)
(n + 2)! 0 2
7.3. LES QUADRATURES CLASSIQUES: FORMULES DE NEWTON-COTES 99
où α est compris entre a et b et h = (b − a)/n. Exemple 1: Cas n=2 D’après (7.38), on
a:
Z 2 Z 2 Z 2
(y − 1)(y − 2) 1 (y − 0)(y − 2) 4 (y − 0)(y − 1) 1
C0 = dy = , C1 = dy = , C1 = dy = ,
0 (0 − 1)(0 − 2) 3 0 (1 − 0)(1 − 2) 3 0 (2 − 0)(2 − 1) 3
(7.41)
Théorème
Le degré de précision d’une formule de Newton-Cotes à (n+1) points est:
– 1+n si n est pair.
– n si n est impair.
Rb
a
f (x)(x)dx = h3 {f (a) + f (b) + 2[f (a + 2h) + f (a + 4h) + ... + f (a + (n − 2)h)] +
4[f (a + h) + f (a + 3h) + ... + f (a + (n − 1)h)} + Esc .
(7.46)
avec
X n−2
h5
Esc = − f (4) f (4) [(θi,i+2 )], (7.47)
90 i=0
d’où le théorème:
Théorème
Pour f ∈ C 4 ([a,b]), on a:
Z b " n−2 n−1
#
h X X
f (x)(x)dx = f (a) + f (b) + 2 f (a + ih) + 4 f (a + ih) (7.48)
a 3 i=2,pair i=1,impair
ou encore
Z b N/2−1
X N/2−1
X
h
f (x)(x)dx = f (a) + f (b) + 4 f (a + (2p + 1)h) + 2 f (a + 2ph) (7.49)
a 3 p=0 p=1
(b − a)
R(f ) ≤ max|f (4) (x)|, (7.50)
90n4
Où les points privilégiés ξi et les coefficients ci (encore appelés poids, ou encore facteur
de pondération) dépendent du choix de n. En choisissant les points ξi racine du polynôme
de Legendre de degré n, et en utilisant les coefficients appropriés, la formule d’intégration
(7.51) est exacte pour les polynômes de degré au moins égal à 2n − 1. Par exemple,
Pour deux points, n=2 , on a :
Z 1 √ √
f (ξ)dξ ≈ c1 f (ξ1 ) + c2 f (ξ2 ) = f (−1/ 3) + f (1/ 3) (7.52)
−1
n ξi√ ci
2 ±1/
p3 1
3 0, ± 3/5 8/9, 5/9
4 ±0.8611363116, ± 0.3399810436 0.3478548451, 0.6521451549
Dans le Cas général où les bornes d’intégration ne coı̈ncident plus avec -1 et 1, il
faut alors effectuer sur x un changement de variable linéaire transformant x ∈ [a,b] en
ξ ∈ [−1,1]. Cette transformation linéaire est
b−a b+a
x= ξ+ . (7.54)
2 2
Ainsi,
Z b Z b Z 1
b−a b+a b−a
f (x)dx = f( ξ+ )dx = F (ξ)dξ (7.55)
a a 2 2 2 −1
avec
b−a b+a
F (ξ) = f ( ξ+ ). (7.56)
2 2
On a donc
Z b n
b−aX
f (x)dx = F (ξi ), (7.57)
a 2 i=1
(7.58)
Comme
(xi+2 − xi ) (xi+2 + xi )
Xi = ξ+ = hξ + (i + 1)h + a = xi+1 + hξ, (7.59)
2 2
on aura
où
avec
" n−1
#
h X
T (h) = f (a) + f (b) + 2 f (a + ih) (7.65)
2 j=1
où c2 , c4 et c6 dépendent de f(x) et de ses dérivées, mais ne dépendent pas de h. T (h) est
l’évaluation de I par la méthode des trapèzes.
La question que s’est posée Romberg est : comment peut-on obtenir une évaluation
plus précise de I?
Une première solution consiste à utiliser des pas plus nombreux et par conséquents plus
petits. Ainsi, en doublant par exemple le nombre de pas, h est divisée par 2 et l’équation
(7.64) devient :
En diminuant le pas, on obtient une suite T (h), T (h/2), T (h/4), ... qui converge vers I.
Une autre solution consiste à utiliser T (h) et T (h/2) pour obtenir une autre valeur T 0
plus précise. En effet, les équations (7.64) et (7.66) s’écrivent :
T (h) = I−c2 (h2 )−c4 (h4 )−c6 (h6 )+...T (h/2) = I−c2 (h/2)2 −c4 (h/2)4 −c6 (h/2)6 +... (7.67)
Function f(x:real):real;
begin
f:=4/(1+x*x);
end;
Begin
{clrscr;}
{Debut de l’integration}
for i:=1 to N-1 do
begin
x:=a+i*h;
somme:=somme+f(x);
end;
somme:=(h/2)*(f(a)+f(b)+2*somme);
writeln;
writeln(’valeur approchee :’, somme:16:15);
writeln(’valeur exacte :’, integral:16:15);
writeln; writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Integration par la $$$$’);
writeln(’$$$$$$ Methode des Trapezes $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
7.6. PROGRAMMATION INFORMATIQUE DES FORMULES CLASSIQUES 105
Function F(x:real):real;
begin
F:=4/(1+x*x);
end;
Begin
{clrscr;}
{Debut de l’integration}
for i:=1 to N-1 do
begin
x:=a+i*h;
if odd(i) then
somme:=somme+4*f(x)
else
106 CHAPITRE 7. INTÉGRATION NUMÉRIQUE DES FONCTIONS.
somme:=somme+2*f(x);
end;
somme:=(h/3)*(f(a)+f(b)+somme);
writeln;
writeln(’valeur approchee :’, somme:16:15);
writeln(’valeur exacte :’, integral:16:15);
writeln; writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Integration par la $$$$’);
writeln(’$$$$$$ Methode des Trapezes $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
7.6. PROGRAMMATION INFORMATIQUE DES FORMULES CLASSIQUES 107
Var c1,c2,c3,t1,t2,t3:real;
x1,x2,x3, a,b, integral, s1,s2,s3,somme, h:real;
p,N,N2:integer;
ce:char;
Function F(x:real):real;
var temp:real;
begin
F:=4/(1+x*x);
end;
Begin
{clrscr;}
{points de Gauss pour n=3 et dans le systeme de reference avec leur poids}
t1:=-sqrt(3/5); c1:=5/9;
t2:=0.0; c3:=5/9;
t3:=sqrt(3/5); c2:=8/9;
{Debut de l’integration}
for p:=0 to N2-1 do
begin
x2:=a+h*(2*p+1); s2:= s2+F(x2);
x1:=x2+h*t1; s1:= s1+F(x1);
x3:=x2+h*t3; s3:= s3+F(x3);
end;
somme:=h*(c1*s1+c2*s2+c3*s3);
writeln;
writeln(’valeur approchee :’, somme:16:15);
writeln(’valeur exacte :’, integral:16:15);
writeln; writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Integration par la $$$$’);
writeln(’$$$$$$ Methode de Gauss $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
109
Chapitre 8
Le résultat suivant (dû à Cauchy- Lipchitz) donne les conditions d’existence et d’uni-
cité d’une solution du système (8.1) et (8.2).
La condition de Lipchitz par rapport à la deuxième variable est donc satisfaite (avec
L=1/e) et Φ(.,.) est continue sur [e,5] × R. Il résulte du théorème 1 que le système (8.3))
admet une solution unique.
Vous vérifierez à titre d’exemple que y(x) = x/logx est une solution.
Notons que y = [y1 ,y2 ,y3 ,...,yn ] et Φ(x,y) = [φ1 (x,y),φ2 (x,y),φ3 (x,y),...,φn (x,y)] et le
système (8.5) est :
0
y = φ1 (x,y1 ,y2 ,...,yn )
10
y2 = φ2 (x,y1 ,y2 ,...,yn )
edeq6 (8.6)
...
0
yn = φn (x,y1 ,y2 ,...,yn ). y(a) = α, α ∈ Rn
Soit
Z xi+1
y(xi+1 ) = y(xi ) + Φ(t,y(t))dt (8.10)
xi
Si on approche l’intégrale dans le second membre de (8.10) par la formule des trapèzes, on
obtient :
Z xi+1
h h3
g(t)dt = [g(xi ) + g(xi+1 )] − g”(θi ) (8.11)
xi 2 12
avec
avec i = 0,1,...,N − 1.
où Φ est une fonction continue sur [a,b]×R et Lipschitienne par rapport à sa deuxième
variable (avec consistance de Lipschitz indépendante à la première variable). L’objectif de
ce paragraphe est de présenter la méthode d’Euler pour la discrétisation du problème de
Cauchy.
On commence par considérer une subdivision de l’intervalle [a,b] à l’aide des xi définis
par : xi = a + ih, i = 0,1,...,N avec h = (b − a)/N , où N est un entier arbitrairement choisi
et destiné à tendre vers +∞, (a,b ∈ R). On écrit le développement de Taylor au voisinage
de x = xn (n = 0,1,...,N − 1):
On écrit alors :
y(xn+1 ) − y(xn )
y 0 (xn ) = + O(h). (8.18)
h
D’autre part, si y est une solution exacte du problème de Cauchy, on a:
Cette méthode fait partie d’une famille de méthodes appelées méthodes explicites ca-
ractérisées par la relation :
Ces méthodes sont d’une mise en oeuvre sur ordinateur facile, mais la contrepartie est la
stabilité.
Exemple.
½ 0
y (x) = y(x),
(8.23)
y(0) = 1 sur [0,5].
Ce schéma donne une solution approchée yn qui définit une suite géométrique de raison
1 + h et de premier terme 1. Donc,
xn 1 2 3 .. 5
en -0.02093 -0.1139 -0.46055 .. -5.6282
L’un des problèmes de l’analyse numérique est de prévoir l’ordre de grandeur de l’erreur.
Cet erreur peut tre due à plusieurs causes:
– L’erreur de discrétisation due au procédé de calcul. Dans la méthode d’Euler on
approche la courbe par sa tangente.
– Les erreurs d’arrondis dues au perte de chiffres dans les opérations arithmétiques.
Les qualités à exiger d’un schéma de discrétisation sont:
1. La consistence,
2. La stabilité.
La consistence plus la stabilité entraine la convergence.
Théorème 4
∃L > 0/∀ξ1 ∈ [a,b], ∀(ξ1 ,ξ2 ) ∈ R, ona|∆(ξ1 ,ξ2 ,h) − ∆(ξ1 ,ξ2 ,h)| ≤ L|ξ2 − ξ2 | (8.32)
Remarque
Si la fonction ∆ vérifie
1. ∆(ξ1 ,ξ2 ,0) = Φ(ξ1 ,ξ2 )
2. ∃L > 0/|∆(ξ1 ,ξ2 ,h) − ∆(ξ1 ,ξ2 ,h)| ≤ L|ξ2 − ξ2 |
∀ξ1 ∈ [a,b], ∀ξ2 ,ξ2 ∈ R et pour h assez voisin de zéro, alors la méthode ∆ converge.
Une méthode est dite consistente d’ordre p > 0 si pour toute solution de
½ 0
y (x) = Φ(x,y(x)) sur [a,b]
(8.33)
y(0) donne,
8.2. DISCRÉTISATION DES ÉQUATIONS DU PREMIER ORDRE 115
on a:
max 1
| [y(xn + h) − y(xn )] − ∆(xn ,y(xn ),h)| = O(hp ), (8.34)
n h
soit
max 1
| [y(xn + h) − y(xn )] − ∆(xn ,y(xn ),h)| ≤ Chp (8.35)
n h
avec C indépendant de h.
Théorème 5
Si ∆ vérifie la condition de Lipschitz par rapport à sa seconde variable et si la méthode
est consistente d’ordre p > 0, alors:
max max
|en | = |y(xn ) − yn | = O(hp ). (8.36)
n n
La méthode converge comme un O(hp ).
avec 0 < θ < 1. (On suppose que y est de classe C (p+1) sur [a,b]). Nous avons:
y 0 (x) = Φ[x,y(x)],
y”(x) = dΦ dx
= ∂Φ
∂x
+ Φ ∂Φ
∂y (8.38)
y (3) (x) = dy”
dx
= ...
Si on prend
h hp−1 (p−1)
∆(x,y,h) = Φ(0) (x,y) + Φ(1) (x,y) + ... + Φ (x,y) (8.39)
2 p!
où on a posé:
(0) (0)
Φ(0) = Φ; Φ(1) = ∂Φ∂x + Φ(0) ∂Φ∂y ;
(k−1) (k−1) (8.40)
Φ(k) = ∂Φ∂x + Φ(0) ∂Φ∂y , ∀k ≥ 1.
Théorème 6
Pour que ∆(x,y,h) soit une méthode de Runge-Kutta d’ordre p, il faut et il suffit que:
1. ∆ soit de la forme (8.43),
2. ensuite,
∂k∆ 1
k
(x,y,0) = Φ(k) (x,y); k = 0,1,...,p − 1 (8.45)
∂h k+1
où on posé:
∂Φ(k−1) ∂Φ(k−1)
Φ(k) = +Φ (8.46)
∂x ∂y
Application
a) Runge-Kutta d’ordre 2
Déterminer les relations entre les constantes a1 , a2 , p1 , et p2 qui interviennent dans la
fonction
Solution
* cette expression est de la forme (8.43) avec a1 = λ1 , a2 = λ2 et α2 = p1 ,β1 = p2 .
* Vérifions si ∆ satisfait à la seconde relation du théorème 6.
-k=0
soit:
∂∆ Φ(x,y) Φ(x,y)
(x,y,0) = a2 p1 + a2 p2 Φ(x,y) (8.51)
∂h ∂x ∂y
soit:
µ ¶
Φ(x,y) Φ(x,y) 1 ∂Φ ∂Φ
a2 p1 + a2 p2 Φ(x,y) = +Φ (8.53)
∂x ∂y 2 ∂x ∂y
Par identification, on a:
1 1
a2 p1 = , a2 p2 = (8.54)
2 2
Le schéma est consistent d’ordre 2 si:
a1 + a2 = 1
a2 p1 = 12 (8.55)
a2 p2 = 12
h
yn+1 = yn + [Φ(xn ,yn ) + Φ(xn + h,yn + hΦ(xn ,yn ))] (8.57)
2
connue sous le nom de méthode d’Euler améliorée.
– a2 = 1
· ¸
h h
yn+1 = yn + h Φ(xn + ,yn + Φ(xn ,yn ) (8.58)
2 2
a) Runge-Kutta d’ordre 4
118CHAPITRE 8. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS DIFFÉRENTIELLES
La formule (8.60) est la plus utilisée et est connue sous le nom de méthode de Runge-
Kutta(RK).
h2 h3
y(x + h) = y(x) + hy 0 (x) + y” + y (3) (8.62)
2 6
compte tenu de (8.62), on a:
h2 0 h3
yi+1 = yi + hΦi + Φ + Φ”i + ... (8.64)
2 i 6
On montre que (8.64) peut se mettre sous la forme:
n
X
yi+1 = yi + hΦi + h βnk Φi−k + O(hn+2 ) (8.65)
k=0
Le tableau ci-dessous donne les valeurs de βnk jusqu’à n = 5 (formule d’ordre 6). La
formule la plus couramment utilisée est celle d’ordre 4.
h
yi+1 = yi + (55Φi − 59Φi−1 + 37Φi−2 − 9Φi−2 ) + O(h5 ) (8.66)
24
8.3. FORMULES À PAS MULTIPLES:MÉTHODES D’ADAMS 119
n..k 0 1 2 3 4 5 ordre.
0 1 .. .. .. .. .. 1
1 3/2 -1/2 .. .. .. .. 2
2 23/12 -16/12 5/12 .. .. .. 3
3 55/24 -59/24 37/24 -9/24 .. .. 4
4 1901/720 -2774/720 2616/720 -1274/720 251/720 .. 5
5 4277/1440 -7923/1440 9982/1440 -7298/1440 2877/1440 -475/1440 6
les valeurs de γnk sont données par un tableau jusqu’à n=5. Ainsi, pour l’ordre 4 (n=3)
on a:
h
yi+1 = yi + (9Φi+1 + 19Φi − 5Φi−1 + Φi−2 ) + O(h5 ) (8.68)
24
n..k 0 1 2 3 4 5 ordre.
0 1 .. .. .. .. .. 1
1 1/2 1/2 .. .. .. .. 2
2 5/12 8/12 -1/12 .. .. .. 3
3 9/24 19/24 -5/24 1/24 .. .. 4
4 251/720 646/720 -264/720 106/720 -19/720 .. 5
5 4475/1440 1427/1440 -798/1440 482/1440 -173/1440 27/1440 6
On voit que les formules fermées étant ittératives consomme plus de temps machine que
r
les formules ouverstes, puisqu’il faut calculer Φ(xi+1 ,yi+1 ) plusieurs fois. Toutefois
– Elles sont en fait bien plus précises que les formules ouvertes du mme ordre.
– Elles sont en général stables alors que les formules ouvertes sont souvent instables.
– Leur convergence est d’autant plus rapide (donc le temps de calcul d’autant plus
(0)
court) que l’estimation initiale yi+1 est plus proche de la valeur exacte yi+1 , de sorte
qu’un petit nombre d’itérations est suffisant en pratique.
En fait, on n’utilise ni les formules ouvertes, ni les formules fermées, mais une combinaison
des deux méthodes appelée méthode des prédiscteurs-correcteurs.
– Prédicteur: Adams-Bashforth
h
yi+1 = yi + (55Φi − 59Φi−1 + 37Φi−2 − 9Φi−3 ) (8.69)
24
(0)
– Modificateur (y0 est la valeur du prédicteur au pas précédent)
*Les estimations de y1 ,y2 ,y3 ne peuvent pas tre calculés à partir des équations (8.69)-
(8.71): elles sont calculées à partir de la méthode de Runge-Kutta.
(0)
* Etant donné que y3 n’exixte pas, on ne peut pas utiliser de modificateur pour
calculer y4 ; y4 est donc calculé à partir des formules (8.69) et (8.71).
(0) (0)
* y4 initiant l’itération (8.71), ce n’est qu’à partir de y5 qu’on estime y5 par (8.69),
(0) (0)
puis y5 par (8.70) et c’est cette valeur de y5 qui est injectée dans (8.71) pour itérer.
* Pour la plupart de problème, la partie qui consomme le plus de temps calcul est
la détermination de Φ(x,y).
*Nous avons déjà signalé que la forme de Runge-Kutta d’ordre 4 nécessitait dévaluer
4 fois Φ par pas. Pour un prédicteur-correcteur, ∀ son ordre, il faut calculer une
valeur de Φ, soit Φi , pour le prédicteur (les autres valeurs Φi−1 ,P hii−2 ,... ont déjà
été calculées et une évaluation de Φi+1 à cjaque itération. En pratique, une à deux
itérations suffisent pour atteindre la précision recherchée.
Program Runge_Kutta4;
(****************************************************************
*****************************************************************
******* *****
******* *****
******* Ce programme resoud numeriquement une *****
******* *****
******* Equation differentielle de premier ordre *****
******* *****
******* par la methode Runge-Kutta *****
******* d’ordre 4 *****
******* *****
******* *****
*****************************************************************
*****************************************************************)
uses Dos,printer;
Function F(x,y:real):real;
begin
F:=1-y;
end;
Function yanal(x:real):real;
begin
yanal:=1-exp(-x);
end;
Begin
{clrscr;}
x0:=0.0; y0:=0.0; {conditions initiales}
122CHAPITRE 8. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS DIFFÉRENTIELLES
k1:=f(x,y);
y1:=y+h2*k1;
k2:=f(xm,y1);
y2:=y+h2*k2;
k3:=f(xm,y2);
y3:=y+h*k3;
x:=x+h;
k4:=f(x,y3);
phi:=k1+2*(k2+k3)+k4;
y:=y+h6*phi;
yex:=yanal(x);
if i mod p =0 then writeln(x:5:3,’ ’, y:10:8,’ ’, yex:10:8);
end;
writeln;
writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Resolution ED 1er ordre $$$$’);
writeln(’$$$$$$ par Methode de Runge Kutta $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
8.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES PRÉSENTÉES 123
Function F(x,y:real):real;
begin
F:=1-y;
end;
Function yanal(x:real):real;
begin
yanal:=1-exp(-x);
end;
Begin
124CHAPITRE 8. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS DIFFÉRENTIELLES
{clrscr;}
x0:=0.0; y0:=0.0; {conditions initiales}
xf:=10.0; {domaine d’integration}
npas:=100; {nombre de points de discretisation du domaine}
h:=(xf-x0)/npas; {pas d’integration}
k1:=f(x,y);
y1:=y+h2*k1;
k2:=f(xm,y1);
y2:=y+h2*k2;
k3:=f(xm,y2);
y3:=y+h*k3;
x:=x+h;
k4:=f(x,y3);
phi:=k1+2*(k2+k3)+k4;
y:=y+h6*phi; ff[i+1]:=f(x,y);
yex:=yanal(x);
if i mod p =0 then writeln(x:5:3,’ ’, y:10:8,’ ’, yex:10:8);
end; {fin Runge-Kutta 4}
yp:=y+h24*(55*ff[4]-59*ff[3]+37*ff[2]-9*ff[1]);
{Modificateur}
if (i>4) then ym:=yp-AA*(y-ypp)
8.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES PRÉSENTÉES 125
else ym:=yp;
{Correcteur d’Adams ferme au 4e ordre}
count:=0;
Repeat
count:=count+1; {compteur du nombre d’iterations}
Temp:=f(x,ym);
yc:=y+h24*(9*temp+19*ff[4]-5*ff[3]+ff[2]);
Dy:=abs(yc-ym);
ym:=yc;
until ((Dy<=epsi) or (count>=countmax));
if (count<countmax) then
begin
ypp:=yp;
y:=yc;
yex:=yanal(x);
writeln(x:5:3,’ ’, y:10:8,’ ’, yex:10:8);
end
else
begin
writeln(’Pas de solution faute de convergence’);
readln;
Halt;
end;
for j:=1 to 3 do ff[j]:=ff[j+1];
ff[4]:=f(x,y);
end; {Fin procedure Predicteur -correcteur}
writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Predicteur-Correcteur $$$$’);
writeln(’$$$$$$ d"ordre 4 $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
126CHAPITRE 8. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS DIFFÉRENTIELLES
Program Runge_Kutta4;
(****************************************************************
*****************************************************************
******* *****
******* *****
******* Ce programme resoud numeriquement un systeme *****
******* *****
******* d’ Equations Differentielles de premier ordre *****
******* *****
******* par la methode Runge-Kutta *****
******* d’ordre 4 *****
******* *****
******* *****
*****************************************************************
*****************************************************************)
uses Dos,printer;
Function F(x,y,z:real):real;
begin
F:=z;
end;
Function g(x,y,z:real):real;
begin
g:=-sqr(omega)*y;
end;
Function yanal(x:real):real;
begin
yanal:=cos(omega*x);
end;
8.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES PRÉSENTÉES 127
Begin
{clrscr;}
x0:=0.0; y0:=1.0; z0:=0.0; {conditions initiales}
xf:=1; {domaine d’integration}
npas:=100; {nombre de points de discretisation du domaine}
k1y:=f(x,y,z); k1z:=g(x,y,z);
y1:=y+h2*k1y; z1:=z+h2*k1z;
k2y:=f(xm,y1,z1); k2z:=g(xm,y1,z1);
y2:=y+h2*k2y; z2:=z+h2*k2z;
k3y:=f(xm,y2,z2); k3z:=g(xm,y2,z2);
y3:=y+h*k3y; z3:=z+h*k3z;
x:=x+h;
k4y:=f(x,y3,z3); k4z:=g(x,y3,z3);
phiy:=k1y+2*(k2y+k3y)+k4y; phiz:=k1z+2*(k2z+k3z)+k4z;
y:=y+h6*phiy; z:=z+h6*phiz;
yex:=yanal(x);
if i mod p =0 then writeln(x:5:3,’ ’, z:10:8, ’ ’,y:10:8,’ ’, yex:10:8);
end;
writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Resolution SED 1er ordre $$$$’);
writeln(’$$$$$$ par Methode de Runge Kutta $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
128CHAPITRE 8. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS DIFFÉRENTIELLES
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.
Function F(x,y,z:real):real;
begin
F:=z;
end;
Function g(x,y,z:real):real;
8.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES PRÉSENTÉES 129
begin
g:=-sqr(omega)*y;
end;
Function yanal(x:real):real;
begin
yanal:=cos(omega*x);
end;
Begin
{clrscr;}
x0:=0.0; y0:=1.0; z0:=0.0; {conditions initiales}
xf:=1.0; {domaine d’integration}
npas:=100; {nombre de points de discretisation du domaine}
for i:= 1 to 3 do
begin
xm:=x+h2;
k1y:=f(x,y,z); k1z:=g(x,y,z);
y1:=y+h2*k1y; z1:=z+h2*k1z;
k2y:=f(xm,y1,z1); k2z:=g(xm,y1,z1);
y2:=y+h2*k2y; z2:=z+h2*k2z;
k3y:=f(xm,y2,z2); k3z:=g(xm,y2,z2);
y3:=y+h*k3y; z3:=z+h*k3z;
x:=x+h;
k4y:=f(x,y3,z3); k4z:=g(x,y3,z3);
phiy:=k1y+2*(k2y+k3y)+k4y;
phiz:=k1z+2*(k2z+k3z)+k4z;
130CHAPITRE 8. RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS DIFFÉRENTIELLES
y:=y+h6*phiy;
z:=z+h6*phiz;
ff[i+1]:=f(x,y,z);
gg[i+1]:=g(x,y,z);
yex:=yanal(x);
if i mod p =0 then writeln(x:5:3,’ ’, z:10:8, ’ ’,y:10:8,’ ’, yex:10:8);
end; {End Procedure Runge-Kutta}
readln;
if (count<countmax) then
begin
ypp:=yp; zpp:=zp;
y:=yc; z:=zc;
yex:=yanal(x);
8.4. PROGRAMMATION INFORMATIQUE DES MÉTHODES PRÉSENTÉES 131
for j:=1 to 3 do
begin
ff[j]:=ff[j+1];
gg[j]:=gg[j+1];
end;
ff[4]:=f(x,y,z); gg[4]:=g(x,y,z);
writeln;
writeln;
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$ Le Programme $$$$’);
writeln(’$$$$$$ Predicteur-Correcteur $$$$’);
writeln(’$$$$$$ d"ordre 4 $$$$’);
writeln(’$$$$$$ Vous dit Aurevoir $$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
writeln(’$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$’);
Readln;
END.