Initiation ` Matlab a

Nicolas Hudon (nicolas.hudon@polymtl.ca) ´ URCPC, Ecole Polytechnique de Montr´al e 22 janvier 2004

1

Table des mati`res e
1 Introduction 2 Pr´sentation de MATLAB e 3 Fichiers SCRIPT et FUNCTION 3.1 Fichiers SCRIPT . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Fichiers FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . 4 Op´rations math´matiques avec MATLAB e e 4.1 Scalaires, vecteurs, matrices . . . . . . . . . 4.2 Graphiques simples . . . . . . . . . . . . . . 4.3 Fonctions math´matiques simples . . . . . . e 4.3.1 Fonctions math´matiques usuelles . e 4.3.2 Fonctions matricielles . . . . . . . . 5 Programmation avec MATLAB 5.1 Op´rateurs logiques . . . . . . e 5.2 Boucles if-elseif-else . . . . . . 5.3 Boucles for . . . . . . . . . . . 5.4 Boucles while . . . . . . . . . . 5.5 Boucles switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 7 8 9 11 11 20 22 22 24 25 26 27 28 29 30 33 33 38 40 42 43 45 46

6 Fonctions avanc´es e 6.1 Graphiques . . . . . . . . . . . . . . . . . . . . . 6.2 Importer et exporter des donn´es . . . . . . . . . e 6.3 Variables symboliques . . . . . . . . . . . . . . . 6.4 Racines d’une ´quation polynomiale . . . . . . . e 6.5 R´gression . . . . . . . . . . . . . . . . . . . . . . e 6.6 Int´gration num´rique . . . . . . . . . . . . . . . e e 6.7 Solution d’´quations diff´rentielles ordinaires avec e e

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . valeurs initiales

7 R´f´rences ee 49 7.1 R´f´rences g´n´rales . . . . . . . . . . . . . . . . . . . . . . . . . 49 ee e e 7.2 R´f´rences sp´cifiques au g´nie chimique . . . . . . . . . . . . . . 49 ee e e 7.3 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2

1

Introduction

L’objectif de ce court document est de vous initier au logiciel MATLAB de la compagnie Mathworks et ` la programmation dans cet environnement. L’id´e a e est de vous exposer les bases de cet outil de travail et de vous habiliter ` r´soudre a e des probl`mes de g´nie chimique avec celui-ci, particuli`rement pour les cours e e e suivants : – – – – – – GCH2530 GCH3110 GCH3120 GCH3130 GCH3140 GCH3150 Programmation num´rique en g´nie chimique e e Calculs des r´acteurs chimiques e Proc´d´s de s´paration e e e Commande des proc´d´s de g´nie chimique I e e e M´canique des fluides appliqu´e e e Transfert thermique

Le pr´sent document se divise comme suit. Apr`s quelques ´l´ments de base e e ee de MATLAB (section 2), vous verrez comment utiliser des fichiers SCRIPT et FUNCTION (section 3). Ensuite, on introduira les principales op´rations e usuelles sur les scalaires, les vecteurs et les matrices avec MATLAB ainsi que certaines op´rations math´matiques (section 4). La section 5 montre les diff´rentes e e e boucles de programmation en MATLAB. La section 6 pr´sente quelques fonce tions plus avanc´es qui vous seront utiles dans le cadre des cours ci-haut mene tionn´s. Finalement, on fournit une courte liste de r´f´rences utiles (livres et e ee sites WEB).

3

2

Pr´sentation de MATLAB e

MATLAB est beaucoup plus qu’un langage de programmation. Il s’agit d’une console d’ex´cution (shell ) au mˆme titre que les consoles DOS ou UNIX. e e Comme toutes les consoles, MATLAB permet d’ex´cuter des fonctions, d’attrie buer des valeurs ` des variables, etc. Plus sp´cifiquement, la console MATLAB a e permet d’effectuer des op´rations math´matiques, de manipuler des matrices, e e de tracer facilement des graphiques. La figure 1 pr´sente l’´cran MATLAB de e e base.
Ouverture d'un nouveau fichier .m Ouverture de Simulink Répertoire courant

Invite MATLAB

´ Fig. 1 – Ecran MATLAB

4

SIMULINK n’est pas au programme de cours d’initiation. L’´l´ment le plus imee portant ici est l’invite MATLAB o` l’utilisateur peut affecter des valeurs ` des u a variables et effectuer des op´rations sur ces variables. Par exemple : e
>> x = x = 4 >> y = y = 2 >> x + ans = 6 >> x * ans = 8 >> 4

2

y

y

Ici, il faut noter que lorsque l’utilisateur ne fixe pas de variable de sortie, MATLAB place le r´sultat d’une op´ration dans ans. Il est toujours possible de e e connaˆ ıtre les variables utilis´es et leur type ` l’aide de la fonction whos. Par e a exemple, pour les manipulations pr´c´dentes : e e
>> whos Name ans x y Grand total >> Size Bytes 1x1 8 1x1 8 1x1 8 is 3 elements using 24 bytes Class double array double array double array

La solution de x + y a donc ´t´ perdue. Il est donc pr´f´rable de toujours donner ee ee des noms aux variables de sortie :
>> x = 4; >> y = 2; >> a = x + y a = 6 >> b = x * y b = 8 >> whos Name Size Bytes a 1x1 8 b 1x1 8 x 1x1 8 y 1x1 8 Grand total is 4 elements using 32 bytes >>

Class double double double double

array array array array

5

Notons au passage que le point-virgule permet de ne pas afficher la valeur ` a l’´cran, ce qui permettra ´ventuellement des programmes plus rapides. e e La fonction clear permet d’effacer des variables. Par exemple :
>> clear x >> whos Name a b y Grand total >> % on efface x de la m´moire e Size Bytes 1x1 8 1x1 8 1x1 8 is 3 elements using 24 bytes Class double array double array double array

