Vous êtes sur la page 1sur 32

Faculté des Sciences de Bizerte

Département de Physique

Licence Appliquée en Sciences et


Technologies de l’Information et de la Communication

Atelier Outils Numériques


LA-STIC2

Enseignant : K. Cheikhrouhou

Année Universitaire 2015/2016


Table des matières

Lab 1 : Initiation à Matlab 1

Lab 2 : Résolution des Systèmes Linéaires 14

Lab 3 : Résolution des Systèmes non Linéaires 19

Lab 4 : Interpolation Polynomiale 22

Lab 5 : Intégration Numérique et Équations Différentielles 26

FSB - STIC2
Lab 1 : Initiation à Matlab
Durée : Trois Heures Enseignant : K. Cheikhrouhou

1.1 Objectif
Le but de ce laboratoire est de vous familiariser avec le logiciel Matlab. Matlab est un
environnement de calcul permettant des calculs numériques et des représentations
graphiques. Vous trouverez dans la première partie de ce lab un bref descriptif de
Matlab. Dans la deuxième partie, nous nous intéresserons à l’utilisation des fichiers
script et des fonctions. Enfin, la représentation graphique en Matlab sera traitée
dans la dernière partie.

1.2 Bref descriptif de Matlab


Matlab est un logiciel interactif permettant d’effectuer des calculs numériques com-
plexes particulièrement utiles dans le domaine de l’ingénierie.
Notez que Matlab est un logiciel auto documenté ; les informations relatives à une
commande donnée peuvent être obtenues à l’écran en composant help , suivi du
nom de la commande.
Le logiciel Matlab est conçu en fonction de la manipulation de matrices et de vec-
teurs (un vecteur de longueur N est une matrice de dimension 1 × N, c’est-à-dire
comportant une ligne et N colonnes). On génère une matrice en écrivant ses éléments
entre crochets, chaque ligne étant délimitée par un point-virgule.
Matlab est un interpréteur de
commandesdont l’élément de base est la matrice. Par
1 2 3
exemple la matrice suivante  4 5 6  sera rentrée sous Matlab de la manière
7 8 9
suivante :

>>A=[1 2 3; 4 5 6; 7 8 9]

ou en remplaçant les ; par des sauts de lignes

>>A=[ 1 2 3
4 5 6
7 8 9]

FSB - STIC2
2

On obtiendra la transposée et le déterminant de la matrice A par les commandes


B=A.’ et C=det(A) respectivement.
Les éléments des matrices peuvent être une expression Matlab quelconque :

>>x=[-1.3 sqrt(3) (1+2+3)*4/5]


>>x=
-1.3 1.7321 4.8000

Les éléments des matrices peuvent être accédés en mettant leur indice à l’intérieur
de deux parenthèses () :

>>x(1)
ans= -1.3000

On peut aussi construire des matrices en utilisant des matrices plus petites :

>>x(5)=abs(x(1))
x= -1.3 1.7321 4.8000 0 1.3000
>>r=[10 11 12];
>>A=[A;r]
A= 1 2 3
4 5 6
7 8 9
10 11 12

On remarquera que le signe ; permet de ne pas afficher le résultat de la commande.


La commande who permet de visualiser les variables et whos permet en plus de
préciser leur nature.
Pour créer un nombre complexe, on utilisera i ou j (i2 = −1 ou j 2 = −1) :

>>z = 2+3i
>>z^2

Certaines commandes ont été spécialement conçues pour manipuler des nombres
complexes : real(z) retourne la partie réelle, imag(z) retourne la partie imaginaire,
abs(z) calcule le module, angle(z) calcule la phase, conj(z) génère le conjugué.
Les opérateurs sont :
– + addition,
– - soustraction,
– * multiplication,
– / division à droite,
– \ division à gauche,
– ’ transposée.

FSB - STIC2
Lab 1 : Initiation à Matlab 3

L’opérateur * permet de réaliser directement des multiplications de matrices. L’opé-


rateur \ permet de résoudre l’équation A*X=B : la solution est X=A\B.
Le symbole : permet sous Matlab de créer des vecteurs, par exemple x=1:5 crée un
vecteur x contenant les chiffres de 1 à 5 avec un incrément de 1. Pour rentrer un
incrément différent de 1 (ici 0.8), on tape :

>>x=1:0.8:5

Le symbole : permet aussi de sélectionner des indices dans les matrices. Sachant que
A est une matrice 3 × 3 :
– A(1:2,3) sélectionnera le troisième élément des lignes 1 et 2,
– A(:,3) sélectionnera la troisième colonne,
– A(:,:) sélectionnera la matrice entière.

1.2.1 Travaux à effectuer


Il est à noter qu’une aide en ligne est disponible à tout moment au niveau de l’in-
terpréteur de commande. Par exemple, pour obtenir de l’aide sur la fonction plot,
taper help plot.

Exercice 1

Soit x = [1 2 3] et y = [4 5 6]. Que représente x*y’, x’*y et x.*y ?

Exercice 2
 
1 2 3
1. Générer la matrice A =  4 4 6 
7 8 9
2. Calculer la transposée de A.
3. Calculer le déterminant de A.
4. Changer l’élément de la 2-ième ligne et la 3-ième colonne à 1.
5. Afficher les deux premières lignes de A.
6. Afficher la première colonne de A.
7. Déterminer la différence entre A*A et A.*A.

Exercice 3
PN 2
Pour un incrément de 0.1, calculer la moyenne mi définie par mi = 1/N n=1 |fi (n)|
pour les fonctions fi (x) suivantes :
1. x ∈ [0, 1], f1 (x) = cos(tan(πx)),
sin(x)
2. x ∈ [1, 10], f2 (x) = x

FSB - STIC2
4

2
3. x ∈]0, 2], f3 (x) = e−x sin(x)
Pour cet exercice, vous pouvez utiliser les fonctions sum et length de Matlab.

Exercice 4

1. Générer le vecteur a défini par

a = [3 + 4i 5 + 9i − 3 − 4i − 5 − 9i 3 − 4i 5 − 9i − 3 + 4i − 5 + 9i]

2. Générez le vecteur m contenant les modules des éléments du vecteur a à l’aide


la commande abs.
3. Générez le vecteur p contenant les phases des éléments du vecteur a à l’aide la
commande angle.
4. Trouvez le conjugué de a à l’aide de la commande conj. En déduire le module
du vecteur a.

1.3 Fichiers SCRIPT et FUNCTION


