Opérations mathématiques avec MATLAB

Fichiers SCRIPT et FUNCTION

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

Fichiers SCRIPT

Le flchier SCRIPT permet de lancer les memes opérations que celles écrites directement µa l’invite MATLAB. Toutes les variables utilisées dans un SCRIPT sont disponibles µa l’invite MATLAB. Par exemple, le flchier test.m qui reprend l’exemple précédent (assurez-vous que le flchier test.m se trouve bel et bien dans le répertoire indiqué dans la fenetre Répertoire courant) :
% test.m
clear all

> x = 4;
y = 2;
a = x + y
b = x * y

whos
produit la sortie suivante lorsque qu’appel :

> test
a =
6
b =
8

Name Size Bytes Class

> a 1×1 8 double array
b 1×1 8 double array
x 1×1 8 double array
y 1×1 8 double array

Grand total is 4 elements using 32 bytes

>
Habituellement, on utilise les flchiers SCRIPT afln de :
{ Initialiser le système (fonctions clear) { Déclarer les variables
{ Efiectuer les opérations algébriques { Appeler les fonctions
{ Tracer les flgures

Il est utile ici de noter que le langage MATLAB n’est pas un langage compilé µ (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. Lorsque MATLAB détecte une erreur, le logiciel arr^ete et un message d’erreur ainsi que la ligne oµu l’erreur est détectée s’a–chent µa l’écran. Apprendre µa lire les messages d’erreur est donc important pour « déboguer » vos programmes rapidement et e–cacement.

Fichiers FUNCTION

L’idée de base d’une fonction est d’efiectuer des opérations sur une ou plusieurs entrées ou arguments pour obtenir un résultat qui sera appel¶ sortie. Il est important de noter que les variables internes ne sont pas disponibles µa l’invite MATLAB. Par exemple, la fonction suivante (avec une seule sortie, le résultat 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 Class a 1×1 8 double array
Grand total is 1 element using 8 bytes

>
Le résultat de la multiplication n’est plus disponible. On peut cependant modi-fler les sorties de la manière suivante :
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 Class
a 1×1 8 double array
b 1×1 8 double array
Grand total is 2 elements using 16 byte
On peut éviter l’a–chage des sorties en utilisant le point-virgule :

> [a,b] = ma_fonction(4,2);
>> whos
Name Size Bytes Class
a 1×1 8 double array
b 1×1 8 double array
Grand total is 2 elements using 16 bytes
>>

Habituellement, on utilise les flchiers FUNCTION afln de :
{ Programmer des opérations répétitives
{ Limiter le nombre de variables dans l’invite MATLAB { Diviser le programme (problème) de manière claire

Opérations mathématiques avec MATLAB

Dans cette section, nous présenterons les eléments mathématiques de base de MATLAB.

Scalaires, vecteurs, matrices

L’élément de base de MATLAB est la matrice. C’est-µa-dire qu’un scalaire est une matrice de dimension 1×1, un vecteur colonne de dimension n est une ma-trice 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 précautions dans la manipulation de ces objets.
Les scalaires se déclarent directement, par exemple :

> x = 0;
>> a = x;

Les vecteurs ligne se déclarent de la manière suivante :

> V_ligne = [0 1 2] V_ligne =012

Pour les vecteurs colonne, on sépare les eléments par des points-virgules :

> V_colonne = [0;1;2] V_colonne =
0
1
2

Il est possible de transposer un vecteur µa l’aide de la fonction transpose ou avec 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, pour créer un vecteur ligne des valeurs de 0 µa 1 par incrément de 0.2, il su–t d’utiliser (notez le nombre d’éléments du vecteur) :

> 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 de 0 µa 5 par incrément de 1, il su–t d’utiliser :
>> V = [0:5]
V =0 1 2 3 4 5

On peut accéder µa un elément d’un vecteur et m^eme modifler celui-ci directement (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 sca-laire sur les vecteurs sont déflnis dans MATLAB :

> 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% multiplication par un scalaire
V =24

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 elément par elément, on ajoute un point devant l’opérateur (.* et ./). Par exemple :

> V = V1.*V2 % multiplication elément par elément
V = 3 8
>> V = V1./V2 % division elément par elément
V = 0.33330.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=[123]
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’impor-tance :

> V1 = [1 2]; % vecteur 1×2
>> V2 = V1’; % vecteur 2×1
>> V = V1*V2
V = 5
>> V = V2*V1
V = 1 2 2 4

Il est aussi possible de concaténer des vecteurs. Par exemple :

> V1 = [1 2];
>> V2 = [3 4];
>> V = [V1 V2]
V = 1234

De m^eme, pour les vecteurs colonnes :

> V1 = [1;2];
>> V2 = [3;4];
>> V = [V1;V2]
V =
1
2
3
4

On peut aussi créer des matrices, par exemple,

> V1 = [1 2];
>> V2 = [3 4];
>> V = [V1;V2]
V = 1 2

qui n’est pas équivalent µa :

> V1 = [1;2];
>> V2 = [3;4];
>> V = [V1 V2]
V =
1 3
2 4

Il faut donc ^etre très prudent dans la manipulation des vecteurs. Par exemple, une mauvaise concaténation :

> 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 ^etre construites directement :

> M=[12;34]
M =
1 2
34

On peut évidemment avoir accès aux eléments de la matrice par :

> m21 = M(2,1) % 2e ligne, 1ere colonne
m21 = 3

On peut aussi « compter » les eléments. MATLAB compte alors tous les eléments d’une ligne (de gauche µa droite) avant d’accéder µa la ligne suivante. Ainsi, dans la matrice 3×3 suivante :

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

la valeur des eléments ai;j sont données par leur rang afiect¶ par MATLAB. Le 5e elément est 5 :

> 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 :

> V = A(:,2) % ici, (:) signifie toutes les lignes
V =
2
5
8

De la m^eme manière, si l’on veut stocker les lignes 2 et 3 :

> M2=A(2:3,:) % (2:3) signifie ligne 2 µa 3
% et (:) signifie toutes les colonnes
M2 =
4 5 6
7 8 9

Il est possible d’inverser inv(), detransposer transpose() ou avec l’apostrophe (’)
les matrices :

> invM = inv(M) invM =
-2.00001.0000 1.5000 -0.5000
>> transpM = M’ transpM =
1 3
24
15

Un des intér^ets de MATLAB est la possibilité d’utiliser directement les opérations mathématiques pré-déflnies pour les matrices. L’addition et la soustraction sont 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
912

Pour la multiplication et la division, les opérateurs usuels (* et /) sont déflnis pour la multiplication et division matricielles :

> C = A*B % multiplication de matrices
C =
8 5
2013
>> D = A/B % division de matrices
D =
1.5000 -2.5000
2.5000 -3.5000

Afln de réaliser la multiplication et la division elément par elément, on précède les opérateurs par un point (.* et ./) :

> C = A.*B % multiplication elément par elément
C =
4 6
6 4
>> D = A./B % division elément par elément
D =
0.25000.6667
1.50004.0000

D’autres opérations sur les matrices seront présentées dans les sections subséquentes. Il faut noter certaines matrices spéciales qui peuvent ^etre utilisées, par exemple la matrice identit¶ :

> I = eye(3) % matrice identit¶
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 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 =
11
>> M_un = ones(2,2) % une matrice 2×2 de 1
M_un =
1 1
1 1

Dans certaines applications, il est parfois utile de conna^‡tre les dimensions d’une matrice, et la longueur d’un vecteur (retournés, par exemple, par une fonction). Dans ce cas, on utilise les fonctions length et size.

> V = [0:0.1:10]; % utilisation de length – vecteur 1×101
>> n = length(V)
n =
101
>> M = [1 2 3; 4 5 6]; % utilisation de size – matrice 2×3
>> [n,m] = size(M)
n = 2
m = 3
>> dim = length(M) % utilisation de length sur une matrice dim =
3 % donne la plus grande dimension, ici le nombre de colonnes

Voici quelques exercices sur la manipulation des vecteurs et des matrices :
Exercices
1. On veut vérifler que la multiplication de matrices n’est pas commutative. Soient deux matrices :
0 3441
A=@10 8 2 A
0 6 5 3 1
B = 3 11 12
@ 4 5 8 A
2 1 7
Réalisez un code MATLAB qui permet, pour les matrices A et B données, de vérifler que :
A⁄B¡B⁄A6=0
2. En utilisant les matrices déflnies au numéro 1, vériflez l’identit¶ suivante : (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-µa-dire, un système représent¶ par : A ⁄ x = b
Avec A, une matrice de dimension nxn, x et b, des vecteurs colonne de dimen-sion n. La solution de ce système est donné par : x = A¡1 ⁄ b
En utilisant la fonction inv de MATLAB pour inverser la matrice, solutionnez le système décrit par la matrice A, déflnie au numéro 1 et le vecteur b, la première colonne de la matrice B, de ce numéro.

LIRE AUSSI :  Harbor scattering problem

Graphiques simples

Cette sous-section ne vise qu’µa vous permettre de tracer les solutions pour les exercices qui suivent. Veuillez vous référer µa la section 6 pour plus d’informations.
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 alternance), comme dans l’exemple qui suit :

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

1 Introduction
2 Présentation de MATLAB
3 Fichiers SCRIPT et FUNCTION 
3.1 Fichiers SCRIPT
3.2 Fichiers FUNCTION
4 Opérations mathématiques avec MATLAB 
4.1 Scalaires, vecteurs, matrices
4.2 Graphiques simples
4.3 Fonctions mathématiques simples
4.3.1 Fonctions mathématiques usuelles
4.3.2 Fonctions matricielles
5 Programmation avec MATLAB 
5.1 Opérateurs logiques
5.2 Boucles if-elseif-else
5.3 Boucles for
5.4 Boucles while
5.5 Boucles switch
6 Fonctions avancées 
6.1 Graphiques
6.2 Importer et exporter des données
6.3 Variables symboliques
6.4 Racines d’une équation polynomiale
6.5 Régression
6.6 Intégration numérique
6.7 Solution d’équations différentielles ordinaires avec valeurs initiales
7 Références 
7.1 Références générales
7.2 Références spécifiques au génie chimique
7.3 Notes

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *