Vous êtes sur la page 1sur 11

Université Abdelmalek Essaâdi

Ecole Nationale des Sciences Appliquées – Tétouan

Initiation à Matlab

Première séance de TP: Opérations mathématiques de base avec


Matlab: scalaires, vecteurs, matrices et opérations logiques

Années Universitaire : 2021-2022

1
Exercice 1.1:
Tester et comprendre les deux lignes suivantes
A [ 1 2 1 1 ; 1 1 0 3]
find(A>0)
Corrigé de l’exercice 1.1:
% On tape dans l’invite de Matlab
>> A=[1 2 -1 1; -1 1 0 3]

A=

1 2 -1 1
-1 1 0 3
% La commande précédente permet de créer une variable de type tableau (matrice) à deux
% lignes et quatre colonnes. La première ligne contient les termes spécifiés par la liste
% 1 2 -1 1 qui sont séparés par un blanc, alors que les termes de la deuxième ligne
% commencent après le point virgule de séparation des lignes et sont définis par la liste
% -1 1 0 3.
%
% On tape dans l’invite de Matlab
find(A>0)

ans =

1
3
4
7
8
% La commande find permet de trouver les indices des termes d’un tableau selon le critère
% spécifié entre parenthèses. Ici le critère est A>0 qui signifie donc que l’on veut les termes
% du tableau A qui sont strictement positifs. La numérotation avec un seul indice adoptée par
% Matlab est telle que les termes sont numérotés par colonne de haut en bas et de gauche à
% droite. Le premier terme de A est donc 1, le deuxième est -1, le troisième est 2, …, le
% septième et 1 et le huitième est 3. La commande find produit comme résultat la liste
% 1 3 4 7 8 qui représente les indices des termes (et non pas les termes) de la matrice A qui
% satisfont le critère.

Exercice 1.2:
On note A,B et C les matrices suivantes :

2
 1 3 2 
 5 1  2 5 
3 1 10 5
A , B   , C 
10 0 3  6 1 1  3 1
 
 1 0 2 

1. Calculer les matrices AB, BA et ABt .

2. Calculer les matrices D  I 2  BBt .

3. Calculer les déterminants des matrices A , C , D et E  AA t .


4. Calculer les inverses des matrices A , C , D et E  AA t .

Corrigé de l’exercice 1.2:


1.
%Pour définir les trois matrices, on tape les commandes suivantes dans l’invite de Matlab
>> A=[1 3 2; -5 3 1; -10 0 3; 1 0 -2]
A=
1 3 2
-5 3 1
-10 0 3
1 0 -2
>> B=[1 -2 5; 6 1 -1]
B=
1 -2 5
6 1 -1
>> C=[10 -5; 3 -1]
C=
10 -5
3 -1
% Les trois variables de type matrice A, B et C ont pris suite à ses commandes les valeurs qui
% leurs sont affectées.
% Avant de répondre à la première question, il faut rappeler que le calcul d’un produit
% matriciel (produit algébrique de deux matrices qui représente la composition de deux
% endomorphismes d’espace vectoriel) n’est possible que lorsque le nombre de colonnes de la
% matrice à gauche est égal au nombre de lignes de la matrice à droite.
% Si les dimensions ne correspondent pas, on reçoit le message d’erreur suivant
% ??? Error using ==> mtimes
% Inner matrix dimensions must agree.
% Qui signifie en français, il y erreur à utiliser le produit, les dimensions internes des
% matrices doivent être cohérentes.
% Pour répondre à la première question de l’exercice 3.4, on tape successivement dans
% l’invite de Matlab les commandes suivantes:
>> A*B
??? Error using ==> mtimes
Inner matrix dimensions must agree.
% Le premier produit est impossible car le nombre des colonnes de A est égal à 3 alors que le
% nombre des lignes de B est égal à 2.

3
>> B*A
??? Error using ==> mtimes
Inner matrix dimensions must agree.
% BA est donc une opération impossible.