Jusqu’à présent, l’utilisation que nous avons faite de MATLAB s’apparente beau-
coup à celle d’une calculatrice. Pour des tâches répétitives, il s’avère beaucoup plus
pratique et judicieux d’écrire de courts programmes pour effectuer les calculs dési-
rés. Il existe deux types de fichiers qui peuvent être programmés avec MATLAB :
les fichiers SCRIPT et FUNCTION. Dans les deux cas, il faut lancer l’éditeur de
fichier et sauvegarder le fichier avec l’extension .m.

1.3.1 Fichiers SCRIPT


Le fichier SCRIPT permet de lancer les mêmes opérations que celles écrites direc-
tement à l’invite MATLAB. Toutes les variables utilisées dans un SCRIPT sont
disponibles à l’invite MATLAB. Par exemple, le fichier test.m qui reprend l’exemple
précédent est le suivant :

% test.m
x=[1 2 3];
y=[4 5 6];
Px= x*y’;
Ps = x’*y;
Pe = x.*y;

Ce fichier sera exécuté lorsque qu’on appelle sous l’éditeur de commande :

>> test

FSB - STIC2
Lab 1: Initiation à Matlab 5

Comment peut-on visualiser P x, P s et P e ?


Habituellement, on utilise les fichiers SCRIPT afin de :
– Initialiser le système.
– Déclarer les variables.
– Effectuer les opérations algébriques.
– Appeler les fonctions.
– Tracer les figures.
Il est à noter que le langage MATLAB n’est pas un langage compilé (contrairement
au langage C/C++, par exemple). À chaque appel d’un SCRIPT (ou d’une FUNC-
TION), le logiciel lit et exécute les programmes ligne par ligne. Lorsque MATLAB
détecte une erreur, le logiciel arrête et un message d’erreur ainsi que la ligne où
l’erreur est détectée s’affichent à l’écran.

1.3.1.1 Travaux à effectuer

Veuillez écrire les fichiers de commandes pour les exercices précédents (de 1 à 4). À la
fin de la séance vous rendrez un compte rendu ainsi que les listings de ces fichiers de
commandes (qui devront être enregistrés sous votre répertoire). L’entête du fichier
de commandes, nommé par exemple lab1groupe1.m sera comme suit :

%% Lab1: Introduction à Matlab


%% Auteurs: nom1, nom2, Groupe 1
%% Exercice 1
.......
%% Exercice 2
.......

1.3.2 Fichiers FUNCTION


L’idée de base d’une fonction est d’effectuer des opérations sur une ou plusieurs
entrées ou arguments pour obtenir un résultat qui sera appelé sortie. Il est important
de noter que les variables internes ne sont pas disponibles à l’invite MATLAB. Par
exemple, la fonction suivante (avec une seule sortie, le résultat de l’addition) :

function a = MAfonction(x,y)
a = x + y;
b = x * y;

produit la sortie suivante :

>> a = MAfonction(4,2)
a = 6

Le résultat de la multiplication b n’est plus disponible. On peut cependant modifier


les sorties de la manière suivante :

FSB - STIC2
6

function [a,b] = MAfonction(x,y)


a = x + y;
b = x * y;

pour obtenir :

>> [a,b] = MAfonction(4,2)


a = 6 b = 8

La syntaxe générale d’une fonction est la suivante :

function [args1,args2,...] = nomfonction(arge1,arge2,...)


instructions

args1,args2,... sont les arguments de sortie de la fonction et peuvent être de


n’importe quel type. arge1,arge2,... sont les arguments d’entrée de la fonction
et peuvent être de n’importe que type. instructions est un bloc d’instructions
quelconque devant affecter les arguments de sortie args1,args2,...
Il est à noter que les fichiers FUNCTION doivent être enregistrés au même nom que
le nom de la fonction. Dans l’exemple précédent, le fichier doit être enregistré sous
le nom de MAfonction.m.
Habituellement, on utilise les fichiers FUNCTION afin de :
– Programmer des opérations répétitives.
– Limiter le nombre de variables dans l’invite MATLAB.
– Diviser le programme de manière claire.

1.3.2.1 Travaux à effectuer

Exercice 1

Écrire une fonction qui permet de calculer le module d’un vecteur complexe, son
angle et la moyenne des modules au carré de chaque élément du vecteur.

Exercice 2

Écrire une fonction qui permet de déterminer la taille d’une matrice (on utilisera la
commande size), son déterminant et sa matrice conjuguée.

Exercice 3

Pour une entrée A : matrice d’ordre N et k un entier inférieur à N, écrire une


fonction qui permet d’extraire 2 vecteurs V 1 et V 2. V 1 correspondra la ligne k de
A et V2 correspondra la colonne k de A.

FSB - STIC2
Lab 1: Initiation à Matlab 7

1.4 Programmation avec Matlab


Cette section présente les différentes structures de programmation avec MATLAB.
Avant de débuter la présentation des boucles de programmation conditionnelles, il
est important de se familiariser avec les opérateurs logiques. Le premier type de ces
opérateurs permet de comparer des valeurs entre elles (tableau 1). Par exemple, on
veut comparer deux valeurs entre elles :

>> a = sin(2*pi);
>> b = cos(2*pi);
>> bool = (a>b)
bool = 0
>> a
a =
-2.4493e-016 % ici a devrait égaler 0, la précision est limitée!
>> b
b = 1

Il faut noter ici que l’emploie de l’opérateur ’==’ est très risqué lorsque l’on compare
des valeurs numériques. En effet, la précision de l’ordinateur étant limitée, il est
préférable d’utiliser une condition sur la différence comme dans le code suivant :

if abs(a-b) < eps % eps est la précision machine (2.2204e-016)


bool = 1;
else bool = 0;
end

Il est aussi possible de lier entre elles des conditions par l’opérateur ’et’ (&) et ’ou’
(|).

Opérateur Description
~a NOT - retourne 1 si a égal 0, 1 si a égal 0
a == b retourne 1 si a égal b, 0 sinon
a < b retourne 1 si a est plus petit que b, 0 sinon
a > b retourne 1 si a est plus grand que b, 0 sinon
a <= b retourne 1 si a est plus petit ou égal à b, 0 sinon
a >= b retourne 1 si a est plus grand ou égal à b, 0 sinon
a ~=b retourne 1 si a est différent de b, 0 sinon
Table 1.1 – Opérateurs de comparaison

1.4.1 Boucles if-elseif-else


Ce type de structure de programmation est très utile pour vérifier des conditions.
En pseudo-code, on peut résumer par le schéma suivant :

FSB - STIC2
8

si CONDITION1, FAIRE ACTION1. % condition 1 remplie


sinon et si CONDITION2, FAIRE ACTION2. % condition 1 non-remplie,
% mais condition 2 remplie
sinon, FAIRE ACTION3 % conditions 1 et 2 non-remplies

En MATLAB, le pseudo-code précédent devient :

if CONDITION1
ACTION1;
elseif CONDITION2
ACTION2;
else
ACTION3;
end

Par exemple, on reçoit un entier a, s’il est impair négatif, on le rend positif. S’il
est impair positif, on lui ajoute 1. S’il est pair, on ajoute 2 à sa valeur absolue. La
courte fonction suivante permet de réaliser cette transformation (notez ici, l’emploi
du modulo pour déterminer si l’entier est divisible par 2).

function b = transfEntier(a)
if a < 0 & mod(a,2) ~= 0 % mod permet de trouver
b = -a; % le reste d’une division
elseif a >= 0 & mod(a,2) ~= 0
b = a + 1;
else b = abs(a)+2;
end

1.4.2 Boucles for


Les boucles for sont très utiles dans la plupart des applications mathématiques (par
exemple, pour effectuer un calcul sur tous les éléments d’un vecteur). En MATLAB,
il est parfois beaucoup plus efficace d’utiliser les opérateurs algébriques usuels définis
plus tôt (par exemple, le ’.*’). Dans les cas où il est impossible de se soustraire à
l’utilisation de ces boucles, voici le prototype en pseudo-code de ces boucles.

incrément = valeur initiale


Pour incrément=valeur_initiale jusqu’à valeur finale
ACTION1...N
AJOUTER 1 à incrément

En MATLAB, ce pseudo-code devient :

for i = 0:valeur_finale
ACTION1; ACTION2; ... ACTIONN;
end

FSB - STIC2
Lab 1 : Initiation à Matlab 9

Remarquez que l’incrément peut être différent de 1, par exemple si l’on veut calculer
la somme des carrés des nombres pairs entre 0 et 10 :

% Prog.1
carre=0;
for i=0:2:10
carre = carre+i^2;
end

1.4.3 Boucles while


Une boucle while permet de répéter une opération tant qu’une condition n’est pas
remplie. En pseudo-code, elle peut être schématisée de la façon suivante :

Tant que CONDITION est VRAIE


ACTION1..N

En MATLAB, on écrit ce type de boucle de la manière suivante :

while CONDITION
ACTION1; ACTION2; ... ACTIONN;
end

Ce type de boucle est très souvent utilisé pour converger vers une valeur désirée.
Par exemple, on veut trouver le nombre d’entiers positifs nécessaires pour avoir une
somme plus grande que 100. On pourrait réaliser cette tâche de la manière suivante :

% Prog.2
n = 0; % initialisation des valeurs
somme = 0;
while somme <= 100
n=n+1; % itération de n
somme = somme + n; % nouvelle somme
end

1.4.4 Travail à effectuer

Exercice 1

1. Tester la fonction transfEntier avec différentes valeurs de a. Vérifier que la


sortie de la fonction est correcte.
2. Tester et vérifier les programmes Prog.1 et Prog.2.

FSB - STIC2
10

Exercice 2

Écrire la fonction [x1,x2]=racinesEq(a,b,c) qui permet de donner les racines x1


et x2 de l’équation suivante :
ax2 + bx + c = 0
Écrire ensuite un script en Malab qui permet d’exécuter le pseudo-code suivant :

saisir les valeurs de a, b, c


[x1,x2]=racinesEq(a,b,c);
si les racines sont doubles alors afficher (’racines doubles’,x1)
sinon afficher(’racines simples’,x1,x2)
si les racines sont réelles alors afficher (’racines réelles’,x1,x2)
sinon
afficher(’racines complexes’),
afficher(’partie réelle des racines’,real(x1),real(x2))
afficher(’partie imaginaire des racines’,imag(x1),imag(x2))

À noter que pour saisir un nombre a en Matlab il suffit d’écrire :


a=input(’saisir un nombre ’)
Pour afficher ce nombre, il suffit d’écrire :
disp([’le nombre est ’ num2str(a)]).

Exercice 3

La fonction arctan(x) peut être approximée par :


M
X (−1)m x2m+1
tan−1 (x) ≈ pour |x| < 1
m=0
2m + 1

Écrire un script Matlab qui permet d’approximer tan−1 (x) avec une erreur inférieure
à 10−6 . Ce script doit permettre de déterminer le nombre d’itérations M à l’aide
d’une boucle while. Le programme doit afficher un message d’erreur si la condition
sur x n’est pas remplie.

Exercice 4

Pour des entrée V : vecteur d’ordre N et k un entier inférieur à N, écrire une fonction
qui permet d’effectuer un décalage circulaire d’ordre k du vecteur V .

Exercice 5
1. Calculer
 les 30 premiers termes de la suite de Fibonacci définie par :
t1 = 1 , t2 = 1
tk = tk−1 + tk−2 , k = 3, 4, . . .

FSB - STIC2
Lab 1: Initiation à Matlab 11

2. Afficher k, tk , tk /tk−1 pour k = 1, 2, . . . , 30. Faire une version sans et puis avec
l’aide de tableaux.
3. Au lieu d’arrêter les calculs à l’itération 30, introduire un mécanisme d’arrêt
−9
automatique des calculs √ si la valeur du rapport tk /tk−1 est à moins de 10
près du nombre (1 + 5)/2 (pour arrêter un programme il suffit d’utiliser
l’instruction return).
4. Réécrire le script en supprimant la boucle for et le test if et en utilisant une
instruction while.

Exercice 6

Calculer la somme S = N
P 1
i=1 i en utilisant d’abord une boucle for puis en le faisant
au moyen d’un calcul vectoriel et de la commande sum. Comparer les temps d’exécu-
tion pour N = 200000 (l’affichage du temps d’exécution peut se faire au moyen des
commandes tic et toc à placer en début et en fin de programme, respectivement).
Conclusion ?

Exercice 7

Sans utiliser la fonction Matlab sum, écrire une fonction qui permet de calculer la
moyenne quadratique d’un vecteur s’il est réel. Si le vecteur est complexe la fonction
doit calculer la moyenne quadratique de sa partie réelle.

1.5 Graphiques sous matlab


La fonction plot permet de tracer des courbes en deux dimensions en MATLAB.
Les argument de cette fonction peuvent être consultés en utilisant l’aide de matlab
en faisant : help plot. Le cas le plus simple est de tracer Y en fonction de X qui
est réalisé par la commande plot(X,Y) comme le montre l’exemple suivant :

>> X = [0:0.01:2*pi];
>> Y = cos(X);
>> plot(X,Y)

Pour visualiser en plus la fonction sin(X), on peut modifier le programme précèdent


par :

>> X = [0:0.01:2*pi];
>> Y = cos(X);
>> Z = sin(X);
>> plot(X,Y,X,Z)

Ces graphiques manquent cependant de clarté. Il faut toujours nommer les axes,
mettre les unités si possible, proposer une légende, etc. Le SCRIPT suivant est un
exemple simple qui permet de le réaliser :

FSB - STIC2
12

clear all
close all % ferme les anciennes figures
x = [0:0.01:2*pi];
y1 = cos(x);
y2 = sin(x);
figure(1) % Numérotation de la figure
plot(x, y1,’.’,x, y2,’+’) % cos(x) en points, sin(x) en +: superposées
title(’sinus et cosinus’)
xlabel(’x’)
ylabel(’f(x)’)
legend(’cos(x)’,’sin(x)’)

On a vu précédemment comment faire des figures simples à l’aide de la fonction plot.


On a vu aussi comment on peut tracer plusieurs graphiques sur une même figure.
Mais ce cas n’est pas toujours possible surtout quand les grandeurs à tracer sont
complètement différentes. Par exemple tracer des courbes d’évolution temporelle et
fréquentielle d’un signal ou la température et la concentration en fonction du temps
dans un réacteur. On a deux solutions possibles :
– Soit tracer chacune des grandeurs dans une figure différente.
– Soit la tracer dans une partie différente de la même figure en utilisant la fonction
subplot comme le montre l’exemple suivant :
clear all
close all % ferme les anciennes figures
x = [0:0.01:2*pi];
y1 = cos(x);
y2 = sin(x);
figure(1) % Numérotation de la figure
subplot(2,1,1) % on déclare une matrice de graphiques
% de 2 lignes (indice1), 1 colonne (indice2)
% et le premier plot est dans la première fen^ etre
plot(x, y1,’.’)
title(’cosinus’)
xlabel(’x’)
ylabel(’f(x)’)
subplot(2,1,2) % 2 lignes, 1 colonne, 2e graphique
plot(x, y2,’+’)
title(’sinus’)
xlabel(’x’)
ylabel(’f(x)’)

Exercice 1

Reprendre le même exemple en traçant les fonctions cos et sin “continue” dans deux
figures différentes avec des couleurs différentes.

FSB - STIC2
Lab 1 : Initiation à Matlab 13

Exercice 2

Soit les fonctions suivantes :


– x ∈ [0, 1], f1 (x) = cos(tan(πx)),
– x ∈ [−10, 10], f2 (x) = sin(x)
x
2
– x ∈ [−2, 2], f3 (x) = e−x sin(x)
– x ∈ [−10, 10], f4 (x) = e−0.2x u(x) où u(x) = 0 pour x < 0 et 1 sinon.

1. Afficher chacune des fonctions fi (x) dans une figure différente.


2. Afficher les fonctions fi (x) dans une même figure. Vérifier si ces courbes sont
lisibles.
3. Afficher les fonctions fi (x) dans une même figure dans une matrice de gra-
phiques 2 × 2.
4. Afficher les fonctions fi (x) dans une même figure dans une matrice de gra-
phiques 4 × 1

Exercice 3

Tracer un demi-cercle centré sur (0,0) et de rayon 10 en rouge. Comment faire pour
tracer le cercle complet.

Exercice 4

Pour une durée de 10 sec, tracer x(t) en fonction de t, z(t) en fonction de t et z(t)
en fonction de x(t). Les fonctions x(t) et z(t) sont définies par :

x(t) = v0 cos(θ0 t)
z(t) = −gt2 /2 + v0 sin(θ0 t)
avec v0 = 800 Km/h, g = 9.79 m/s2 et θ0 = 10 degrés.

FSB - STIC2
Lab 2 : Résolution des Systèmes
Linéaires
Durée : Trois Heures Enseignant : K. Cheikhrouhou

2.1 Objectif
L’objectif de ce TP est de résoudre numériquement un système linéaire en utilisant
la factorisation LU d’une matrice inversible. On étudiera dans la deuxième partie
une des méthodes itératives qui est la méthode de Jacobi.

2.2 Résolution des systèmes linéaires


On veut résoudre un système d’équations AX = B, où B est un vecteur fixé et
X le vecteur inconnu.
 Par exemple
 si la 
matriceA et le vecteur B on les valeurs
1 −1 2 5
suivantes : A =  3 2 1  et B =  10 
2 −3 −2 −10
alors nous avons à résoudre les équations suivantes :

 x1 − x2 + 2x3 = 5
3x1 + 2x2 + x3 = 10
2x1 − 3x2 − 2x3 = −10

Ce qui revient à chercher les coefficients xi qui composent le vecteur X.


Plusieurs méthodes sont possibles pour résoudre ce genre d’équations. Les plus
simples concernent soit les matrices diagonales soit les matrices triangulaires.

2.2.1 Cas des matrices diagonales


On suppose que la matrice A est une matrice diagonale (c’est le cas le plus simple).
Par exemple :
 
1 0 0
A= 0 2 0 
0 0 −2

FSB - STIC2
Lab 2 : Résolution des Systèmes Linéaires 15

 
5
En supposant que B =  10 ,
−10

1. Trouver les coefficients xi du vecteur X.


2. Donner l’algorithme qui permet de résoudre ce genre de système, en supposant
que la matrice A = (ai,j ) est de dimension N × N.
3. Écrire le script en Matlab qui permet de :
– Vérifier si la matrice est diagonale,
– vérifier si la matrice est inversible,
– pour des arguments d’entrée A et B, résoudre le système linéaire et de donner
le vecteur X en sortie.

2.2.2 Cas des matrices triangulaires


Matrices triangulaires Supérieures

On suppose que la matrice A est une matrice triangulaire supérieure. Par exemple :
 
1 −1 2
A =  0 2 1  En supposant que B est le même que celui précédemment
0 0 −2
utilisé,

1. Trouver les coefficients xi du vecteur X.

En supposant que la matrice A = (ai,j ) est de dimension N ×N, l’algorithme Algo.1


permet de résoudre ce genre de système est le suivant :

%% Algo.1
xn = bn /an,n
pour i = n − 1 jusqu’à 1
S = bi
pour j = i + 1 jusqu’à n
S = S − ai,j xj
fin
xi = S/ai,i
fin

2. Utiliser l’algorithme Algo.1 pour résoudre le même système linéaire. Vérifier


qu’on retrouve les mêmes coefficients que la question précédente.
3. Écrire le script en Matlab qui permet de :
– Vérifier si la matrice est triangulaire supérieure,
– vérifier si la matrice est inversible,
– pour des arguments d’entrée A et B, résoudre le système linéaire et de donner
le vecteur X en sortie.

FSB - STIC2
16

Matrices triangulaires Inférieures

On suppose maintenant  que la matrice


 A est une matrice triangulaire inférieure.
1 0 0
Par exemple : A =  3 2 0 . En supposant que B est le même que celui
2 −3 −2
précédemment utilisé,

4. Trouver les coefficients xi du vecteur X.


5. Modifier l’algorithme précèdent Algo.1 pour pouvoir résoudre le cas des ma-
trices triangulaires inférieures.
6. Utiliser cet algorithme pour résoudre le système linéaire. Vérifier qu’on re-
trouve les coefficients xi .
7. Écrire le script en Matlab qui permet de :
– Vérifier si la matrice est triangulaire inférieure,
– vérifier si la matrice est inversible,
– pour des arguments d’entrée A et B, résoudre le système linéaire et de donner
le vecteur X en sortie.

2.3 Factorisation LU
En général la matrice A n’est ni diagonale ni triangulaire. Ce qui complique énor-
mément la résolution de ce genre de système linéaire. Dans cette partie du lab, nous
allons supposer tout d’abord que la matrice A est inversible et qu’elle admet une
factorisation du type LU, i.e., A = LU où L est une matrice diagonale inférieure
et U est une matrice diagonale supérieure. Cette technique trouve tout son intérêt
grâce à la grande facilité de résoudre numériquement les systèmes triangulaires.
L’algorithme de la factorisation LU est le suivant :

Fonction L,U = decompose(A)


initialisation de L = On
U =A
ln,n = 1
pour k = 1 jusqu’à n − 1
p = uk,k
si p 6= 0 alors
lk,k = 1
pour i = k + 1 jusqu’à n
u
li,k = i,k
p
pour j = k + 1 jusqu’à n
ui,j = ui,j − li,k uk,j
fin
pour j = 1 jusqu’à k
ui,j = 0

FSB - STIC2
Lab 2: Résolution des Systèmes Linéaires 17

fin
fin
fin
fin

Pour résoudre AX = B, on aura à décomposer le problème en deux étapes distinctes :



(1) LY = B
(2) UX = Y

1. Écrire le script en Matlab qui permet de déterminer les matrices L et U.


2. En utilisant toutes les fonctions développées dans ce lab, écrire un script qui
permet de résoudre un système linéaire qui se base sur la factorisation
 LU.

1 −1 2
Déterminer les matrices L et U de la matrice A suivante : A =  3 2 1 
2 −3 −2

2.4 Résolution par la méthode de Jacobi


La méthode de Jacobi est une méthode itérative de résolution d’un système matriciel
de la forme Ax = b. Pour cela, on utilise une suite x(k) qui converge vers un point
fixe x, solution du système d’équations linéaires.
Considérons A = D + (L + U), où D, L, and U représentent respectivement les
matrices diagonale, triangulaire inférieure, et triangular supérieure de la matrice A.
Ainsi les équations précédentes peuvent réécrite par :

Dx + (L + U) x = b.

De plus, :
x = D −1 [b − (L + U ) x] ,
Si ai,i 6= 0 pour tout i. On aura alors l’expression itérative suivante : :

x(k+1) = D −1 b − (L + U ) x(k) .
 

Ainsi chaque élément du vecteur résultat peut être obtenu par :


!
(k+1) 1 X (k)
xi = bi − aij xj , i = 1, 2, . . . , n.
aii
j6=i
P
Cet algorithme converge sûrement si : |aii | > i6=j |aij |.
L’algorithme de résolution est le suivant :

choisir le vecteur initial x(0) .


pour k = 1 jusqu’à Convergence
pour i = 1 jusqu’à n

FSB - STIC2
18

σ=0
pour j = 1 jusqu’à n
si j 6= i alors
(k−1)
σ = σ + ai,j xj
fin
fin
(k)
xi = ( bi a−i,i σ )
fin
Vérifier si la convergence est obtenue
fin

1. Écrire en matlab le script qui permet de résoudre le système linéaire en utili-


sant la méthode deP Jacobi. La convergence de l’algorithme est obtenue quand
(k) (k−1)
l’erreur E = 1/N N i=1 (|xi − xi |) est inférieure à une tolérance qu’on
prendra égale à 10−6 . On ajoutera par mesure de précaution que le nombre
d’itérations ne devra en aucun cas dépasser 100.
 
5 1 1 −2
 4 9 2 1 
2. Tester tout d’abord ce programme avec le système suivant : A =   3 2 6 0


1 3 2 7
 
0
 8 
et B =   7 ,

3
 
1 2 2
3. Tester ensuite le programme avec le système : A =  1 3 −2  et B =
3 5 8
 
2
 −1 
8
4. Vérifier si les résultats obtenues sont corrects. Conclure.

FSB - STIC2
Lab 3 : Résolution des Systèmes
non Linéaires
Durée : Trois Heures Enseignant : K. Cheikhrouhou

3.1 Objectif
L’objectif du TP est de résoudre un système non linéaire de la forme f (x) = 0.
Pour résoudre numériquement ce problème, on utilisera la méthode du point fixe, la
méthode de Newton et enfin la méthode de Newton améliorée.

3.2 Méthode du point fixe

3.2.1 Présentation
Il y a plusieurs façons de réécrire une équation f (x) = 0 sous la forme g(x) = x
sans que cela change les racines. Si on peut faire ça, on dira que la racine α de
f (x) = 0 est un point fixe de g. Pour chercher les point fixes de g on peut, sous
certaines conditions, utiliser l’algorithme suivant : xn+1 = g(xn ) pour n = 0, 1, 2, . . ..
Les propriétés de convergence de cet algorithme sont locales : si on part assez près
de la racine, la méthode diverge si |g ′(α)| > 1 où g ′ (x) désigne la dérivée première
de g(x).

3.2.2 Travail demandé


On considère les deux fonctions logistiques suivantes :
• g1 (x) = 2x2 /(1 + x2 )
• g2 (x) = (2 + x)/(1 + x)

1. Représenter sur la même figure (avec des couleurs différentes) chacune des
fonctions gi (x) dans l’intervalle x ∈ [0, 2] (utiliser la commande matlab hold
on pour que toutes les courbes soient sur la même figure).
2. Identifier graphiquement les points fixes α̂i = gi (α̂i ) de chacune de ces fonctions
en représentant sur le même graphe tracé à la question 1) la fonction y = x.
On rappelle qu’avec cette manière de faire les α̂i ne sont que des estimations
grossières des points fixes αi .

FSB - STIC2
20