Le signe de pourcentage (%) permet de mettre ce qui suit sur une ligne en commentaire (MATLAB n’en tiendra pas compte ` l’´x´cution). a e e La sortie de la fonction whos donne, entre autre, la classe de la variable. Plusieurs classes de variables sont disponibles ` l’utilisateur de MATLAB. Les classes a les plus utiles pour l’utilisateur d´butant sont le double tel que pr´sent´ plus e e e haut et les variables char, pour le texte, et les variables symboliques, que nous pr´senteront ` la section 6.3. Pour les variables char, la d´claration se fait entre e a e apostrophe :
>> mot1 = ’hello’ mot1 = hello

Il est possible de concat´ner des mots ` l’aide des parenth`ses carr´es (la fonction e a e e strcatde MATLAB permet d’effectuer sensiblement la mˆme tˆche) : e a
>> mot1 = ’hello’; >> mot2 = ’world’; >> mot1_2 = [mot1 ’ ’ mot2] % l’emploi de ’ ’ permet d’introduire un espace mot1_2 = hello world

6

Supposons que l’on veuille ´crire un programme qui calcul la racine carr´e d’un e e nombre entr´ par l’utilisateur et qui affiche le r´sultat dans une phrase. On peut e e convertir les nombres en chaˆ de caract`res en utilisant la fonction num2str. ıne e
a = input(’Entrez un nombre: ’); % utilisation de input, l’utilisateur % doit entrer un nombre. b = sqrt(a); str = [’La racine carr´e de ’ num2str(a) ’ est ’ num2str(b)]; e % composition de la phrase de sortie disp(str) % utilisation de display pour afficher le r´sultat ` l’´cran e a e

Le r´sultat serait le suivant : e
Entrez un nombre: 23 % 23 est entr´ par l’utilisateur e La racine carr´e de 23 est 4.7958 e % sortie ` l’´cran a e

La prochaine section montre comment r´aliser de courts programmes comme e celui utilis´ dans le dernier exemple. e

3

Fichiers SCRIPT et FUNCTION

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

7

3.1

Fichiers SCRIPT

Le fichier SCRIPT permet de lancer les mˆmes op´rations que celles ´crites e e e directement ` l’invite MATLAB. Toutes les variables utilis´es dans un a e SCRIPT sont disponibles ` l’invite MATLAB. Par exemple, le fichier a test.m qui reprend l’exemple pr´c´dent (assurez-vous que le fichier test.m se e e trouve bel et bien dans le r´pertoire indiqu´ dans la fenˆtre R´pertoire courant) : e e e e
% test.m clear all x = 4; y = 2; a = x + y b = x * y whos

produit la sortie suivante lorsque qu’appel´ : e
>> test a = 6 b = 8 Name a b x y Grand total >>

Size Bytes 1x1 8 1x1 8 1x1 8 1x1 8 is 4 elements using 32 bytes

Class double double double double

array array array array

Habituellement, on utilise les fichiers SCRIPT afin de : – – – – – Initialiser le syst`me (fonctions clear ) e D´clarer les variables e Effectuer les op´rations alg´briques e e Appeler les fonctions Tracer les figures

Il est utile ici de noter que le langage MATLAB n’est pas un langage compil´ e ` (contrairement au langage C++, par exemple). A chaque appel d’un SCRIPT (ou d’une FUNCTION), le logiciel lit et ex´cute les programmes ligne par ligne. e Lorsque MATLAB d´tecte une erreur, le logiciel arrˆte et un message d’erreur e e ainsi que la ligne o` l’erreur est d´tect´e s’affichent ` l’´cran. Apprendre ` u e e a e a lire les messages d’erreur est donc important pour ”d´boguer” vos programmes e rapidement et efficacement.

8

3.2

Fichiers FUNCTION

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

produit la sortie suivante :
>> a = ma_fonction(4,2) a = 6 >> whos Name Size Bytes a 1x1 8 Grand total is 1 element using 8 bytes >>

Class double array

Le r´sultat de la multiplication n’est plus disponible. On peut cependant modie fier les sorties de la mani`re suivante : e
function [a,b] = ma_function(x,y) a = x + y; b = x * y;

pour obtenir :
>> [a,b] = ma_fonction(4,2) a = 6 b = 8 >> whos Name Size Bytes a 1x1 8 b 1x1 8 Grand total is 2 elements using 16 bytes >>

Class double array double array

9

On peut ´viter l’affichage des sorties en utilisant le point-virgule : e
>> [a,b] = ma_fonction(4,2); >> whos Name Size Bytes a 1x1 8 b 1x1 8 Grand total is 2 elements using 16 bytes >>

Class double array double array

Habituellement, on utilise les fichiers FUNCTION afin de : – Programmer des op´rations r´p´titives e e e – Limiter le nombre de variables dans l’invite MATLAB – Diviser le programme (probl`me) de mani`re claire e e

10

4

Op´rations math´matiques avec MATLAB e e

Dans cette section, nous pr´senterons les ´l´ments math´matiques de base de e ee e MATLAB.

4.1

Scalaires, vecteurs, matrices

L’´l´ment de base de MATLAB est la matrice. C’est-`-dire qu’un scalaire est ee a une matrice de dimension 1x1, un vecteur colonne de dimension n est une matrice nx1, un vecteur ligne de dimension n, une matrice 1xn. Contrairement aux langages de programmation usuels (i.e. C++), il n’est pas obligatoire de d´clarer les variables avant de les utiliser et, de ce fait, il faut prendre toutes les e pr´cautions dans la manipulation de ces objets. e Les scalaires se d´clarent directement, par exemple : e
>> x = 0; >> a = x;

Les vecteurs ligne se d´clarent de la mani`re suivante : e e
>> V_ligne = [0 1 2] V_ligne = 0 1 2

Pour les vecteurs colonne, on s´pare les ´l´ments par des points-virgules : e ee
>> V_colonne = [0;1;2] V_colonne = 0 1 2

Il est possible de transposer un vecteur ` l’aide de la fonction transpose ou avec a l’apostrophe (’). Ainsi,
>> V_colonne = transpose(V_ligne) V_colonne = 0 1 2 >> V_colonne = V_ligne’ V_colonne = 0 1 2

11

Le double point ( :) est l’op´rateur d’incr´mentation dans MATLAB. Ainsi, e e pour cr´er un vecteur ligne des valeurs de 0 ` 1 par incr´ment de 0.2, il suffit e a e d’utiliser (notez le nombre d’´l´ments du vecteur) : ee
>> V = [0:0.2:1] V = Columns 1 through 6 0 0.2000

0.4000

0.6000

0.8000

1.0000

Par d´faut, l’incr´ment est de 1. Ainsi, pour cr´er un vecteur ligne des valeurs e e e de 0 ` 5 par incr´ment de 1, il suffit d’utiliser : a e
>> V = [0:5] V = 0 1

2

3

4

5

On peut acc´der ` un ´l´ment d’un vecteur et mˆme modifier celui-ci directement e a ee e (Notez que contrairement au C++, il n’y a pas d’indice 0 dans les vecteurs et matrices en MATLAB) :
>> a = V(2); >> V(3) = 3*a V = 0 1

3

3

4

5

Les op´rations usuelles d’addition, de soustraction et de multiplication par scae laire sur les vecteurs sont d´finis dans MATLAB : e
>> V1 = [1 2]; >> V2 = [3 4]; >> V = V1 + V2 % addition de vecteurs V = 4 6 >> V = V2 - V1 % soustraction de vecteurs V = 2 2 >> V = 2*V1 V = 2 4 % multiplication par un scalaire

12

Dans le cas de la multiplication et de la division, il faut faire attention aux dimensions des vecteurs en cause. Pour la multiplication et la division ´l´ment ee par ´l´ment, on ajoute un point devant l’op´rateur (.* et ./). Par exemple : ee e
>> V = V1.*V2 V = 3 8 % multiplication ´l´ment par ´l´ment e e e e

>> V = V1./V2 % division ´l´ment par ´l´ment e e e e V = 0.3333 0.5000

Cependant, MATLAB lance une erreur lorsque les dimensions ne concordent pas (remarquez les messages d’erreur, ils sont parfois utiles pour corriger vos programmes) :
>> V3 = [1 2 3] V3 = 1 2 3 >> V = V1.*V3 ??? Error using ==> .* Matrix dimensions must agree.

La multiplication de deux vecteurs est donn´e par (*). Ici, l’ordre a de l’impore tance :
>> V1 = [1 2]; % vecteur 1x2 >> V2 = V1’; % vecteur 2x1 >> V = V1*V2 V = 5 >> V = V2*V1 V = 1 2 2 4

Il est aussi possible de concat´ner des vecteurs. Par exemple : e
>> V1 = [1 >> V2 = [3 >> V = [V1 V = 1 2]; 4]; V2] 2 3 4

13

De mˆme, pour les vecteurs colonnes : e
>> V1 = [1;2]; >> V2 = [3;4]; >> V = [V1;V2] V = 1 2 3 4

On peut aussi cr´er des matrices, par exemple, e
>> V1 = [1 2]; >> V2 = [3 4]; >> V = [V1;V2] V = 1 2 3 4

qui n’est pas ´quivalent ` : e a
>> V1 = [1;2]; >> V2 = [3;4]; >> V = [V1 V2] V = 1 3 2 4

Il faut donc ˆtre tr`s prudent dans la manipulation des vecteurs. Par exemple, e e une mauvaise concat´nation : e
>> V1 = [1 2]; >> V2 = [3;4]; >> V = [V1;V2] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.

Les matrices peuvent aussi ˆtre construites directement : e
>> M = [1 2; 3 4] M = 1 2 3 4

On peut ´videmment avoir acc`s aux ´l´ments de la matrice par : e e ee
>> m21 = M(2,1) m21 = 3 % 2e ligne, 1ere colonne

14

On peut aussi ”compter” les ´l´ments. MATLAB compte alors tous les ´l´ments ee ee d’une ligne (de gauche ` droite) avant d’acc´der ` la ligne suivante. Ainsi, dans a e a la matrice 3x3 suivante :
>> A = [1 2 3; 4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9

la valeur des ´l´ments ai,j sont donn´es par leur rang affect´ par MATLAB. Le ee e e 5e ´l´ment est 5 : ee
>> a5 = A(5) a5 = 5

Il est aussi possible de stocker dans un vecteur une ou plusieurs lignes (ou colonnes). Ainsi, si l’on veut stocker la deuxi`me colonne de la matrice A : e
>> V = A(:,2) V = 2 5 8 % ici, (:) signifie toutes les lignes

De la mˆme mani`re, si l’on veut stocker les lignes 2 et 3 : e e
>> M2=A(2:3,:) M2 = 4 7 5 8 6 9 % (2:3) signifie ligne 2 ` 3 a % et (:) signifie toutes les colonnes

Il est possible d’inverser inv(), detransposer transpose() ou avec l’apostrophe (’) les matrices :
>> invM = inv(M) invM = -2.0000 1.0000 1.5000 -0.5000 >> transpM = M’ transpM = 1 3 2 4

15

Un des int´rˆts de MATLAB est la possibilit´ d’utiliser directement les op´rations ee e e math´matiques pr´-d´finies pour les matrices. L’addition et la soustraction sont e e e directes (attention aux dimensions) ainsi que la multiplication par un scalaire :
>> A = [1 2;3 4]; >> B = [4 3;2 1]; >> C = A+B % addition C = 5 5 5 5 >> D = A-B % soustraction D = -3 -1 1 3 >> C = 3*A % multiplication par un scalaire C = 3 6 9 12

Pour la multiplication et la division, les op´rateurs usuels (* et /) sont d´finis e e pour la multiplication et division matricielles :
>> C = A*B % multiplication de matrices C = 8 5 20 13 >> D = A/B D = 1.5000 2.5000 % division de matrices -2.5000 -3.5000

Afin de r´aliser la multiplication et la division ´l´ment par ´l´ment, on pr´c`de e ee ee e e les op´rateurs par un point (.* et ./) : e
>> C = A.*B % multiplication ´l´ment par ´l´ment e e e e C = 4 6 6 4 >> D = A./B D = 0.2500 1.5000 % division ´l´ment par ´l´ment e e e e 0.6667 4.0000

16

D’autres op´rations sur les matrices seront pr´sent´es dans les sections subs´quentes. e e e e Il faut noter certaines matrices sp´ciales qui peuvent ˆtre utilis´es, par exemple e e e la matrice identit´ : e
>> I = eye(3) % matrice identit´ e I = 1 0 0 0 1 0 0 0 1

On peut aussi d´clarer des vecteurs (et des matrices) ne contenant que des z´ros e e ou des 1.
>> V_nul = zeros(1,2) % un vecteur de 1 ligne, 2 colonnes de 0 V_nul = 0 0 >> V_un = ones(1,2) % un vecteur de 1 ligne, 2 colonnes de 1 V_un = 1 1 >> M_un = ones(2,2) % une matrice 2x2 de 1 M_un = 1 1 1 1

Dans certaines applications, il est parfois utile de connaˆ les dimensions d’une ıtre matrice, et la longueur d’un vecteur (retourn´s, par exemple, par une fonction). e Dans ce cas, on utilise les fonctions length et size.
>> V = [0:0.1:10]; % utilisation de length - vecteur 1x101 >> n = length(V) n = 101 >> M = [1 2 3; 4 5 6]; % utilisation de size - matrice 2x3 >> [n,m] = size(M) n = 2 m = 3 >> dim = length(M) dim = 3 % utilisation de length sur une matrice % donne la plus grande dimension, ici le nombre de colonnes

17

Voici quelques exercices sur la manipulation des vecteurs et des matrices :

Exercices 1. On veut v´rifier que la multiplication de matrices n’est pas commutative. e Soient deux matrices :   3 4 4 A =  6 5 3 10 8 2   4 5 8 B = 3 11 12 2 1 7 R´alisez un code MATLAB qui permet, pour les matrices A et B donn´es, de e e v´rifier que : e A∗B−B∗A=0

2. En utilisant les matrices d´finies au num´ro 1, v´rifiez l’identit´ suivante : e e e e (A + B)T = AT + BT Utilisez la fonction transpose de MATLAB pour transposer les matrices.

3. On d´sire solutionner un syst`me d’´quations alg´briques lin´aires, c’est-`e e e e e a dire, un syst`me repr´sent´ par : e e e A∗x=b Avec A, une matrice de dimension nxn, x et b, des vecteurs colonne de dimension n. La solution de ce syst`me est donn´ par : e e x = A−1 ∗ b 18

En utilisant la fonction inv de MATLAB pour inverser la matrice, solutionnez le syst`me d´crit par la matrice A, d´finie au num´ro 1 et le vecteur b, la premi`re e e e e e colonne de la matrice B, de ce num´ro. e

19

4.2

Graphiques simples

Cette sous-section ne vise qu’` vous permettre de tracer les solutions pour les a exercices qui suivent. Veuillez vous r´f´rer ` la section 6 pour plus d’informaee a tions. La fonction plot permet de tracer des courbes en MATLAB. Les argument de cette fonction sont les vecteurs des variables ind´pendantes et d´pendantes (en e e alternance), comme dans l’exemple qui suit :
>> x = [0:0.01:2*pi]; >> plot(x,cos(x),x ,sin(x))

qui produit la sortie graphique de la figure 2 :
1

0.8

0.6

0.4

0.2

0

−0.2

−0.4

−0.6

−0.8

−1

0

1

2

3

4

5

6

7

Fig. 2 – sin(x) vs cos(x) On aurait aussi pu simplifier par :
>> plot(x’,[cos(x)’ sin(x)’])

20

Ces graphiques manquent cependant de clart´. Il faut toujours nommer les axes e (et mettre les unit´s si possible), proposer une l´gende, etc. Ceci est ´videmment e e e un peu long ` ´crire ` l’invite MATLAB. Un SCRIPT est tout indiqu´ : ae a e
% graphique.m clear all close all % ferme les anciennes figures x = [0:0.01:2*pi]; y1 = cos(x); y2 = sin(x); figure(1) plot(x, y1,’.’,x, y2,’+’) % cos(x) en points, sin(x) en + title(’sinus et cosinus’) xlabel(’x’) ylabel(’f(x)’) legend(’cos(x)’,’sin(x)’,0) % le 0 place la l´gende ` c^t´ des courbes e a o e

Et on obtient la figure 3.
sinus et cosinus 1

0.8 cos(x) sin(x)

0.6

0.4

0.2 f(x)

0

−0.2

−0.4

−0.6

−0.8

−1

0

1

2

3 x

4

5

6

7

Fig. 3 – sin(x) vs cos(x)-corrig´ e Pour en savoir plus, particuli`rement sur les couleurs et types de courbes, tapez e help plot ` l’invite MATLAB. a

21

Fonction sin(x) cos(x) tan(x) exp(x) log(x) sqrt(x) power(x,a) abs(x) asin(x) acos(x) atan(x) sinh(x) cosh(x) tanh(x) round(x) floor(x) ceil(x)

Description sinus de x ; x en radians cosinus de x ; x en radians tangente de x ; x en radians exponentielle de x logarithme en base e de x racine carr´e de x e puissance a de x valeur absolue de x sin−1 de x ; r´sultat en radians e cos−1 de x ; r´sultat en radians e tan−1 de x ; r´sultat en radians e sinus hyperbolique de x cosinus hyperbolique de x tangente hyperbolique de x arrondit un nombre ` l’entier le plus pr`s a e arrondit vers l’entier imm´diatement au-dessous e arrondit vers l’entier imm´diatement au-dessus e

Tab. 1 – Fonctions courantes en MATLAB

4.3

Fonctions math´matiques simples e

Les op´rateurs alg´briques (+, -, *, /, .*,./) ont ´t´ d´finis ` la sous-section e e ee e a pr´c´dente pour les scalaires, vecteurs et matrices. On montrera ici (sans ˆtre e e e exhaustif), les principales fonctions math´matiques fournies dans MATLAB et e leur utilisation. Pour les fonctions non pr´sent´es, l’utilisateur peut toujours e e utiliser l’aide des fonctions avec la fonction help qui prend pour argument le nom de la fonction. Par exemple, la fonction cosinus :
>> help cos COS Cosine. COS(X) is the cosine of the elements of X.

Overloaded methods help sym/cos.m

Dans un premier temps, on pr´sente les fonctions math´matiques usuelles et leur e e appel dans MATLAB. Ensuite, on pr´sente les principales fonctions sp´cifiques e e aux matrices. 4.3.1 Fonctions math´matiques usuelles e

Toutes les fonctions math´matiques de base sont d´j` programm´es dans MATe ea e LAB. Le tableau 1 pr´sente les plus courantes. e

22

Exercices

4. On veut v´rifier graphiquement la d´finition de la fonction sinh(x) : e e ex − e−x 2

sinh(x) =

Produisez un code MATLAB qui trace deux courbes sur un mˆme graphique. e La premi`re, en utilisant directement la fonction sinh(x) de MATLAB et la e deuxi`me en utilisant la d´finition avec les exponentielles. Utilisez un vecteur x e e de -2 ` 2 par incr´ments de 0.1. a e

5. V´rifiez graphiquement (pour les mˆmes valeurs de x qu’au num´ro 4 que : e e e sinh(x) cosh(x)

tanh(x) =

ATTENTION ` la division de deux vecteurs ! a

23

Fonction det(A) trace(A) rank(A) norm(A) inv(A) poly(A) eig(A) svd(A) min(V) max(V) sum(V)

Description d´terminant de la matrice A e trace de la matrice A rang de A (nombre de colonnes ou de lignes lin´airement ind´pendantes) e e norme de A (peut s’appliquer ` un vecteur V) a inverse de A polynˆme caract´ristique de la matrice A o e valeurs propres de la matrice A d´composition en valeur singuli`re de la matrice A e e indice du plus petit ´l. du vecteur V e indice du plus grand ´l. du vecteur V e somme des ´l´ment du vecteur V ee Tab. 2 – Fonctions matricielles en Matlab

4.3.2

Fonctions matricielles

Toutes les fonctions matricielles de base sont d´j` programm´es dans MATLAB. ea e Le tableau 2 pr´sente les plus courantes. e

Exercices

6. En utilisant la fonction eye, v´rifiez que (utilisez la matrice A d´finie au e e num´ro 1) : e AA−1 = A−1 A = I

7. En utilisant les fonctions trace et eig v´rifiez que (utilisez la matrice A d´finie e e au num´ro 1) : e trA = Σn λi i=1 O` les λi sont les valeurs propres de la matrice A. u

24

5

Programmation avec MATLAB

Cette section pr´sente les diff´rentes structures de programmation avec MATe e LAB. Pour l’´tudiant familier avec la programmation C++ ou Fortran, il ne e s’agit que de se familiariser avec la syntaxe propre ` MATLAB. Pour l’´tudiant a e moins familier avec les structures de base en programmation, les exercices ` la a fin de la section sont indiqu´s pour devenir fonctionnels avec ces structures. e

25

Op´rateur e ∼a a == b a<b a>b a <= b a >= b a ∼=b

Description NOT - retourne 1 si a ´gal 0, 1 si a ´gal 0 e e retourne 1 si a ´gal b, 0 autrement e retourne 1 si a est plus petit que b, 0 autrement retourne 1 si a est plus grand que b, 0 autrement retourne 1 si a est plus petit ou ´gal ` b, 0 autrement e a retourne 1 si a est plus grand ou ´gal ` b, 0 autrement e a retourne 1 si a est diff´rent de b, 0 autrement e Tab. 3 – Op´rateurs de comparaisons e

5.1

Op´rateurs logiques e

Avant de d´buter la pr´sentation des boucles de programmation conditionnelles, e e il est important de se familiariser avec les op´rateurs logiques. Le premier type e de ces op´rateurs permet de comparer des valeurs entre elles (tableau 3). e Par exemple, on veut comparer deux valeurs entre elles :
>> a = sin(2*pi); >> b = cos(2*pi); >> bool = (a>b) bool = 0 >> a a = -2.4493e-016 % ici a devrait ´galer 0, la pr´cision est limit´e! e e e >> b b = 1

Il faut noter ici que l’emploie de l’op´rateur ’==’ est tr`s risqu´ lorsque l’on e e e compare des valeurs num´riques. En effet, la pr´cision de l’ordinateur ´tant e e e limit´e, il est pr´f´rable d’utiliser une condition sur la diff´rence comme dans le e ee e code suivant :
if abs(a-b) < eps bool = 1; else bool = 0; end % eps est la pr´cision machine (2.2204e-016) e

26

P 1 1 0 0

Q 1 0 1 0

P et Q 1 0 0 0

Tab. 4 – Table de v´rit´ - op´rateur ET e e e P 1 1 0 0 Q 1 0 1 0 P ou Q 1 1 1 0

Tab. 5 – Table de v´rit´ - op´rateur OU e e e Il est aussi possible de lier entre elles des conditions par l’op´rateur ’et’ (&) et e ’ou’ (|). Les tables de v´rit´s de ces deux op´rateurs sont pr´sent´es aux tableaux e e e e e 4 et 5. Ces notions seront utiles pour la construction des conditions des prochaines sections.

5.2

Boucles if-elseif-else

Ce type de structure de programmation est tr`s utile pour v´rifier des conditions. e e En pseudo-code, on peut r´sumer par le sch´ma suivant : e e
si CONDITION1, FAIRE ACTION1. % condition 1 remplie sinon et si CONDITION2, FAIRE ACTION2. % condition 1 non-remplie, % mais condition 2 remplie sinon, FAIRE ACTION3 % conditions 1 et 2 non-remplies

En MATLAB, le pseudo-code pr´c´dent devient : e e
if CONDITION1 ACTION1; elseif CONDITION2 ACTION2; else ACTION3;

27

Par exemple, on re¸oit un entier a, s’il est impair n´gatif, on le rend positif. S’il c e est impair positif, on lui ajoute 1. S’il est pair, on ajoute 2 ` sa valeur absolue. a La courte fonction suivante permet de r´aliser cette transformation (notez ici, e l’emploi du modulo pour d´terminer si l’entier est divisible par 2). e
function b = transf_entier(a) if a < 0 & mod(a,2) ~= 0 % mod permet de trouver b = -a; % le reste d’une division elseif a >= 0 & mod(a,2) ~= 0 b = a + 1; else b = abs(a)+2; end

5.3

Boucles for

Les boucles for sont tr`s utiles dans la plupart des applications math´matiques e e (par exemple, pour effectuer un calcul sur tous les ´l´ments d’un vecteur). ee En MATLAB, il est parfois beaucoup plus efficace d’utiliser les op´rateurs e alg´briques usuels d´finis plus tˆt (par exemple, le ’.*’). Dans les cas o` il est e e o u impossible de se soustraire ` l’utilisation de ces boucles, voici le prototype en a pseudo-code de ces boucles.
incr´ment = valeur initiale e Pour incr´ment=valeur_initiale jusqu’` valeur finale e a ACTION1...N AJOUTER 1 ` incr´ment a e

En MATLAB, ce pseudo-code devient :
for i = 0:valeur_finale ACTION1; ACTION2; ... ACTIONN; end

Remarquez que l’incr´ment peut ˆtre diff´rent de 1, par exemple si l’on veut e e e calculer les carr´s des nombres pairs entre 0 et 10 : e
for i=0:2:10 carre = i^2 end

28

5.4

Boucles while

Une boucle while permet de r´p´ter une op´ration tant qu’une condition n’est e e e pas remplie. En pseudo-code, elle peut ˆtre sch´matis´e de la fa¸on suivante : e e e c
Tant que CONDITION est VRAIE ACTION1..N

En MATLAB, on ´crit ce type de boucle de la mani`re suivante : e e
while CONDITION ACTION1; ACTION2; ... ACTIONN; end

Ce type de boucle est tr`s souvent utilis´ pour converger vers une valeur d´sir´e. e e e e Par exemple, on veut trouver le nombre d’entiers positifs n´cessaires pour avoir e une somme plus grande que 100. On pourrait r´aliser cette tˆche de la mani`re e a e suivante :
function n = nombre_entier n = 0; % initialisation des valeurs somme = 0; while somme < 100 n=n+1; % it´ration de n e somme = somme + n; % nouvelle somme end

29

5.5

Boucles switch

Les boucles switch permettent parfois de remplacer les boucles if-elseif-else, particuli`rement dans le cas de menus. Le prototype de ce type de boucle en e pseudo-code est le suivant :
D´terminer CAS e CAS choisi est CAS1 ACTION1 CAS choisi est CAS2 ACTION2 AUTREMENT ACTION3

En MATLAB, on obtient le code suivant :
switch (CAS) case {CAS1} ACTION1 case {CAS2} ACTION2 otherwise ACTION3 end

Par exemple, on veut faire une calculatrice simple en MATLAB, pour d´terminer e l’exponentielle ou le logarithme en base e d’un nombre entr´ par l’utilisateur. e Une mani`re simple de rendre le programme interactif serait d’utiliser le SCRIPT e suivant :
operation = input(’Op´ration: (1) exp ; (2) log ? ’); e nombre = input(’Valeur : ’); switch operation case 1 b = exp(nombre) case 2 b = log(nombre) otherwise disp(’mauvais choix -- operation’) end

Avec la sortie (par exemple) suivante :
>> calcul_rapide Op´ration: (1) exp ; (2) log ? 1 e Valeur : 0.5 b = 1.6487 >>

30

Exercices

8. En utilisant la fonction xor de MATLAB, construisez la table de v´rit´ de e e l’op´rateur OU EXCLUSIF. e

9. On veut comparez le temps de calcul n´cessaire ` MATLAB avec une boucle e a for versus le temps n´cessaire avec une op´ration vectorielle. Pour ce faire, on e e utilise les commandes tic et toc :
>> tic >> OP´RATION E >> toc

MATLAB affiche alors le temps utilis´ pour r´aliser l’op´ration. Dans un fichier e e e SCRIPT, effectuez le calcul suivant : et 1 + et

x(t) =

Utilisez le vecteur [0 : 0.001 : 1]. Dans un premier temps, solutionnez ` l’aide a des op´rateurs vectoriels. Ensuite, utilisez la boucle for : e
clear x for i=1:length(t) % incr´ment dans tout le vecteur t e x(i) = exp(t(i))/(1 + exp(t(i)); end

Essayez ensuite en mettant la ligne clear x en commentaire.

10. Soit l’´quation quadratique suivante : e ax2 + bx + c = 0 On d´sire d´terminer, pour des param`tres a, b et c donn´s, de quels types sont e e e e les racines de x. Il s’agit, selon la valeur du discriminant, d’afficher ` l’utilisaa teur le type des racines (r´elles identiques, r´elles distinctes, complexes). Pour e e l’affichage, utilisez :
message = ([’Les racines de l’´quation sont ...’]); e

Utilisez une fonction qui prend les param`tres a, b et c comme argument et qui e renvoie le diagnostic.

31

11. La fonction arctan(x) peut ˆtre approxim´e par : e e (−1)m x2m+1 (|x| < 1) 2m + 1

tan−1 (x) ≈ ΣM m=0

On d´sire savoir le nombre M qui permet, pour une valeur de x donn´e, d’ape e proximer avec une erreur inf´rieure ` 10−6 . R´alisez une fonction MATLAB qui e a e prend comme argument, le nombre x, qui v´rifie si la condition est remplie et, e ` l’aide d’une boucle while, d´termine le nombre d’it´rations M . Le programme a e e doit lancer un message d’erreur si la condition n’est pas remplie.

12. La m´thode de Newton-Raphson permet de d´terminer les racines d’une e e ´quation alg´brique non-lin´aire. L’algorithme est le suivant : e e e
0. Poser x(0) % estim´ initial e 1. Tant que f(k) - 0 plus grand qu’un crit`re e 1.1. Calculer x(k+1) = x(k) - f(x_k)/f’(x_k) 1.2. k = k + 1 2. Sortie

` A l’aide de cet algorithme, d´terminer les racines de l’´quation : e e 2x − 2x = 0 V´rifiez l’effet de l’estim´ initial sur le nombre d’it´rations. e e e

32

6

Fonctions avanc´es e

Les diff´rentes parties de cette section sont plus sp´cifiques aux diff´rents cours e e e (sauf les sous-sections 6.1 et 6.2 qui traitent des sorties graphiques et des entr´ese sorties dans des fichiers). Quelques exercices sont pr´sent´s dans chacune des e e sous-sections.

6.1

Graphiques

On a vu pr´c´demment comment faire des figures simples ` l’aide de la fonction e e a plot. On peut aussi faire plusieurs fenˆtres graphiques sur une mˆme figure (dans e e le cas, par exemple, o` l’on voudrait tracer deux courbes d’ordres de grandeur u diff´rents). La figure 4 pr´sente un exemple ` ne pas faire, soit de tracer la e e a temp´rature et la concentration en fonction du temps dans un r´acteur sur la e e mˆme figure. e
2200

2000

1800 Ca(t) T(t) 1600 Ca (mol/m3) et T (K)

1400

1200

1000

800

600

400

200

0

0.2

0.4

0.6

0.8

1 temps (h)

1.2

1.4

1.6

1.8

2

Fig. 4 – C(t) et T(t) sur une mˆme figure e

33

La figure 5 pr´sente les mˆmes donn´es, mais dans deux fenˆtres graphiques : e e e e
2100 2080 Ca (mol/m3) 2060 2040 2020 2000 1980 1960 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

350 340 330 320 310 300

T (K)

0

0.2

0.4

0.6

0.8

1 temps (h)

1.2

1.4

1.6

1.8

2

Fig. 5 – C(t) et T(t) sur une mˆme figure - corrig´ e e Le code utilise le concept de figure et de subplot, tel que demontr´ dans le code e suivant :
figure(1) % d´claration d’une figure. e subplot(2,1,1) % on d´clare une matrice de graphiques e % de 2 lignes (indice1), 1 colonne (indice2) % et le premier plot est dans la premi`re fen^tre e e plot(t,Ca) ylabel(’Ca (mol/m^3)’) subplot(2,1,2) % 2 lignes, 1 colonne, 2e graphique plot(t,T) ylabel(’T (K)’) xlabel(’temps (h)’)

34

Fonction semilogx semilogy loglog polar mesh

Description axe des x logarithmique axe des y logarithmique axes des x et des y logarithmique graphique en coordonn´es polaires e graphique 3D

Tab. 6 – Fonctions de graphiques Dans l’utilisation de subplot, MATLAB compte les fenˆtres de graphique comme e dans le cas des matrices (en compl´tant chaque ligne). e Il existe plusieurs fonctions pour tracer certaines formes sp´ciales de graphique. e Une synth`se de ces fonctions est pr´sent´e au tableau 6. e e e Les exercices qui suivent permettront de tester l’utilisation de quelques’unes de ces fonctions. Dans le doute au sujet des appels de ces fonctions, n’h´sitez pas e ` utiliser le help... a

35

t (min) 1 2 3 4 5 6 7 8 9 10

CA (mol L−1 ) 1.00 0.90 0.80 0.73 0.67 0.62 0.58 0.55 0.53 0.52

Tab. 7 – Donn´es d’exp´rimentation e e Exercices

13. Une exp´rience dans un r´acteur batch sont pr´sent´es au 7. e e e e Sur une mˆme figure, faites tracez les graphiques suivants : e a - CA (t) en fonction du temps ; bc−dCA (t) dt

en fonction de CA (t) ; en fonction de ln(CA (t)) sur un graphique loglog ;

ln(−dCA (t)) dt

´ Evaluez les d´riv´es num´riquement (pour les points i = 1...10) par : e e e dCA (t) dt dCA (t) dt −3CA1 + 4CA2 − CA3 2∆t CA(i+1) − CA(i−1) 2∆t


i=1


i=2...9

dCA (t) dt


i=10

CA8 − 4CA9 + 3CA10 2∆t

36

14. On veut tracer avec MATLAB la fonction z(x, y) = e−0.5[x
2

+0.5(x−y)2 ]

` pour x et y entre -4 et 4. A l’aide de deux boucles for imbriqu´es, calculez la e valeur de la fonction ` chaque point du domaine (utilisez des incr´ments de a e 0.05 dans les deux directions). Tracez ensuite la courbe obtenue ` l’aide de la a fonction mesh(vecteurX, vecteurY, matriceZ). V´rifiez l’appel ` cette fonction e a en tapant help mesh ` l’appel MATLAB. Tracez ensuite les mˆmes valeurs ` a e a l’aide des fonctions surf(vecteurX, vecteurY, matriceZ) et contour((vecteurX, vecteurY, matriceZ).

37

6.2

Importer et exporter des donn´es e

Dans plusieurs cours, il vous sera n´cessaire de conserver vos solutions num´riques e e d’une session de travail ` l’autre. La m´thode la plus facile est d’utiliser les fonca e tions save et load de MATLAB. Les fichiers cr´´s porte l’extension ’.mat’ par ee d´faut (ceux-ci ne sont accessibles qu’avec MATLAB). Voici un exemple d’utie lisation simple.
>> A = ones(3); % matrice >> b = zeros(3,1); % vecteur >> save ma_session % le fichier ma_session.mat est cr´´ dans ee % le r´pertoire courant e >> clear >> whos % les variables ne sont plus dans la m´moire e >> load ma_session % On va chercher tous les ´l´ments de la session e e >> whos Name Size Bytes Class A 3x3 72 double array b 3x1 24 double array Grand total is 12 elements using 96 bytes

Il est aussi possible de sauvegarder les variables dans un fichier ASCII et lui donner un format d´sir´. Elles pourront ensuite ˆtre lues par d’autres logiciels e e e (par exemple, EXCEL) et avec MATLAB (en utilisant aussi la fonction load ). Dans le cas suivant, on ne sauvegarde que la matrice A de l’exemple pr´c´dent. e e
>> save ma_session.dat -ASCII A >> load ma_session.dat

La fonction xlsread permet de charger en MATLAB des fichiers EXCEL.
>> xlsread classeur.xls

Pour plus d’information ` ce sujet, vous pouvez consulter help fileformats. a

38

Exercices

15. Sauvegardez la matrice z(x, y) calculez ` l’exercice 14 dans un fichier ASCII a (.dat). Ouvrez le fichier ` l’aide d’EXCEL. a

16. MATLAB permet de d´finir diff´rentes formes de structures. Une structure e e associe un nom de variable (une chaˆ de caract`re) ` la variable dans une ıne e a cellule (type g´n´rique de variable - voir help cell pour plus d’information). e e Supposons que l’on utilise la fonction de l’exercice 14 : z(x, y) = e−a[x
2

+b(x−y)2 ]

avec a = 0.5 et b = 0.5 dans l’exercice pr´c´dent. On pourrait stocker cet essai e e dans une seule et unique variable :
OBJET_ESSAI = struct(’matrice’,{z},’a’, {a}, ’b’, {b}) % {}: cellules

Avec la sortie suivante :
>> OBJET_ESSAI = z: [161x161 double] a: 0.5000 b: 0.5000

On peut acc´der aux diff´rentes variables de cette structure par : e e
>> OBJET_ESSAI.a ans = 0.5000 >>

On d´sire organiser la sauvegarde des variables x, y, z, a et b dans un fichier e .mat ` l’aide d’une structure. Cr´ez une forme plus compl`te de la structure a e e pr´sent´e. Sauvegardez ensuite cet objet dans un fichier .mat. e e

39

6.3

Variables symboliques

MATLAB permet la manipulation d’expressions symboliques (c’est-`-dire de a variables sans affectation num´rique) de la mˆme mani`re que MAPLE. Il faut e e e cependant d´clarer les variables au pr´alable. Par exemple, on veut calculer e e la matrice Jacobienne associ´es ` un syst`me de deux ´quations diff´rentielles e a e e e ordinaires.
%d´claration des variables symboliques e syms z1 z2 real %d´claration de fonctions math´matiques e e f1 = z1-z2^2+4; % f1:= del z1/del t f2 = 5*(1-exp(-z1/66)); % f2:= del z2/del t %Cr´ation de la matrice jacobienne e % A=[(del f1)/(del z1) (del f1)/(del z2) % (del f2)/(del z1) (del f2)/(del z2)]; A = jacobian([f1;f2],[z1 z2]);

MATLAB produit le r´sultat suivant (remarquez la classe des variables) : e
>> A = jacobian([f1;f2],[z1 z2]) A = [ 1, [5/66*exp(-1/66*z1),0] >> whos Name A f1 f2 z1 z2 Grand total -2*z2]

Size Bytes Class 2x2 354 sym object 1x1 142 sym object 1x1 158 sym object 1x1 128 sym object 1x1 128 sym object is 63 elements using 910 bytes

Il est possible ensuite d’´valuer l’expression ` diff´rents points (z1,z2) en utilisant e a e la fonction feval.
>> >> >> >> A1 z1 = 0; z2 = 0; A1 = eval(A) A1 = 1.0000 0.0758

0 0

>>

40

Les exercices qui suivent permettront d’illustrer d’autres fonctions qui peuvent ˆtre appliqu´es aux variables et objets de la classe symbolique. e e

Exercices

17. En utilisant la fonction solve, et en utilisant des variables symboliques, trouvez les solutions de l’´quation x2 + 1 = 0. e

18. Soit l’expression suivante : y = t3 + cos(t) En utilisant les variables symboliques et la fonction diff, d´terminez l’expression e ´ de dy . Evaluez la d´riv´e pour t = 5 (utilisez la fonction eval ). e e dt

41

6.4

Racines d’une ´quation polynomiale e

Ce probl`me est relativement courant (dans certains probl`mes de thermodynae e mique par exemple). Supposons que l’on ait ` r´soudre l’´quation polynomiale a e e d’ordre 5 suivante : x5 + 3x4 − 8x3 + 12x2 − x + 4 = 0 Il suffit de d´clarer un vecteur contenant les coefficients du polynˆme : e o
>> poly = [1 3 -8 12 -1 4];

et d’appeler la fonction roots de MATLAB :
>> roots(poly) ans = -5.0623 1.1051 + 1.1056i 1.1051 - 1.1056i -0.0739 + 0.5638i -0.0739 - 0.5638i

Exercices

19. Programmez une fonction qui permet de d´terminez le nombre de racines e r´elles d’un polynˆme. Pour ce faire, utilisez la fonction isreal(x) de MATLAB e o qui retourne 1 si x est r´el et 0 sinon. e

42

6.5

R´gression e

Cette sous-section pr´sente une m´thode relativement simple pour effectuer des e e r´gressions dans MATLAB (qui vous permettront de v´rifier les r´sultats obe e e tenus par d’autres m´thodes enseign´es dans les cours). Cette m´thode peut e e e s’av´rer une alternative int´ressante ` EXCEL dans vos cours de laboratoire... e e a Supposons deux vecteurs de donn´es : e
>> x = [0 1 2 3 4 5]; % variable ind´pendante e >> y = [0 2.2 4.5 5.4 5.5 5.5]; % var. d´pendante e

On veut avoir le meilleur mod`le d’ordre 3 reliant ces donn´es entre elles : e e
>> vect_modele = polyfit(x,y,3) vect_modele = 0.0074 -0.4091 2.9636

-0.0865

Le mod`le est donc : e 0.0074x3 − 0.4091x2 + 2.9636x − 0, 0865 = 0 V´rifions maintenant ce mod`le. Tout d’abord, on utilise le mod`le pour d´terminer e e e e les nouvelles valeurs de y, appel´es ymodele et on trace un simple graphique : e
>> y_modele=polyval(vect_modele,x); >> plot(x,y,’+’,x,y_modele,’*’)

La figure 6 pr´sente le r´sultat. e e
6

5

4

3

2

1

0

−1

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

Fig. 6 – Essai d’une r´gression e

43

Exercices

20. On se propose d’approximer la fonction y(t) = 10 ∗ e−t + k pour t entre 0 et 10 (utilisez des incr´ments de 0.1) par un polynˆme d’ordre 5. e o Le param`tre k est g´n´r´ par une fonction al´atoire : e e ee e
k = rand(length(t),1) % t est un vecteur colonne

44

6.6

Int´gration num´rique e e

L’int´gration num´rique d’int´grale est tr`s importante en g´nie chimique (par e e e e e exemple en Calculs des r´acteurs chimiques, en Proc´d´s de s´parations, etc.). La e e e e fonction d’int´gration la plus populaire est quad. Il s’agit d’une m´thode adape e tive de l’algorithme de Simpson. Supposons que l’on veuille ´valuer l’int´grale e e suivante : sin(x)dx x pour l’intervalle ]0, 1]. Il suffit d’utiliser les lignes de code suivantes :
>> S = quad(’sin(x)./x’,0,1) S = 0.9461

Encore une fois, on vous rappelle que cette fonction vous permet de v´rifier les e r´sultats obtenus par une m´thode enseign´e dans un cours (et ne vous soustrait e e e pas ` l’obligation d’en programmer quelques unes) ! a

Exercices

21. On d´sire calculer la valeur de l’int´grale suivante : e e
1 0

dx √ 1+ x

Dans un premier temps, on vous demande de r´aliser une fonction MATLAB e qui utilise la m´thode de Simpson 3/8 (quatre points ´quidistants not´s 0...3) : e e e 3h (f0 + 3f1 + 3f2 + f3 ) 8

f (x)dx ≈

Comparez la solution ` celle obtenue ` l’aide de la fonction quad. a a

45

´e El´ment t y fonctionDiff vecteur temps vecteur C.I.

Description vecteur colonne du temps r´sultant e matrice des solutions fonction qui produit les d´riv´es ` chaque incr´ment de temps e e a e vecteur du temps d’appel [ tinitial tfinal] vecteur colonne des conditions initiales ´e Tab. 8 – El´ments d’appel ` ode45 a

6.7

Solution d’´quations diff´rentielles ordinaires avec vae e leurs initiales

Le probl`me de r´solution d’´quations diff´rentielles ordinaires aux conditions e e e e initiales est courant en g´nie chimique. Dans plusieurs cours du baccalaur´at, e e vous avez appris des m´thodes pour solutionner ce type de probl`me (m´thode e e e d’Euler, algorithme de Runge-Kutta). Ces m´thodes sont programm´es dans e e MATLAB et elles sont relativement semblables dans leur utilisation. La plus populaire est la m´thode de Runge-Kutta d’ordres 4 et 5 ` pas variable implant´e e a e dans la fonction ode45. Les autres fonctions, par exemple ode23 (m´thode d’Eue ler) et ode15s (pour les probl`mes plus ardus ` r´soudre) sont appel´s, dans leur e a e e appel de base, de la mˆme mani`re que ode45. Le prototype d’appel est le suie e vant.
>> [t, y] = ode45(’fonctionDiff’,[vecteur temps],[vecteur cond. initiales])

Les ´l´ments de cet appel sont r´sum´s au tableau 8. ee e e

46

Il est donc n´cessaire d’´crire un fichier fonction contenant l’expression num´rique e e e des d´riv´es avant d’appeler ode45. Par exemple, on veut r´soudre le syst`me e e e e d’´quations diff´rentielles suivant : e e dx1 = asin(x(1)) + cos(x(2)) dt dx2 = cos(x(1)) + bsin(x(2)) dt Avec les conditions initiales x1 (0) = 0 et x2 (0) = 1 pour une dur´e de 10 unit´s e e de temps. a et b sont des param`tres. La fonction fonctionDiff serait la suivante : e
% fonctionDiff.m function dxdt = fonctionDiff(t,x) % param`tres e a = 1; b = 0.5; % ´quations diff´rentielles e e dxdt(1) = a*sin(x(1)) + cos(x(2)); dxdt(2) = cos(x(1)) + b*sin(x(2)); % vecteur colonne dxdt = [dxdt(1);dxdt(2)];

et l’appel ` ode45 (normalement fait dans un SCRIPT) : a
>> [t,y] = ode45(’fonctionDiff’,[0 10],[0;1]);

Regardons maintenant les sorties t (un vecteur colonne de 69 ´l´ments) et y ee (une matrice de 69 lignes et de 2 colonnes, soient x1 et x2 ) :
>> whos Name Size Bytes Class t 69x1 552 double array y 69x2 1104 double array Grand total is 207 elements using 1656 bytes

Pour tracer les graphiques, on pourrait utiliser le code suivant :
figure(1) subplot(2,1,1) plot(t,y(:,1)) % y(:,1) signifie la premi`re colonne de y e subplot(2,1,2) plot(t,y(:,2)) % y(:,2) signifie la deuxi`me colonne de y e

47

Exercices

22. Programmez un fichier SCRIPT et un fichier FUNCTION qui permet de r´soudre le syst`me d’´quations diff´rentielles non-lin´aire suivant : e e e e e 5 1 dCA (t) 2 = 0.5714 ∗ (10 − CA (t)) − ( ) ∗ CA (t) − ( ) ∗ CA (t) dt 6 6 dCB (t) 5 5 = −0.5714 ∗ CB (t) + ( ) ∗ Ca − ( ) ∗ CB (t) dt 6 3 Avec CA (0) = 5 mol/L et CA (0) = 0 mol/L. Faites tracez les courbes de CA (t) et CB (t) en fonction du temps pour une p´riode de 10 unit´s de temps sur deux e e graphiques diff´rents (sur une mˆme figure). e e

48

7
7.1

R´f´rences ee
R´f´rences g´n´rales ee e e

Il existe beaucoup de livres sur le march´ sur l’utilisation et la programmation e avec MATLAB. Deux sont tr`s int´ressants et tr`s complets : e e e Duane Hanselman et Bruce Littlefield, Mastering MATLAB 6- A Comprehensive Tutorial and Reference, Prentice-Hall, Upper Saddle (NJ), 2001. E.B. Magrab et.al., An Engineering Guide to MATLAB, Prentice-Hall, Upper Saddle (NJ), 2000. Il faut noter que la documentation compl`te de MATLAB (en incluant tous les e toolboxes se trouvent sur le site de Mathworks (www.mathworks.com)

7.2

R´f´rences sp´cifiques au g´nie chimique ee e e

Ici encore, il existe une beaucoup de livres et de documentation sur le WEB. Quelques’uns des plus utilis´s sont les suivants : e Alkis Constantinides et Navid Mostoufi, Numerical Methods for Chemical Engineers with MATLAB Applications, Prentice Hall International Series in the Physical and Chemical Engineering Sciences, Upper Saddle (NJ), 1999. B. Wayne Bequette, Process Dynamics - Modeling, Analysis, and Simulation, Prentice Hall International Series in the Physical and Chemical Engineering Sciences, Upper Saddle (NJ), 1998.

7.3

Notes

Il existe plusieurs toolboxes de MATLAB aux usages tr`s sp´cifiques. Beaucoup e e sont reli´s au contrˆle et seront introduits, lorsque n´cessaire, dans le cours de e o e commande. Le toolbox optimization est aussi tr`s utile en g´nie chimique et e e son utilisation est trait´e dans les livres de la section 7.1. Finalement, certains e probl`mes de transfert peuvent ˆtre solutionn´s ` l’aide du PDE toolbox. Dans e e e a les cours concern´s, ces outils peuvent aider ` valider les r´sultats obtenus ` e a e a l’aide des techniques enseign´es dans ces cours. Il est toujours possible d’obtenir e la liste des fonctions disponible dans un toolbox avec la commande :
>> help nom_toolbox

Certains toolbox finalement, poss`dent des interfaces usagers et des d´monstrations e e ` qui facilitent grandement leur apprentissage. A condition de fouiller un peu !

49

Sign up to vote on this title
UsefulNot useful