informatique appliquée - matlab pour tous

194
REPUBLIQUE DU BENIN MINISTERE DE L'ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE UNIVERSITE D'ABOMEY CALAVI ECOLE POLYTECHNIQUE D’ABOMEY CALAVI (EPAC) DEPARTEMENT DE GENIE MECANIQUE ET ENERGETIQUE Année d’étude : GME 3 COURS : INFORMATIQUE APPLIQUEE Cours présenté et animé par : ZINSALO Joël M. Année Académique : 2012 - 2013

Upload: epac-bj

Post on 30-Jan-2023

0 views

Category:

Documents


0 download

TRANSCRIPT

REPUBLIQUE DU BENIN

MINISTERE DE L'ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE

UNIVERSITE D'ABOMEY CALAVI

ECOLE POLYTECHNIQUE D’ABOMEY CALAVI (EPAC)

DEPARTEMENT DE GENIE MECANIQUE ET ENERGETIQUE

Année d’étude : GME 3

COURS :

INFORMATIQUE APPLIQUEE

Cours présenté et animé par :

ZINSALO Joël M.

Année Académique : 2012 - 2013

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 2

PARTIE B : PROGRAMMATION EN MATLAB

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 3

PLAN

Chapitre 1 : Présentation générale

Chapitre 2 : Systèmes d'équations linéaires

Chapitre 3 : Polynômes et interpolation polynomiale

chapitre 4 : Intégration numérique des fonctions

Chapitre 5 : Résolution numérique des équations différentielles et des équations

aux dérivées partielles

Résumé

Cette deuxième partie du cours INFORMATIQUE APPLIQUEE, est composée de cinq

chapitres.

Dans le premier chapitre, on fait la Présentation générale de la syntaxe du langage

et des différentes opérations élémentaires ainsi que les fonctions de bases utilisées

dans Matlab. Un petit résumé succinct à la fin de ce chapitre permet de maîtriser la

visualisation graphique.

Le second chapitre concerne le calcul vectoriel et matriciel. Dans ce chapitre, une

application à la résolution numérique des systèmes linéaires par la méthode du

pivot et les méthodes itératives est présentée.

Le troisième chapitre combine à la fois les opérations sur les polynômes et

l’interpolation ainsi que l’approximation au sens des moindres carrés dans Matlab.

Dans le quatrième chapitre, on étudie l’intégration numérique des fonctions dans

Matlab. Quelques exemples concrets permettent de maîtriser les méthodes

d’intégration numérique vues en cours.

Enfin, le dernier chapitre est consacré à l’utilisation de Matlab pour la résolution

des équations différentielles et des équations aux dérivées partielles.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 4

CHAPITRE 1 :

PRESENTATION DE MATLAB

1. Introduction - Historique

MATLAB est une abréviation de Matrix LABoratory. Écrit à l’origine, en Fortran, par

C. Moler, MATLAB était destiné à faciliter l’accès au logiciel matriciel développé

dans les projets LINPACK et EISPACK. La version actuelle, écrite en C par the

MathWorks Inc., existe en version professionnelle et en version étudiant. Sa

disponibilité est assurée sur plusieurs plates-formes : Sun, Bull, HP, IBM,

compatibles PC (DOS, Unix ou Windows), Macintoch, iMac et plusieurs machines

parallèles.

MATLAB est un environnement puissant, complet et facile à utiliser destiné au

calcul scientifique. Il apporte aux ingénieurs, chercheurs et à tout scientifique un

système interactif intégrant calcul numérique et visualisation. C'est un

environnement performant, ouvert et programmable qui permet de remarquables

gains de productivité et de créativité.

MATLAB est un environnement complet, ouvert et extensible pour le calcul et la

visualisation. Il dispose de plusieurs centaines (voire milliers, selon les versions et

les modules optionnels autour du noyau Matlab) de fonctions mathématiques,

scientifiques et techniques. L'approche matricielle de MATLAB permet de traiter les

données sans aucune limitation de taille et de réaliser des calculs numériques et

symboliques de façon fiable et rapide. Grâce aux fonctions graphiques de MATLAB,

il devient très facile de modifier interactivement les différents paramètres des

graphiques pour les adapter selon nos souhaits.

L'approche ouverte de MATLAB permet de construire un outil sur mesure. On peut

inspecter le code source et les algorithmes des bibliothèques de fonctions

(Toolboxes), modifier des fonctions existantes et ajouter d’autres.

MATLAB possède son propre langage, intuitif et naturel qui permet des gains de

temps de CPU (Central Processing Unit) spectaculaires par rapport à des langages

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 5

comme le C, le TurboPascal et le Fortran. Avec MATLAB, on peut faire des liaisons

de façon dynamique, à des programmes C ou Fortran, échanger des données avec

d'autres applications (via la DDE (Dynamic Data Exchange) : MATLAB serveur ou

client) ou utiliser MATLAB comme moteur d'analyse et de visualisation.

MATLAB comprend aussi un ensemble d'outils spécifiques à des domaines, appelés

Toolboxes (ou Boîtes à Outils). Indispensables à la plupart des utilisateurs, les

Boîtes à Outils sont des collections de fonctions qui étendent l'environnement

MATLAB pour résoudre des catégories spécifiques de problèmes. Les domaines

couverts sont très variés et comprennent notamment le traitement du signal,

l'automatique, l'identification de systèmes, les réseaux de neurones, la logique

floue, le calcul de structure, les statistiques, etc.

MATLAB fait également partie d'un ensemble d'outils intégrés dédiés au Traitement

du Signal. En complément du noyau de calcul MATLAB, l'environnement comprend

des modules optionnels qui sont parfaitement intégrés à l'ensemble :

1) une vaste gamme de bibliothèques de fonctions spécialisées (Toolboxes)

2) Simulink, un environnement puissant de modélisation basée sur les

schémas-blocs et de simulation de systèmes dynamiques linéaires et non

linéaires

3) Des bibliothèques de blocs Simulink spécialisés (Blocksets)

4) D'autres modules dont un Compilateur, un générateur de code C, un

accélérateur,...

5) Un ensemble d'outils intégrés dédiés au Traitement du Signal : le DSP

(Digital Signal Processing ) Workshop.

Quelles sont les particularités de MATLAB ?

MATLAB permet le travail interactif soit en mode commande, soit en mode

programmation ; tout en ayant toujours la possibilité de faire des visualisations

graphiques. Considéré comme un des meilleurs langages de programmations (C ou

Fortran), MATLAB possède les particularités suivantes par rapport à ces langages :

• la programmation facile,

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 6

• la continuité parmi les valeurs entières, réelles et complexes,

• la gamme étendue des nombres et leurs précisions,

• la bibliothèque mathématique très compréhensible,

• l’outil graphique qui inclut les fonctions d’interface graphique et les utilitaires,

• la possibilité de liaison avec les autres langages classiques de

programmations (C ou Fortran).

Dans MATLAB, aucune déclaration n’est à effectuer sur les nombres. En effet, il

n'existe pas de distinction entre les nombres entiers, les nombres réels, les nombres

complexes et la simple ou double précision. Cette caractéristique rend le mode de

programmation très facile et très rapide. En Fortran par exemple, une subroutine

est presque nécessaire pour chaque variable simple ou double précision, entière,

réelle ou complexe. Dans MATLAB, aucune nécessité n’est demandée pour la

séparation de ces variables.

La bibliothèque des fonctions mathématiques dans MATLAB donne des analyses

mathématiques très simples. En effet, l’utilisateur peut exécuter dans le mode

commande n’importe quelle fonction mathématique se trouvant dans la bibliothèque

sans avoir à recourir à la programmation.

Pour l’interface graphique, des représentations scientifiques et même artistiques

des objets peuvent être créées sur l’écran en utilisant les expressions

mathématiques. Les graphiques sur MATLAB sont simples et attirent l’attention des

utilisateurs, vu les possibilités importantes offertes par ce logiciel.

MATLAB peut-il s’en passer de la nécessité de Fortran ou du C ?

La réponse est non. En effet, le Fortran ou le C sont des langages importants pour

les calculs de haute performance qui nécessitent une grande mémoire et un temps

de calcul très long. Sans compilateur, les calculs sur MATLAB sont relativement

lents par rapport au Fortran ou au C si les programmes comportent des boucles. Il

est donc conseillé d'éviter les boucles, surtout si celles-ci sont grandes.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 7

2. Démarrage de MATLAB

Pour lancer l’exécution de MATLAB :

• sous Windows, il faut cliquer sur Démarrage, ensuite Programme, ensuite

MATLAB,

• sous d’autres systèmes, se référer au manuel d’installation.

L’invite ‘>>’ de MATLAB doit alors apparaître, à la suite duquel on entrera les

commandes.

La fonction "quit" permet de quitter MATLAB :

>>quit

La commande "help" permet de donner l’aide sur un problème donné.

Exemple :

>> help cos

COS Cosine.

COS(X) is the cosine of the elements of X.

Autres commandes :

• what : liste les fichiers *.m et *.mat dans le directory utilisé

• who : liste les variables utilisées dans l’espace courant

• ans : réponse retournée après exécution d’une commande

Exemple :

>>x=[1:5,1]

x =

1 2 3 4 5 1

ou bien :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 8

>>[1:5,1]

ans =

1 2 3 4 5 1

clock : affiche l’année, le mois, le jour, l’heure, les minutes et les secondes.

>>clock

ans =

1.0e+003 *

1.9980 0.0100 0.0180 0.0170 0.0020 0.0098

>>date ans = 09-Oct-2013

3. Calcul en mode Commande dans MATLAB :

Soit à calculer le volume suivant :

� =4

3���ù� = 4�

Pour calculer V, on exécute les commandes suivantes :

>>R=4 R = 4

>>V=4/3*pi*R^3 V = 268.0826

(Ici, pi=π).

3.1. Opérateurs mathématiques

On a :

+ addition - soustraction * multiplication / division ^ puissance

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 9

>> (2 + 5.2)*10 / (5^3) ans = 0.5760 >> -2.52e3 ans = -2520 >> 2*pi ans = 6.2832

Exemple :

� = 2,���� =4�� � 2� � 3�� � 1

>>x=2 x = 2

>>P=(4*x^2-2*x+3)/(x^3+1) P = 1.6667

Test ‘if’ Ce test s'emploie, souvent, dans la plupart des programmes. Un test

‘if’ est toujours suivi par un ‘end’.

Exemple :

>>V=268.0826 V = 268.0826

>>if V>150, surface=pi*R^2, end surface = 50.2655

L’opérateur ‘NON’ Il est noté (ou symbolisé) par ‘~=’

Exemple :

>>R=4 R = 4

>>if R~=2, V=4/3*pi*R^3; end

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 10

L’opérateur ‘égal’ (= =) dans ‘if’ Il est noté (ou symbolisé) par ‘= =’.

Exemple :

>>R=4 R = 4

>>if R==4, V=4/3*pi*R^3;end

L’opérateur ‘ou’ Il est noté (ou symbolisé) par ‘|’

Exemple : Si R=4 ou m=1, alors

� � 43 ���

>>if R==4 | m==1, V=4/3*pi*R^3;end

Autres opérateurs :

> supérieur à

< inférieur à

>= supérieur ou égal

<= inférieur ou égal.

> supérieur à .* produit élément par élément de matrices < inférieur à .^ puissance élément par élément de matrices >= supérieur ou égal ./ division élément par élément de matrices <= inférieur ou égal xor OU exclusif (XOR) Error affiche le message : 'error' message spécifié, émet un 'bip' et interrompt l'exécution du programme

Exemples :

Si g>2 ou g<0, alors a=4

>> if g>2 |g<0, a=4, end

Si a>3 et C<0, alors b=15

>>if a>3 & c<0, b=15, end

Les opérateurs ‘&’ et ‘|’ peuvent être utilisés dans la même chaîne :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 11

>>if ((a==2 | b==3)&(c<5),g=1,end

L’opérateur ‘if…….else…….elseif…….end’:

Exemples :

>>R=2, if R>3, b=1 ; elseif R==3, b=2, else b=0, end

L’instruction ‘elseif’ peut être répétée dans un programme autant de fois.

format long e affiche 16 chiffres : >> format long e >> 2*pi ans = 6.283185307179586e+000 format short (format par défaut) affiche 5 chiffres : >> format short >> 2*pi ans = 6.2832 >> 1 / 0 Warning: Divide by zero ans = Inf >> -1 / 0 Warning: Divide by zero ans = -Inf >> 0 / 0 Warning: Divide by zero ans = NaN

3.2. Fonctions mathématiques On a :

sin(X) sinus asin(X) sinus inverse cos(X) cosinus acos(X) cosinus inverse tan(X) tangente atan(X) tangente inverse

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 12

avec X : argument en radians.

exp(X) exponentielle log(X) logarithme naturel (base e)

log10(X) logarithme décimal (base 10) sqrt(X) racine carrée abs(X) valeur absolue

>> sin(2) ans = 0.9093 sinus (45°) : >> sin(45*pi/180) ans = 0.7071 >> 1 + exp(2.5) ans = 13.1825 >> 5*3 ans = 15 >> ans+4 ans = 19 >> a= 2 + log(15) a = 4.7081 >> b = - 45 b = -45 >> a * b ans = -211.8623

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 13

>> c = a - sqrt(abs(b)) c = -2.0002

3.3. Variables et noms de variables :

Les variables et les noms de variables n’ont pas à être déclarés, car dans

MATLAB, il n’y a aucune distinction entre variable ‘entière’, variable ‘réelle’ ou

variable ‘complexe’.

Variables complexes :

Traditionnellement, en Fortran les variables i, j, k, l, m et n sont réservées aux

variables entières. Dans MATLAB, i et j sont réservées aux unités imaginaires (� � √�1 ou

� √�1 ). Mais, on peut également les utiliser comme d'autres variables (entières

ou réelles) si on les précise.

Dans le tableau ci-dessous, on dresse les noms de variables et les nombres

spéciaux utilisés par MATLAB :

Nom de la variable Signification Valeur Eps précision relative des nombres réels (distance entre 1.0 et

le nombre réel flottant le plus proche) 2.2204.10-16

Pi π 3.14159……….. i et j unités imaginaires √�1 Inf nombre infini (1/0=inf) NAN ce n’est pas un nombre : 0/0=NAN date Date nargin nombre d’arguments d'appel transmis à une fonction flops compteur opérations en virgule flottante nargout nombre d’arguments de retour demandés à une fonction

Opérateurs ‘for/end’ et ‘while/end’

Exemples :

>>for R=1:5, V=4/3*pi*R^3; disp([R,V]), end

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 14

Dans ce cas, R varie de 1 à 5, et la commande "disp([R,V])" retourne la matrice suivante :

[R=1:5,V (V(1) :V(5)]

On peut définir également l’instruction ‘length’ qui représente la taille de la

variable. En effet, dans ce cas, on a :

length(R)=5 ; (R=1:5) et length(R)-1=4 (4 intervalles de pas 1).

>>while R<5, R=R+1; V=4/3*pi*R^3; disp([R,V]), end

while exécute l’instruction qui suit tant que le test logique est vrai.

Exemple de pas dans la boucle for :

>>for R=5 :-1 :1, V=4/3*pi*R^3; disp([R,V]), end

Ici, le pas utilisé est dégressif (=-1). On peut utiliser les imbrications de ‘for’ autant

de fois que l’on souhaite.

Exemple :

>> for i=0 :10, for j=1 :5, V=4/3*pi*R^3;disp([R,V]);end, end

* format :

>>format � affiche les résultats avec 4 chiffres après la virgule.

>>format long � affiche les résultats avec 16 chiffres après la virgule.

* break :

Interrompre l’exécution d’un ‘for’ ou d’un ‘while’

* goto :

Dans MATLAB l’instruction ‘goto’ est remplacée par ‘break’.

Exemple :

while R==1 . . .

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 15

if x>Xlimite, break, end . . . . end

* clear :

Efface toutes les variables existantes en mémoire

* clc :

Efface l’écran (fenêtre) de MATLAB

* input(' ') :

Introduire une ou des variables par l’intermédiaire du clavier.

Exemple :

>>z=input(‘Longueur L=’);

retourne : Longueur L=

>>y=input(‘Introduire votre nom’,’s’);

Le second argument indique que la variable à introduire peut être un (ou des)

caractère(s).

* fprintf(' ')

format de sortie sur écran

Exemples :

1. fprintf(‘La longueur L=%f\n’,L)

Dans cette chaîne, on a :

% � pour la sortie de la variable, f � format de sortie

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 16

\n � retour à la ligne L �� variable.

2. fprintf(‘La longueur L= %e%f\n’,L)

le résultat affiché est avec des puissances de 10 (exemple : 2.5e04)

3. fprintf(‘Nom_fichier’,’Volume= %e%12.5f\n’,V)

écrit la valeur = variable V dans un fichier Nom_fichier.

la variable V est avec 5 chiffres après la virgule.

Pour l’ouverture et la fermeture des fichiers, on peut utiliser également ‘fopen’ et

‘fclose’. Ainsi, on peut joindre à l’ouverture de fichier par exemple, la permission

d’ouvrir uniquement, de lire uniquement, de lire et écrire, etc.

Exemple :

>>fich=fopen(‘Nom_fichier’,’ ?’)

? � représente la permission : ‘w’ � écriture : créer si nécessaire,

‘r’ � lecture uniquement (pas de création),

‘+r’ � lecture et écriture.

Ecriture d’un fichier ou de variables dans un fichier :

Ouvrir tout d’abord le fichier :

>>fich=fopen(‘Nom_fichier’,’ r’) ; y=fscanf(fich,’%f’)

La variable y est maintenant égale à la (ou les) variable(s) de fich.

Produit factoriel :

La fonction ‘gamma’ donne le produit factoriel d’un nombre n.

Exemple : pour n=6, on a : 6!=6*5*4*3*2*1=720

>>factorielle=gamma(6+1) factorielle = 720

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 17

La fonction ‘gamma’ peut calculer la factorielle des nombres entiers et même des

nombres réels.

3.4. Utilisation de nombres ou de variables complexes :

MATLAB, peut utiliser et gérer les variables ou les nombres complexes. La plupart

des fonctions implicites définies pour les réels existent pour les complexes, y

compris la puissance.

• Fonctions :

I imaginaire pur J imaginaire pur

conj(X) conjugué du nombre complexe X

real(X) partie réelle imag(X) partie imaginaire abs(X) Module

angle(X) argument (en radians)

• Exemples : >> (4 - 2.5i)*(-2 + i)/(1 + i) ans = 1.7500 + 7.2500i >> a = 1 + i a = 1.0000 + 1.0000i >> b = -2 + 3.5j b = -2.0000 + 3.5000i >> a + b ans = -1.0000 + 4.5000i >> a * b ans = -5.5000 + 1.5000i >> a / b ans = 0.0923 - 0.3385i >> conj(a) ans =

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 18

1.0000 - 1.0000i >> a * conj(a) ans = 2 >> real(a) ans = 1 >> imag(conj(a)) ans = -1 >> abs(a) ans = 1.4142 >> angle(a) ans = 0.7854 sqrt : fonction racine carrée >> c = 2 - sqrt(3)*i c = 2.0000 - 1.7321i >> abs(c) ans = 2.6458 >> angle(c) ans = -0.7137 Argument en degrés : >> angle(c)*180/pi ans = -40.8934

Exemple :

>>z=3.5-1.25i ;

>>log(z) ans = 1.3128 - 0.3430i

>>cos(2-i) ans = -0.6421 + 1.0686i

L’imaginaire pur est noté par i ou j. Ainsi, i2 ou j2 donne :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 19

>>i^2 ans = -1.0000 + 0.0000i

Soit z un nombre complexe. Son conjugué est donné par la fonction ‘conj(z)’.

>>z=3.5-1.25i z = 3.5000 - 1.2500i

>>conj(z) ans = 3.5000 + 1.2500i

Opérations sur les nombres complexes :

1. Addition de nombres complexes :

>>z1 z1 = 3.5000 - 1.2500i

>>z2 z2 = 1.3140 - 0.0948i

>>z1+z2 ans = 4.8140 - 1.3448i

2. Soustraction de nombres complexes :

>>z1-z2 ans = 2.186 - 1.1552i

3. Multiplication de nombres complexes :

>>z1*z2 ans = 4.4805 - 1.9743i

4. Division de nombres complexes :

>>z1/z2 ans = 2.7181 - 0.7551i

5. Opération de puissance :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 20

>>z1^z2 ans = 4.5587 - 2.9557i

5. Module et argument d’un nombre complexe :

Dans MATLAB, les fonctions ‘abs’ et ‘angle’ permettent l’obtention directe du

module et de l’argument d’un nombre complexe.

Exemple :

>>r=abs(z1) r = 3.7165

>>theta=angle(z1) theta = -0.3430

L’angle theta est en radians.

Il est possible d’utiliser la notation exponentielle.

Exemple :

>>Z=exp(z1)

Z = 10.4420 -31.4261i

Comme on peut définir des tableaux ou des matrices de réels, il est aussi possible

de définir des tableaux ou de matrices complexes avec MATLAB.

Exemples :

>>Z=[1+2i 0 z1;1 z2 z1+z2;z1*z2 z1-z2 z1/z2]

Z = 1.0000 + 2.0000i 0 3.5000 - 1.2500i 1.0000 1.3140 - 0.0948i 4.8140 - 1.3448i 4.4805 - 1.9744i 2.1860 - 1.1552i 2.7181 - 0.7551i

On peut également faire des opérations arithmétiques sur les matrices :

>>A=Z^(-1) A = 0.2279 - 0.1872i -0.2475 + 0.1665i 0.1564 - 0.0282i

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 21

-0.6237 + 0.3429i 0.4146 - 0.4741i 0.0537 + 0.3314i 0.1251 - 0.0321i 0.1174 + 0.1358i -0.0282 - 0.0914i

>>A*Z ans = 1.0000 + 0.0000i -0.0000 + 0.0000i -0.0000 + 0.0000i 0.0000 1.0000 - 0.0000i 0.0000 - 0.0000i -0.0000 - 0.0000i 0.0000 - 0.0000i 1.0000 + 0.0000i

>>A/Z ans = 0.1328 - 0.2826i -0.0267 + 0.2886i -0.0451 - 0.1223i -0.1566 + 0.6725i 0.0057 - 0.5356i 0.1202 + 0.1689i -0.1037 - 0.0857i 0.0965 + 0.0148i -0.0276 + 0.0428i

Déclarations et affectations des variables :

fprintf(‘caractère : %c\n’,c) ;

fprintf(‘entier: %d\n’,i) ;

fprintf(‘flottant: %f\n’,f) ;

fprintf(‘flottant: %s\n’,s) ;

Il existe également d’autres types d’affectations. Ces dernières sont analogues à celles du langage ‘C’.

c=’#’

i=1, 2, 3, … , n � des entiers

� � � √�⁄ par exemple (si � ≥ 0)

s : la valur peut être la plus petite que posssible. Exemple : s=1.35e-17.

Arrangement de variables :

Une matrice d’ordre 0 est un scalaire. Une matrice d’ordre 1 est un vecteur. Ce

vecteur peut être un vecteur ligne ou un vecteur colonne.

Exemples :

>>x=[0,1,2,3] � retourne un vecteur ligne : x =0 1 2 3

ou encore :

>>x=[0 1 2 3] � retourne aussi un vecteur ligne.

x(2)=1 par exemple.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 22

>>x=[0 ;1 ;2 ;3] � retourne un vecteur colonne. x = 0 1 2 3

>>x=[0 ;1 ;2 ;3]’ � retourne un vecteur ligne.

>>x=[0 1 2 3]’ � retourne un vecteur colonne. x(1)=0, x(2)=1, x(4)=3.

3.5. Calcul matriciel

• Fonctions :

+ addition de matrices - soustraction de matrices * produit de matrices ^ puissance

eye (n) matrice unité (matrice identité) de taille n × n inv (X) inverse de la matrice carrée X

rank (X) rang de la matrice X (nombre de colonnes ou de lignes indépendantes)

det (X) déterminant de la matrice carrée X X ' transposée de la matrice X / division à droite : A / B est équivalent à A * inv(B) \ division à gauche : A \ B est équivalent à inv(A) * B

• Exemples :

Saisie d'une matrice carrée de taille 3 x 3 :

>> A = [ 2 4 5 ; 1 5 7 ; -3 3 1] A = 2 4 5 1 5 7 -3 3 1

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 23

>> A(2 , 3) ans = 7 >> A(2 , 3) = 6 A = 2 4 5 1 5 6 -3 3 1 >> A' ans = 2 1 -3 4 5 3 5 6 1 >> inv(A) ans = 1.0833 -0.9167 0.0833 1.5833 -1.4167 0.5833 -1.5000 1.5000 -0.5000 >> D = A * inv(A) D = 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 >> rank(A) ans = 3 >> det(A) ans = -12 >> eye(7) ans = 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 >> B = [ 1 1 0 ; 1 0 1 ; 0 1 1 ]

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 24

B = 1 1 0 1 0 1 0 1 1

>> A + B ans = 3 5 5 2 5 7 -3 4 2 >> 2 + A ans = 4 6 7 3 7 8 -1 5 3 >> 2 * A ans = 4 8 10 2 10 12 -6 6 2 >> A * B ans = 6 7 9 6 7 11 0 -2 4 >> B * A ans = 3 9 11 -1 7 6 -2 8 7 >> A*A*A ans = -88 304 262 -98 314 268 -18 18 10

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 25

>> A^3 ans = -88 304 262 -98 314 268 -18 18 10 Saisie d'une matrice à coefficients complexes de taille 2 x 3 : >> C = [ 1 + i 0 0 ; 1 - i i 2] C = 1.0000 + 1.0000i 0 0 1.0000 - 1.0000i 0 + 1.0000i 2.0000 >> C * A ans = 2.0000 + 2.0000i 4.0000 + 4.0000i 5.0000 + 5.0000i -4.0000 - 1.0000i 10.0000 + 1.0000i 7.0000 + 1.0000i

Remarque :

Dans MATLAB, les numéros de lignes ou de colonnes commencent toujours par

1 et non par zéro comme c’est le cas dans les autres langages de programmation.

Exemple : x(0) n’existe pas.

Matrice d’ordre supérieur à 1 :

Une matrice d’ordre supérieur à 1 est une matrice à deux dimensions. Exemple :

x(i,j).

Exemples :

>>x=[0 :2 ;4 :6] � retourne : x = 0 1 2 4 5 6

C’est une matrice à 2 lignes et 3 colonnes.

>>y=[0 :2 ;4 :6]’ � retourne la matrice transposée : y = 0 4 1 5 2 6

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 26

La taille de la matrice y est donnée par la fonction ‘size(y)’ :

>>size(y)

ans =

3 2

La réponse est : 3 lignes et 2 colonnes.

La colonne j de la matrice x est donnée par : y(:,j) pour j=2, on a :

y(:,2)=

4

5

6

La ligne i de la matrice x est donnée par : y(i,:) pour i=2, on a :

y(2,:)=

5

Pour une matrice carrée A d’ordre n, on a sa matrice identité qui est donnée par

la fonction ‘eye’.

Exemple : pour n=3, on a :

>>A A = 1 2 3 4 5 6 6 7 8

>>eye(size(A)) ans = 1 0 0 0 1 0 0 0 1

eye(size(A)) donne la matrice identité de même ordre que celle de A.

Aspect des nombres dans MATLAB :

Dans MATLAB, il n’existe aucune distinction entre les nombres entiers, les

nombres réels ou les nombres complexes. Les nombres sont donc traités

automatiquement. La précision des calculs est affectée par le nombre de variables

enregistrées et traitées.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 27

Les paramètres essentiels qui déterminent cette précision dans un langage de

programmation sont :

• le plus petit nombre positif : x_min

• le plus grand nombre positif : x_max

• l’erreur de la machine (epsilon) : eps

Le tableau ci-dessous donne une comparaison des différents paramètres obtenus

par le langage Fortran et MATLAB :

Précision du langage MATLAB

(sur station)

Fortran sur station

Simple (double)

Fortran (Cray)

x_min 4.5e-324 2.9e-39 (même) 4.6e-2476 x_max 9.9e+307 1.7e+38 (même) 5.4e+2465 eps 2.2ee-16 1.2e-7 (2.8e-17) 1.3e-29

Dans MATLAB, l’infini est représenté par ‘inf’ (= ). Si on exécute la commande

x=1/inf, la réponse sera ‘NAN’ c’est à dire : ‘Not A Number’.

Pour chercher x_min, x_max et eps, on peut utiliser les programmes suivants :

Cherche de x_min :

% Recherche de x_min

x=1 ; while x>0, x=x/2, end

Cherche de x_max :

% Recherche de de x_max

x=1 ; while x<inf, x= x*2, end

Cherche de eps :

% Recherche de de eps

x=1 ; while x>0, x=x/2 ; ex=0.98*x+1,ex=ex-1, if ex>0,ex ;end,end

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 28

Fonctions Mathématiques dans MATLAB :

Fonctions trigonométriques Remarques sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) atan2(x,y) : sinh(x) cosh(x) tanh(x) asinh(x) acosh(x) atanh(x) Autres fonctions mathématiques (élémentaires)

Remarques

abs(x) Valeur absolue de x angle(x) Valeur complexe de l’angle de phase :

Si � � �é� � angle = 0

Si � � √�1 � angle = π/2 sqrt(x) Racine carrée de x real(x) Partie réelle de la valeur complexe de x imag(x) Partie imaginaire de la valeur complexe de x conj(x) Complexe conjugué de x round(x) Arrondi entier de x fix(x) Arrondi par défaut du réel x floor(x) Arrondi au voisinage de �∞ du réel x ceil(x) Arrondi au voisinage de �∞ du réel x sign(x) =+1 six>0 ; =-1 si x<0 rem(x,y) Le reste de la division : = x-y*fix(x/y) exp(x) Exponentielle (de base e) log(x) Log (de base e) log10(x) log (de base 10)

Autres fonctions :

Soit x=[2 15 0] une matrice ligne (vecteur ligne)

sort(x) � donne une matrice ligne dont les éléments sont en ordre croissant :

>>sort(x) ans = 0 2 15

sort(x’) � donne une matrice colonne dont les éléments sont en ordre croissant :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 29

>>sort(x’) ans = 0 2 15

sum(x) calcule la somme des éléments de la matrice x.

>>sum(x) ans = 17

>>sum([4 2 1 0;8 9 3 12]) ans = 12 11 4 12

Pour trouver le maximum et le minimum du vecteur x, on utilise les fonctions max(x) et min(x) :

>>max(x) ans = 15

>>min(x) ans = 0

pour une matrice y quelconque, le max(y) et min(y) donnent :

>>y y = 4 2 1 0 8 9 3 12

>>max(y) ans = 8 9 3 12

>>min(y) ans = 4 2 1 0

Pour trouver la valeur moyenne d’un vecteur de la matrice x par exemple, on

utilise la fonction ‘mean(x,i)’ où i est le numéro de la colonne :

Exemple : si

� � "0 1 23 4 5$

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 30

Alors mean(x,1) est :

>>mean(x,1) ans = 1.5000 2.5000 3.5000

et mean(x,2) est :

>>mean(x,2) ans = 1 4

* Nombres aléatoires :

Les nombres aléatoires peuvent être générés par la fonction ‘rand’. Son

expression est ‘rand(n)’ où n est le rang de la matrice. Si n=3 par exemple, rand(3)

va générer 3 lignes et 3 colonnes de la matrice dont les coefficients sont aléatoires

et compris entre 0 et 1.

Exemple :

>> rand(3) ans = 0.4154 0.0150 0.9901 0.3050 0.7680 0.7889 0.8744 0.9708 0.4387

On peut donner à la variable z une initialisation dans un programme. Pour cela,

on peut générer des valeurs aléatoires grâce à la fonction ‘seed’ (c’est à dire

ensemencer) � rand(‘seed’,z)

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 31

3.6. Résolution d'un système d'équations linéaires

• Fonction :

\ division à gauche de matrices

A \ B est équivalent à : inv(A)*B

• Exemple n°1 :

Soit à résoudre un système de 3 équations à 3 inconnues x1, x2 et x3 :

%3�& + 2�� + �� = 4−�& + 5�� + 2�� = −14�& − 2�� + 3�� = 3 On saisit les différents coefficients dans une matrice 3 x 3 :

>> A = [ 3 2 1 ; -1 5 2 ; 4 -2 3 ] A = 3 2 1 -1 5 2 4 -2 3

On complète avec un vecteur colonne 3 x 1 :

>> B = [ 4 ; -1 ; 3 ] B = 4 -1 3

La solution est donnée sous la forme d'un vecteur colonne :

>> A \ B ans = 1.3279 0.2951 -0.5738

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 32

Autre méthode :

>> inv(A) * B ans = 1.3279 0.2951 -0.5738

>> format long e

>> A \ B ans = 1.327868852459016e+000 2.950819672131148e-001 -5.737704918032788e-001

>> X = A \ B

X = 1.327868852459016e+000 2.950819672131148e-001 -5.737704918032788e-001

>> X(1) ans = 1.327868852459016e+000 >> X(2) ans = 2.950819672131148e-001 >> X(3) ans = -5.737704918032788e-001 Vérification : >> 3*X(1) + 2*X(2) + X(3) ans = 4

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 33

>> -X(1) + 5*X(2) + 2*X(3) ans = -9.999999999999998e-001 >> 4*X(1) -2*X(2) + 3*X(3) ans = 3.000000000000000e+000

• Exemple n°2 :

Soit le système d'équations paramétriques :

%−�& + 2�� + �� = '&−�& + �� + 2�� = '��& − 2�� + �� = '�

On cherche à exprimer x1, x2 et x3 en fonction de b1, b2 et b3 :

>> A = [ -1 2 1 ; -1 1 2 ; 1 -2 1 ] A = -1 2 1 -1 1 2 1 -2 1 >> inv(A) ans = 2.5000 -2.0000 1.5000 1.5000 -1.0000 0.5000 0.5000 0 0.5000 >> format rational >> inv(A) ans = 5/2 -2 3/2 3/2 -1 1/2 1/2 0 1/2

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 34

>> format short

>> inv(A) ans = 2.5000 -2.0000 1.5000 1.5000 -1.0000 0.5000 0.5000 0 0.5000 Finalement, on trouve :

()*)+�& =

52'& − 2'� + 32'��� = 32'& − '� + 12'��� = 12'& + 12'�

3.7. Matlab - Création du fichier .m d’une fonction

• Fonction :

function

• Exemple

Soit la fonction :

, = -�.���� + 2� + 2� + 1 a) Commencez pour ouvrir un éditeur de texte :

Dans la fenêtre de commande de Matlab :

File -> New -> M-file

Avec la version 4.2. l'éditeur de texte par défaut est l'application "Bloc-

notes".

Avec la version 6.5. l'éditeur de texte par défaut est l'application "M-File

Editor".

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 35

b) Donnez un nom à cette fonction (dans cet exemple fonc) et saisissez son

expression mathématique :

Attention : il faut mettre un point devant les opérateurs multiplication, division

et puissance :

.*

./

.^

c) Sauvegardez le fichier dans votre répertoire de travail (par exemple c:\USERS)

Nom : fonc Extension : .m

d) Ajoutez le chemin du répertoire où se trouve votre fichier fonc.m

Avec la version 4.2. :

>> path(path,'c:\USERS')

Avec la version 6.5. : File -> Set Path -> Add Folder -> Save -> Close

Remarque : Vous pouvez utiliser n'importe quel nom pour les variables.

Le fichier suivant donne le même résultat :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 36

• Evaluation d'une fonction

Calcul de y ( x = 0 ) :

>> fonc(0)

ans =

2

Calcul de y ( x = 5 ) :

>> fonc(5)

ans =

10.2010

>> fonc(-1)

Warning: Divide by zero

ans =

Inf

Avec en argument un vecteur, la fonction retourne un vecteur :

>> fonc( [0 1 2 3 4 5] )

ans =

2.0000 3.8415 3.9099 6.9121 8.1121 10.2010

>> x = 0 : 5

x = 0 1 2 3 4 5

>> y = fonc(x)

y = 2.0000 3.8415 3.9099 6.9121 8.1121 10.2010 Avec en argument une matrice, la fonction retourne une matrice :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 37

>> fonc( [ 1 2 3 ; 4 5 6] ) ans = 3.8415 3.9099 6.9121 8.1121 10.2010 11.2939

3.8. Matlab - Création du fichier .m d'une fonction définie par morceaux

• Exemple :

Soit la fonction y = f(x) :

()*)+ ���� = 0,� / 0���� = �2 ,0 0 � / 1���� � 12�� ,� ≥ 1

Le fichier f5.m associé à cette fonction s'écrit :

>> f5 (0) ans = 0

>> f5 (1) ans = 0.5000

>>f5 (-10) ans = 0

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 38

>> f5 (3) ans = 0.0556

>> fplot ( 'f5' , [ -2 4 ] )

>> grid on

3.9. Écriture de fonctions personnelles :

Dans MATLAB, les programmes qui sont sauvegardés comme des fichiers_.m sont

équivalentes à des sous-programmes et des fonctions dans d’autres langages.

Fonction retournant une seule variable :

Exemple :

���� = 2�� + 7�� + 3� + 1�� − 3� + 5�23

Supposons que le programme MATLAB correspondant est sauvegardé sous le

nom demof_.m. ce programme est le suivant :

function y=demof_(x) y=(2*x.^3+7*x.^2+3*x-1)/(x.^2-3*x+5*exp(-x)) ;

Pour déterminer f(x=3) par exemple, il suffit d’exécuter la commande :

"y=demof_(3), et la réponse sera :

>>y= 502.1384

* Fonction retournant plusieurs variables :

Une fonction peut retourner plus qu’une variable. Considérons la fonction qui

permet d’évaluer la moyenne et l’écart type de données.

Pour retourner les 2 variables, un vecteur est utilisé du côté gauche de la

fonction, comme l’illustre le cas suivant :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 39

function [mean, stdv]=mean_st(x) n=length (x) ; mean=sum(x)/n ; stdv=sqrt(sum(x.^2)/n-mean.^2) ;

Exemple :

>>x=[1 5 3 4 6 5 8 9 2 4]; >>[m,s]=mean_st(x)

La réponse est : m=4.7000 et s=2.3685

* Fonction pouvant utiliser une autre :

Exemple :

�45 = ��6� + 2��'� + ���4

Le sous programme de la fonction �45 est donné ci-dessous :

function wa=f_av(f_nom,a,b,c) wa=(feval(f_nom,a)+2*feval(f_nom,b)+feval(f_nom,c))/4 ; où f_nom est le nom de la fonction f(x).

la fonction ‘feval’ est une commande de MATLAB qui évalue la fonction de nom

f_nom et d’argument x. Exemple : y=feval(‘sin’,x) est équivalente à y=sin(x).

3.10. Écriture d’un programme MATLAB :

En MATLAB, les programmes se terminent par une extension ‘.m’ dans le nom du

fichier programme. Aucune compilation n’est à faire avant l’exécution du

programme. Au cours de l’exécution, un message d’erreur apparaît et indique les

lieux où se trouvent les erreurs.

Pour lancer l’exécution du programme, il faut se mettre toujours dans le même

répertoire où se trouve ce programme.

Exemple : ce dernier se trouve dans c:\utilisateur ; il faut changer tout d’abord de

répertoire après avoir lancé MATLAB en tapant : "cd c:\utilisateur"

Les fichiers de données sont enregistrés avec une extension ‘.mat’ et les variables

sont enregistrées en double précision.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 40

4. Génération de graphique avec MATLAB

MATLAB est un outil très puissant et très convivial pour la gestion des

graphiques, que ce soit en une dimension, en deux dimensions ou en trois

dimensions. Pour tracer une courbe y=sin(x) par exemple, où x=0 :50 ; il suffit de

faire :

>>x=0:50;y=sin(x);plot(x,y)

Ci-dessous, un petit résumé très succinct est donné pour tracer, concernant le

traçage des graphiques et la manipulation des axes et des échelles :

• xlabel(‘temps’) � pour donner un titre à l’axe x, • ylabel(‘vitesse’) � pour donner un titre à l’axe y, • title(‘évolution de la vitesse’)� pour donner un titre au graphique,

• text(2,4,’+++Température T1’) � au point 7"24$ , écrire la légende de la courbe tracée

avec "+++", • loglog(x,y) � tracer la courbe en échelle logarithmique (log-log), • semilogx(t,f(t)) � tracer la courbe seulement en échelle logarithmique suivant x, • semilogy(t,f(t)) � tracer la courbe seulement en échelle logarithmique suivant y, • grid on � afficher le quadrillage dans le graphique, • grid off � masquer le quadrillage dans le graphique, • clf � effacer le graphique, • close figure(i) � fermer (ou quitter) la figure (i), • close all � fermer tous les graphiques ouverts, • plot(x,y,x,z,x,w) � tracer y, z et w en fonction de x sur le même graphe, • polar(x,y) � tracer la courbe y en fonction de x en coordonnées polaires, • plot(x,y,’+g’) � tracer y en fonction de x avec des marques ‘+’ en couleur verte, • fplot(‘f_nom’,[x-mini, x-maxi]) � tracer la fonction f_nom selon les axes données (x), • axis(‘square’) � tracer un graphe géométriquement carré, • axis(‘off’) � masque les axes x et y, • axis(‘on’) � affiche les axes x et y, • axis([x-mini, x-maxi, y-mini,y-maxi]) � affiche le graphique selon les limites données des

axes x et y, • hold(‘on’) � traçage des courbes sur le même graphique à chaque fois qu’on exécute la

fonction plot, • hold(‘off’) � traçage de chaque courbe sur un nouveau graphique à chaque fois qu’on

exécute la fonction plot, • plot3(x,y,z) � tracer z en fonction de x et de y en 3D, • la fonction ‘meshgrid’ est utilisée pour créer un maillage 2D (x,y) ; si on se donne

xa=[… : …] et ya=[… : …], ceci est très important sont des valeurs complexes� [x,y]=meshgrid(xa,ya),

• mesh(xa,ya,z) � tracer le graphique en 3D de z,

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 41

• quiver(x,y,u,v,s) � tracer le champ vectoriel �89 ":;$ dans le plan (x,y) où ‘s’ est la taille de

base à donner aux vecteurs, • contour(x,y,z,’niveau’) � tracer les lignes iso-valeurs de z dans le plan (x,y) où le niveau

représente le nombre de lignes iso-courbes.

Exemple : x=0 :50 ; y=sin(x) ; z=cos(y) +4*x ; contour(x,y,z,40) � on obtient 40 iso-courbes.

• text(2,0,’a-b’,’FontName’,’symbol’) � écrire sur le graphique au point 7"20$ α-β, (a-b en police symbol),

• subpot(m,n,k) � tracer mxn graphiques séparés dans la feuille, où k est le numéro de chaque graphiques. Exemple :

x=0 :25 ;y=x ; subplot(2,2,1),plot(x,y) ;ylabel(‘y’) ;title(‘(2,2,1)’) ; subplot(2,2,2),plot(x,2*y) ;ylabel(‘y’) ;title(‘(2,2,2)’) ; subplot(2,2,3),plot(x,3*y) ; ;xlabel(‘x’) ;ylabel(‘y’) ;title(‘(2,2,3)’) ; subplot(2,2,4),plot(x,4*y) ; ;xlabel(‘x’) ;ylabel(‘y’) ;title(‘(2,2,4)’) ;

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 42

4.1. Graphe d’une fonction à une variable y = f (x)

• Fonctions

fplot trace point par point le graphe d'une fonction grid ajoute une grille

xlabel ajoute une légende pour l'axe des abscisses ylabel ajoute une légende pour l'axe des ordonnées title ajoute un titre axis modifie les échelles des axes zoom effectue un zoom gtext place une légende avec la souris hold ajoute un graphe dans la fenêtre courante

figure crée une nouvelle fenêtre

• Première méthode :

On veut tracer le graphe de la fonction :

>> fplot('1+ 2*x + sin(x*x)', [ 1 5 ])

Remarque : la variable doit nécessairement s'appeler x

>> fplot('1+ 2*x + sin(x*x)', [ 2 3 2 10 ])

>> grid on

>> grid off

>> xlabel('axe des abscisses')

>> ylabel('axe des ordonnées')

>> title('y=f(x)')

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 43

>> zoom on

click droit : zoom arrière

click gauche : zoom avant

click gauche et glissé : zoom d’une zone

>> zoom off

Pour tracer plusieurs graphes dans la même fenêtre :

>> fplot('[1+ 2*x + sin(x*x) , 1+ 2*x - sin(x*x) ]' , [ -2 2.5 ])

>> gtext('fonction 1')

>> gtext('fonction 2')

• Deuxième méthode :

, = ���� = sin��� + cos�3��2 � sin�5��5

Nous allons créer le fichier .m de la fonction :

>> fplot('f2', [ 0 10])

>> hold on

>> fplot('sin(x) ', [ 0 10 ] ,'b')

>> hold off

>> [X Y] = fplot ( 'sin(x) ' , [ 0 10 ] )

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 44

X =

0

0.0200 0.0600 ... 9.8700 9.9350 10.0000

Y =

0

0.0200 0.0600 ... -0.4307 -0.4884 -0.5440

>> fplot ( 'sin(x) ' , [ 0 10 ] , '.' )

Autres options :

y Jaune m Magenta c Cyan r Rouge g Vert b Bleu w Blanc k Noir

. o x + - * : -. --

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 45

4.2. Matlab - Graphe en deux dimensions

• Fonctions :

• Exemple 1

Temps (heures) 0 2 4 6 8 10 12 14 16 Température (°C) 20 23 30 33 32 37 34 39 36

>> temps = [0 2 4 6 8 10 12 14 16]

temps =

0 2 4 6 8 10 12 14 16

>> temperature = [20 23 30 33 32 37 34 39 36]

temperature =

20 23 30 33 32 37 34 39 36

>> plot (temps , temperature)

>> grid on

>> xlabel ( 'temps (en heures)' )

>> ylabel ( 'température (en °C)' )

>> title ( 'Suivi de température' )

plot trace point par point un graphe 2D semilogx identique à plot mais avec échelle logarithmique pour l'axe des abscisses semilogy identique à plot mais avec échelle logarithmique pour l'axe des

ordonnées loglog identique à plot mais avec échelles logarithmiques pour les deux axes grid ajoute une grille

xlabel ajoute une légende pour l'axe des abscisses ylabel ajoute une légende pour l'axe des ordonnées title ajoute un titre axis modifie les échelles des axes

zoom effectue un zoom gtext place une légende avec la souris hold ajoute un graphe dans la fenêtre courante

figure crée une nouvelle fenêtre

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 46

>> axis ( [ 0 18 10 40 ] )

>> plot ( temps , temperature ,'+' )

>> plot ( temps , temperature , 'co' )

>> plot ( temps , temperature , ':' )

>> plot ( temps , temperature , '--' )

Autres options :

y Jaune m Magenta c Cyan r Rouge g Vert b Bleu w Blanc k Noir

. o x + - * : -. --

• Exemple 2 : graphe d’une fonction à une variable

, = A�1 + A��10

>> t = 0 : 0.01 : 1

Attention : ne pas oublier le point devant les opérateurs multiplication, puissance et

division :

.*

.^

./

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 47

>> y = t.*(1 + t.^2)./10

>> plot ( t , y )

>> grid on

Remarque : il est plus efficace d’utiliser la fonction fplot

• Exemple 3 : équations paramétriques d'une ellipse

x = 4cos(t)

y = sin(t)

>> t = 0 : pi/100 : 2*pi

>> x = 4*cos(t)

>> y = sin(t)

>> plot ( x , y )

4.3. Matlab- Graphe en trois dimensions

• Fonctions

• Exemple 1

>> x = [ 1 2 3 4 ]

x =

1 2 3 4

plot3 trace point par point un graphe 3D grid ajoute une grille

xlabel ajoute une légende pour l'axe des abscisses ylabel ajoute une légende pour l'axe des ordonnées zlabel ajoute une légende pour l'axe des z title ajoute un titre hold ajoute un graphe dans la fenêtre courante

figure crée une nouvelle fenêtre view ajuste l'angle de vue

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 48

>> y = [ 2 4 6 7]

y =

2 4 6 7

>> z = [ 3 8 5 6 ]

z =

3 8 5 6

>> plot3 (x , y , z ,'r*')

>> grid on

>> xlabel('axe des x')

>> ylabel('axe des y')

>> zlabel('axe des z')

>> title('plot3')

• Exemple 2 : équations paramétriques

x = cos (t)

y = sin (t)

z = t

>> t = 0 : pi/100 : 5*pi

>> plot3 (cos(t) , sin(t) , t)

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 49

4.4. Matlab- Graphe d’une fonction à deux variables z = f(x,y)

• Fonctions

meshgrid (voir l'exemple) mesh (voir l'exemple) meshc (voir l'exemple) meshz (voir l'exemple)

contour (voir l'exemple) view ajuste l'angle de vue grid ajoute une grille

xlabel ajoute une légende pour l'axe des abscisses ylabel ajoute une légende pour l'axe des ordonnées zlabel ajoute une légende pour l'axe des z title ajoute un titre hold ajoute un graphe dans la fenêtre courante

figure crée une nouvelle fenêtre

• Exemple 1

B = ���, ,� = C�� + 2,� >> x = -2 : 2

x =

-2 -1 0 1 2

>> y = -3 : 3

y =

-3 -2 -1 0 1 2 3

>> [X , Y] = meshgrid(x , y)

X =

-2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2

Y =

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 50

-3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

>> Z = sqrt (X.^2 + 2.*Y.^2)

Z =

4.6904 4.3589 4.2426 4.3589 4.6904 3.4641 3.0000 2.8284 3.0000 3.4641 2.4495 1.7321 1.4142 1.7321 2.4495 2.0000 1.0000 0 1.0000 2.0000 2.4495 1.7321 1.4142 1.7321 2.4495 3.4641 3.0000 2.8284 3.0000 3.4641 4.6904 4.3589 4.2426 4.3589 4.6904

>> mesh (X , Y , Z)

>> grid on

Pour une meilleure résolution :

>> x = -2 : 0.1 : 2

>> y = -3 : 0.1 : 3

>> [X , Y] = meshgrid(x , y)

>> Z = sqrt (X.^2 + 2.*Y.^2)

>> mesh (X , Y , Z)

>> meshc (X , Y , Z)

>> contour (x , y , Z)

>> mesh (X , Y , Z)

>> grid on

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 51

>> view(-80 , 10)

• Exemple 2

z = f (x , y ) = y.exp( - x² - y² )

>> x = -2 : 0.1 : 2

>> y= -2 : 0.1 : 2

>> [X , Y] = meshgrid(x , y)

>> Z = Y.*exp ( -X.^2 - Y.^2)

>> mesh (X , Y , Z)

>> meshc (X , Y , Z)

>> contour (x , y , Z)

5. Matlab – Calcul sur les polynômes

• Fonctions :

Conv produit de polynômes Residue décomposition en éléments

simples Roots trouve les racines d'un

polynôme poly trouve le polynôme à partir

des ses racines polyval évalue le polynôme

5.1. Racines d’un polynôme

• 1er exemple :

3x² - 5x + 2 = 0

On commence par définir un " vecteur " qui contient les coefficients du polynôme :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 52

>> p = [ 3 -5 2 ]

p =

3 -5 2

>> roots(p)

ans =

1.0000

0.6667

>> roots( [ 3 -5 2 ])

ans =

1.0000

0.6667

• 2ème exemple :

x² - 4x + 4 = 0

>> p= [ 1 -4 4 ]

p =

1 -4 4

>> roots(p)

ans =

2

2

• 3ème exemple :

x² + 3x + 8 = 0

>> p= [ 1 3 8 ]

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 53

p =

1 3 8

>> roots(p)

ans =

-1.5000 + 2.3979i

-1.5000 - 2.3979i

• 4ème exemple :

>> p = [ 1 2 -2 4 3 5 ]

p =

1 2 -2 4 3 5

>> roots(p)

ans =

-3.0417

0.9704 + 1.0983i

0.9704 - 1.0983i

-0.4495 + 0.7505i

-0.4495 - 0.7505i

>> format long e

>> roots(p)

ans =

-3.041684725314715e+000

9.703604093970790e-001 +1.098343294996758e+000i

9.703604093970790e-001 -1.098343294996758e+000i

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 54

-4.495180467397220e-001 +7.504870344729816e-001i

-4.495180467397220e-001 -7.504870344729816e-001i

• 5ème exemple :

polynôme à coefficients complexes :

(1+i)x² + (2-5i)x + 3,5 = 0

>> format short

>> p = [ 1+i 2-5i 3.5]

p =

1.0000 + 1.0000i 2.0000 - 5.0000i 3.5000

>> roots(p)

ans =

1.7116 + 4.0248i

-0.2116 - 0.5248i

5.2. Détermination des coefficients d’un polynôme à partir des ses racines

• 1er exemple :

>> a = [ 2 1 ]

a =

2 1

>> poly(a)

ans =

1 -3 2

(c’est-à-dire : x² -3x +2)

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 55

• 2ème exemple :

>> a = [ 2 2 3 -5 ]

a =

2 2 3 -5

>> poly(a)

ans =

1 -2 -19 68 -60

• 3ème exemple :

>> a = [ 2+i 2-3i 5]

a =

2.0000 + 1.0000i 2.0000 - 3.0000i 5.0000

>> poly(a)

ans =

1.0000 -9.0000 + 2.0000i 27.0000 -14.0000i -35.0000 +20.0000i

Vérification :

>> p = ans

p =

1.0000 -9.0000 + 2.0000i 27.0000 -14.0000i -35.0000 +20.0000i

>> roots(p)

ans =

2.0000 - 3.0000i

5.0000 - 0.0000i

2.0000 + 1.0000i

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 56

5.3. Produit de polynômes

• 1er exemple

( x –2 )( x – 1 ) = ?

>> p1=[ 1 -2 ]

p1 =

1 -2

>> p2=[ 1 -1 ]

p2 =

1 -1

>> conv( p1 , p2 )

ans =

1 -3 2

Autrement dit :

( x –2 )( x – 1 ) = x² -3x +2

• 2ème exemple

(3x² - 5x + 2)( x² + 3x + 8) = ?

>> p1=[ 3 -5 2 ]

p1 =

3 -5 2

>> p2=[ 1 3 8 ]

p2 =

1 3 8

>> conv( p1 , p2 )

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 57

ans =

3 4 11 -34 16

Autrement écrit :

(3x² - 5x + 2)( x² + 3x + 8) = 3x4 + 4x3 + 11 x² -34 x +16

5.4. Décomposition en éléments simples

On a :

.(��D(�� = �&� − E& + ��� − E� + ⋯ ⋯ + G(�� p1 , p2 … désignent les " pôles ".

• Exemple :

6�I + 6�� + 11�� + 6� =? polynôme du numérateur :

>> n =[ 6 ]

n =

6

polynôme du dénominateur :

>> d =[ 1 6 11 6 0 ]

d =

1 6 11 6 0

>> [ r , p , k ] = residue ( n , d)

r =

-1.0000

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 58

3.0000

-3.0000

1.0000

p =

-3.0000

-2.0000

-1.0000

0

k =

[ ]

Finalement :

6�I + 6�� + 11�� + 6� = −1� + 3 + 3� + 2 + −3� + 1 + 1�

6. Matlab – minimum d’une fonction f(x)

• Fonction :

Fmin (version 4.2.)

Fminbnd (version 6.5.)

• Exemple :

, = − 110 + 12 + (5 − ��� + 11 + (1 + ��� Il faut commencer par créer le fichier .m associé à cette fonction :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 59

Dessinons maintenant le graphe de cette fonction :

>> fplot( 'f1' , [ -10 10 ] )

>> grid on

Cherchons le minimum de cette fonction dans l’intervalle 0 à 5 :

>> fmin ( 'f1' , 0 , 5 )

ans =

2.1177

>> f1(ans)

ans =

0.0903

7. Matlab - Equation non linéaire à une inconnue & Racines d’une fonction

• Fonction :

fzero

• Exemple :

Soit à résoudre l’équation :

−6 + 2A � -�.�A�� � 0 Cela revient à trouver les racines de la fonction :

Il faut commencer par créer le fichier .m de cette fonction :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 60

Représentation graphique de la fonction :

>> fplot('f3', [ 0 5 ])

>> grid on

Cela fait apparaître 3 racines, aux environs de 2,7 3,1 et 3,4.

>> fzero('f3', 2.7)

ans =

2.6545

Pour les maniaques de la précision :

>> format long e

>> fzero('f3', 2.7)

ans =

2.654461193307640e+000

>> format short

>> fzero('f3', 3.1)

ans =

3.1039

>> fzero('f3', 3.4)

ans =

3.4078

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 61

Vérification :

>> f3(ans)

ans =

5.5511e-016

8. Dérivée d’une fonction �K(�� • Prenons l'exemple suivant :

, = ��(�� = sin(�� + cos(3��2 � sin�5��5

Commençons par créer le fichier .m de la fonction :

>> [ x y ] = fplot ( 'f2' , [ 0 2*pi ] )

x =

0

0.0126

0.0251

6.2455

6.2643

6.2832

y =

0.5000

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 62

0.4997

0.4986

0.4966

0.4992

0.5000

Une approximation de la dérivée est donnée par :

>> dy = diff(y)./diff(x)

dy =

-0.0276

-0.0804

-0.1292

0.1370

0.0438

>> plot (x , dy)

??? Error using ==> plot

Vectors must be the same lengths.

>> length(x)

ans =

307

>> length(dy)

ans =

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 63

306

Problème !

Le vecteur dy a un élément de moins que le vecteur x, ce que n'apprécie pas la fonction plot.

Nous allons contourner la difficulté en ignorant le dernier élément du vecteur x :

>> plot ( x (1 : length(x)-1 , : ) , dy , '. ')

>> grid on

9. Matlab - Calcul d'intégrale

• Fonctions :

quad : algorithme de Simpson

quad8 : algorithme de Newton-Cote (version 4.2.)

quadl (version 6.5.)

• Exemple :

L 41 � �� D�&3MN

Il faut commencer par créer le fichier .m de la fonction à intégrer :

>> fplot( 'f4', [ 0 1 ])

>> grid on

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 64

>> quad( 'f4' , 0 , 1 )

ans =

3.1416

>> format long e

>> quad( 'f4' , 0 , 1 )

ans =

3.141592502458707e+000

La valeur exacte de cette intégrale est pi.

>> pi

ans =

3.141592653589793e+000

Il y a un petit écart ...

Améliorons la précision avec une tolérance de calcul de 1e-10 (la tolérance par défaut est 1e-3) :

>> quad( 'f4' , 0 , 1 , 1e-10 )

ans =

3.141592653589792e+000

... ce qui est beaucoup mieux !

>> quad8( 'f4' , 0 , 1 , 1e-10)

ans =

3.141592653589793e+000

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 65

10. Matlab - Résolution d’équations différentielles

• Fonctions (Matlab version 4.2.)

ode23 : algorithme de Runge-Kutta du 2ème et 3ème ordres

ode45 : algorithme de Runge-Kutta du 4ème et 5ème ordres

• Exemple 1 : équation différentielle du premier ordre

Soit une fonction y1(t) soumise à l’équation différentielle :

2,&O � ,& � 10

Alors, on a :

,&O � 10 � ,&2

Condition initiale : ,&�A � 0� � 5. Créons le fichier f10.m :

>> [ t , y ] = ode23 ( 'f10' , 0 , 20 , [ 5 ] )

t =

0 0.1562 0.4833 ... 18.0327 19.2827 20.0000

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 66

y = 5.0000 5.3758 6.0735 ... 9.9995 9.9997 9.9998

>> plot ( t , y )

>> grid on

Pour avoir une tolérance sur les calculs de 1e-7 :

>> [ t , y ] = ode23 ('f10' , 0 , 20 , [ 5 ] , 1e-7)

A tester :

>> [t , y ] = ode45 ( 'f10' , 0 , 20 , [ 5 ] )

• Exemple 2 : équation différentielle du deuxième ordre QR S + T. UQO S + SQS = T On pose : QO S = ,& On a : V,O& = −0.5,& � 2,�,O� � ,&

Conditions initiales : V,&�A � 0� � ,O��A � 0� � 0,��A � 0� � 2 Créons le fichier f11.m :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 67

>> [ t , y ]=ode23 ( 'f11' , 0 , 10 , [ 0 2 ] )

t =

0 0.0781 0.1858 ... 9.7555 9.9671 10.0000

y = 0 2.0000 -0.3058 1.9880 -0.7017 1.9334 ... -0.2114 0.1188 -0.2284 0.0719 -0.2291 0.0644

>> plot ( t , y )

Pour n'afficher que la première colonne, c'est-à-dire y1(t) ou dy2(t)/dt :

>> plot ( t , y ( : , 1 ) )

Pour n'afficher que la deuxième colonne, c'est-à-dire y2(t) :

>> plot ( t , y ( : , 2 ) )

• Exemple 3 : équation différentielle du troisième ordre

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 68

Créons le fichier f12.m :

>> [ t , y ] = ode23 ( 'f12' , 0 , 2 , [ 2 1 1 ] )

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 69

t =

0

0.0156

0.1290

...

1.8692

1.9942

2.0000

y =

2.0000 1.0000 1.0000

2.0938 1.0320 1.0159

2.7741 1.3080 1.1478

...

13.2149 15.2195 12.8932

13.9649 16.9183 14.9009

14.0000 17.0000 15.0000

>> plot ( t , y )

Pour n'afficher que la troisième colonne, c'est-à-dire y3(t) :

>> plot ( t , y ( : , 3 ) )

Nous allons comparer avec la solution exacte : y3(t) = t^3 + t^2 + t + 1

>> hold on

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 70

>> fplot ( 'x^3 + x^2 + x + 1 ' , [ 0 2 ] , 'b--' )

Les deux courbes sont superposées.

• Exemple 4 : Equation non linéaire du 2ème ordre

Equation de Van der Pol

Créons le fichier f9.m :

>> [ t , y ]=ode23 ( 'f9' , 0 , 20 , [ 0 0.25 ] )

>> plot ( t , y )

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 71

11. Diagramme de Bode

• Fonctions :

Log10 : logarithme décimal

Semilogx : identique à la fonction plot mais avec une échelle logarithmique pour

l’axe des abscisses

Loglog : identique à la fonction plot mais avec une échelle logarithmique pour

l’axe des abscisses et des ordonnées

• Premier exemple

Considérons un filtre passe-bas du 2ème ordre, de fonction de transfert :

W(�� = XYXZ = [ ∙ 11 � ]��&∙ 11 � ]���

avec : K = 10, f1 = 1 kHz et f2 = 10 kHz.

Il faut commencer par créer le fichier t4.m de la fonction de transfert :

Valeur de la fonction de transfert pour f = 0 Hz (régime continu) :

>> t4(0)

ans =

10

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 72

Valeur de la fonction de transfert pour f = 100 Hz :

>> t4(100)

ans =

9.8901 - 1.0890i

Le module donne l'amplification :

>> abs(t4(100))

ans =

9.9499

L'argument donne le déphasage (en radians) :

>> angle(t4(100))

ans =

-0.1097

Etudions la fonction de transfert sur la gamme de fréquence 100 Hz à 100 kHz :

>> log10(100)

ans =

2

>> log10(100000)

ans =

5

Nous allons créer un vecteur logf :

>> logf = 2 : 0.01 : 5

>> f = 10.^logf

f est un vecteur qui nous donne 300 points uniformément répartis de 100 Hz à

100 kHz (compte tenu de l’échelle logarithmique).

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 73

G est un vecteur qui nous retourne le gain (en dB) pour les fréquences

précédentes :

>> G = 20.*log10 (abs (t4(f)) )

>> semilogx ( f , G )

>> ylabel ( 'gain (dB)' )

>> xlabel ( 'fréquence (Hz)' )

>> title ( 'diagramme de Bode du gain' )

>> grid on

Déphasage en degrés :

>> dephasage = angle(t4(f))*180/pi

>> semilogx ( f , dephasage )

>> grid on

• Deuxième exemple : système du deuxième ordre

W(^� = XYXZ = [ ∙ ^N�−^� + 2]_^N^ � ^N� Fichier de définition de la fonction t2 :

>> logpulsation = 3 : 0.01 : 6

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 74

>> pulsation = 10.^logpulsation

>> G = 20.*log10(abs(t2(pulsation)))

>> semilogx ( pulsation , G )

>> grid on

>> dephasage = angle(t2(pulsation))*180/pi

>> semilogx ( pulsation , dephasage )

>> grid on

>> amplification = abs(t2(pulsation))

>> loglog ( pulsation , amplification)

>> grid on

>> xlabel ( 'pulsation(rad/s)' )

>> ylabel ( 'amplification' )

>> title ( 'Diagramme de Bode' )

12. Matlab - Remarques à propos des scalaires, vecteurs, matrices et

tableaux

Où l'on verra également la différence entre :

* .* / ./ ^ .^

• 1- Matlab manipule des scalaires, vecteurs et matrices.

>> a = 6

a = 6

>> b = [ 1 3 8 ]

b = 1 3 8

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 75

>> c = [ 2 10 ; 3 8]

c = 2 10 3 8

>> d = [ 1 2 ; 3 4 ]

d = 1 2 3 4

>> e = [ -2 -8 –3 ]

e =

-2 -8 -3

>> f = [ 8 ; 5 ; 2 ]

f = 8 5 2

>> whos

Name Size

a 1 by 1 b 1 by 3 c 2 by 2 d 2 by 2 e 1 by 3 f 3 by 1

a est un scalaire (autrement dit une matrice 1x1)

b est un vecteur ligne (autrement dit une matrice 1x3)

c est une matrice (2x2)

d est une matrice (2x2)

e est un vecteur ligne (autrement dit une matrice 1x3)

f est un vecteur colonne (autrement dit une matrice 3x1)

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 76

• 2- Tableau (Array) et matrice

Multiplication de matrice *

Multiplication de tableau (élément par élément) .*

Puissance de matrice ^

Puissance de tableau (élément par élément) .^

Division de matrice

B / A est équivalent à B * inv(A)

/

Division de tableau (élément par élément) . /

* est le produit matriciel :

>> [ 2 10 ; 3 8] *[ 1 2 ; 3 4 ]

ans =

32 44 27 38

.* désigne la multiplication élément par élément, ce qui est complètement différent :

>> [ 2 10 ; 3 8] .* [ 1 2 ; 3 4 ]

ans = 2 20 9 32

>> [ 2 10 ; 3 8] / [ 1 2 ; 3 4 ]

ans = 11 -3 6 -1

>> [ 2 10 ; 3 8] ./ [ 1 2 ; 3 4 ]

ans = 2 5 1 2

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 77

>> [ 2 10 ; 3 8] ^2

ans = 34 100 30 94

>> [ 2 10 ; 3 8] .^2

ans = 4 100 9 64

>> 6*[ 1 3 8 ]

ans = 6 18 48

>> 6.*[ 1 3 8 ]

ans = 6 18 48

>> 6*[ 2 10 ; 3 8]

ans = 12 60 18 48

>> 6.*[ 2 10 ; 3 8]

ans = 12 60 18 48

>> [ 1 3 8 ].*[ -2 -8 –3 ]

ans = -2 -24 -24

Le calcul suivant n'a pas de sens :

>> [ 1 3 8 ] *[ -2 -8 –3 ]

??? Error using ==> *

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 78

Inner matrix dimensions must agree.

>> [ 1 3 8 ] .^2

ans = 1 9 64

Le calcul suivant n'a pas de sens :

>> [ 1 3 8 ] ^2

??? Error using ==> ^

Matrix must be square.

Soit un vecteur ligne 1x7 :

>> x = 0 : 6

x = 0 1 2 3 4 5 6

>> y = (x+1).^2

y = 1 4 9 16 25 36 49

y est un vecteur ligne 1x7.

>> y = (x+1)^2

??? Error using ==> ^

Matrix must be square.

Testons avec une matrice carrée 2x2 :

>> x = [ 1 2 ; 3 4 ]

x = 1 2 3 4

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 79

>> y = (x+1).^2

y = 4 9 16 25

>> y = (x+1)^2

y = 16 21 28 37

>> t = 0 : 5

t = 0 1 2 3 4 5

>> u = t.^2 + 3.*t./ (5 + 2.*t)

u = 0 1.4286 4.6667 9.8182 16.9231 26.0000

>> u = t^2 + 3*t /(5 + 2*t)

??? Error using ==> ^

Matrix must be square.

>> z = 2 : 2 : 12

z = 2 4 6 8 10 12

>> t./z

ans = 0 0.2500 0.3333 0.3750 0.4000 0.4167

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 80

Chapitre 2 :

Le langage de programmation Matlab :

Utilisation des scripts

Un script se présente sous la forme d'un fichier texte avec l'extension .m

Quand on lance un script, Matlab exécute une à une les commandes.

Un script est un programme.

Un script est une séquence d’expressions ou de commandes. Un script peut se

développer sur une ou plusieurs lignes. Les différentes expressions ou

commandes doivent être séparées par une virgule, un point-virgule ou par le

symbole de saut de ligne constitué de trois points . . . suivis de <entrer> (le rôle

des trois points et d’inhiber le mécanisme d’´evaluation lors d’un passage à la

ligne). Comme pour une expression unique, la frappe de <entrer> déclenche le

processus d’évaluation. Les expressions sont évaluées dans leur ordre d’´ecriture.

Seule la valeur des expressions suivie d’une virgule ou d’un saut de ligne est

affichée, celle des expressions suivies d’un point-virgule, ne l’est pas.

Convention de couleurs :

• en bleu : commandes, données ... saisies par l'utilisateur (dans la fenêtre

de commande)

• en noir : résultat fourni par Matlab (dans la fenêtre de commande)

• en rouge : script (programme)

1. Premier script : Graphe d'une fonction à une variable

Au lieu de taper la série de commandes qui permet de tracer le graphe de la

fonction y(x) =100x/((50+x)2) :

>> fplot('100*x/((50+x)^2)',[0 200])

>> grid on

>> xlabel('R (en ohms)')

>> ylabel('P (en watts)')

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 81

>> title('Courbe P(R)')

Vous pouvez une fois pour toute, écrire un script.

Pour cela, il vous faut un éditeur de texte (le bloc-notes par exemple) :

Le signe % signifie que le reste de la ligne est un commentaire.

Pour exécuter le script, il suffit de taper son nom dans la fenêtre de commande :

>> script1

La commande ECHO ON permet d'afficher à l'écran, les commandes exécutées

par le script :

>> echo on

>> script1

% script1.m

fplot('100*x/((50+x)^2)',[0 200]);

grid on;

xlabel('R (en ohms)');

ylabel('P (en watt)');

title('Courbe P(R)');

>> echo off

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 82

2. Affichage à l'écran : fonction DISP

Cette fonction permet d'afficher proprement des valeurs numériques ou bien du

texte (chaîne de caractères) à l'écran.

• Affichage de nombres :

>> a=15;

>> disp(a)

15

>> b=[1 8 9];

>> disp(b)

1 8 9

>> disp([17 -25.36 sqrt(6)])

17.0000 -25.3600 2.4495

>> disp([17 ; -25.36 ; sqrt(6)])

17.0000

-25.3600

2.4495

>> a=12;

>> disp([17 a sqrt(a+13)])

17 12 5

• Affichage de textes :

>> c='Bonjour';

>> disp(c)

Bonjour

>> disp('Bonjour')

Bonjour

>> disp(['Pierre' 'Paul' 'Jacques'])

PierrePaulJacques

La commande BLANKS(n) affiche n espaces :

>> disp(['Pierre' blanks(1) 'Paul' blanks(1) 'Jacques'])

Pierre Paul Jacques

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 83

• Affichage combiné de textes et de nombres :

La fonction NUM2STR convertit un nombre en une chaîne de caractères.

>> disp(['Il est ' num2str(12) ' heures'])

Il est 12 heures

>> a=18;

>> disp(['Il est ' num2str(a) ' heures ' num2str(58)])

Il est 18 heures 58

3. Saisie au clavier : fonction INPUT

Cette fonction effectue la saisie de valeurs numériques ou bien de textes.

• Saisie de nombres :

% script2.m

disp('Bonjour!');

x0=input('Taper la valeur de R min : ');

x1=input('Taper la valeur de R max : ');

disp(['R min =' num2str(x0)]);

disp(['R max =' num2str(x1)]);

fplot('100*x/((50+x)^2)',[x0 x1]) ;

grid on ;

xlabel('R (en ohms)') ;

ylabel('P (en watt)') ;

title('Courbe P(R)')

disp('Au revoir.');

>> script2

Bonjour!

Taper la valeur de R min : 20

Taper la valeur de R max : 100

R min =20

R max =100

Au revoir.

• Saisie de textes :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 84

% scrip2_1.m

nom=input('Taper votre nom : ','s');

prenom=input('Taper votre prénom : ','s');

age=input('Taper votre âge : ');

disp([nom blanks(1) prenom]);

disp(['Age : ' num2str(age)]);

>> scrip2_1

Taper votre nom : Dupont

Taper votre prénom : Jérôme

Taper votre âge : 21

Dupont Jérôme

Age : 21

4. Boucle FOR

Cette instruction permet de répéter un bloc d'instructions, un nombre déterminé

de fois.

Synthaxe :

for expression ,

bloc d'instructions ;

end

Exemples :

% script3.m

for i=1:5,

disp([i i*i]);

end

>> script3

1 1

2 4

3 9

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 85

4 16

5 25

% scrip3_1.m

n=input('Nombre de boucles = ? ');

for i=1:n,

disp(i);

end

>> scrip3_1

Nombre de boucles = ? 4

1

2

3

4

% script4.m

for i=1:2:10,

disp(i);

end

>> script4

1

3

5

7

9

% script5.m

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 86

for i=1:3,

for j=1:6,

a(i,j)=i+10*j ;

end

end

disp(a);

>> script5

11 21 31 41 51 61

12 22 32 42 52 62

13 23 33 43 53 63

5. Boucle WHILE

Synthaxe :

while condition ,

bloc d'instructions ;

end

Le programme teste la condition :

Si la condition est fausse, le programme saute à l'instruction qui suit END.

Si la condition est vraie, le bloc d'instructions est exécuté, puis le programme

teste à nouveau la condition ...

Attention aux bugs de programmation !

si la condition est toujours vraie, la boucle s'exécute indéfiniment : le programme

est "planté".

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 87

• Opérateurs de comparaison :

== Egal

> supérieur

< inférieur

>= supérieur ou égal

<= inférieur ou égal

~= différent

Exemples :

% script6.m

n=0 ;

while (n<10),

n=n+1;

disp(n);

end

La boucle est exécutée tant que n est inférieur à 10 :

>> script6

1

2

3

4

5

6

7

8

9

10

• Opérateurs logiques :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 88

& ET logique

(AND)

| OU logique

(OR)

~ NON logique

% script7.m

note=-1;

while ((note<0) | (note>20)),

note=input('taper la note (0 à 20) : ');

end

disp(['note = ' num2str(note)]);

La boucle est exécutée tant que la note est inférieure à 0 ou bien supérieure à 20.

Cela permet de saisir une note forcément comprise entre 0 et 20 :

>> script7

taper la note (0 à 20) : 30

taper la note (0 à 20) : 17

note =17

6. Instructions IF ELSE ELSEIF

Synthaxe :

• IF

if condition ,

bloc d'instructions ;

end

Le bloc d'instructions est exécuté si la condition est vraie.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 89

Autrement, il est ignoré.

• IF ELSE

if condition ,

bloc d'instructions 1 ;

else

bloc d'instructions 2 ;

end

Le bloc d'instructions 1 est exécuté si la condition est vraie.

Sinon, c'est le bloc d'instructions 2 qui est exécuté.

• IF ELSE IF

if condition1 ,

bloc d'instructions 1 ;

else if condition2 ,

bloc d'instructions 2 ;

end

Le bloc d'instructions 1 est exécuté si la condition 1 est vraie.

Sinon, si la condition2 est vraie, le bloc d'instructions 2 est exécuté.

% script8.m

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 90

note=-1;

while ((note<0) | (note>20)),

note=input('Taper la note (0 à 20) : ');

if (note<0),

disp ('Valeur invalide (note < 0)');

end

if (note>20),

disp ('Valeur invalide (note > 20)');

end

end

disp('note = ');

disp(note);

>> script8

Taper la note (0 à 20) : -5

Valeur invalide (note < 0)

Taper la note (0 à 20) : 25

Valeur invalide (note > 20)

Taper la note (0 à 20) : 12

note =

12

7. Instruction BREAK

L'instruction BREAK permet de sortir d'une boucle FOR ou d'une boucle WHILE.

% script11.m

for i=1:10,

if i==5,

break;

end

disp(i);

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 91

end

>> script11

1

2

3

4

% script12.m

i=0;

while 1,

i=i+1;

if i>5,

break;

end

disp(i);

end

La condition while 1 est toujours vraie.

Le seul moyen de sortir de la boucle est d'utiliser l'instruction BREAK.

>> script12

1

2

3

4

5

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 92

8. Exemples de scripts

8.1. Résolution d'une équation du 2ème degré (dans R, espace des

nombres réels)

% trinome.m

disp('Calcul dans R des racines de ax²+bx+c=0');

choix='Y';

while (choix~='N' & choix~='n'),

a=0;

while (a==0),

a=input('a=? ');

if (a==0),

disp ('Valeur non valide !');

end

end

b=input('b=? ');

c=input('c=? ');

delta=b*b-4*a*c;

if (delta<0),

disp('Pas de racine réelle.');

end

if (delta==0),

disp('Une racine double :');

racine=-b/(2*a);

disp(racine);

end

if (delta>0),

disp('Deux racines :');

racine1=(-b+sqrt(delta))/(2*a);

racine2=(-b-sqrt(delta))/(2*a);

disp(racine1);

disp(racine2);

end

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 93

choix=input('Un autre calcul (O/N)? ','s');

end

>> trinome

Calcul dans R des racines de ax²+bx+c=0

a=? 0

Valeur non valide !

a=? 1

b=? 2.36

c=? -4.5

Deux racines :

1.2474

-3.6074

Un autre calcul (O/N)? n

8.2. Résolution d'une équation du 2ème degré (dans C, espace des

nombres complexes)

% trinome1.m

disp('Calcul dans C des racines de ax²+bx+c=0');

p(1)=input('a=? ');

p(2)=input('b=? ');

p(3)=input('c=? ');

disp('Racines :');

disp(roots(p));

>> trinome1

Calcul dans C des racines de ax²+bx+c=0

a=? 2+i

b=? -5

c=? 1.5-5i

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 94

Racines :

0.8329 + 0.6005i

-0.2079 - 0.6005i

8.3. Calcul de la factorielle n!

% facto.m

disp('Calcul de la factorielle') ;

n=input('n = ? ') ;

fact=1;

for i=1:n,

fact=fact*i;

end

disp([num2str(n) '!=']);

format long e;

disp(fact);

% (C) Fabrice Sincère

>> facto

Calcul de la factorielle

n = ? 134

134!=

1.992942746161518e+228

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 95

Chapitre 3 :

Systèmes d'équations linéaires

Avant de commencer les calculs numériques relatifs à l’application directe du

cours de « Méthodes Numériques », il est indispensable de savoir les informations

nécessaires concernant l’algèbre linéaire sur MATLAB. L’objectif de cette étude est

de donner à l’étudiant les bases fondamentales de l’algèbre linéaire concernant la

résolution des systèmes d’équations linéaires.

1. Matrices et Vecteurs dans MATLAB

En mathématique, une matrice est constituée de n lignes et de m colonnes. Les

coefficients de la matrice sont situés entre 2 parenthèses. Dans MATLAB, les

parenthèses n’y figurent pas.

Une matrice carrée est une matrice dont le nombre de lignes est égal au nombre

de colonnes (n=m). Une matrice ligne est une matrice d’ordre 1 appelée vecteur

ligne. Une matrice colonne est une matrice d’ordre 1 appelée vecteur colonne. Une

matrice d’ordre 0 est un scalaire.

Dans le cas général, une matrice de n lignes et de m colonnes a pour coefficients 6`a, où b ≤ � ≤ . et b ≤ ] ≤ �. Si cette matrice est appelée c, ses coefficients sont

les suivants :

c =deeef6&&6&�6&�...6&g6�&6��6��...6�g6�&6��6��...6�g.....................6h&6h�6h�...6hgi

jjjk

Si l est autre matrice à Elignes etm colonnes, alors le produit de n � c ∗ l n’est

possible que si � � E. Dans ce cas, le coefficient &&, par exemple de cette matrice

n s’écrit :

&& � 6&&. '&& � 6&�'�& � ⋯ � 6&g'p&�6;�� � E�

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 96

Dans Matlab, la matrice produit n(= c ∗ l� a pour coefficients `a. Ces coefficients

sont calculés en fonction de 6`a et de '`a : `a = q 6`r. 'ra

Une matrice d’ordre zéro est une matrice à une ligne et une colonne : elle

représente un scalaire. Une matrice nulle est une matrice dont les coefficients

sont tous nuls. En attribuant le nom « A » à cette matrice, alors dans Matlab A

s’écrit :

>>c � B��-�., �� Où n et m sont respectivement le nombre de lignes et le nombre de colonnes.

La matrice identité est définie dans Matlab par la fonction : « eye »

Exemple :

l =def1 0 00 00 1 00 00 0 10 00 0 01 00 0 00 1ij

k = s D

C’est une matrice carrée d’ordre 5. Dans Matlab, on peut l’écrire :

>> l = �,�(5� B =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

Si lu est la matrice transposée de B, cette dernière s’écrit dans Matlab :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 97

>> n = l′ ⇒ (l’apostrophe représente la transposée).

C =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

Le déterminant d’une matrice carrée (C par exemple) est donné par :

>> D�A(n)

ans =

1

Soit A une matrice non nulle. La matrice inverse c2& de A (si elle existe) est telle

que :

c ∗ c2& = s D

Dans Matlab, cette matrice inverse est donnée par :

c2&=A^(-1)=inv(A)=pinv(A)

Exemple :

>>A=[1 3 5;2 -1 0;5 4 3]

A =

1 3 5

2 -1 0

5 4 3

La matrice inverse de A est :

>>inv(A)

ans =

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 98

-0.0682 0.2500 0.1136

-0.1364 -0.5000 0.2273

0.2955 0.2500 -0.1591

ou encore :

>>pinv(A)

ans =

-0.0682 0.2500 0.1136

-0.1364 -0.5000 0.2273

0.2955 0.2500 -0.1591

2. Equations et systèmes linéaires dans MATLAB

Considérons le système suivant de n équations à m inconnues :

())*))+ 6&&. �& � 6&�. �� � ⋯ ⋯ ⋯ � 6&g. �g � ,&6�&. �& � 6��. �� � ⋯ ⋯ ⋯ � 6�g. �g � ,�6�&. �& � 6��. �� � ⋯ ⋯ ⋯ � 6�g. �g � ,�6I&. �& � 6I�. �� � ⋯ ⋯ ⋯ � 6Ig. �g � ,I⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ … � ⋯⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ … � ⋯6h&. �& � 6h�. �� � ⋯ ⋯ ⋯ � 6hg. �g � ,g

⟹ c. � � ,

Dans ce système, on a c � y6`az connue, , � ,` connues et � � �` inconnues.

• Si . > � ⟹ système sur-déterminé,

• Si . � � ⟹ système de Cramer ⟶ une solution unique (si det�c� ≠ 0),

• Si . < � ⟹ système sous-déterminé

La solution numérique du système (pour . � �) donne les inconnues �` : � � c/,

Pour un vecteur colonne y donné �, � � 60�1� parexemple�, la solution par Matlab

est : >> � = c^(−1� ∗ ,

x =

-0.5227

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 99

-1.0455

1.9318

Notation :

Soit la matrice :

c = �1 3 52 −1 05 4 3�

Dans Matlab, la Matrice A peut être écrite sous les deux formes :

>> c = [1,3,5; 2, −1,0; 5,4,3] ; ou bien : >> c = [1 3 5; 2 − 1 0; 5 4 3] ; La séparation des lignes se fait par un point virgule et la séparation des colonnes

se fait par un espace ou une virgule.

Exemple : >> c = [1 3 5 ; 2 − 1 0 ; 5 4 3] A =

1 3 5

2 -1 0

5 4 3

Problèmes mal conditionnés :

Il existe un certain nombre d’équations linéaires solvables, mais leurs solutions

sont incertaines à cause des erreurs d’arrondi lors des calculs. Les problèmes de

ce type sont appelés ‘problèmes mal conditionnés’. L’arrondi durant les calculs ou

les petits changements dans les coefficients calculés peuvent induire des erreurs

significatives dans la résolution d’un problème (mal conditionné).

Cet effet d’arrondi, peut être illustré par le système des 2 équations suivantes,

par exemple :

%0,12065�& + 0,98775�� = 2,010450,12032�& + 0,98755�� = 2,00555

La solution de ce système est :

%�& = 14,7403�� = 0,23942

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 100

Pour monter l’erreur introduite sur les solutions en modifiant les coefficients

(arrondi), on donne au coefficient « 2,01045 » de la première équation une légère

augmentation de « 0,001 ».

Dans ce cas, le système devient :

%0,12065�& + 0,98775�� = 2,011450,12032�& + 0,98755�� = 2,00555

V�& = 17,9756�� = −0,15928

Ceci met en évidence l'erreur engendrée par un arrondi.

La matrice C correspondant au système précédent est :

n = "0,12065 0,987750,12032 0,98755$

La norme de C s’écrit :

‖n‖ = �q�n`a��`a �&/� = (&&� + &�� + �&� + ��� �&/� ⟹ ‖n‖ = 1,97993839

Dans Matlab on définit le nombre-condition de la matrice C [notation cond(C)] par :

.D(n� = ‖n‖. ‖n2&‖

Ce nombre satisfait toujours la condition :

.D�n� ≥ 1

Pour les matrices inconditionnées, ce nombre-condition atteint des grandes

valeurs, mais ne donne pas une estimation directe de l’erreur sur la solution.

Dans Matlab, ce nombre se calcule par la fonction « cond(C) » où C est la matrice.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 101

Exemple1 :

>>C

C =

0.1206 0.9878 0.9876

>>cond(C)

ans =

6.5598e+003

Exemple 2 :

L'exemple de la matrice d’Hilbert représente un problème à matrice mal

conditionnée. Cette matrice est définie par :

c = y6`az, ù6`a = 1� + ] − 1

Programmer le nombre-condition (cond(A)) ainsi que det(A) pour une matrice

d’Hilbert de 5 par 5 à 14 par 14 :

Solution :

clear; for n=5:14 for i=1:n for j=1:n a(i,j)=1/(i+j-1); end end C=cond(a); d=det(a)*det(a^(-1)); fprintf( 'n=%3.0f\t cond(a)=%e\t det*det=%e\n' ,n,C,d); end

Après exécution du programme, on obtient les résultats suivants :

n= 5 cond(a)=4.766073e+005 det*det=1.000000e+000 n= 6 cond(a)=1.495106e+007 det*det=1.000000e+000 n= 7 cond(a)=4.753674e+008 det*det=1.000000e+000 n= 8 cond(a)=1.525758e+010 det*det=9.999999e-001 n= 9 cond(a)=4.931532e+011 det*det=1.000001e+000 n= 10 cond(a)=1.602534e+013 det*det=9.999812e-001 n= 11 cond(a)=5.218389e+014 det*det=1.000119e+000 n= 12 cond(a)=1.768065e+016 det*det=1.015201e+000

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 102

n= 13 cond(a)=3.682278e+018 det*det=9.707419e-001 n= 14 cond(a)=1.557018e+018 det*det=-4.325761e+000

Durant l’exécution du programme, un message s’affiche sur l’écran pour n=11 à

n=14 : Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND

= 3.659249e-017.

Ce qui signifie qu’à partir de n=11 jusqu’à n=14, on a det(a)*det(a-1) différent de 1,

donc les erreurs d’arrondi commencent leurs apparitions.

3. Méthode directe (Méthode du pivot)

Soit à résoudre le système suivant de 3 équations à 3 inconnues par la méthode

du pivot (dans Matlab) :

�−0.04 0.04 0.120.56 −1.56 0.32−0.24 1.24 −0.28� ��&����� = �310�

déterminer �&, ��, ��.

Solution :

1. On définit tout d’abord la matrice argument dans Matlab par :

>>A=[-0.04 0.04 0.12 3;0.56 -1.56 0.32 1; -0.24 1.24 -0.28 0] ;

2. On choisit la ligne 1 comme ligne pivot : a(1,1)=-0.04,

on divise la ligne 1 par a(1,1) b(1,:)=a(1,:)/a(1,1) ⟶ nouvelle ligne,

on annule le 1er terme de la ligne 2 et le 1er terme de la ligne 3 : … ⟶ b(2,:)=a(2,:)-b(1,:)*a(2,1), … ⟶ b(3,:)=a(3,:)-b(1,:)*a(3,1).

On obtient après calculs :

b =

1 -1 -3 -75

0 -1 2 43

0 1 -1 -18

3. On choisit la ligne 2 comme ligne pivot.

On divise cette ligne par b(2,2)=-1, on obtient : … ⟶ c(2,:)=b(2,:)/b(2,2) ⟶ nouvelle ligne = 0 1 -2 -43

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 103

on annule le terme b(1,2) de la ligne 1 et le terme b(3.2) de la ligne 3 : …⟶ c(1,:)=b(1,:)-c(2,:)*b(1,2) ⟶ 1 0 -5 118, … ⟶ c(3,:)=b(3,:)-c(2,:)*b(3,2) ⟶ 0 0 1 25.

4. On choisit la ligne 3 comme ligne pivot c(3, :).

On divise cette ligne par c(3,3)=1, on obtient : ⟶d(3,:)=c(3,:) ⟶ nouvelle ligne = 0 0 1 25

on annule dans la ligne 1 c(1,3) et dans la ligne 2 c(2,3) : …⟶(1,:)=c(1,:)-d(3,:)*c(1,3) ⟶1 0 0 7, … ⟶ d(2,:)=c(2,:)-d(3,:)*c(2,3) ⟶ 0 1 0 7.

D’où la matrice d s’écrit :

d =

1 0 0 7

0 1 0 7

0 0 1 25

et la solution est :

% �& = 7�� = 7�� = 25

L’algorithme suivant (dans Matlab) permet de résoudre le système précédent :

clear %effacer toutes les variables en mémoire dans Matla b a=[-0.04 0.04 0.12 3;0.56 -1.56 0.32 1;-0.24 1.24 - 0.28 0];a x=[0 0 0]'; %x est le vecteur colonne de composantes xi qui est initialisé ici % 1er point pivot ligne 1 -calculs sur les lignes 2 et 3 b(1,:)=a(1,:)/a(1,1); b(2,:)=a(2,:)-b(1,:)*a(2,1); b(3,:)=a(3,:)-b(1,:)*a(3,1);b % 2ème pivot ligne 2 - calculs sur les lignes 1 et 3 c(2,:)=b(2,:)/b(2,2); c(1,:)=b(1,:)-c(2,:)*b(1,2); c(3,:)=b(3,:)-c(2,:)*b(3,2);c % 3ème pivot ligne 3 - calculs sur les lignes 1 et 2 d(3,:)=c(3,:)/c(3,3); d(1,:)=c(1,:)-d(3,:)*c(1,3); d(2,:)=c(2,:)-d(3,:)*c(2,3);d %Solutions recherchées x(1)=d(1,4);

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 104

x(2)=d(2,4); x(3)=d(3,4); x

après l’exécution de ce programme, on obtient :

a = -0.0400 0.0400 0.1200 3.0000 0.5600 -1.5600 0.3200 1.0000 -0.2400 1.2400 -0.2800 0

b = 1.0000 -1.0000 -3.0000 -75.0000 0 -1.0000 2.0000 43.0000 0 1.0000 -1.0000 -18.0000

c = 1.0000 0 -5.0000 -118.0000 0 1.0000 -2.0000 -43.0000 0 0 1.0000 25.0000

d = 1.0000 0 0 7.0000 0 1.0000 0 7.0000 0 0 1.0000 25.0000

x = 7.0000 7.0000 25.0000

4. Méthodes itératives

4.1. Méthode de Jacobi

Résoudre le système suivant par la méthode itérative de Jacobi :

%�& + �� + �� = 12�& − �� + 3�� = 43�& + 2�� − 3�� = −2

Écrire un algorithme permettant de calculer �&, �� et �� par itérations. Déterminer

le nombre d’itérations nécessaires pour obtenir : �(�� = |�h�&(�� − �h(��| = 102&N

Solution :

Appelons l’algorithme permettant de calculer la solution ��`� « jacobi.m ». Dans cet

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 105

algorithme, nous avons utilisé un facteur de relaxation "�" pour réaliser la

convergence, car sinon le système diverge.

4.2. Méthode de Gauss-Seidel

Résoudre le même système précédent par la méthode de Gauss-Seidel. Écrire un

algorithme (Matlab) permettant de résoudre ce système et déterminer le nombre

d’itérations nécessaires pour obtenir une erreur :

�(�� = |�h�&(�� − �h(��| = 102&N Comparer les résultats avec la méthode de Jacobi et conclure.

Représenter sur le même graphe l’évolution des solutions �` en fonction du

nombre d’itérations. Changer les valeurs initiales �N, exécuter le programme puis

conclure.

Solution :

* Méthode itérative générale :

Appelons l’algorithme permettant de calculer la solution ��`� « G-seid.m »

On se donne des valeurs arbitraires �N : par exemple �N = 0. Le système à

résoudre est : c ∗ � = , ; où c = y6`az, � = �` �A, = ,`. La matrice A et le vecteur colonne y sont connus, le vecteur colonne x reste

inconnu. Ainsi, la méthode itérative générale consiste à écrire :

�(�� = ,(�� − 6(�, ]�. ��]�6��, ��

Pour � ≠ ] et 6��, �� ≠ 0

En particulier, pour un système de 3 équations à 3 inconnues, on a :

� = 1 → ] = 2�A3 ⟹ �(1� = ,(1� − 6(1,2�. ��2� − 6�1,3�. ��3�6�1, 1�

� = 2 → ] = 1�A3 ⟹ �(2� = ,(2� − 6(2,1�. ��1� − 6�2,3�. ��3�6�2, 2�

� = 3 → ] = 1�A2 ⟹ �(3� = ,(3� − 6(3,1�. ��1� − 6�2,3�. ��3�6�3, 3�

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 106

et ceci pour chaque itération.

Programme itmg.m :

%****************************** % Résolution d'un système linéaire * % par la méthode itérative générale * %******************************

clear all; clc; fprintf('Méthode itérative générale\n'); n=30000; a=[1 1 1;2 -1 3;3 2 -2]; y=[1 4 -2]; x=zeros(1,3);

w=0.2; % facteur de relaxation : 0<w<1

epsilon=1e-10; for k=1:n erreur=0; for i=1:3 s=0; xb=x(i); for j=1:3 if i~=j s=s+a(i,j)*x(j); end end x(i)=w*(y(i)-s)/a(i,i)+(1-w)*x(i); erreur=erreur+abs(x(i)-xb); end if (erreur/3<epsilon) fprintf('Itération no. : %d\t Erreur = %7.2e\n',k,erreur); break; end end x

* Méthode de Jacobi :

Modifier le programme précédent pour résoudre le système par la méthode de

Jacobi. Exécuter le programme et comparer le nombre d'itérations par rapport à

celui de la méthode générale.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 107

Chapitre 4 :

Polynômes et interpolation polynomiale

Résolution des équations non linéaires

L’objectif principal de l’interpolation est d’interpoler des données connues à partir

des points discrets. Dans ce cas, la valeur de la fonction entre ces points peut

être estimée. Cette méthode d’estimation peut être étendue et utilisée dans divers

domaines ; à savoir la dérivation et l’intégration numérique des polynômes.

1. Opérations sur les polynômes dans MATLAB

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).

Exemple :

Le polynôme : �(�� = 8. �� + 2. �� − 3. �� + 4. � − 2 est représenté par :

>>f=[8 0 2 -3 4 -2]

f =8 0 2 -3 4 -2

D’autres fonctions dans MATLAB telles que : ‘conv’, ‘deconv’, ‘roots’, etc. peuvent

être utilisées en plus des opérations propres aux vecteurs (cf. chapitre précédent).

1.1. Multiplication des polynômes

La fonction ‘conv’ donne le produit de convolution de deux polynômes. L’exemple

suivant montre l’utilisation de cette fonction.

Soient :

V ���� = 3. �� + 2. �� − � + 4���� = 2. �I − 3�� + 5. � − 1

Le produit de convolution : ℎ��� = ����. ���� est donné par :

>>f=[3 2 -1 4];

>>g=[2 0 -3 5 -1];

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 108

>>h=conv(f,g)

h =

6 4 -11 17 10 -19 21 -4

Ainsi, le polynôme ℎ(�� obtenu est : ℎ(�� = 6�� + 4�� − 11�� + 17�I + 10�� − 19�� + 21� − 4

1.2. Division des polynômes

La fonction ‘deconv’ donne le rapport de convolution de deux polynômes

(déconvolution des coefficients du polynôme). L’exemple suivant montre

l’utilisation de cette fonction.

Soient les mêmes fonctions précédentes ���� et ���� : V ���� = 3�� + 2�� − � + 4���� = 2�I − 3�� + 5� − 1

La division de ���� par ���� : ℎ��� = ��3� �3� est donnée par la fonction ‘deconv’ :

>>f=[3 2 -1 4];

>>g=[2 0 -3 5 -1];

>>h=deconv(g,f)

h = 0.6667 -0.4444

et le polynôme ℎ��� obtenu est : ℎ��� = 0,6667� − 0,4444

2. Manipulation de fonctions polynomiales dans MATLAB

Soit le polynôme suivant :

���� = 6h�h + 6h2&. �h2& + ⋯ + 6�. �� + 6&. � + 6N

où n est le degré du polynôme et 6`�� = 0,1,2, … , .� sont les coefficients du

polynôme.

Ce polynôme peut être écrit sous la forme : ���� = ¡�… �… �6h. � + 6h2&�. � + 6h2��. � … + 6&�. � + 6N¢ Après factorisation, on a : ���� = 6h. �� − �&�. �� − ���. �� − ��� … �� − �h�

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 109

où �N, �&, ��, … , �h sont les racines du polynômes �(��. Exemple : �(�� = �I + 2. �� − 7. �� − 8� + 12

Ce polynôme est équivalent à :

���� = £"¡�� + 2�� − 7¢� − 8$ � + 12¤

ou encore : ���� = �� − 1��� − 2��� + 2��� + 3� Un polynôme d’ordre n possède n racines qui peuvent être réelles ou complexes.

Dans MATLAB, un polynôme est représenté par un vecteur contenant les

coefficients dans un ordre décroissant.

Exemple :

Le polynôme : ���� = 2�� + �� + 4� + 5 qui est représenté dans MATLAB par :

>>P=[2 1 4 5];

a pour racines � . Pour trouver ces racines, on doit exécuter la fonction ‘roots’.

D’où :

>>r=roots(P);

et le résultat donné est :

>> r r = 0.2500 + 1.5612i 0.2500 - 1.5612i -1.0000

Les trois racines de ce polynôme (dont 2 sont complexes) sont données sous

forme d’un vecteur colonne. Quand les racines � sont connues, les coefficients

peuvent être recalculés par la commande ‘poly’.

Exemple :

>>poly(r) ans = 1.0000 0.5000 2.0000 2.5000

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 110

La fonction ‘poly’ accepte aussi une matrice comme argument dont elle retourne

le polynôme caractéristique.

Exemple :

>>A =[3 1;2 4];

>>p=poly(A)

p =

1 -7 10

Ainsi, le polynôme caractéristique de la matrice A est : E(�� = �� − 7� + 10

Les racines de ce polynôme sont les valeurs propres de la matrice A. ces racines

peuvent être obtenues par la fonction ‘eig’ :

>>Val_prop =eig(A)

Val_prop = 2

5

2.1. Évaluation d’un polynôme

• Pour évaluer le polynôme �(�� en un point donné, on doit utiliser la fonction

‘polyval’. On évalue ce polynôme pour � = 1, par exemple :

>>polyval(P,1)

ans=

12

• Exemple :

On veut évaluer en � =2.5 le polynôme suivant : , = 3�I − 7�� + 2�� + � + 1

>>C=[3 -7 2 1 1];

>>� =2.5;

>> , =polyval(C,x) , =

23.8125

Si x est un vecteur contenant plusieurs valeurs, y sera aussi un vecteur qui

contiendra le même nombre d’éléments que x.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 111

2.2. Interpolation au sens des moindres carrés

Dans le domaine de l’analyse numérique des données, on a souvent besoin

d’établir un modèle mathématique liant plusieurs séries de données

expérimentales. L’interpolation polynomiale consiste à approcher la courbe liant

les deux séries de mesures par un polynôme. Les coefficients optimaux de ce

polynôme sont ceux qui minimisent la variance de l’erreur d’interpolation. Ce

principe (voir cours) est connu sous le nom de la méthode des moindres carrés.

La fonction ‘polyfit’ retourne le polynôme P de degré n permettant d’approcher la

courbe , = �(�� au sens des moindres carrés.

Exemple :

>> x=[1.1 2.3 3.9 5.1];

>>y=[3.887 4.276 4.651 2.117];

>>a=polyfit(x,y,length(x)-1)

a =

-0.2015 1.4385 -2.7477 5.4370

Ainsi, le polynôme d’interpolation de y (d’ordre length(x)-1=3) est :

�(�� = −0,2015�� + 1,4385�� − 2,7477� + 5,4370

Pour déduire l’erreur entre les valeurs expérimentales et le modèle obtenu par la

fonction ‘polyfit’, on dispose de la fonction ‘polyval’ qui retourne la valeur du

polynôme P pour toutes les composantes du vecteur (ou de la matrice) x.

Ainsi, cette fonction donne :

>>yi=polyval(a,x)

yi =

3.8870 4.2760 4.6510 2.1170

On remarque ici que les valeurs expérimentales de y sont bien restituées (y=yi).

Dans ce cas, on a un coefficient de corrélation qui est égal à 1 (voir la définition

de ce coefficient dans le cours).

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 112

Pour mieux comprendre ces fonctions prédéfinis dans MATLAB, on va simuler

une courbe expérimentale par une sigmoïde à laquelle on superpose un bruit du

type Gaussien. Cette courbe sera donnée par :

, = 11 + �23 + 0,05�6.D.¡1, �.�Aℎ(��¢

Le programme correspondant à l’approximation des ces données dans MATLAB

(regres.m, par exemple) est le suivant :

%****************************************** % Génération de données expérimentales: * % y=1./(1+exp(-x))+0.05*randn(1,length(x))* %******************************************

clc; % Effacer l'écran clear all; % Effacer des variables de l'espace de travail x=-5:0.1:5; % Intervalle de définition et de calcul de la sigmo ïde

% Fonction sigmoïde bruitée y=1./(1+exp(-x))+0.05*randn(1,length(x)); plot (x,y); % Tracé de la sigmoïde bruitée title( 'Fonction sigmoïde bruitée - Polynôme d''interpolat ion' ); xlabel( 'x' );ylabel( 'y' );

% Polynôme d'interpolation d'ordre 1 P=polyfit(x,y,1);

% Valeurs du polynôme d'interpolation Vp=polyval(P,x);

% Tracé du polynôme d'interpolation hold on;

plot(x,Vp, '--' ); % Calcul de l'erreur d'interpolation erreur=y-Vp; % Tracé de la courbe de l'erreur plot(x,erreur, ':' ) grid

gtext( 'Mesures' ) gtext( 'Erreur' ) gtext( 'Modèle' ) hold off % Affichage du polynôme d'interpolation disp( 'Polynôme d''interpolation' ) P Var_erreur=num2str(std(erreur).^2); disp([ 'La variance de l''erreur d''interpolation est : ' ,Var_erreur])

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 113

Après exécution du programme, on obtient à l’ordre 1 (droite affine : fig. 1 ci-

dessous) les résultats suivants :

>> regres

Polynôme d'interpolation

P =

0.1309 0.5008

La variance de l'erreur d'interpolation est : 0.011277

On remarque ici que le polynôme d’interpolation d’ordre 1 n’est pas une bonne

approximation pour ces données. En effet, un polynôme d’ordre 5 donne une

meilleure approximation de la sigmoïde (fig. 2). Ainsi, dans le programme

précédent (sigreg.m), on change donc le ‘1’ par ‘5’ dans la fonction ‘polyfit’, et on

obtient les résultats suivants :

>> regres Polynôme d'interpolation P = 0.0002 -0.0000 -0.0111 0.0008 0.2326 0.4844

La variance de l'erreur d'interpolation est : 0.002279

Fig.1 : Interpolation linéaire

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 114

Fig.2 : Interpolation par un polynôme d’ordre 5

3. Interpolation linéaire et non linéaire

Une interpolation consiste à relier les points expérimentaux par une courbe sous

forme de segments de droites ou de courbes polynomiales. Ceci peut être réalisé

par la fonction ‘interp1’. La commande ‘interp1(x, y, xi, ’type’)’ retourne un

vecteur de mêmes dimensions que �` et dont les valeurs correspondent aux

images des éléments de �` déterminées par interpolation sur x et y. Si f est

l’interpolation de y, la chaîne ‘type’ spécifie alors le type d’interpolation qui doit

être parmi les suivants :

• ‘ linear’ → interpolation linéaire

• ‘spline’ → interpolation par splines cubiques,

• ‘cubic’ → interpolation cubique.

Si on ne spécifie pas le type, l’interpolation linéaire est choisie par défaut.

Exemple 1 :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 115

>>x = 0:10; y = sin(x); xi = 0:.25:10; >>yi = interp1(x,y,xi,’cubic’); plot(x,y,'o',xi,yi)

Fig. 3 : Interpolation cubique

Exemple 2 :

Dans le cas suivant, on étudiera ces différents types d’interpolation sur un même

exemple de valeurs discrètes de la fonction ‘cosinus’. On appellera l’algorithme :

‘interpol.m’.

%************************************* % Utilisation de la fonction interp1 * %*************************************

clear all; clc; x=0:10; y=cos(x); % Points à interpoler z=0:0.25:10; % Le pas du vecteur z est inférieur à celui de x

% Interpolation linéaire figure(1); f=interp1(x,y,z);

% Tracé des valeurs réelles et de la courbe d'inter polation plot(x,y, '*r' ,z,f); grid on; xlabel( 'Interpolation' );

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 116

% Interpolation par splines cubiques figure(2); f=interp1(x,y,z, 'spline' ); plot(x,y, '*r' ,z,f); grid on; xlabel( 'Interpolation par splines cubiques' );

En exécutant ce programme, on obtient les courbes suivantes :

Fig. 4 : Interpolation linéaire

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 117

Fig. 5 : Interpolation par splines cubiques

La fonction ‘interp2’ réalise l’interpolation dans l’espace trois dimensions (3D).

4. Interpolation de Lagrange

Exemple :

Les masses volumiques du matériau pour différentes températures sont données

par le tableau ci-dessous :

I 1 2 3

Température T (en °C) 94 205 371

Masse volumique R(T) : (en kg/m3) 929 902 860

• Écrire la formule d’interpolation de Lagrange qui permet d’interpoler les

différents points de données précédentes.

• Trouver les masses volumiques du sodium pour T=251 °C, T=305 °C et

T=800 °C en utilisant l'interpolation de Lagrange.

Solution :

a) Puisque le nombre de points est égal à 3, alors le polynôme de Lagrange

sera de degré 2. Ce polynôme s’écrit :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 118

�(W� = q �(W � ¥ ¡W − Wa¢¡W − Wa¢�

aM&a¦`�

`M&

Soit :

�(W� = (W − 205�. �W − 371��94 − 205��94 − 371� . �929� + �W − 94��W − 371��205 − 94�. �205 − 371� �902�+ �W − 94�. �W − 205��371 − 94�. �371 − 205� . �860�

D’où pour T=251 °C, on obtient R(251) = 890.5 kg/m3.

L'algorithme de calcul de R(251), R(305) et R(800) est : ‘polylag.m’ qui est listé ci-

dessous :

%**************************************** % Interpolation polynomiale de Lagrange * %**************************************** clc; clear; T=[94 205 371]; R=[929 902 860]; Ti=[251 305 800]; Ri=lag(T,R,Ti)

La fonction ‘lag.m’ est un sous programme permettant de donner l’interpolation

de Lagrange. La liste de ce sous programme est :

%***************************

% Sous-programme Lagran_.m *

%***************************

function Ri=lag(T,R,Ti)

Ri=zeros(size(Ti)); % Initialisation des Ti

n=length(R); % Nombre de points

for i=1:n y=ones(size(Ti)); for j=1:n if i~=j y=y.*(Ti-T(j))/(T(i)-T(j)); end Ri=Ri+y*R(i) end end return

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 119

Il suffit maintenant d’exécuter le programme ‘polylag.m’ pour obtenir les résultats

de Ri. Ces résultats sont les suivants :

>>Ri Ri = 890.5561 876.9316 742.45559

5. Résolution d’équations et de Systèmes d’équations non Linéaire

5.1. Résolution d’équations non Linéaires

Dans cette partie, on s’intéressera à la méthode de Newton-Raphson pour la

résolution des équations non linéaires à une ou à plusieurs variables. On

cherchera ensuite à trouver la valeur �∗ qui annulera la fonction �(��. La méthode de Newton-Raphson permet d’approcher par itérations la valeur �∗ au

moyen de la relation suivante :

�h�& = �h − �(�h��K(�h� Dans toutes les méthodes itératives, il est nécessaire pour éviter une divergence

de la solution, de bien choisir la valeur initiale �N. Celle-ci peut être obtenue

graphiquement.

On se propose d’appliquer cette méthode pour la recherche des racines de la

fonction non linéaire suivante : �(�� = �3 − 2. cos��� Dans un premier temps, on se propose de tracer la courbe représentative de cette

fonction en utilisant le programme ci-dessous ‘pnum1.m’:

%************************* % Etude de la fonction : * % f(x)=exp(x)-2.cos(x) * %*************************

x=-1:0.1:1; f=exp(x)-2*cos(x); plot(x,f); grid on; title( 'Fonction : f(x)=exp(x)-2.cos(x)' );

Après exécution du programme, on obtient la courbe sur la figure 6. D’après cette courbe, il est judicieux de choisir un �N = 0,5 ; car ��0,5� est proche de zéro pour avoir une convergence rapide.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 120

La fonction dérivée �(�� a pour expression : �K(�� = �3 + 2 sin���.

fig. 6 : Localisation de la valeur �N où ���N� § 0

Pour chercher la solution de ����, on peut rajouter au programme précédent

‘pnum1.m’ quelques lignes :

%************************* % Etude de la fonction : * % f(x)=exp(x)-2.cos(x) * %************************* clf; x=-1:0.1:1; f=exp(x)-2*cos(x); figure(1); plot(x,f); grid on; title( 'Fonction : f(x)=exp(x)-2.cos(x)' );

clear all; clc; x(1)=input( 'Donner la valeur initiale x(1): \n' ); e=1e-10; n=5000; for i=2:n f=exp(x(i-1))-2*cos(x(i-1)); diff=exp(x(i-1))+2*sin(x(i-1)); x(i)=x(i-1)-f/diff; if abs(x(i)-x(i-1))<=e xp=x(i); fprintf( 'xp=%f\n' ,x(i)); break ; end end

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 121

j=1:i; figure(2); plot(j,x(j), '*r' ,j,x(j)); xlabel( 'Nombre d''itérations' ); title( 'Convergence de la solution : Méth. de Newt.-Raph.' ); disp( 'Les valeurs successives de x(i) sont :' ); x'

Ainsi, après exécution de ce programme, on obtient alors toutes les valeurs

successives de �(�� pour chaque itération. Les résultats sont donnés ci-dessous.

On remarque qu’il y a convergence après 5 itérations :

>>pnum1 Donner la valeur initiale x(1): 0.5 xp=0.539785 Les valeurs successives de x(i) sont : ans = 0.5000 0.5408 0.5398 0.5398 0.5398

Fig. 7 : Évolution de la solution x(i) en fonction du nombre d’itérations

Dans MATLAB, on peut obtenir la même solution avec la fonction ‘fzero’. Pour

cela, il faut créer le fichier.m MATLAB (‘f.m’, par exemple) dans lequel sera

programmé �(��.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 122

%*********************************** % Fichier MATLAB représentant f(x) * %*********************************** function f=f(x) f=exp(x)-2*cos(x)

Pour obtenir la solution de �(�� = 0 au voisinage de � = 0,5 on exécute la

commande ‘fzéro(‘f’,0.5)’. Cette fonction affiche les valeurs obtenues de �(�� à

chaque itération pour donner à la fin la solution recherchée �∗. >>d=fzero('f',0.5) f = -0.1064 -0.1430 -0.0692 -0.1579 -0.0536 -0.1788 -0.0313 -0.2080 5.8950e-004 -3.0774e-005 -4.1340e-009 2.2204e-016 -8.8818e-016

d = 0.5398

5.2. Résolution de systèmes d’équations non Linéaires

Nous allons appliquer cette méthode à un cas très simple : résolution d’un

système de deux équations non linéaires à 2 inconnues, par exemple :

V�(�, ,� = 0�(�, ,� = 0

l’algorithme de Newton-Raphson devient :

"�r,r$ = "�r2&,r2&$ −def¨�(�, ,�¨� ¨�(�, ,�¨,¨�(�, ,�¨� ¨�(�, ,�¨, ij

k2&. £���r2&, ,r2&����r2&, ,r2&�¤

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 123

Exemple :

V�(�, ,� = �� − � + ,� = 0�(�, ,� = �� − ,� − , = 0

Les fonctions � et � admettent comme dérivées partielles :

def¨�(�, ,�¨� = 2� − 1 ¨�(�, ,�¨, = 2,¨�(�, ,�¨� = 2. � ¨�(�, ,�¨, = −2, − 1ij

k

Afin de déterminer si le système admet des solutions sur �−1, 1] × �−1, 1], on

tracera les surfaces représentatives des fonctions � et � dans le but de montrer

l’existence éventuelle d’un couple (�, ,� pour lequel elles s’annulent. L’algorithme

‘pnum2.m’ ci-dessous permet de tracer en 3 dimensions ces deux fonctions sur le

même graphe.

%***************************** % Fonctions à deux variables * %*****************************

x=-1:0.1:1; y=x; [x,y]=meshgrid(x,y); f=x.^2+y.^2-x; g=x.^2-y.^2-y; figure(1); mesh(f); grid on; hold on; mesh(g); title( 'Courbes f(x,y) et g(x,y)' ); xlabel( 'x' ); ylabel( 'y' );zlabel( 'f(x,y) et g(x,y)' ); hold off;

On peut remarquer sur le graphe obtenu (en 3D) que les 2 fonctions � et �

s’annulent simultanément en différents points. Grâce aux fonctionnalités de

MATLAB, on peut rechercher les solutions éventuelles ou les conditions initiales

pour l’algorithme de Newton-Raphson en faisant varier simultanément les

variables � et , à l’aide de la fonction ‘meshgrid’. On obtient alors les courbes de

niveaux des fonctions �(�, ,� et �(�, ,�.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 124

Fig. 8 : Fonctions �(�, ,� et ���, ,� en 3D

On peut développer davantage l’algorithme ‘pnum2.m’ pour chercher, par

exemple, les conditions initiales et les solutions évidentes.

%***************************** % Fonctions à deux variables * %***************************** x=-1:0.1:1; y=x; [x,y]=meshgrid(x,y); f=x.^2+y.^2-x; g=x.^2-y.^2-y; figure(1); mesh(f); grid on; hold on; mesh(g); title( 'Courbes f(x,y) et g(x,y)' ); xlabel( 'x' ); ylabel( 'y' );zlabel( 'f(x,y) et g(x,y)' ); hold off; figure(2); plot(f); hold on;plot(g);grid on; title( 'Intersection de f et g' ); xlabel( 'x' );ylabel( 'y' ); axis([0 20 -0.5 0.5]); gtext( 'f(x,y)' ); gtext( 'g(x,y)' );

Après exécution de ‘pnum.m’, on obtient les courbes de et (fig. 9) en deux dimensions :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 125

Fig. 9 : Fonctions �(�, ,� et ���, ,� en 2D

Les solutions évidentes s’obtiennent par :

>> [i,j]=find(f==0 & g==0) i = 11 j = 11

>>[x(11),y(11)] ans = -1 0

De cette façon, on peut retrouver plusieurs solutions évidentes si le pas

d’échantillonnage est assez faible. Avec le pas de 0,1 choisi, on ne retrouve pas la

solution évidente (0,0).

Graphiquement, en faisant un zoom autour de l’abscisse ‘x=11’ avec la fonction

‘axis’, on peut cerner cette solution évidente.

>>axis([10.5 11.5 -0.02 0.02]);

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 126

Fig. 10 : zoom autour de l’abscisse � = 11

Ainsi, l’algorithme de Newton-Raphson appliqué au système précédent, est

représenté par la suite du programme MATLAB (pnum2.m) :

%***************************** % Fonctions à deux variables * %*****************************

clf; clear all; clc; x=-1:0.1:1; y=x; [x,y]=meshgrid(x,y); f=x.^2+y.^2-x; g=x.^2-y.^2-y; figure(1); mesh(f); grid on; hold on; mesh(g); title( 'Courbes f(x,y) et g(x,y)' ); xlabel( 'x' ); ylabel( 'y' );zlabel( 'f(x,y) et g(x,y)' ); hold off; figure(2); plot(f); hold on;plot(g);grid on; title( 'Intersection de f et g' ); xlabel( 'x' );ylabel( 'y' ); axis([0 20 -0.5 0.5]); gtext( 'f(x,y)' ); gtext( 'g(x,y)' ); hold off;

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 127

clear x y; % Conditions initiales x(1)=0.85; y(1)=0.35;

% Algorithme de Newton-Raphson for i=2:10 diff=inv([2*x(i-1)-1 2*y(i-1);2*x(i-1) -2*y(i-1 )-1]); f=x(i-1)^2-x(i-1)+y(i-1)^2; g=x(i-1)^2-y(i-1)^2-y(i-1); xy=[x(i-1) y(i-1)]'-diff*[f,g]'; x(i)=xy(1); y(i)=xy(2); end

Le choix des conditions initiales influe sur la convergence de l’algorithme. Dans

ce qui suit (suite de ‘pnum2.m’), nous étudierons l’évolution des solutions par 2

jeux de conditions initiales.

%***************************** % Fonctions à deux variables * %***************************** clf; clear all; clc; x=-1:0.1:1; y=x; [x,y]=meshgrid(x,y); f=x.^2+y.^2-x; g=x.^2-y.^2-y; figure(1); mesh(f); grid on; hold on; mesh(g); title( 'Courbes f(x,y) et g(x,y)' ); xlabel( 'x' ); ylabel( 'y' );zlabel( 'f(x,y) et g(x,y)' ); hold off; figure(2); plot(f); hold on;plot(g);grid on; title( 'Intersection de f et g' ); xlabel( 'x' );ylabel( 'y' ); axis([0 20 -0.5 0.5]); gtext( 'f(x,y)' ); gtext( 'g(x,y)' ); hold off; clear x y; % Conditions initiales x(1)=0.85; y(1)=0.35; % x(1)=0.2; y(1)=0.1; % Algorithme de Newton-Raphson for i=2:10 diff=inv([2*x(i-1)-1 2*y(i-1);2*x(i-1) -2*y(i-1 )-1]); f=x(i-1)^2-x(i-1)+y(i-1)^2; g=x(i-1)^2-y(i-1)^2-y(i-1); xy=[x(i-1) y(i-1)]'-diff*[f,g]'; x(i)=xy(1);

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 128

y(i)=xy(2); end

% Tracé des courbes d'évolution des solutions figure(3); plot(1:10,x, '*r' ,1:10,x); hold on; plot(1:10,y, 'og' ,1:10,y); title( 'Evolution des solutions : ***-->x et ooo-->y' ); grid on; hold off;

L’évolution des solutions x et y (pour les conditions initiales : �& = 0,85 et ,& �0,35) est donnée par la figure 11 ci-après. Ces solutions sont les suivantes :

>>x x = 0.8500 0.7800 0.7719 0.7718 0.7718 0.7718 0.7718 0.7718 0.7718 0.7718

>>y y = 0.3500 0.4271 0.4197 0.4196 0.4196 0.4196 0.4196 0.4196 0.4196 0.4196

Les 2 solutions peuvent être obtenues au bout de 2 itérations grâce au bon choix

des conditions initiales. Avec les conditions initiales x(1)=0,2 et y(1)=0.1, il y a

convergence vers la solution (0,0) au bout de 3 itérations.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 129

Fig. 11 : Convergence des solutions (x,y) : x(1)=0,85 et y(1)=0,35

Pour les conditions initiales x(1)=0,2 et y(1)=0,1, l’évolution des solutions x et y

est :

>>x x = 0.2000 -0.1031 -0.0112 -0.0002 -0.0000 -0.0000 -0.0000 0 0 0

>>y y = 0.1000 -0.0594 -0.0054 -0.0001 -0.0000 -0.0000 -0.0000 0 0 0

La boite à outil ‘Optimisation Toolbox’ propose les fonctions ‘fsolve’ et ‘fsolve2’ qui

permettent respectivement, la recherche des racines d’une fonction dans un

intervalle donné et les solutions d’équations non linéaires et de systèmes

d’équations non linéaires.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 130

Fig. 12 : Convergence des solutions (x,y) : x(1)=0,2 et y(1)=0,1

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 131

Chapitre 5 :

Intégration numérique des fonctions

1. Introduction

Dans la plupart des cas, les fonctions analytiques, du fait de leurs complexités,

ne sont pas intégrables analytiquement. Dans d'autres cas, on a des fonctions qui

sont évaluées numériquement en différents points de l’intervalle où ces dernières

sont données, et l’intégrale de ces types de fonctions ne peut être obtenue que par

des approches numériques. Dans ce chapitre, on s’intéresse aux méthodes

utilisées fréquemment ; à savoir la méthode des trapèzes, la méthode de Simpson,

les formules de Newton-Cotes et la méthode de Gauss. Nous étudierons

également les méthodes de calcul d’intégrales doubles et les intégrales des

fonctions non définies sur leurs bornes.

2. Méthodes d’intégrations numériques

2.1. Méthode des trapèzes

Soit �(�� la fonction à intégrer sur �6, ']. L’intégrale s de �(�� s’écrit en utilisant la

méthode des trapèzes :

s = L �(��. D�©4 = ℎ2 ��& + 2�� + 2�� + ⋯ + 2. � + ⋯ + 2�h + 2�h�&� + ª

s = ℎ2 ����&� + ���h�&� + 2 q ���`�h`M� � + ª

où ℎ = ©24h ; �` = 6 + �� − 1�. ℎ ; � = ���`� et � = 1, 2, 3, … , ., . + 1.

Le terme représentant l’erreur est :

ª ≈ − �' − 6�12 . ℎ�. �"¬ ≈ − �' − 6��12.� . �"¬

�"¬ est la moyenne de �"��� sur l’intervalle [6, ']. L’erreur ª est inversement

proportionnelle à la valeur de .�.

Si la fonction � est donnée sur les intervalles réguliers ��` − �`2& = ℎ�, la méthode

des trapèzes peut être écrite dans Matlab sous la forme :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 132

s = ℎ ∗ £-:�(�� − 0.5 ∗ "��1� + �¡ �.�Aℎ���¢$¤

avec : -:���� = �& + �� + �� + ⋯ + � + ⋯ + �h + �h�&

On peut également faire un programme pour calculer l'intégrale s. Celui-ci appelé 'trapez_v.m' par exemple, est listé ci-dessous :

function I=trapez_v(g,h) I=(sum(f)-(f(1)+f(length(f)))/2)*h;

Considérons par exemple la fonction à intégrer : ���� = �� + 2� − 1 sur un

intervalle [−10, 8] où le pas est "h" égal à 1. En mode interactif dans MATLAB

(mode commande), avant de lancer le programme 'trapez_v.m', on donne la

fonction � ainsi que ses bornes :

>>x=-10:1:8; >>f=x.^2+2*x-1; >>h=1;

On exécute ensuite le programme 'trapez_v.m', et on obtient :

>>I=trapez_v(f,h) I = 2265

En utilisant les programmes 'trapez_n.m' et 'trapez_g.m' listés ci-après, on peut

calculer aussi l'intégrale I.

>>I=trapez_n('fonction_f',a,b,n)

ou

>>I=trapez_g('fonction_f',a,b,n)

Liste du programme 'trapez_n.m' :

function I=trapez_n(fonction_f,a,b,n) h=(b-a)/n; x=a+(0:n)*h; f=feval(fonction_f,x); I=trapez_v(f,h)

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 133

Liste du programme 'trapez_g.m' :

function I=trapez_g(fonction_f,a,b,n); n=n; hold off; h=(b-a)/n; x=a+(0:n)*h; f=feval(‘fonction_f’,x); I=h/2*(f(1)+f(n+1)); if n>1 I=I+sum(f(2:n))*h; end

h2=(b-a)/100; xc=a+(0:100)*h2; fc=feval(‘fonction_f’,xc); plot(xc,fc, 'r' ); hold on; title( 'Méthode des trapèzes' ); xlabel( 'x' ); ylabel( 'y' ); grid on; plot(x,f, 'm' ); plot(x,zeros(size(x)), 'c' )

for i=1:n; plot([x(i),x(i)],[0,f(i)], 'g' ); end

La fonction 'fonction_f' est donnée par le programme 'fonction_f.m'.

Remarque :

La fonction y=feval('sin',x) est équivalente à y=sin(x).

Exemples :

1°) On donne la fonction 'fonction_f' par le sous-programme 'fonction_f.m' listé ci-

dessous :

%**************** % fonction f(x) * %**************** function f=f(x); f=x+2*log(0.0000025235*x);

En exécutant le programme trapez_g('fonction_f',1,50,60), où les bornes et

sont égales respectivement à 1 et 50 et le nombre d'intervalles est égal 60, on

obtient l'intégrale de �(�� sur �1, 50� pour 60 pas :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 134

>>trapez_g('fonction_f',1,50,60) ans = 279.3889

Figure 1 : Intégrale de la fonction �(�� = � + 2 ��2,5253. 102��

2°) Un véhicule de masse m=2000 kg se déplace à la vitesse de V=30 m/s.

Soudainement, le moteur est débrayé à A � 0. L'équation du mouvement après

l'instant A � 0 est donnée par :

� ∙ � ∙ D�D� � �8,1�� � 1200�6� où x est la distance linéaire mesurée à partir de A � 0.

Dans cette équation (a), le terme de gauche représente la force d'accélération, le 1er

terme de droite représente la résistance aérodynamique exercée par le vent sur le

véhicule et le second terme est le coefficient de frottement. Calculer la distance au

delà de laquelle la vitesse de la voiture se réduit à 15 m/s.

Solution :

L'équation (a) peut être écrite sous la forme :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 135

D� = − ��D�8,1�� � 1200

L'intégration de cette équation donne :

� � � L ��D�8,1�� � 1200�N&�

Cette intégrale peut être évaluée par la méthode des trapèzes.

Si on se donne 60 intervalles (ou 61 points), on peut écrire :

� � 15 � �� � 1�∆�ù� � 1,2,3, ⋯ ⋯ ,61�A∆� � 45 � 1560 � 0,5

En définissant :

�` � � �� 8,1�� � 1200

et en appliquant la méthode des trapèzes pour l'intégration, on obtient :

� § ∆� ∙ �q � � 0,5��& � ��&��&`M& ��'�

Le programme suivant (trapeze.m) permet de calculer la valeur donnée par la

formulation précédente (b) :

>>trapeze

x =

127.5066

En comparant cette solution à la solution exacte (=127,51 m), on remarque que

l'erreur relative induite par cette méthode est de l'ordre de 2,7.10-3 %.

La liste du programme trapeze.m est la suivante :

clear; clc; nb_points=61; i=1:nb_points; h=(30-15)/(nb_points-1); V=15+(i-1)*h; f=2000*V./(8.1*V.^2+1200); x=trapez_v(f,h)

3°) Connaissant l'intégrale exacte de la fonction ���� � √1 � �3 sur l'intervalle �0, 2� , on a s � 4,006994 . Étudier l'effet du nombre d'intervalles sur l'erreur de

calcul en adoptant la méthode trapézoïdale :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 136

s = L √1 � �3�N D�

Solution :

Le programme suivant 'trz.m' permet de calculer l'intégrale :

clc; clear; Iexact=4.006994; a=0;b=2; fprintf( '\n Méthode Trapézoïdale étendue \n' ); fprintf( '\n n\t \t I\t Pourc. erreur relat.\n' ); fprintf( '---------------------------------------------\n' ); n=1; for k=1:10 n=2*n; h=(b-a)/n; i=1:n+1; x=a+(i-1)*h; f=sqrt(1+exp(x)); I=trapez_v(f,h); erreur=abs(Iexact-I)/Iexact; fprintf( '%d\t %10.5f\t %10.8f\n' ,n,I,erreur); end

Les résultats obtenus sont les suivants :

Méthode Trapézoïdale étendue

n I Pourc. erreur relat.

---------------------------------------------

2 4.08358 0.01911429 4 4.02619 0.00478998 8 4.01180 0.00119825 16 4.00819 0.00029965 32 4.00729 0.00007496 64 4.00707 0.00001878 128 4.00701 0.00000474 256 4.00700 0.00000123 512 4.00700 0.00000035 1024 4.00699 0.00000013

D'après ces résultats, on montre que quand est doublé, l'erreur relative décroît

par un facteur 4.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 137

2.2. Méthode de Simpson

Soit s l'intégrale de �(�� sur l'intervalle �6, ']. Par la méthode de Simpson, s s'écrit :

s = L �(��D�©4 = ∆�3 ¯�(1� + �(. + 1� + 4 q ���� + 2 q ����h

`M�`→`gp4`°h2&`M�`→p4`°

± + ª

ùª = ²(Δ��I; �(�� = � £6 + � − 1ℎ ¤ �Aℎ = ' − 6.

Le terme ª est donné par :

ª ≈ −(' − 6� ℎI180�(I�´ ´ ´ et �(I�´ ´ ´ est la moyenne de �(I�(�� sur l'intervalle ouvert ]6, '�. Exemple :

Évaluer l'intégrale de �(�� = √1 + �3 sur l'intervalle �0, 2] avec la méthode de

Simpson pour . = 2, . = 4, . = 8 et . = 16.

Solution :

La liste du programme 'msimp.m' est la suivante :

clc; clear; Iexact=4.006994; a=0;b=2; fprintf( '\n Méthode de Simpson \n' ); fprintf( '\n n\t \t I\t Pourc. erreur relat.\n' ); fprintf( '---------------------------------------------\n' ); n=1; for k=1:4 n=2*n; h=(b-a)/n; i=1:n+1; x=a+(i-1)*h; f=sqrt(1+exp(x)); I=h/3*(f(1)+4*sum(f(2:2:n))+f(n+1)); if n>2 I=I+h/3*2*sum(f(3:2:n)); end erreur=abs(Iexact-I)/Iexact; fprintf( '%d\t %10.5f\t %10.8f\n' ,n,I,erreur); end

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 138

Les résultats de cet algorithme sont donnés ci-dessous :

Méthode de Simpson

n I Pourc. erreur relat.

---------------------------------------------

2 4.00791 0.00022935 4 4.00705 0.00001521 8 4.00700 0.00000101 16 4.00699 0.00000012

On montre qu'à partir de . = 8, l'erreur relative devient presque nulle (de l'ordre

de 102I% ).

Les programmes 'simp_v' et 'simp_n' peuvent être utilisés pour intégrer la fonction ����. Dans l'algorithme 'simp_v(f,h)', � est un vecteur contenant les ordonnées de

l'intégrante et � représente le pas de l'intervalle d'intégration.

D'où :

>>I=simp_n('fonction_f',a,b,n)

permet d'évaluer l'intégrale s dans laquelle 'fonction_f' est le nom du sous-

programme contenant la fonction ����, 6 et ' sont les limites de l'intervalle

d'intégration et . � ©24¶ .

Exemple :

Soit

���� � ·¸23¸©¸∙C��3�·� ù. � 8, ' � 0,1�A� � 9,81

s � L ����D�·2N,¹· � L �� � ��'� ∙ C��� � �� D�·

2N,¹·

Ecrire un algorithme utilisant le sous-programme simp_v(f,h) (à écrire) et qui

permet d'évaluer sur 100 intervalles.

Solution :

Appelons ce programme simp.m par exemple, et donnons sa liste :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 139

clear; R=5;g=9.81;b=0.1; x1=-0.90*R;x2=R; h=(x2-x1)/100; x=x1:h:x2; f=(R^2-x.^2)./(b^2*sqrt(2*g*(x+R))); I=simp_v(f,h)

Le sous-programme simp_v(f,h) est :

function I=simp_v(f,h); n=length(f)-1; % Nombre d’intervalles

if n==1 fprintf( 'Données à un seul intervalle' \n'); return ; end

if n==2 I=h/3*(f(1)+4*f(2)+f(3)); return ; % Revenir et continuer le calcul end

if n==3 I=(3/8)*h*(f(1)+3*f(2)+3*f(3)+f(4)); return ; end

I=0; if 2*floor(n/2)~=n ; %Le nombre d’intervalle doit être pair

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 140

Chapitre 6 :

Résolution numérique des équations différentielles et des équations aux dérivées partielles

1. Introduction

Le comportement dynamique des systèmes est un sujet très important en

physique. Un système mécanique par exemple, se traduit par des déplacements,

des vitesses et des accélérations. Un système électrique ou électronique, se

traduit par des tensions, des intensités et des dérivées temporelles sur ces

quantités. Un système thermique se traduit par des températures, des gradients

de température, de coefficients d’échanges thermiques, etc. En général, les

équations utilisées pour décrire de tels comportements dynamiques, incluent des

quantités inconnues représentant les fonctions recherchées et leurs dérivées.

Une équation qui comporte une ou plusieurs dérivées de la fonction inconnue est

appelée ‘équation différentielle’, qui est représentée dans MATLAB par

l’abréviation ‘ODE’. L’ordre de cette équation est déterminé par l’ordre du degré le

plus élevé de la dérivation.

Les équations différentielles peuvent être classées en deux catégories : les

équations différentielles avec des conditions initiales et les équations

différentielles avec des conditions aux limites.

2. Equations différentielles du 1er ordre

Les équations du 1er ordre à conditions initiales peuvent être écrites sous la

forme :

º,K(A� = �(,, A�,(0� = ,N

où �(,, A� est une fonction de , et de A, et la seconde équation représente la

condition initiale sans laquelle la solution de l’équation différentielle ne peut être

évaluée.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 141

Exemple 1 :

Soit à résoudre l’équation différentielle suivante :

7 ∙ D�DA = −n ∙ �� + 7 ∙ �

où :

º7 = 70G�� = 9,81»/G�n = 0,27G�/�

Déterminer numériquement �(A�. On choisit un pas de temps ℎ = 0,1-, et on

donne comme condition initiale �(A = 0� = 0. Tracer la solution de cette équation

différentielle pour 0 ≤ A ≤ 20-.

Solution :

L’équation : 7 ∙ D�DA = −n ∙ �� + 7 ∙ �

est équivalente à �K�A� = ��,, A� où ��0� = 0 et

��,, A� = − n7 ∙ �� + �. La solution de cette équation peut être effectuée par la méthode d’Euler, qui

consiste à écrire :

�h�& ≈ �h + ℎ ∙ ��,, A� Le programme MATLAB suivant (eul1.m) permet la résolution de cette équation :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 142

%******************************************* % Résolution d'une équation différentielle * % par la méthode d'Euler à l'ordre 1 * %******************************************* clear ; clc ; t=0 ;n=0 ;V=0 ; C=0.27 ;M=70 ;g=9.81 ;h=0.1 ; t_R(1)=t ;V_R(1)=V ;

while t<=20 n=n+1 ; V=V+h*(-C/M*V.^2+g); t=t+h; t_R(n+1)=t; V_R(n+1)=V; end

plot(t_R,V_R); xlabel( 'Temps (en s)' ); ylabel( 'Vitesse (en m/s)' ); grid on;

On obtient ainsi un graphique (fig. 1) qui donne l’évolution de la solution �(A� en fonction du temps.

Fig. 1 : évolution de la vitesse en fonction du temps

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 143

Exemple 2 : On veut résoudre l’équation différentielle du 1er ordre suivante :

º,K + ,&,� = 1,(0� = 10

en utilisant les formules d’Adams ouvertes à l’ordre 1 et les formules d’Adams

(prédicteur-correcteur) pour un pas ℎ = 0,1. On donne la limite de convergence � = 102�.

• Calculer , par les deux méthodes pour 0 ≤ A ≤ 1,5. • Ecrire un programme dans Matlab permettant de calculer et de tracer les

résultats de ces deux méthodes sur le même graphe,

• Conclusion.

Solution :

* Les formules d’Adams (prédicteur-correcteur) consiste à écrire la solution sous

la forme :

,h�& = ,h + ℎ2 ¡��,h�&, Ah�&� + ��,h, Ah�¢ Dans ce cas, on a : ,K = ��,, A� = 1 − ,&,�

or ,h�& est inconnue ; donc ��,h�&, Ah�&� est aussi inconnue.

Dans ce cas, on utilise la méthode itérative suivante :

,h�&�r� ≈ ,h + ℎ2 £�",h�&�r2&�, Ah�&$ + ��,h, Ah�¤

où ,h�&�r� est la kième valeur itérée de ,h�& , et ,h�&�N� est une valeur arbitraire initiale

de ,h�&. La résolution doit se faire de façon à ce que :

¼,h�&�r� − ,h�&�r2&�¼ ≤ �

Si ,&�N� = ,N = 10, on obtient :

,h�&�r� = ,h + ℎ2 £−",h�&�r2&�$&,� − ,h&,� + 2¤

On arrête les calculs si ¼,h�&�r� − ,h�&�r2&�¼ ≤ �.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 144

** Formules d’Adams ouvertes à l’ordre 1 (Méthode d’Euler) :

Pour la méthode d’Euler, la solution ,h�& est donnée par l’expression :

,h�& = ,h + ℎ�(,, A� b) Le programme suivant ‘eul2.m’ permet d’inclure les 2 méthodes :

%******************************************* % Résolution d'une équation différentielle * % du 1er ordre par deux méthodes * %******************************************* clear; clf; hold off; % Méthode d'Euler à l'ordre 1 y1(1)=10;t(1)=0;h=0.1;n=1;

while t(n)<1.5 n=n+1; t(n)=t(n-1)+h; y1(n)=y1(n-1)+h*(-y1(n-1).^1.5+1); end

% Méthode du prédicteur-correcteur ym(1)=10.5;t(1)=0;h=0.1;n=1;e=1e-4;n1=10000;

while t(n)<1.5 n=n+1; t(n)=t(n-1)+h; ym(n)=ym(n-1)+h*(-ym(n-1).^1.5+1); % Itération succéssives et substitution for k=1:n1 ymb=ym(n)+0.5*h*(-(ym(n)).^1.5-(ym(n-1)).^1 .5+2); if abs(ym(n)-ymb)<=e; break ; printf( 'Erreur de (%d)=%f\n' ,k,abs(ym(n)-ymb)); end if k==n1 fprintf( 'Pas de convergence pour t=%f\n' ,t(n)); end end end

fprintf( 't=%f\t y1=%f\t ym=%f\n' ,t,y1,ym); grid on; hold on; plot(t,y1,t,y1, '*' ); plot(t,ym, '-r' ); xlabel( 't' );ylabel( 'y' ); gtext( '***Méthode d''Euler (ordre 1)' ); gtext( '-Prédicteur-correcteur' );

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 145

Après exécution du programme ci-dessus, on obtient le graphique de la figure 2

ci-dessous dans lequel il y a les 2 solutions (méthode d'Euler et Méthode

d'Adams).

Fig. 2 : Comparaison des deux méthodes de résolution numérique.

3. Équations différentielles du second ordre

Ces équations sont du type :

º:"(A� + 6(A�:′(A� + '(A�. :(A� = -(A�:′(0� = :N′:�0� = :N

où 6�A�, '�A� et -�A� sont des constantes ou des fonctions de A. :N′ et :N sont des conditions initiales.

Avant d'appliquer la méthode d'Euler par exemple, on peut rendre l'équation

précédente à une équation du type 1er ordre. Dans ce cas, on pose ½�A� = :′�A�. D'où :

¾½ ′�A� + 6�A�½�A� + '�A�:�A� = -�A�½�0� = :N′

Les conditions initiales deviennent :

¾:′�A� = �&�:, ½, A�; :�0� = :N½ ′�A� = ���:, ½, A�; ½�0� = :′�0�

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 146

où : V�&(:, ½, A� = ½(A�;��(:, ½, A� = −6(A�. ½ − '�A�:�A� + -�A� En faisant le calcul pas par pas, on obtient :

pour A = ℎ,

¾:&�u� = :N + ℎ. �&�:N, ½N, 0� = ℎ. ½N½&(A� = ½N + ℎ��(:N, ½N, 0� = ℎ. ¡−6. ½N − ':N + -�0�¢ pour A = 2ℎ,

¾:��u� = :& + ℎ. �&�:&, ½&, 0� = ℎ. ½&½�(A� = ½& + ℎ��(:&, ½&, 0� = ℎ. ¡−6. ½& − ':& + -�ℎ�¢ Ainsi, dans Matlab, le calcul pour chaque pas de temps peut être décrit par les

matrices ci-dessous.

On définit au départ , et � par :

, = ¿ :½ À et � = ��&

��� = ¿ ½

−6½ − ': + -À

ensuite, on écrit , ′ = �(,, A�, et on résout l'équation : ,h�& = ,h + ℎ. ��,h, Ah� Exemple :

Résoudre l'équation différentielle suivante :

º7. :" + l:′. |:′| + G: = 0:�0� = 0:′(0� = 1 avec : %7 = 10l = 50G = 200

On donne le pas ℎ = 0,05.

• Calculer :(A� pour 0 ≤ A ≤ 0,1 en utilisant la méthode d'Euler à l'ordre 1

(calcul manuel).

• Calculer, en utilisant un algorithme dans Matlab, la solution :(A� de

l'équation différentielle précédente pour 0 ≤ A ≤ 5.

• Tracer l'évolution de :(A� pour ℎ = 0,05.

Solution :

a. Le système précédent peut être écrit sous la forme :

V:′ = ½½ ′ = −6|½|½ − n: avec :

()*)+:(0� = 0½(0� = 16 = ÁÂn = rÂ

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 147

Pour A = 0, on a :

V:N = :(0� = 0½N = :′(0� = 1 A = 0,05,

¾:& = :N + ℎ½N = 0 + 0,05(1� = 0,05½& = ½N + ℎ. �−6|½N|½N − n:N� = 1 + 0,05¡−5|1|�1� − �20�. �0�¢ = 0,75

A = 0,1,

¾:� = :& + ℎ½& = 0,05 + 0,05�0,75� = 0,0875½� = ½& + ℎ. �−6|½&|½& − n:&� = 0,75 + 0.05¡−5|0,75|�0,75� − �20�. �0,05�¢ = 0,5594

• b. Sous une forme vectorielle, l'équation précédente s'écrit :

, ′ = ��,, A� où

(*+ , = ":½$

� = � ½−6|½|½ − n:�

La méthode d'Euler donne : ,h�& = ,h + ℎ. ��,h, Ah� Le programme 'eul3.m', listé ci-dessous permet de calculer la solution :�A� de

l'équation différentielle proposée :

%******************************************* % Résolution d'une équation différentielle * % du second ordre par la méthode d'Euler * %******************************************* clc; clear; clf; hold off; t_max=5;h=0.05;n=1; y(:,1)=[0;1];t(1)=0; while t(n)<t_max y(:,n+1)=y(:,n)+h*def_f(y(:,n),t);yb=y; t(n+1)=t(n)+h; n=n+1; end

axis([0 5 -1 1]); plot(t,y(1,:),t,y(2,:), ':r' ); xlabel( 'Temps (en s)' );ylabel( 'v(t) et u(t)' ); gtext('Solution : v(t)'); L=length(t); text(t(L-2),y(2,L-5), 'Solution : u(t)' );

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 148

La fonction 'def_f(y,t)' est un sous programme dont la liste est dressée ci-

dessous :

%******************************** % Définition de la fonction : * % def_f(y,t) * %******************************** function f=def_f(y,t); a=5;C=20; f=[y(2);(-a*abs(y(2))*y(2)-C*y(1))];

La figure 3 ci-après donne l'évolution des solutions :(A� et :′(A� = ½(A�. La

solution :(A� oscille autour de 0 et tend à s'amortir au fur et à mesure que le

temps t augmente. On pourrait éventuellement utiliser une autre méthode de

résolution numérique pour chercher :(A�. À titre d'exemple, essayer d'utiliser la méthode itérative d'Adams (Prédicteur-

Correcteur) pour retrouver la solution :(A�. Comparer cette solution à celle d'Euler à l'ordre 1.

Fig. 3 : évolution des solutions et en fonction du temps

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 149

4. Méthode de Runge-Kutta

4.1. Méthode de Runge-Kutta du second ordre

Elle est de la forme :

º ,`�& = ,` + ℎ�(,`, A`�,`�& = ,` + ℎ2 ¡�(,`, A`� + �(,`�&, A`�&�¢ ou bien sa forme standard peut être écrite ainsi :

à G& = ℎ�(,`, A`�G = ℎ�(,` + G&, A`�&�,`�& = ,` + 12 (G& + G�� Cette méthode est équivalente à celle d'Euler à deux itérations seulement.

Exemple :

Une plaque métallique épaisse à la température de 200°C (ou 473°K) est

soudainement placée dans une chambre de 25°K, où la plaque est refroidie à la

fois par la convection naturelle et le transfert radiatif de chaleur. On donne les

constantes physiques suivantes :

())*))+

Ä = 300G�/�� → �6--� − ; :��m:�� = 0,001�� → ; :��c = 0,25�� → -:��6�DKéℎ6.��n = 900Å/(G�. °[� → ℎ6 �:� − -Eé���m:�ℎÇ = 30Å/(��°[� → ������.AD�A�6.-���AD�ℎ6 �:�� = 0,8 → é��--�;�AéÈ = 5,67.102ÉÊ/���°[I� → .-A6.A�D�l AB�6..

En supposant que la distribution de température dans le métal est uniforme,

l'équation donnant la température en fonction du temps est :

ºDWDA = cÄ. n� ¡�. È�297I − WI� + ℎÇ . �297 − W�¢W�0� = 473

Résoudre cette équation différentielle par la méthode de Runge-Kutta d'ordre 2

pour 0 < A < 180 et ℎ = 1-.

Solution :

La liste du programme 'RK2.m' est la suivante :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 150

%************************************* % Méthode de Runge-Kutta à l'ordre 2 * %************************************* clear;clf;clc;hold off; ro=300;V=0.001;A=0.25;C=900;hc=30; epsi=0.8;sig=5.67e-8;i=1; h=1;T(1)=473;t(1)=0; Av=A/(ro*C*V);Epsg=epsi*sig;

while t(i)<180 k1=h*fonc_(T(i),Av,Epsg,hc); k2=h*fonc_(T(i)+k1,Av,Epsg,hc); T(i+1)=T(i)+0.5*(k1+k2); t(i+1)=t(i)+h; i=i+1; end plot(t,T);grid on;xlabel( 'Temps (en s)' ); ylabel( 'Température (en °K)' );

La fonction 'fonc_.m' est un sous programme dont la liste est :

%*************************** % Sous programme : fonc_.m * %*************************** function f=fonc_(T,Av,Epsg,hc); f=Av*(Epsg*(297^4-T^4)+hc*(297-T));

La solution W(A� obtenue de l'équation différentielle précédente est donnée par la

figure 4 ci-après. Ainsi, la température obtenue, décroît en fonction du temps

d'une façon hyperbolique.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 151

Fig. 4 : évolution de la température du métal en fonction du temps

4.2. Méthode de Runge-Kutta à l'ordre 4

Cette méthode s'exprime sous la forme :

())*))+

G& = ℎ. �(,`, A`�G� = �� £,` + G&2 , A`�&/�¤G� � �� £,` � G�2 , A`�&/�¤GI � ���,` � G�, A`�&�

et la solution ,`�&est donnée par :

,`�& � ,` � 16 �G& � 2G� � 2G� � GI�

Exemple 1 :

Résoudre le système suivant par la méthode de Runge-Kutta à l'ordre 4 :

º7&. ,&" � l&,&′ � [&,& � l&,�′ � B&,� � Ë&�A��l&,&′ � [&,& � 7�. ,�" � l&. Ì�′ � �[& � [��,� � [�. ,� � 0�[�,� � 7�,�" � l�,�′ � �[� � [��,� � Ë��A� avec les conditions initiales suivantes :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 152

¾,&(0� = ,&′ (0� = ,�(0� = 0,�′ (0� = ,�(0� = ,�′ (0� = 0

On donne :

Íℎ = 0,10 ≤ A ≤ 30

Les constantes sont égales à :

()*)+[& = [� = [� = 17& = 7� = 7� = 1l& = l� = 0,1Ë&(A� = 0,01Ë�(A� = 0

Solution :

Si on définit : ,I = ,&′ ; ,� = ,�′ �A,� = ,�′ , le système précédent devient :

())))*))))+,&′ = ,I,�′ = ,�,�′ = ,�,I′ = (−l&,I − [&,& + l&,� + [�,� + Ë&�7&

,�′ = (l&,I + [&,& − l&,� − ([& + [��,� + [�,��7�,�′ = ([�,� − l�,� − ([� + [��,� + Ë��7�

Ce système peut s'écrire sous la forme matricielle suivante : , ′ = �(,, A� où , = �,&, ,�, ,�, ,I, ,�, ,�]′ et :

� =deeeeeef 000 000 000 1 00 10 0001− [&7&

[�7& 0[&7� − ([& + [��7�[�7�0 [�7� − ([� + [��7�

− l&7& − [&7& 0l&7� − l&7� 0

0 0 − l�7�ijjjjjjk

, +deeeef

000Ë&7&0Ë�7�ijjjjk

Le programme suivant 'RK4.m' permet la résolution du système précédent :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 153

%************************************* % Méthode de Runge-Kutta à l'ordre 4 * %************************************* clear;clc;clf; M1=1;M2=1;M3=1; K1=1;K2=1;K3=1; F1=0.01;F3=0;F=[0 0 0 F1/M1 0 F3/M3]'; B1=0.1;B3=0.1;h=0.1; y(:,1)=[0 0 0 0 0 0]';t(1)=0;i=1; C=[0 0 0 1 0 0; 0 0 0 0 1 0; 0 0 0 0 0 1; -K1/M1 K2/M1 0 -B1/M1 B1/M1 0; K1/M2 -(K1+K2)/M2 K2/M2 B1/M2 -B1/M2 0; 0 K2/M3 -(K2+K3)/M3 0 0 -B3/M3];

while t<=30 k1=h*f1m(y(:,i),C,F); k2=h*f1m(y(:,i)+k1/2,C,F); k3=h*f1m(y(:,i)+k2/2,C,F); k4=h*f1m(y(:,i)+k3,C,F); y(:,i+1)=y(:,i)+(1/6)*(k1+2*k2+2*k3+k4); t(i+1)=i*h; i=i+1; end

plot(t,y(1:3,:)); grid on; text(t(70),y(1,70), 'y1' ); text(t(70),y(2,70), 'y2' ); text(t(70),y(3,70), 'y3' ); xlabel( 'Temps (en s)' ); ylabel( 'Solutions,y1, y2, y3' );

La fonction 'f1m.m' est le sous programme listé ci-dessous :

%***************** % Fonction f1m.m * %***************** function f=f1m(y,C,F); f=C*y+F;

Après exécution du programme 'RK4.m', on obtient le graphe suivant donnant les

solutions ,`; � = �1,2,3� recherchées.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 154

Fig. 5 : évolution des trois solutions ,&, ,� et ,� Exemple 2 :

Une baguette de longueur 0,2 m ( = 0,2�� est placée dans un écoulement d’air à

la température de 293°K. La température à gauche de la baguette (en � � 0) est

maintenue égale à 493°K, mais le côté droit est isolé. Le transfert de chaleur dans

la baguette se fait par convection. Déterminer la distribution de la température le

long de l’axe de la baguette, sachant que les caractéristiques du matériau

constituant cette baguette sont :

(*+ G � 60Ê��°[� → n.D:A�;�AéA�����m:��Ç � 20Ê/���°[� → n������.AD�A�6.-���AD��6 �:�c � 0,0001�� → Ï�A�.D� 6'6�:�AA�� � 0,01� → �é���èA��D� 6'6�:�AA�

Solution :

L'équation de la conduction de la chaleur dans la direction de l'axe �O de la

baguette est donnée par :

%�cG. D�WD�� � ��Ç . . �W � WN� � 00 / � / 0,2�

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 155

avec les conditions aux limites suivantes :

V W(� = 0� = WN = 493°[W ′�� = 0,2� = 0°[ → nôAé�- é

La température de l'air est à 293 °K.

Ce problème est à conditions aux limites en � = 0 et � = 0,2�. Pour le résoudre,

on doit rendre les conditions aux limites en conditions initiales. On définit :

º,&(�� = W(��,�(�� = W ′(�� = DWD� Ainsi, l'équation différentielle (1er ordre) ci-dessus à conditions aux limites peut

être rendue en une équation différentielle du 1er ordre à conditions initiales, en

posant :

º ,&′ (�� = ,�(��,�′ (�� = £�ℎÇcG ¤ (,&(�� − WN� Seule, une condition initiale est connue à partir des conditions aux limites, mais

la seconde condition initiale qui doit être ,�(�� reste inconnue.

Cependant, on peut résoudre l'équation en faisant une transformation de la

condition aux limites connue ,&(� = 0,2� = W(� = 0,2� en une condition initiale

,�(� = 0� = £DWD�¤3MN = W ′(� = 0� = :. Ainsi, on cherche la valeur : de telle sorte que ,��0� permet de donner ,��� =0,2� = W ′�� = 0,2� = 0.

Le programme suivant 'RK4pcl.m' permet de calculer ,��� = 0,2� = W ′�� = 0,2� pour

chaque valeur arbitraire de : introduite par l'intermédiaire du clavier. Une fois

cette valeur : satisfait la condition ,��� = 0,2� = W ′�� = 0,2� = 0, on peut arrêter les

calculs en tapant la valeur –99999.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 156

clear;clc;clf; while 1 y2=input( 'Donner le type du gradient, y2(0);ou -99999 pour q uitter : ' ); if y2<-88888 break ; end

A=0.0001;P=0.01; hc=120;k=60;b=293;l=0.2 ; a=P*l*hc/A/k; i=1;x(1)=0;h=0.01; y(:,1)=[493;y2];

while x<=0.3 k1=h*f2m(y(:,i),x(i),a,b); k2=h*f2m(y(:,i)+k1/2,x(i)+h/2,a,b); k3=h*f2m(y(:,i)+k2/2,x(i)+h/2,a,b); k4=h*f2m(y(:,i)+k3,x(i)+h,a,b); y(:,i+1)=y(:,i)+(1/6)*(k1+2*k2+2*k3+k4); x(i+1)=i*h;

if (x(i)-0.2001)*(x(i)-0.1999)<0 y2_fin=y(2,i+1); break ; end i=i+1; end

% y2_fin =(y(1,n+1)-y(1,n))/h; plot(x,y(1,:), '-' ,x,y(2,:)/10, ':' ); xlabel( 'x (en m)' );ylabel( 'y:- et v/10:...' ); text(0.15,-200,[ 'y2(0.2)=' ,num2str(y2_fin)]); text(0.02,-200,[ 'Val. arb. y2(0)=' ,num2str(y2)]); text(x(10),y(1,10)-20, 'y1(x)' ); text(x(10),y(2,10)/10-20, 'y2(x)/10' ); axis([0 0.2 -300 500]); end

La fonction 'f2m.m' est un sous programme permettant l'obtention de la fonction f :

function f=f2m(y,x,a,b); f=[y(2);a*(y(1)-b)];

Après exécution du programme 'RK4pcl.m'; on obtient la figure 6 sur laquelle se

trouvent les solutions et .

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 157

Fig. 6 : évolution des solutions ,&(�� et ,�(�� pour : = ,�(0� = −2813,5724

5. Méthode Matricielle avec des "Conditions aux Limites"

Considérons l'équation de la conduction de la chaleur selon la direction � :

%¨W��, A�¨A � Ð ¨�W��, A�¨�� / � / Ñ

où la condition initiale est : W��, A � 0� � WN et les conditions aux limites sont :

V W�� � 0, A� � WW�� � Ñ, A� � W·

En utilisant les différences finies, l'équation différentielle ci-dessus s'écrit : ¨W �A�¨A � Ð�∆��� . ¡W 2&�A� � 2W �A� � W �&�A�¢ où ∆� � Òr�&, G est le nombre d'intervalles sur �0, Ñ�, 1 0 � 0 G et W �A� � W��`, A�. Dans ce cas, les conditions aux limites s'écrivent :

VWN�A� � WÓ Wr�&�A� � W·

On obtient ainsi le système suivant : WK � 7. W � Ï

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 158

où W′ et Ï sont des vecteurs colonnes et 7 est une matrice carrée d'ordre G,

définis ci-après :

WK =deeeeeef W&W�W�

Wr2�Wr2&Wr ijjjjjjk

; Ï = Ð(∆���

deeeeefWÕ00...00W·i

jjjjjk ; 7 = Ð(∆���

deeeeef

−21

1−21

1−2. 1.. ... .. .1

−21

1−21

1−2i

jjjjjk

Ce système peut être résolu par la méthode de Runge-Kutta par exemple.

Exemple 1 :

La température d'une barre de fer de longueur 50� est initialement à la

température de 200°n. La température du côté gauche est soudainement réduite à W = 0°n à A = 0, mais la température du côté droit est maintenue constante

à W = 200°n. Tracer la l'évolution de la température dans la barre à chaque

intervalle de temps égal à 200-, et ceci jusqu'à 1000- (c'est à dire : A = 0-, A =200-, A = 400-, A = 600-, A = 800-, A = 1000-).

Les propriétés thermiques du matériau sont :

(*+G = 80,2Ê(�°[� → n.D:A�;�AéAℎ����m:�Ä = 7870G�/�� → �6--�; :��m:�

n = 447GÅ/�°[. G�� → ℎ6 �:�-Eé���m:� Solution :

La diffusivité thermique est calculée par :

Ð = GÄnp = 80,27870 × 447.10� = 2,28.102É��/-

Pour chercher l'évolution de la température dans la barre, on divise l'intervalle [0, 50] en 49 petits intervalles (par exemple). L'équation différentielle à résoudre

est celle de la chaleur définie précédemment.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 159

Les valeurs des conditions aux limites sont WÕ et W· telles que : V WÕ = 0°nW· = 200°n

Le programme suivant ('RK4cc.m'), utilise la méthode de Runge-Kutta à l'ordre 4

pour la résolution de l'équation aux dérivées partielles de la conduction de la

chaleur suivant la direction � et en fonction du temps.

%************************************************* % Conduction de la chaleur dans une barre de fer * %************************************************* clear;clf;clc;hold off; k=80.2;ro=7870;Cp=447e3;TL=0;TR=200; alpha=k/ro/Cp;dx=(50-1)/49;

%******************************* % Construction de la matrice A * %******************************* A(1,1:2)=[-2 1];A(1,3:50)=0; A(50,1:48)=0;A(50,9:10)=[1 -2];

for i=2:49 for j=1:50 if i<j-1 & j>i+1 A(i,j)=0; end

if i==j A(i,j)=-2; A(i,j-1)=1; A(i,j+1)=1; end end end

M=A*alpha*1/dx^2; S(1)=TL;S(50)=TR;S(2:49)=0;S=S*alpha/dx^2;S=S'; T(1:50)=40; T=200*ones(T); T=T'; n=0;t=0;h=20;m=0; axis([0 10 0 220]); j=[0,1:length(T),length(T)+1]; T_p=[TL,T',TR]; plot(j,T_p); text(j(2),T_p(2),[ 't=' ,int2str(t), 's' ]); xlabel( 'i : Nombre de points' ); ylabel( 'T (en °C)' );

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 160

for k=1:5 for m=1:50 n=n+1; k1=h*(A*T+S); k2=h*(A*(T+k1/2)+S); k3=h*(A*(T+k2/2)+S); k4=h*(A*(T+k3)+S); T=T+(k1+2*k2+2*k3+k4)/6; t=h*n; end

hold on; j=[0,1:length(T),length(T)+1]; T_p=[TL,T',TR]; plot(j,T_p); text(j(k+1),T_p(k+1),int2str(t)); end

Exemple 2 :

Étude de la répartition de la température dans les parois un four

On considère un four dans le plan de la section droite représentée ci-dessous. On

appelle .� la surface interne du four et (ΓÖ� la surface externe.

En régime permanent, la température W(�, ,� en un point (�, ,� de la paroi vérifie

l'équation de Laplace :

¨�W(�, ,�¨�� + ¨�W(�, ,�¨,� = 0

avec les conditions aux limites suivantes :

VΓÖ → W(�, ,� = ×ÖΓÓ → W(�, ,� = ×Ó

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 161

Fig. 7 : Géométrie et maillage des parois du four

- Ecrire un programme calculant la température W(�, ,� de la paroi du four aux

points de la grille définie sur la figure 7 ci-dessus (figure en haut).

On suppose que les dimensions Ø&, Ø�, Ø� et ØI permettent ce quadrillage.

Application Numérique :

V×Ö = 35°n×Ö � 1220°n et %Ø& � 60�Ø� � 60�Ø� � ØI � 20�

Solution :

Équation de Laplace : ¨�W��, ,�¨�� � ¨�W��, ,�¨,� � 0

avec :

VΓÖ → W��, ,� � ×ÖΓÓ → W��, ,� � ×Ó

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 162

Le développement en série de Taylor de la fonction W(�′, ,� autour de ��, ,� où �′ = � Ù ∆� s'écrit :

(*+W�� + ∆�, ,� = W��, ,� + ∆� ¨W¨� + �∆��

�2! . ¨�W¨�� � �∆���3! . ¨�W¨�� � �∆��I4! . ¨IW¨�I � ⋯W�� � ∆�, ,� � W��, ,� � ∆� ¨W¨� � �∆���2! . ¨�W¨�� � �∆���3! . ¨�W¨�� � �∆��I4! . ¨IW¨�I � ⋯

En additionnant ces deux relations et en divisant par �∆���, on trouve : ¨�W¨�� � W�� � ∆�, ,� � 2W��, ,� � W�� � ∆�, ,��∆��� � ²�∆���

En opérant de la même manière pour la variable ,, on trouve : ¨�W¨,� � W��, , � ∆,� � 2W��, ,� � W��, , � ∆,��∆,�� � ²�∆,�� Dans notre cas, on a ∆� � ∆, � �. Donc, le Laplacien bidimensionnel s'écrit : ¨�W¨�� � ¨�W¨,� � W�� � ∆�, ,� � W�� � ∆�, ,� � 4W��, ,� � W��, , � ∆,� � W��, , � ∆,�

c¶¸ �

²�∆��� � ²�∆,�� On pose :

V �` � �∆� � �� → 1 0 � 0 .,a � ]∆, � ]� → 1 0 ] 0 �

Pour simplifier la notation, l'expression précédente s'écrit sous la forme :

(*) ¨�W¨�� � ¨�W¨,� � W �&,a � W ,a�& � 4W ,a � W 2&,a � W ,a2&�� � 0

Cette équation peut être représentée par la forme moléculaire suivante :

Pour . � 7 et � � 9 par exemple, on obtient 26 nœuds à l'intérieur du domaine (fig.

7). Donc, ∀��, ]� ∈ Ý, où Ý est l'ensemble des points intérieurs du domaine

(et ��, ]� ∉ �Γ , ΓÖ� ; W ,a � ×Ö sur ΓÖ et W ,a � ×` sur Γ ) .

Écrivons les premières et dernières lignes du système (*) :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 163

())*))+

� = 2; ] = 2 ⟹ W�,� + W�,� − 4W�,� + W�,& + W&,� = 0� = 2; ] = 3 ⟹ W�,� + W�,I − 4W�,� + W�,� + W&,� = 0� = 3; ] = 2 ⟹ WI,� + W�,� − 4W�,� + W�,& + W�,� = 0� = 3; ] = 3 ⟹ WI,� + W�,I − 4W�,� + W�,� + W�,� = 0… … … … … … … … … … … … … … … … … … … … … … … . .� = 6; ] = 8 ⟹ W�,É + W�,� − 4W�,É + W�,¹ + W�,É = 0

Remarquons que : W�,& = W&,� = W&,� = W�,& = ⋯ = W�,É = ×Ö

et que : W�,I = WI,� = ⋯ = W�,� = ×` On a le système suivant alors :

deeeeeeeeef

−4110.

1−401.

10−41.

011−4.

0000.

0010.

0001.

0.

.............

.

0

.

1

.

1

0000.

−4ijjjjjjjjjk

deeeeeeeeeefW�,�W�,�W�,�W�,�W�,IWI,�WI,�...W�,�W�,ÉW�,�i

jjjjjjjjjjk

= −

deeeeeeeeef

2. ×Ö×Ö×Ö..×`....×Ö.2. ×Öijjjjjjjjjk

On a donc un système de 26 équations à 26 inconnues. Donc, ce système (ou

l'équation de Laplace discrétisée) peut être résolu(e) par la méthode de Gauss-

Seidel (méthode explicite) où l'équation de Laplace donne le point central de

chaque forme moléculaire par l'expression :

W ,a = W �&,a + W 2&,a + W ,a�& + W ,a2&4 (∗∗� Remarque :

Avec l'algorithme précédent (**), il est inutile de mémoriser explicitement la

matrice du système (*). Il suffit de mémoriser la température W ,a de chacun des

points de la grille.

Définissons les valeurs particulières des indices correspondants aux parois de la

figure 8 suivante :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 164

Fig. 8 : Définition des indices caractérisant les parois

Le programme suivant appelé 'laplace.m' permet de résoudre le système (**) par la

méthode explicite. Pour cela, on se donne une valeur (distribution) arbitraire

initiale W ,a�N�, qui portée dans l'équation (**) au second membre pour chaque

couple ��, ]�, donne une nouvelle valeur W ,a�&�, et ainsi de suite. L'arrêt des calculs

se fait quand ¼W ,a�p�&� − W ,a�p�¼ 0 � où � est la limite de convergence que l'on se donne.

%***************************************** % Etude de la répartition de température * % dans les parois d'un four * % Résolution d'un système linéaire par * % la méthode itérative de Gauss-Seidel * % Méthode explicite * %***************************************** tic; flops(0); clear all; clc;clf; eps=1e-4;k1=300; % Données initiales L1=input ( 'Introduire la valeur de L1 :\n' ); L2=input ( 'Introduire la valeur de L2 :\n' ); L3=input ( 'Introduire la valeur de L3 :\n' ); L4=input ( 'Introduire la valeur de L4 :\n' ); dx=input ( 'Introduire la valeur du pas dx :\n' ); Thetaint=input ( 'Introduire la valeur de Theta interne :\n' ); Thetaext=input ( 'Introduire la valeur de Theta externe :\n' ); % Calcul des indices m=round(L1/dx)+1; n=round(L2/dx)+1; m1=round((L1-L3)/(2*dx))+1; n1=round((L2-L4)/(2*dx))+1; m2=m1+round(L3/dx); n2=n1+round(L4/dx);

% Initialisation de la température dans le four for i=1:n for j=1:m T(i,j)=Thetaint;

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 165

end end

% Température de la paroi externe for i=1:n T(i,1)=Thetaext; T(i,m)=Thetaext; end

for j=1:m T(1,j)=Thetaext; T(n,j)=Thetaext; end

% Température de la paroi interne for i=n1:n2 T(i,m1)=Thetaint; T(i,m2)=Thetaint; end

for j=m1:m2 T(n1,j)=Thetaint; T(n2,j)=Thetaint; end

% Méthode de Gauss-Seidel (Itérations) for k=1:k1 for i=2:n-1 for j=2:m1-1 T(i,j)=0.25*(T(i-1,j)+T(i+1,j)+T(i,j-1) +T(i,j+1)); end end

for i=2:n-1 for j=m2+1:m-1 T(i,j)=0.25*(T(i-1,j)+T(i+1,j)+T(i,j-1) +T(i,j+1)); end end

for i=2:n1-1 for j=m1:m2 T(i,j)=0.25*(T(i-1,j)+T(i+1,j)+T(i,j-1) +T(i,j+1)); end end

for i=n2+1:n-1 for j=m1:m2 T(i,j)=0.25*(T(i-1,j)+T(i+1,j)+T(i,j-1) +T(i,j+1)); end end

if abs(T(n-1,m-1)-T(2,2))<=eps fprintf( '\n \n' ); fprintf( 'Températures après "%d itérations\n' ,k); fprintf( '\n \n' ); break ; end end

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 166

for i=1:n fprintf( '%5.0f\t' ,T(i,1:m)); fprintf( '\n' ); end

% Tracé des courbes de température en 3D hold off; if n==m figure(1); i=1:n; j=1:m; grid on; [x,y]=meshgrid((i-1)*dx,(j-1)*dx); mesh(x,y,T); Title( 'Evolution de la température dans le four' ); xlabel( 'i' );ylabel( 'j' );zlabel( 'T (en °C)' ); end

% Tracé des courbes isothermes en 2D figure(2); i=1:n;j=1:m; grid on; contour(i,j,T(i,j),15); title( 'Lignes isothermes dans les parois du four' ); xlabel( 'i' );ylabel( 'j' ); t_mis=toc Nb_opt=flops

On exécute ce programme (laplace.m), en rentrant les valeurs de Ø&, Ø�, Ø�, ØI, ∆� =∆, = ℎ = 1� et enfin ×` et ×Ö. >>Introduire la valeur de L1 : 60 Introduire la valeur de L2 : 60 Introduire la valeur de L3 : 20 Introduire la valeur de L4 : 20 Introduire la valeur du pas dx : 1 Introduire la valeur de Theta interne : 1220 Introduire la valeur de Theta externe : 35 t_mis= 113.9700 Nb_opt= 7362728

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 167

Fig. 9 : Évolution en 3D de la température dans les parois du four

Fig. 10 : Lignes isothermes dans les parois du four

6. Conversion de coordonnées

Dans Matlab, il existe plusieurs commandes pour la conversion des coordonnées.

Nous en donnons ci-après un bref aperçu.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 168

6.1. Coordonnées polaires

Les fonctions 'cart2pol' et 'pol2cart' permettent respectivement le passage des

coordonnées cartésiennes en coordonnées polaires et inversement. Les syntaxes

sont :

>>[theta,r]=cart2pol(x,y)

>>[x,y]=pol2cart(theta,r) � et , doivent être des vecteurs de même taille représentant les coordonnées des

points considérés, � et Aℎ�A6 représentent les coordonnées polaires et sont des vecteurs de mêmes

dimensions que � et ,, où Aℎ�A6 est exprimée en radians.

6.2. Coordonnées cylindriques

Les fonctions 'cart2pol' et 'pol2cart' permettent respectivement le passage des

coordonnées cartésiennes en coordonnées cylindriques et inversement. Les

syntaxes sont :

>>[theta,r,z]=cart2pol(x,y,z)

>> [x,y,z]=pol2cart(theta,r,z) �, , et B sont des vecteurs de même taille, � et Aℎ�A6 sont des vecteurs de mêmes dimensions que �, , et B, et Aℎ�A6 est

exprimée en radians.

6.3. Coordonnées sphériques

Les fonctions 'cart2sph' et 'sph2cart' permettent respectivement le passage des

coordonnées cartésiennes en coordonnées sphériques et inversement. Les

syntaxes sont :

>>[Az,Elv,r]=cart2sph(x,y,z)

>>[x,y,z]=sph2cart(Az,Elv,r) �, �, ,, et B sont des vecteurs de même taille, cB et ª ; sont respectivement

l'azimut et l'élévation exprimées en radians, de mêmes dimensions que �, , et B.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 169

7. Problèmes en Coordonnées Cylindriques

Considérons l'équation de la conduction de la chaleur exprimée en coordonnées

cartésiennes : ¨�W¨�� + ¨�W¨,� + 1[ . ���, ,� � 0

En coordonnées polaires, cette équation s'écrit sous la forme : ¨�W¨�� � 1� . ¨W¨� � 1�� . ¨�W¨×� � 1[ . ���, ×� � 0

sur la domaineà.

Sur ce domaine à, on construit un maillage en coordonnées polaires ��, ×� comme le montre la figure 11 ci-dessous, avec � � �∆� et × � ]∆× où � et ] sont des entiers.

Fig. 11 : Système de maillage en coordonnées polaires

Ainsi, la température W��, ×� et la fonction ���, ×� deviennent au point � :

¾W��, ×�|á � W��. ∆�, ]∆×� ≡ W ,a���, ×�|á � ���. ∆�, ]∆×� ≡ �`,a Pour des valeurs non nulles de �, les dérivées secondes de W��, ×� par rapport à �

et × s'écrivent sous la forme disrétisée suivante :

()*)+¨�W¨�� ãá � ¨�W¨�� ã`,a � W 2&,a � 2W ,a � W �&,a�∆��� � ²�∆���

¨�W¨×�ãá � ¨�W¨×�ã`,a � W ,a2& � 2W ,a � W ,a�&�∆×�� � ²�∆×��

En utilisant les différences centrées, äåä° peut s'écrire au point � sous la forme : ¨W¨�æá � ¨W¨�æ`,a � W �&,a � W 2&,a2∆� � ²�∆���

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 170

Ainsi, l'équation de la chaleur discrétisée est : W 2&,a − 2W ,a + W �&,a(∆��� + 1�∆� . W �&,a − W 2&,a2∆� + 1��. �∆��� W ,a2& − 2W ,a + W ,a�&�∆×�� + 1[ ℎ`,a = 0

Soit, après regroupement des différents termes :

1�∆��� . ¿£1 − 12. �¤ . W 2&,a − 2W ,a + £1 + 12�¤ W �&,aÀ + 1���∆�. ∆×�� . ¡W ,a2& − 2W ,a + W ,a�&¢+ 1[ ℎ`,a = 0

C'est l'équation de conduction de la chaleur discrétisée (différences finies) en

coordonnées cylindriques, obtenue pour des valeurs de � non nulles �� ≠ 0�. Les

indices � et ] sont des entiers (commençant par 1 dans Matlab).

A l'origine �� = 0�, l'équation de la conduction en coordonnées polaires présente

une singularité. Cette dernière doit être éliminée. Pour cela, on utilise le Laplacien

de l'équation de la conduction non pas en coordonnées cylindriques, mais en

coordonnées cartésiennes :

s = L �� − 1��23�32��D�çN

quand � → 0

On construit ensuite un cercle de rayon ∆�, centré en � = 0. Considérons W& la

température à � = 0, et W�, W�, WI et W� sont les températures sur le cercle aux 4

nœuds (intersection avec les axes � et ,). Ainsi, l'équation précédente (en

coordonnées cartésiennes) s'écrit sur le cercle de rayon ∆� : W� + W� + WI + W� − 4W&�∆��� + 1[ . � = 0

La rotation des axes � et , autour de � = 0 conduit aux mêmes résultats

(équation de la chaleur en coordonnées cartésiennes discrétisée). En

considérant W� comme la moyenne arithmétique des températures autour du

cercle de rayon ∆�, l'équation précédente devient :

4. W� − W&�∆��� + 1[ . � = 0à� = 0

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 171

où W� est la moyenne arithmétique des valeurs de W�,a autour du cercle de

rayon ∆� et de centre � = 0 et W& est la valeur de la température à � = 0.

Les coordonnées polaires (�, ×� -deux dimensions- peuvent être extrapolées en

coordonnées cylindriques (�, ×, B� (trois dimensions) pour l'obtention de l'équation

de la conduction de la chaleur discrétisée.

Pour le problème bidimensionnel en (�, ×� évoqué précédemment, compte tenu de

la symétrie axiale, l'équation de la conduction de la chaleur peut être réduite à : D�WD�� + 1� . DWD� + 1[ ℎ��� = 0

Pour � ≠ 0, l'équation précédente discrétisée s'écrit sous la forme : 1�∆��� . ¿£1 − 12�¤ . W 2& − 2W + £1 + 12�¤ . W �&À + 1[ ℎ` = 0

où � = �∆�, W��� = W��. ∆�� ≡ W , et � est un entier positif.

Au centre (� = 0), en utilisant la règle de l'Hopital nous obtenons :

lim°→N £1� . DWD�¤ = D�WD��

Ainsi l'équation de la conduction de la chaleur en deux dimensions ��, ×� s'écrit

compte tenu de la symétrie axiale du problème :

2. D�WD�� + 1[ ℎ��� = 0�.� = 0

Soit en différences finies :

4. W� − W&�∆��� + 1[ . �& = 0E:�� = 1

En coordonnées cylindriques, l'équation de la conduction de la chaleur est

donnée par l'expression suivante : ¨�W¨�� + 1� . ¨W¨� + ¨�W¨B� + 1[ . ℎ��, B� = 0

Les coordonnées ��, B� sont représentées par :

Í � = �∆�B = G∆B

où � et G sont des entiers.

La température W��, B� au nœud ��, G� est notée par : W��, B� = W��. ∆�, G∆B� ≡ W ,r

et les différentes dérivées partielles deviennent :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 172

())*))+

¨�W¨�� ã`,r = W 2&,r − 2W ,r � W �&,r�∆��� � ²�∆���¨�W¨B� ã`,r � W ,r2& � 2W ,r � W ,r�&�∆B�� � ²�∆B��

¨W¨�æ`,r � W �&,r � W 2&,r2. ∆� � ²�∆���

L'équation de la chaleur discrétisée en coordonnées cylindriques au nœud

devient : 1�∆��� ¿£1 � 12. �¤ W 2&,r � 2W ,r � £1 � 12�¤ W �&,rÀ � 1�∆B�� . ¡W ,r2& � 2W ,r � W ,r�&¢ � 1[ �`,r � 0

pour des valeurs de � non nulles.

Pour � � 0, on a :

lim°→N £1� . ¨W¨�¤ � ¨�W¨��

et l'équation de conduction en � � 0 devient :

2. ¨�W¨�� � ¨�W¨B� � 1[ . ���, B� � 0�.� � 0

Soit en utilisant les différences finies au nœud �1, G� : 4. W�,r � W&,r�∆��� � W&,r2& � 2W&,r � W&,r�&�∆B�� � 1[ . �&,r � 0

8. Discrétisation de l'équation de la Conduction en régime instationnaire

Dans le système de coordonnées cartésiennes (trois dimensions), l'équation de

conduction de la chaleur en régime instationnaire (temporel) s'écrit (si [ � -A�) : ¨�W¨�� � ¨�W¨,� � ¨�W¨B� � 1G . ���, ,, B� � Änp[ . £¨W¨A¤

Pour résoudre cette équation aux dérivées partielles en utilisant la méthode des

différences finies, on utilise un maillage cubique (mailles de côtés �∆�, ∆,, ∆B� avec :

%� � �. ∆�, � ]∆,B � G∆B

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 173

où �, ] et G sont entiers positifs, et le domaine temporel est divisé en petits

intervalles de temps ∆A de telle sorte que : A = .∆A Dans ce cas, la température W(�, ,, B, A� au point �(�, ,, B� à un temps donné A est

représentée par : W(�, ,, B, A� = W(�. ∆�, ]∆,, G∆B, .∆A� = W ,a,rh

En utilisant la méthode des différences finies, les différents termes de l'équation

ci-dessus au dérivées partielles s'écrivent au point ���, ,, B� :

()))))*)))))+ ¨W¨A æá = ¨W¨A æ`,a,r = W ,a,rh�& − W ,a,rh∆A + ²�∆A��

¨�W¨��ãá = ¨�W¨��ã`,a,r = W 2&,a,rh − 2W ,a,rh + W �&,a,rh(∆��� + ²(∆���

¨�W¨,�ãá = ¨�W¨,�ã`,a,r = W ,a2&,rh − 2W ,a,rh + W ,a�&,rh(∆,�� + ²(∆,��

¨�W¨B� ãá = ¨�W¨B� ã`,a,r = W ,a,r2&h − 2W ,a,rh + W ,a,r�&h(∆B�� + ²(∆B��

et l'équation de la conduction discrétisée en trois dimensions devient : Änp[ . ¿W ,a,rh�& − W ,a,rh∆A À= W 2&,a,rh − 2W ,a,rh + W �&,a,rh�∆��� + W ,a2&,rh − 2W ,a,rh + W ,a�&,rh�∆,��+ W ,a,r2&h − 2W ,a,rh + W ,a,r�&h�∆B�� + 1[ ℎ`,a,r

En regroupant les différents termes de cette équation, on obtient :

W ,a,rh�& = �1 − 2[∆AÄnp £ 1�∆��� + 1�∆,�� + 1�∆B��¤� W ,a,rh

+ [∆AÄnp ¿W 2&,a,rh + W �&,a,rh(∆��� + W ,a2&,rh + W ,a�&,rh(∆,�� À + W ,a,r2&h + W ,a,r�&h(∆B�� + 1[ ℎ`,a,r

Cette équation ne peut être résolue que par une méthode itérative (méthode de

Gauss-Seidel par exemple).

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 174

Si on pose :

7 = 1 � 2[∆AÄnp £ 1�∆��� � 1�∆,�� � 1�∆B��¤

alors, la condition de convergence de la solution recherchée dépend

essentiellement du signe de la quantité 7. Cette quantité doit être strictement

positive.

Ainsi, une condition doit relier le pas de temps et les autres pas spatiaux

(∆�,∆, et ∆B) :

∆A / Änp2[ £ 1�∆��� � 1�∆,�� � 1�∆B��¤2&

Pour amorcer le calcul itératif, on ensemence le domaine de frontière par des

valeurs arbitraires (W ,a,r�N� � WN par exemple), et on arrête les calculs quand la

condition suivante sera réalisée : W ,a,r�°�&� � W ,a,r�°� 0 �

où � est la précision que l’on se fixera.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 175

PROJETS

Projet 1 : Interpolation de données – Méthode des moindres carrés Étude de la viscosité dynamique d'un liquide en fonction de la température Projet 2 : Résolution numérique des équations lon linéaires Étude de la perte de charge dans une conduite rugueuse Projet 3 : Résolution numérique de systèmes d’équations non linéaires Étude d’un système de pompage : Système d’équations non linéaires Projet 4 : Méthode d'intégration numérique Partie I : Intégration d'une fonction donnée numériquement en différents points Partie II : Intégration numérique d'une équation différentielle du 1er ordre Projet 5 : Résolution numérique des équations différentielles Étude thermique d'un fusible en plomb Projet 6 : Résolution numérique des équations différentielles non linéaires Étude de la répartition de la température dans une ailette de section circulaire Projet 7 : Résolution numérique des systèmes d’équations non linéaires par la méthode d'Euler Étude des attracteurs de Lorenz Projet 8 : Résolution numérique des équations aux dérivées partielles par méthode des différences finies (régime permanent) Étude de la répartition de la température en régime permanent dans une salle de sport

Projet 9 : Résolution numérique des équations aux dérivées partielles (régimes permanent et transitoire) Réponse Thermique d'un Matériau soumis à Haute Température : Mise au point d'un Modèle Numérique Simplifié 1D et 2D

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 176

PROJET N° 1

INTERPOLATION DE DONNÉES - MÉTHODES DES MOINDRES

CARRÉS

Étude de la viscosité dynamique d'un liquide en fonction de la

température : représentation des données par un modèle

La variation de la viscosité dynamique é de l’eau en fonction de la température T

est modélisée par la formule de Walther :

é = �"åêå $ë∙Óh�ìê�

où éN est la viscosité de ce liquide à la température WN = 273[ et W = A + WN. Après une série de mesures, on a relevé les valeurs suivantes de é (en Poise) et de

t (en °C) :

t (°C) 0 5 10 15 20 25 30 35 40 45 50 55 60 10� µµµµ(Po) 1,7940 1,7393 1,6899 1,6451 1,6044 1,5673 1,5334 1,5023 1,4737 1,4474 1,4232 1,4007 1,3799

t (°C) 65 70 75 80 85 90 92 93 94 95 97 98 100 10� µ µ µ µ (Po) 1,3606 1,3427 1,3260 1,3104 1,2959 1,2822 1,2770 1,2745 1,2720 1,2695 1,2646 1,2622 1,2575

Tracer l’évolution de é en fonction de T pour les valeurs mesurées (en nuage de

points ‘*’).

Écrire un algorithme évaluant les paramètres inconnus, par la méthode des

moindres carrés, à partir de l’ensemble des données (é`, W �. Déterminer la valeur de l’exposant n.

Sur le même graphe, tracer (en trait continu) l’évolution du modèle prédit (é en

fonction de T).

Prédire la valeur de é pour W = 30°n.

Conclusions ?

Indications : On pourra choisir :

, = ¿ .(é� .(éN�À �A� = WNW

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 177

ensuite on cherche un polynôme de degré n (modèle de prédiction). On

minimisera l’écart entre ce modèle de prédiction p(x) et les données

expérimentales grâce au coefficient de corrélation C suivant :

n = (�` − ��(� − ,�C(�` − ���(,` − ,�� où : � est le modèle d’approximation de ,` en fonction de �`, , = 1. q ,`

h`M& estlavaleurmoyennesur ,`

Le coefficient de corrélation C tend vers 1 quand � tend vers ,`.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 178

PROJET N° 2

RÉSOLUTION NUMÉRIQUE DES ÉQUATIONS

NON LINÉAIRES

Étude de la perte de charge dans une conduite rugueuse

Calcul du coefficient de perte de charge linéaire dans une conduite

On considère un écoulement d’eau dans une conduite de diamètre D. On veut

calculer le coefficient de perte de charge linéaire � aux régimes laminaire et

turbulent.

En régime laminaire (�� ≤ 2000), la perte de charge est donnée par la formule de

Poiseuille :

� = 64�� (1� où Re est le nombre de Reynolds.

En régime turbulent (4000 ≤ �� ≤ 10�), le coefficient de perte de charge linéaire �

dépend à la fois du nombre de Reynolds Re et de la rugosité relative de la

conduite �/ð.

- Pour une conduite lisse (�/ð = 0), cette perte de charge linéaire � est donnée par

la formule de Blasius :

� = 0,316��N,�� (2� - Pour une conduite rugueuse (�/ð ≠ 0), la perte de charge linéaire � peut être

calculée selon la relation (non linéaire) de Colebrook :

�2& �⁄ = −2 ∙ �&N £ �3,71 ∙ ð + 2,51�� ∙ �& �⁄ ¤ (3�

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 179

� étant le coefficient de perte de charge régulière.

• Écrire un programme (MATLAB) pouvant évaluer � en régime laminaire et

en régime turbulent (turbulent lisse et turbulent rugueux). Pour l’estimé

initial de �N, par exemple, on pourra tracer la courbe �(�� en fonction de �,

ensuite repérer la valeur de �N pour accélérer la convergence.

• Tracer sur le même diagramme (quadrié) l’évolution de � en fonction de Re

en échelle logarithmique (log-log). Pour l’écoulement laminaire, on choisit

un pas de 100 pour Re et pour l’écoulement turbulent, on choisit un pas

variable pour Re.

• Comparer les résultats obtenus avec ceux donnés par le diagramme de

Moody (donné par la figure ci-dessous).

• Conclusions.

On donne les valeurs de la rugosité relative �/ð : 10-5 - 10-4 - 10-3 - 10-2 - 10-1.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 180

Diagramme de Moody

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 181

PROJET N° 3

RÉSOLUTION NUMÉRIQUE DE SYSTÈMES D'ÉQUATIONS NON

LINÉAIRES

Étude d’un système de pompage (système d’équations non linéaires)

On se propose d’étudier le système de pompage décrit par la figure ci-dessous :

Théoriquement, on montre que les différentes grandeurs , , , et sont

liées entre elles par les équations suivantes :

º cñ&� + lñ�� + 1 � òcñ&� � nñ�� � 40 � Ñù %ñ � ñ& � ñ�Ñ � 51� �A %c � 4854l � �1576n � 14279

où les valeurs de Z (en m) sont les suivantes : 0,01 – 0,15 – 0,20 –

0,31 – 0,43 – 0,58 – 0,69 – 0,75 – 0,86 – 0,92 – 1,1 – 1,5 – 2,0.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 182

• Donner la procédure de calcul permettant de trouver les débits

volumiques ñ& et ñ� dans les deux branches de la jonction.

Pour cela, on utilisera le développement en série de Taylor des fonctions �(ñ&, ñ�� et �(ñ&, ñ�� à l’ordre 1 autour de ñ& et ñ�, sachant que :

()*)+�(ñ& + ℎ&, ñ� + ℎ�� = �(ñ&, ñ�� + ℎ& ¿¨�(ñ&, ñ��¨ñ& Àó¸

+ ℎ� ¿¨�(ñ&, ñ��¨ñ� Àóô�(ñ& + ℎ&, ñ� + ℎ�� = �(ñ&, ñ�� + ℎ& ¿¨�(ñ&, ñ��¨ñ& Àó¸

+ ℎ� ¿¨�(ñ&, ñ��¨ñ� Àóô

et

ºñ`�&& = ñ& + ℎ&ñ`�&� = ñ� + ℎ�ù %ℎ& = ∆ñ&

ℎ� = ∆ñ�

On posera par la suite � = ñ&, , = ñ� et on résoudra le système d’équations

non linéaires par la méthode de Newton-Raphson.

o Calculer les débits ñ& et ñ� dans les deux branches ainsi que le débit

total ñ pour chaque valeur de ò donnée.

o Conclusions.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 183

PROJET N° 4

MÉTHODES D'INTÉGRATION NUMÉRIQUE

Partie I : Intégration d'une fonction donnée numériquement en différents points

On donne la fonction �(�`� en différents points �` qui ne sont pas équidistants :

� -1,00 -0,50 -0,11 0,27 0,95 1,00 1,50 1,99 2,82 3,05 4,01 4,28

�(�� -1,7510 -1,4376 -0,8870 -0,7118 0,1748 0,2490 1,0574 1,9643 3,7449 4,2891 6,7715 7,5240

� 4,95 5,31 6,11 7,92 9,21 10,57 11,05 12,41 13,62 16,27 19,02 20,00

�(�� 9,4753 10,564 13,049 18,667 22,221 25,013 25,667 26,194 24,584 11,375 -22,411 -41,000

L'intégrale exacte de la fonction �(�� sur l'intervalle �−1, 20� est Iex telle

que sÖ3 � 205,2497999.

En utilisant la méthode des moindres carrés, chercher un modèle (����) permettant de représenter ����. Intégrer analytiquement ce modèle sur

l'intervalle ��1, 20� et comparer le résultat avec sÖ3. Conclusion.

Intégrer numériquement les données de ���� (ou éventuellement ����) sur

l'intervalle ��1, 20� en utilisant une méthode d'intégration précise. Calculer

l'erreur relative entre la valeur exacte sÖ3et la valeur obtenue numériquement.

Conclusion.

Pour la méthode de Gauss, par exemple, le tableau suivant donne les constantes

pour . � 24 :

G 1 2 3 4 5 6

Ù_r 0,9951872200 0,9747285560 0,9382745520 0,8864155270 0,8200019860 0,7401241916

õr 0,0123412298 0,0285313886 0,0442774388 0,0592985849 0,0733464814 0,0861901615

7 8 9 10 11 12

Ù_r 0,6480936519 0,5454214714 0,4337935076 0,3150426797 0,1911188675 0,0640568929

õr 0,0976186521 0,1074442701 0,1155056681 0,1216704729 0,1258374563 0,1279381953

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 184

Partie II : Intégration Numérique d'une équation différentielle du 1er ordre

• Écrire un algorithme (Matlab) permettant de calculer numériquement, à

l'aide de la méthode d'Euler à l'ordre 1, la solution de l'équation

différentielle suivante :

ÃD�(A�DA = �(�(A�, A��(AN� = 0

On écrira un programme paramétré permettant d'intégrer une fonction

quelconque � depuis un instant initial AN jusqu'à un instant final A . Le pas

d'intégration temporel ainsi que la valeur initiale de la fonction �(AN� seront entrés

interactivement par l'utilisateur.

• Résoudre, à l'aide de ce programme, l'équation différentielle suivante :

ÃD�(A�DA + �(A� = �2�u�(A = 0� = �(AN� = 0

• Calculer la solution analytique (solution vraie).

• Comparer la solution numérique à la solution exacte.

• Tracer l'évolution des deux solutions en fonction de t.

• Que peut-on dire de l'influence du pas d'intégration sur la solution

numérique.

• Reprendre l'exercice complet, en mettant en œuvre la méthode du

prédicteur-correcteur (Adams), et comparer la solution numérique obtenue

par rapport à la solution d'Euler à l'ordre 1. Tracer les différentes solutions

(vraie, Euler et Adams) sur le même graphe. Conclusions.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 185

PROJET N° 5

RÉSOLUTION NUMÉRIQUE D'ÉQUATIONS

DIFFÉRENTIELLES DU PREMIER ORDRE NON LINÉAIRES

Étude thermique d'un fusible en plomb

Au Laboratoire d’Energétique et de Mécanique Appliquée, un étudiant s’intéresse

à la réponse thermique d’un fusible en plomb, de longueur , de rayon� = 1��.

La puissance volumique dissipée dans ce fusible par effet Joule est donnée par

l’équation suivante :

�ö =np. Ä. DWDA + 2� �÷Çø + ÷°� où : np est la capacité calorifique massique du plomb (np = 130Å/(G�. °n� ) ; Ä est la masse volumique du plomb (Ä = 11300G�/��) ; W et A représentent respectivement la température (�.[� et le temps (�.-�; ÷Çø�A÷° sont des termes de convection et de rayonnement qui peuvent être

représentés par les expressions suivantes :

¾÷Çø = ℎ. �W − Wù� ≈ 2,5. �W − Wù�� Iú ÷° = È. ¡WI − WùI¢ ≈ 5,67. 102É. ¡WI − WùI¢ où ℎ représente le coefficient d’échange thermique.

La température de fusion du plomb est W  = 600[ et la température ambiante

estWù = 298[.

La puissance volumique �ö est donnée par l’expression :

�ö = �. s���� = Äù £ s���¤�

où Äù = 20,7. 102ÉΩ. � et � représentent respectivement la résistivité électrique et

la résistance électrique du fil de plomb, et s le courant électrique.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 186

1. Etudier l’évolution de la température W(A� en fonction du temps A pour

différentes puissances volumiques �ö (variation de s� ; En utilisant les outils nécessaires, faire un programme et tracer l’évolution

de W�A, s� dans le plan �A, s�. 2. Pour quelle valeur de sÓ`g la température W�A� atteint-elle la température de

fusion W  ?

3. Calculer la puissance volumique �ø�üýþ� correspondante.

4. Au bout de quel temps AÓ`g le fusible fond-il ?

5. Tracer l’évolution de W�A� en fonction du temps A pours = sÓ`g.

6. On veut linéariser la loi d’échange par l’expression suivante :

�ö = np. Ä. DWDA + ℎ. �W − Wù� ù ℎ� = 2,5. �W − Wù�� Iú + È. ¡WI − WùI¢W − Wù

est un coefficient d’échange global.

a- Etudier l’évolution du coefficient ℎ� en fonction du temps.

b- Calculer ℎ�  pour W = W  �A ℎ� N E:� W = Wù.

c- Montrer que pour les premiers instants, on a : ℎ� N ≈ 4. È. Wù�

d- Peut-on prendre ℎ� = 0,5¡ℎ� N + ℎ� ¢ pour linéariser la loi d’échange?

Pourquoi?

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 187

PROJET N° 6

RÉSOLUTION NUMÉRIQUE D'ÉQUATIONS

DIFFÉRENTIELLES DU SECOND ORDRE NON LINÉAIRES

Étude de la répartition de la température dans une ailette de section

circulaire

Une ailette de longueur Ø = 0,75� est reliée d’un côté à une source de chaleur qui

est à la température Wù en� = 0. L’autre côté est supposé parfaitement isolé

(contact parfait) en� = Ø. L’ailette est en contact avec un milieu ambiant dont la

température est maintenue fixe à 20°C. Le transfert de chaleur entre l’ailette et le

milieu ambiant se fait par convection et par rayonnement. En supposant que

l’ailette ainsi que le milieu ambiant sont des corps noirs, la température dans

l’ailette satisfait à l’équation de conduction de la chaleur suivante :

−c. �. D�WD�� + E. ℎÇ�W3 − Wç� + E. È¡W3I − WçI¢ = 0

où :

� = 120 Ê �. °n⁄ est la conductivité thermique ;

c = 1,5. 102��� est la section de la barre (ailette) ;

E = 0,133�est le périmètre de la barre (ailette) ;

ℎÇ = 50Ê/(��. [� est le coefficient de transfert de chaleur par convection ;

È = 5,67. 102ÉÊ/���. [I� est la constante de Stefan-Boltzmann ;

Wç = 293[ est la température du milieu ambiant.

Les conditions initiales et aux limites sont données par :

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 188

ÃW(� = 0� = Wù(DWD��3MÕ = 0W(� = Ø� = Wç

1- Etudier la distribution de la température W(�� dans l’ailette pour Wù = 400[, Wù = 600[, Wù = 800[ et Wù = 1000[ en utilisant les méthodes de Runge

Kutta d’ordre 4 et la méthode de tir.

2- Quelle est l’influence du pas ∆� sur la position ?

3- Pour le pas choisi (optimum), tracer pour chaque valeur de Wù l’évolution de

la température W���en fonction de �.

4- Conclure.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 189

TP N° 7

RÉSOLUTION NUMÉRIQUE DE SYSTÈMES D'ÉQUATIONS DIFFÉRENTIELLES NON

LINÉAIRES A CONDITIONS INITIALES

(UTILISATION DE LA MÉTHODES D'EULER )

Étude des attracteurs de Lorenz

Un fluide au repos entre deux plans horizontaux parallèles génère des

mouvements cellulaires sous l'effet d'un gradient de température. Les équations

de Navier-Stokes se ramènent en faisant une première approximation au système

différentiel suivant :

º�O = �°(, − ��,O = −�(B − �� − ,BO = �, − 'Bù º�(A = 0� = 0,001,(A = 0� = 0,001B(A = 0� = 0,001

avec :

Ã�° = 10' = 83

• Résoudre ce système par les méthodes d'Euler et de Runge-Kutta.

• Étudier les solutions en fonction de la valeur du paramètre � pour les cas

suivants :

� = 5� = 24� = 30� = 180

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 190

• Tracer les différentes solutions �(A�, ,(A� et B(A�. • Tracer dans l'espace (�, ,, B�, le point représentatif de la solution en fonction

du temps.

On pourra choisir par la suite une représentation des courbes en projection sur le

plan (�, ,� ou (,, B�, par exemple.

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 191

PROJET N° 8

RÉSOLUTION NUMÉRIQUE D'ÉQUATIONS

AUX DÉRIVEES PARTIELLES

(MÉTHODES DES DIFFÉRENCES FINIES)

Étude de la répartition de la température en régime permanent dans une

salle de sport

On veut étudier la répartition de la température dans une salle de sport chauffée

par plusieurs radiateurs disposés sur quelques côtés des murs. La forme

géométrie de cette salle est donnée par la figure ci-dessous :

On donne les distances suivantes :

• longueurs des radiateurs :

Íbc = Ñs = Å[ = 4�ln = ªË = 7» = 7�

• les autres distances de la salle :

Ãnð � Ø7 � 4�Ë� � 3��Ñ � 6�sÅ � 5�

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 192

Pendant la période des pluies, la température des murs, à l’exception des places

où il y a des radiateurs, est constante et égale à 5°n ; c’est à dire :

Les 6 radiateurs dégagent des quantités de chaleur constantes à la température

de 45°C ; c’est à dire :

Pour déterminer la répartition de la température en régime permanent dans la

salle, on peut utiliser l’équation de conduction de la chaleur qui est donnée par la

relation de Laplace suivante :

• En utilisant la méthode des différences finies et les conditions aux limites,

étudier la répartition de la température dans la salle,

• Tracer l’évolution des lignes isothermes dans la salle,

• Tracer l’évolution de la température W��, ,� en 3D dans le plan ��, ,�,

• Conclusion.

• Que propose - t-on pour obtenir une répartition presque uniforme de

température dans la salle, sachant que la longueur maximale que peut

avoir chacun de ces radiateurs est de 7m, et que le nombre total de ces

radiateurs ne peut dépasser 6 ?

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 193

PROJET N° 9

RÉPONSE THERMIQUE D'UN MATÉRIAU SOUMIS A HAUTE

TEMPÉRATURE : MISE AU POINT D'UN MODÈLE

SIMPLIFIÉ 1D ET 2D

(Régimes permanent et transitoire)

Étude de la répartition de la température en régime permanent dans une

salle de sport

Dans ce projet il s'agit d'étudier la réponse thermique d'un matériau donné (à

choisir en fonction de son usage), soumis à haute température d'un côté et isolé

de l'autre. L’équation qui régit une telle réponse en température, est donnée par

(équation de conduction de la chaleur) :

¨�W(�, ,, A�¨�� + ¨�W(�, ,, A�¨,� = 1� ¨W(�, ,, A�¨A

où � est la conductivité thermique (à choisir en fonction du matériau).

Le travail à effectuer peut être résumé ainsi :

Dans un premier temps, on cherche la solution analytique du problème (si cela

est possible) en se servant des équations transcendantes (à les résoudre

numériquement) pour des valeurs du terme "Biot" constantes (en fonction de la

nature du matériau).

Dans le cas unidirectionnel et en régime transitoire (régime dépendant du temps),

on étudie l'évolution de la température W(�, A� dans le matériau d'épaisseur ℎ

selon l'axe � en considérant que celui-ci est soumis à un flux thermique imposé

Tapez une équation ici.

Enseignant : ZINSALO Joël M./EPAC - UAC Page 194

(Température WN) en � = ℎ, et isolé de l'autre côté en � = 0. On comparera ensuite

les résultats obtenus à ceux qui s’obtiennent théoriquement par l’expression :

W(�, A� = WN �1 − 4 q ¿ -�.�ÐhØ�2ÐhØ + -�.�2ÐhØ� ∙ -�Ðh���24�ëuÀçhM& �

à cette solution théorique, on ajoute l'équation transcendante qui est

donnée par :

�ÐhØ�A6.�ÐhØ� = ℎ°Ø� = l�A ≈ A�

Dans le cas bidimensionnel, deux cas peuvent se présenter : le régime est soit

stationnaire (indépendant du temps), soit transitoire (dépendant du temps). Pour

ces deux cas, on résout numériquement l'équation de la chaleur par la méthode

des différences finies, et ceci pour les conditions aux limites suivantes :

()*)+ ¨W��, ,�¨� æ3MN = 0

¨W(�, ,�¨, æ�MN = È ∙ � ∙ ¡WNI − W��MN�I ¢ �A (*

+¨W(�, ,�¨� æ3M¶ = È ∙ � ∙ ¡WNI − W�3M¶�I ¢W�→ç = 0

et le cas où on a :

()*)+ ¨W(�, ,�¨� æ3MN = 0

¨W(�, ,�¨, æ�MN = È ∙ � ∙ ¡WNI − W��MN�I ¢ �A

()*)+¨W(�, ,�¨� æ3M¶ = È ∙ � ∙ ¡WNI − W�3M¶�I ¢

¨W(�, ,�¨� æ�MÕ = È ∙ � ∙ ¡WNI − W��MÕ�I ¢

On donne : � ≈ 0,81 et È = 5,67 ∙ 102�.