3. Calculer la dérivée première de chacune des fonctions. En utilisant les α̂i pré-
cédemment évalués, déterminer s’il y a convergence de la méthode du point
fixe.
4. Écrire en Matlab le programme qui permet de calculer le point fixe. Vérifier ce
programme en utilisant les deux fonctions logistiques gi (x). Les valeurs appro-
chées de chaque point fixe αi seront déterminées avec une tolérance de 10−9
(prendre soin d’arrêter la recherche si le nombre d’itérations dépasse 1000).
Choisir comme point de départ x0 pour chaque zéro une estimation conve-
nable obtenue grâce aux graphes, i.e., x0 = α̂i . Vérifier que ça fonctionne aussi
pour x0 = 0.1.

3.3 Méthode de Newton


Partant d’une valeur approximative raisonnable d’un zéro d’une fonction d’une va-
riable réelle, on approxime au premier ordre la fonction par sa tangente en ce point.
Cette tangente est une fonction affine dont on sait trouver l’unique zéro. Ce zéro de
la tangente sera généralement plus proche du zéro de la fonction. Par cette opération,
on peut donc espérer améliorer l’approximation par itérations successives.
On considère la fonction f de [a, b] dans R définie et dérivable et sur l’intervalle [a, b],
et à valeurs réelles. Prenons x0 un réel arbitraire. Par récurrence, on définit la suite
xn par :
f (xn )
xn+1 = xn − ′
f (xn )

où f ′ (x) désigne la dérivée de la fonction f (x). Si le zéro inconnu α est isolé, alors
il existe un voisinage de α tel que pour toutes les valeurs de départ x0 dans ce
voisinage, la suite (xn ) va converger vers α. De plus, α est considéré comme le point
fixe de la fonction g(x) = f (x) + x.

3.3.1 Travail demandé


Soit la fonction g(x) = 32 x(1 − x) définie sur l’intervalle [1/9, 8/9].

1. Déterminer exactement le point fixe α.


2. Déterminer s’il y a convergence de la méthode du point fixe.
3. Déterminer graphiquement α̂.
4. Déterminer la valeur approximée de α en utilisant la méthode du point fixe.
5. Donner l’expression de f (x).
6. Écrire en Matlab le script qui permet d’implémenter la méthode de Newton.
Tester ce programme en utilisant l’expression de f (x) et de f ′ (x). La valeur
approchée de la solution sera déterminée avec une tolérance de 10−9 .

FSB - STIC2
Lab 3 : Résolution des Systèmes non Linéaires 21

(1) (1) (1) (2) (2) (2)


7. Déterminer les vecteurs X1 = [x0 , x1 , . . . , xn ] et X2 = [x0 , x1 , . . . , xn ]
(1) (2)
où xi et xi correspondent à la solution de l’équation f (x) = 0 à l’itération i
par la méthode du point fixe et la méthode de Newton, respectivement. Tracer
sur la même figure X1 et X2 en fonction de n.
8. Comparer la vitesse de convergence des deux méthodes.

3.4 Méthode de Newton Améliorée


Bien que la méthode soit très efficace, la méthode de Newton nécessite que la dérivée
soit effectivement calculée. Ce qui pose un grand problème au niveau pratique. Une
des solutions est de remplacer f ′ (x) par f (xxnn)−f (xn−1 )
−xn−1
.

3.4.1 Travail demandé


1. Écrire en Matlab le programme qui permet d’implémenter la méthode de New-
ton améliorée. Tester ce script en utilisant l’expression de f (x) précédemment
utilisée.
(3) (3) (3) (3)
2. Déterminer le vecteur X3 = [x0 , x1 , . . . , xn ] où xi correspond à la solution
de l’équation f (x) = 0 à l’itération i par la méthode de Newton améliorée.
Tracer sur la même figure X1 , X2 et X3 en fonction de n. Conclure.

3.5 Méthode Dichotomique


On suppose que la fonction f (x) est définie et continue sur un intervalle [a, b] et
vérifie f (a) f (b) < 0. Dans ce cas, il existe au moins un zéro α de f (x). Si on
pose c = (a + b)/2 le centre de l’intervalle de recherche, la méthode consiste à
chercher si le zéro est dans l’intervalle [a, c[ (f (a) f (c) < 0) ou dans l’intervalle ]c, b]
(f (c) f (b) < 0). Dans le premier cas, [a, b] est remplacé par [a, c]. Dans l’autre cas,
il est remplacé par [c, b]. Puis on recommence n fois.

3.5.1 Travail demandé


On veut chercher le zéro, noté α, de la fonction définie par f (x) = 32 x(1 − x) − x
pour x ∈ [1/9, 8/9].
1. Écrire un script en Matlab qui permet d’effectuer la recherche du zéro. La
valeur approchée de la solution sera déterminée avec une tolérance de 10−9 .
2. Déterminer le nombre d’itérations nécessaire et le comparer par rapport aux
autres techniques. Conclure.

FSB - STIC2
Lab 4 : Interpolation Polynomiale
Durée : Trois Heures Enseignant : K. Cheikhrouhou

4.1 Objectif
L’objectif du TP est d’approximer numériquement une fonction dont on connaı̂t les
valeurs en un nombre fini de points par interpolation polynomiale.

4.2 Outils Matlab sur les Polynômes


Soit P (x) = a0 + a1 x + a2 x2 + . . . + an xn , et soient r1 , r2 , . . . , rn les racines de
P (x). On peut écrire P (x) = A(x − r1 )(x − r2 ) · · · (x − rn ). Dans cette section, vous
allez voir comment Matlab permet de trouver les racines à partir des coefficients et
inversement.
Dans Matlab, les polynômes sont représentés sous forme de vecteurs lignes dont les
composantes sont données par ordre des puissances décroissantes. Un polynôme de
degré n est représenté par un vecteur de taille n+1. Ainsi P (x) = an xn +. . .+a2 x2 +
a1 x + a0 peut être représenté en Matlab par le vecteur P = [an , an−1 , . . . , a2 , a1 , a0 ].

4.2.1 Travail demandé


On suppose qu’on dispose du polynôme P (x) = x3 − 2x2 − 9x + 18.
1. En utilisant la fonction Matlab roots, déterminer les racines ri du vecteur P.
2. On suppose maintenant que le vecteur R contient les racines ri , décrire alors
la fonctionnalité de l’instruction Matlab H=poly(R). Vérifier que ces calculs
correspondent aux calculs théoriques.
3. En utilisant le vecteur H, déterminer et ensuite tracer les valeurs du polynôme
P (x) pour x ∈ [0, 1] avec un pas de 0.1.

4.3 Méthode de Lagrange


Pour approximer numériquement une fonction f (x) définie sur [a, b], en connaissant
seulement la valeur de la fonction en un nombre fini de point x0 , x1 , . . . , xn telle que

FSB - STIC2
Lab 4 : Interpolation Polynomiale 23

y0 = f (x0 ), y1 = f (x1 ), . . . , yn = f (xn ), le théorème de Lagrange montre qu’il existe


un seul polynôme P (x) de degré inférieur ou égal à n, tel que pour tout yi = f (xi )
connu, alors P (xi ) = yi .
Le polynôme P (x), appelé polynôme d’interpolation de Lagrange, PIL, est donné
par :
n
X
P (x) = yi Li (x)
i=0
n
Y x − xj
Li (x) =
x − xj
j=0 i
j6=i

4.3.1 Algorithme de Lagrange


En supposant que N = n + 1 est le nombre de points connus de la fonction f (x)
(les vecteurs X = [x0 , x1 , . . . , xn ] et Y = [y0 , y1 , . . . , yn ] sont connus), l’algorithme
suivant permet de trouver les valeurs du polynôme d’interpolation de Lagrange P (x)
pour x ∈ [a, b].

%% Algo. de Lagrange
k=0
pour x = a jusqu’à b avec un pas px
k =k+1
pour i = 1 jusqu’à N
L=1
pour j = 1 jusqu’à N
si i 6= j alors
L = L ∗ (x − X(j))/(X(i) − X(j))
fin
fin
P (k) = P (k) + Y (i) ∗ L
fin
fin

4.3.2 Travail demandé


2
Dans cette partie, on veut approximer la fonction f (x) = e−x − cos(2πx), x ∈
[−1, 1] par un polynôme d’interpolation de Lagrange en connaissant quelques points
seulement de la fonction f (x).

1. On suppose que deux points seulement de la fonction f (x) sont connus :


f (−0.8) = 0.2183 et f (0.6) = 1.5057. Écrire un script en Matlab permettant
de calculer le polynôme d’interpolation de Lagrange P1 (x) pour x ∈ [−1, 1]
avec un pas de 0.1.

FSB - STIC2
24

2. On suppose que trois points de la fonction f (x) sont connus : f (−0.8) = 0.2183,
f (0.3) = 1.2229 et f (0.6) = 1.5057. Écrire un script en Matlab permettant de
calculer le polynôme d’interpolation de Lagrange P2 (x) pour x ∈ [−1, 1] avec
un pas de 0.1.
3. On suppose maintenant que les points connus de la fonction f (x) sont f (−0.8) =
0.2183, f (−0.5) = 1.7788, f (−0.1) = 0.1810, f (0.3) = 1.2229, f (0.6) = 1.5057
et f (0.9) = −0.3642. Écrire un script en Matlab permettant de calculer le
polynôme d’interpolation de Lagrange P3 (x) pour x ∈ [−1, 1] avec un pas de
0.1.
4. Tracer sur la même figure la fonction f (x), les polynômes P1 (x), P2 (x) et P3 (x)
pour x ∈ [−1, 1] avec un pas de 0.1.
5. En utilisant les fonctions max et abs de Matlab, calculer l’erreur maximale
commise en approximant la fonction f (x), par P1 (x), P2 (x) et P3 (x) respecti-
vement. Conclure.

4.4 Génération du PIL : Forme de Newton


Soient x0 , x1 , ..., xn , n + 1 points distincts de [a, b]. On définit récursivement les
différences divisées comme suit :
f [x0 ] = f (x0 )
f [x0 , x1 ] = f [xx11]−f
−x0
[x0 ]

f [x0 , x1 , x2 ] = f [x1 ,xx22]−f


−x0
[x0 ,x1 ]

..
.
f [x1 ,x2 ,...,xn ]−f [x0 ,x1 ,...,xn−1 ]
f [x0 , x1 , . . . , xn ] = xn −x0

Le PIL PN (x) est alors donné par :

PN (x) = f [x0 ] + f [x0 , x1 ](x − x0 ) + f [x0 , x1 , x2 ](x − x0 )(x − x1 ) + . . .

+f [x0 , x1 , . . . , xn ](x − x0 )(x − x1 ) · · · (x − xn−1 )

4.4.1 Algorithme de Newton


La détermination des coefficients de P (x) dans la base de Newton est la suivante :

di = f [x0 , x1 , . . . , xi ] pour i = 1, . . . , N

où N est le nombre d’éléments dans le vecteur X. L’algorithme qui permet de calculer
ces coefficients est le suivant :

FSB - STIC2
Lab 4 : Interpolation Polynomiale 25

%% Algo. differences divisees


pour i = 1 jusqu’à N
F (i, 1) = Yi
fin
pour i = 2 jusqu’à N
pour j = 2 jusqu’à i
F (i, j) = (F (i, j − 1) − F (i − 1, j − 1))/(X(i) − X(i − j + 1))
fin
fin
pour i = 1 jusqu’à N
di = F (i, i)
fin

4.4.2 Travail demandé


1. Écrire un script en Matlab qui permet de déterminer le vecteur D des diffé-
rences divisées D = [f [x0 ], f [x0 , x1 ], . . . , f [x0 , x1 , . . . , xn ]].
2. Écrire un script en Matlab qui permet de déterminer le polynôme de coefficients
(et non des racines) PN = [an , . . . , a1 , a0 ].
3. Approximer la fonction f (x) par un PIL PN (x), en utilisant tous les points
calculés.
4. Tracer sur la même figure la fonction f (x), les polynômes P1 (x), P2 (x) et PN (x)
pour x ∈ [−1, 1] avec un pas de 0.1. Conclure.

FSB - STIC2
Lab 5 : Intégration Numérique et
Équations Différentielles
Durée : Trois Heures Enseignant : K. Cheikhrouhou

5.1 Objectif
Le but de ce laboratoire est, tout d’abord, de vous initier au calcul numérique ap-
proché d’une intégrale effectué sur Matlab. Deux techniques seront étudiées : mé-
thode des rectangles et des trapèzes. La deuxième partie de ce lab est consacrée au
calcul numérique des solutions des équations différentielles. Deux méthodes seront
étudiées : méthode d’Euler et de Runge-Kutta.

5.2 Présentation
Pour effectuer un calcul numérique approché d’une intégrale In , on considère ici le
cas d’une fonction f définie sur [a, b] . On définit le pas d’approximation h de la
manière suivante : h = b−a n
; où n détermine la précision de l’approximation. On
définit aussi xi = a + ih pour i = 0, 1, . . . , n − 1.

5.2.1 Méthode des rectangles

La méthode des rectangles revient à une approximation de f par une fonction en


escalier, avec n marches de longueur h. La valeur approchée In de l’intégrale vaut
alors :

n−1
X
In = h f (xi )
i=0

À noter que cette technique est dite méthode des rectangles à gauche. En effet, les
xi sont pris comme la première borne des intervalles élémentaires d’intégration :
xi = a, a + h, a + 2h, . . .. Il en existe d’autres : les méthodes des rectangles à droite
ou au point milieu.