>> A*B.'
ans =
5 7
-6 -28
5 -63
-9 8
% Ce dernier produit est possible car le nombre des colonnes de A est 3 et c’est exactement le
% nombre des colonnes de B (c’est-à-dire le nombre des lignes de sa transposée).

2.
% Pour la question 2 de cet exercice, on tape dans l’invite de Matlab
>> D=eye(2)-B*B.'
D=
-29 1
1 -37
% La commande eye sert à créer une matrice identité dont l’ordre est spécifié en argument
% entre parenthèses. Ici, c’était l’identité d’ordre 2.
3.
% Le déterminant d’une matrice sera vu dans le cours d’algèbre linéaire. Il ne peut se calculer
% que pour une matrice carrée: le nombre des lignes est égal au nombre des colonnes. Pour
% une matrice carrée de dimensions 2 x 2: M=[m11 m12 ; m21 m22], le déterminant est
% donné par l’expression m12*m22-m21*m12. Matlab permet de calculer le déterminant par
% la commande det.
% Pour répondre à la question 2, on tape successivement les instructions suivantes :
>> det(A)
??? Error using ==> det
Matrix must be square.
% On ne peut pas calculer le déterminant de A car elle n’est pas carrée.
>> det(C)
ans =
5
%
>> det(D)
ans =
1072
%
>> det(A*A.')
ans =
0
% Lorsque le déterminant d’une matrice est égal à zéro, la matrice est dite singulière, elle
% n’est pas inversible.
% Pour calculer l’inverse d’une matrice, il faut que celle-ci soit carrée. A n’est pas carrée,
% donc il faut s’attendre à un message d’erreur qui rappelle à l’ordre ceux qui n’ont pas fait
% attention à vouloir à tout prix calculer l’inverse d’une matrice dans le cas où cette opération

4
% n’a aucun sens mathématique. Lorsque la matrice est carrée, Matlab calcule son inverse
% numérique (on dit bien numérique et non pas mathématique) grâce à la commande inv.
% Cette commande peut très bien donner n’importe quoi comme résultat ! L’analyse
% numérique qui sera vue en 2AP2 permettra de comprendre la signification de ce qu’on
% désigne ici par n’importe quoi dans le cas d’une matrice mal conditionnée.
4.
% Pour répondre à la question 4, on tape dans l’invite de Matlab les commandes
suivantes :

>> inv(A)
??? Error using ==> inv
Matrix must be square.
% C’était prévisible.
>> inv(C)
ans =
-0.200000000000000 1.000000000000000
-0.600000000000000 1.999999999999999
>> inv(D)
ans =
-0.034514925373134 -0.000932835820896
-0.000932835820896 -0.027052238805970
%
>> inv(A*A.')
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.554761e-018.
ans =
1.0e+014 *
Columns 1 through 3
1.660127923864889 -1.660127923864889 1.269509588837856
-1.660127923864889 1.660127923864889 -1.269509588837856
1.269509588837856 -1.269509588837856 0.970801450287772
2.734328345189228 -2.734328345189228 2.090956969850586
Column 4
2.734328345189228
-2.734328345189228
2.090956969850586
4.503599627370496

% Il faut faire attention au « Warning » qui dit que la matrice est proche d’une matrice
% singulière ou qu’elle est mal conditionnée.
% On peut vérifier que l’inverse ne correspond pas à la définition de l’inverse mathématique
% avec la commande: (A*A.’)*inv(A*A.’) qui restitue comme résultat :
>> A*A.'*inv(A*A.')
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.554761e-018.
ans =
Columns 1 through 3
0.875000000000000 0.125000000000000 0
-1.000000000000000 2.250000000000000 0
-1.500000000000000 2.000000000000000 0

5
0 0.250000000000000 0
Column 4
0
1.500000000000000
0
0.750000000000000

Exercice 1.3:
 1 1 7  3 2 1
On pose A  4 2 11 , B  7 8 6 
 
   
 8 0 3  5 1 3 

Que font les instructions suivantes?


3*A ; A.*B ; A./B ; cos(A) ; exp(B) .

Corrigé de l’exercice 1.3:


% Il s’agit d’opérations terme à terme, opérations dites de tableaux (array opérations). Ces
% opérations n’ont pas de sens algébrique propre comme c’est le cas de la multiplication des
% matrices. Les arguments des fonctions de Matlab peuvent être des variables de type tableau.
% Ainsi la fonction cos peut calculer en bloc tous les cosinus des termes du tableau qui lui
% est présenté comme argument. On peut de la sorte faire des opérations en bloc et éviter
% de distinguer les cas. Cela permet de gagner en vitesse de programmation. L’une des
% qualités de Matlab c’est justement ça: Matlab est bien Matrix Laboratoty.
% Les opérations terme à terme ne sont possibles que si les deux tableaux admettent
% les mêmes dimensions.
% La réponse à la question posée dans cet exercice est obtenue par les instructions suivantes :
>> A=[1 -1 7; -4 2 11; 8 0 3]
A=
1 -1 7
-4 2 11
8 0 3
%
>> B=[3 -2 -1; 7 8 6; 5 1 3]
B=
3 -2 -1
7 8 6
5 1 3
%
>> 3*A
ans =
3 -3 21
-12 6 33
24 0 9
%

>> A.*B

6
ans =
3 2 -7
-28 16 66
40 0 9
%

>> A./B
ans =
0.333333333333333 0.500000000000000 -7.000000000000000
-0.571428571428571 0.250000000000000 1.833333333333333
1.600000000000000 0 1.000000000000000
% On voit dans ce dernier résultat qu’en cas de besoin Matlab affiche le résultat avec le
% maximum de précision possible, c’est-à-dire la double précision. Vous verrez qu’avec
% Maple, la précision pourra être choisie a priori. Maple est plus précis que Matlab. Mais,
% Maple ne permet pas de faire la même chose que Matlab. A chacun de ces deux logiciels
% correspond son domaine d’application. Ils sont complémentaires.
>> cos(A)
ans =
0.540302305868140 0.540302305868140 0.753902254343305
-0.653643620863612 -0.416146836547142 0.004425697988051
-0.145500033808614 1.000000000000000 -0.989992496600445
%
>> exp(B)
ans =
1.0e+003 *
0.020085536923188 0.000135335283237 0.000367879441171
1.096633158428459 2.980957987041728 0.403428793492735
0.148413159102577 0.002718281828459 0.020085536923188
% Ne pas oublier ici que tous les termes sont multipliés par 1000 comme l’indique la ligne
% en surbrillance jaune. 1000 en notation Matlab s’écrit 1.0 e+003, on peut aussi l’écrire
% tout simplement 1.e3 qui signifie la même chose que 103 .

Exercice 1.4:
 1 1 7 
On pose A  4 2 11 .
 
 8 0 3 

Que font les instructions suivantes : v  1, 2, 4, 7  ; A(v)  A(v)  0.01 ; B(v)  abs(B(v)) .

Corrigé de l’exercice 1.4:


% On tape d’abord les instructions suivantes d’affectation dans l’invite de Matlab
>> A=[1 -1 7; -4 2 11; 8 0 3]
A=
1 -1 7
-4 2 11
8 0 3
%
>> v=[1, 2, 4, 7]

7
v=
1 2 4 7
% On n’était pas obligé de mettre la virgule comme séparation des colonnes de v car elle est
% équivalente à l’espace qui remplit exactement la même fonction de séparation.
% Tapons d’abord
>> A(v)
ans =
1 -4 -1 7
% Cette commande permet d’extraire tous les termes de la matrice A dont les indices sont
% spécifiés dans la liste v. Bien sûr conformément à la convention de numérotation des
% termes de la matrice avec un seul indice. Remarquer que la syntaxe de Matlab ne respecte
% absolument pas la notation mathématique habituelle réservée à A(v) et qui signifie en
% maths, l’image de v donnée par A. Prudence donc de vouloir utiliser Matlab avec ses
% seules connaissances des notations mathématiques, il faut apprendre ceux choisis par les
% développeurs de Matlab.
>> A(v)=A(v)+0.01
A=
1.010000000000000 -0.990000000000000 7.010000000000000
-3.990000000000000 2.000000000000000 11.000000000000000
8.000000000000000 0 3.000000000000000
% La commande A(v)=A(v)+0.01 s’interprète de la façon suivante: modifier tous les termes
% du tableau A dont les indices sont spécifiés dans la liste des indices v en les augmentant de
% la quantité 0.01.
% Pour étudier ce que fait la commande B(v)=abs(B(v)) prenons comme exemple le tableau
% A. Mais revenons au tableau A non modifié par l’instruction précédente A(v)=A(v)+0.01.
>> A=[1 -1 7; -4 2 11; 8 0 3]
A=
1 -1 7
-4 2 11
8 0 3
%
>> A(v)=abs(A(v))
A=
1 1 7
4 2 11
8 0 3
% On remarque que les termes de A dont les indices sont spécifiés dans la liste v, ont été
% substitués par leurs valeurs absolues. Les autres n’ont pas été touchés. Pour mieux s’en
% convaincre prenons cet exemple :
>> B=[1 -1 7; -4 2 11; 8 0 -3]
B=
1 -1 7
-4 2 11
8 0 -3
>> B(v)=abs(B(v))
B=
1 1 7
4 2 11
8 0 -3
% -3 dont l’indice est 9 qui n’est pas dans la liste des indices v n’a pas été modifié.

8
Exercice 1.5:

1. On veut vérifier que la multiplication de matrices n'est pas commutative.


Soient deuxmatrices :

3 4 4 4 5 8
A = ( 6 5 3) B = (3 11 12)
10 8 2 2 1 7

Réalisez un code MATLAB qui permet, pour les matrices A et B données, de

vérifier que : A * B - B * A ≠ 0

2. En utilisant les matrices définies au premier exercice, vérifiez l'identité suivante :

(A + B)T = AT + BT

Utilisez la fonction transpose de MATLAB pour transposer les matrices.

3. On désire résoudre un système d'équations algébriques linéaires, c'est-à-dire,


un système représenté par :
A*x=b
Avec A, une matrice de dimension n x n, x et b, des vecteurs colonnes de dimension
n. La solution de ce système est donnée par :
x = A-1 * b
En utilisant la fonction inv de MATLAB pour inverser la matrice, résoudre le
système décrit par la matrice A, définie au premier exercice et le vecteur b, la
première colonne de la matriceB, de ce même exercice.

Exercice 1.6:

Créer un tableau d’abscisses u dont les composantes varient entre 0 et 2 et comprenant 20


termes.

9
1. Ecrire la commande de Matlab qui permet d’extraire les termes de u dont les indices sont
spécifiés par le tableau v  [1,10,17] .

2. Calculer la somme des composantes de u.


3. Calculer le produit des composantes de u.

Corrigé de l’exercice 1.6:


>> % Question 1
>> u=linspace(0,2,20);
>> v=[1, 10, 17]
v=
1 10 17
>> u=linspace(0,2,20);
>> v=[1, 10, 17];
>> u(v)
ans =
0 0.947368421052632 1.684210526315789
>> % Question 2
>> sum(u)
ans =
20
>> % Question 3
>> prod(u)
ans =
0

Exercice 1.7 : instructions for & while

Calculer la somme des carrés des 1000 premiers entiers de 3 façons différentes:

1-Avec l’instruction for


2- Avec l’instruction while
3- Avec l’instruction sum
Exercice 1.8:

Faire un programme sous MATLAB qui résout le problème suivant:


1. y = x si x<0
2. y = x² si x>0
3. y = x² si x>0
4. y=10 si x=0

10
Exercice 1.9:
Créer un programme ‘’interactive’’ sous forme d’un fichiers script (M-file) qui trouve les
racines d’une équation de second degré désigné par : ax2+bx+c=0.

11

Vous aimerez peut-être aussi