FSB - STIC2
Lab 5 : Intégration Numérique et Équations Différentielles 27

5.2.2 Méthode des trapèzes


On utilise une fonction continue approchant la fonction à intégrer et égale à celle-ci
sur les points de la subdivision en n sous-intervalles égaux de l’intervalle d’intégration
[a, b] pour obtenir une approximation de la valeur de son intégrale sur [a, b].
En remplaçant les rectangles utilisés précédemment par des trapèzes, on obtient :
" n−1
#
f (a) + f (b) X
In = h + f (xi )
2 i=1

5.3 Intégration Numérique


Dans cette partie, on va considérer les intégrales suivantes :
Z π
cos(x) sin(x)dx = 0
−π
Z 2
log(x)dx = 2 log(2) − 1
1
2
8 −3
Z
x dx = 10
1 3
Z 1 √
4 1 − x2 dx = π
0

1. Écrire un script Matlab qui permet de réaliser le calcul numérique approché


d’une intégrale par la méthode des rectangles pour toutes les fonctions f ci-
tées précédemment. Les arguments d’entrée de la procédures sont : les bornes
a et b, le nombre de marches n et la fonction f . La sortie sera In qui est
l’approximation de I.
2. Écrire un deuxième script qui réalise le calcul numérique approché d’une in-
tégrale par la méthode des trapèzes pour toutes les fonctions f citées précé-
demment. Cette procédure devra prendre les mêmes arguments d’entrée et de
sortie que celle de la fonction précédente.
3. Calculer l’erreur |In − I| pour chaque méthode et conclure.

5.4 Influence du nombre de marches n


4
Soit f la fonction définie par f (x) = 1+x2
, on note In la valeur approchée de
R1
I = 0 f (x)dx.
1. En sachant que
1
Z
dx = arctan(x) + C
1 + x2

FSB - STIC2
28

trouver la valeur théorique de I.


2. À l’aide de la procédure Matlab utilisant la méthode des rectangles, trouver la
valeur approchée de I à l’aide de 100 rectangles. Comparer la avec celle de In
en calculant l’erreur absolue.
3. On considère maintenant que n varie entre 10 et 100, avec un pas de 5. In sera
dans ce cas un vecteur, qu’on notera Inr qui varie en fonction de n. Tracer alors
|Inr − I| en fonction de n, les points ont-ils l’air alignés ?
4. En utilisant la fonction log, tracer log(|Inr − I|) en fonction de log(n), les points
ont-ils l’air alignés ?
5. Quelle vitesse de convergence peut-on conclure pour Inr . C’est à dire pour quel
α a-t-on |Inr − I| = O(1/nα ) ?
6. En modifiant la méthode des rectangles par celle des trapèzes, trouver alors
le nouveau vecteur Int obtenu de la manière que celle utilisée précédemment.
Tracer la nouvelle courbe d’erreurs en fonction de n. En déduire la vitesse
convergence de cette méthode.

5.5 Intégration Numérique Améliorée


On veut maintenant améliorer ces méthodes pour obtenir de meilleures courbes d’er-
reurs avec des vitesses de convergences plus rapides. Deux techniques sont proposées :
– Méthode des rectangles au point milieu : qui consiste à modifier la méthode
des rectangles en prenant les xi comme le milieu des intervalles élémentaires, de
manière à avoir xi = a + ih + h/2.
– Méthode de Simpson : La méthode d’interpolation est dans ce cas une para-
bole qui nécessite trois points. L’intégrale dans ce cas est calculée de la manière
suivante :
" n−1 n−1
#
h X X
In = f (a) + f (b) + 2 f (xi ) + 4 f (xi + h/2)
6 i=1 i=0

où xi = a + ih. R1
4
Dans ce qui suit on considère que f est définie par f (x) = 1+x2
et I = 0
f (x)dx.

1. Écrire une procédure Matlab qui réalise le calcul numérique approché de l’in-
tégrale par la méthode des rectangles au point milieu pour la fonction f pour
n variant entre 10 et 100, avec un pas de 5.
2. Écrire une procédure Matlab qui réalise le calcul numérique approché d’une
intégrale par la méthode de Simpson pour toute fonction f pour n variant
entre 10 et 100, avec un pas de 5.
3. Tracer sur la même figure les quatre courbes d’erreurs en fonction de n. Dé-
terminer les vitesses de convergences des deux dernières méthodes. Conclure.

FSB - STIC2
Lab 5 : Intégration Numérique et Équations Différentielles 29

5.6 Équations Différentielles

5.7 Présentation
On veut résoudre une équation différentielle de la forme :
 .
y = f (t, y) avec t ∈ [t0 , T ]
y(t0) = y0

L’idée générale est de discrétiser l’intervalle de variation de t telle que : tn = t0 + nh


où h = (T − t0 )/n est le pas de la méthode. Il faut ensuite trouver une suite itérative
yn qui s’approche de la solution y(tn ). Plusieurs méthodes de résolution numérique
sont possibles. La forme générique de la solution est :

yn+1 = yn + hφ(tn , yn )

où la fonction φ(tn , yn ) va avoir des expressions différentes selon la méthode de


résolution utilisée. Nous citerons dans ce lab les deux méthode les plus connues :
• Méthode d’Euler En considérant que h est le pas de la méthode et y0 = y(t0 ) le
point initial, la méthode d’Euler est décrite par :

yn+1 = yn + hf (tn , yn )

• Méthode de Runge-Kutta d’ordre 4 : RK4 C’est une amélioration de la


méthode d’Euler. La relation de récurrence est donnée par :
1
yn+1 = yn + (k1 + 2k2 + 2k3 + k4 )
6
où les coefficients ki pour i = 1, . . . , 4 sont donnés par :

k1 = hf (tn , yn )
h k1
k2 = hf (tn + , yn + )
2 2
h k2
k3 = hf (tn + , yn + )
2 2
k4 = hf (tn + h, yn + k3 )

5.8 Travail demandé


On à résoudre l’équation différentielle suivante :
 .
y = e−2y avec t ∈ [0, 2]
y(0) = 0

FSB - STIC2
30

1
1. Vérifier que y = 2
log(2t + 1) est la solution théorique exacte de l’équation
différentielle.
2. En prenant h = 0.01, résoudre l’équation par les deux méthodes citées précé-
demment. Les solutions seront notées y1 (n) pour la méthode d’Euler et y2 (n)
pour la méthode RK4.
3. Représenter sur la même figure |y1(n) − y(n)| et |y2 (n) − y(n)|. Conclure.

FSB - STIC2

Vous aimerez peut-être aussi