0% ont trouvé ce document utile (0 vote)
401 vues84 pages

Calcul Matriciel Matlab

Transféré par

Doc Ali
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
401 vues84 pages

Calcul Matriciel Matlab

Transféré par

Doc Ali
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Gloria Faccanoni

i http://faccanoni.univ-tln.fr/enseignements.html
L1 PC & SI - parcours renforcé
Licence Sciences et Techniques

R22 – Initiation au calcul matriciel avec Matlab/Octave


Recueil d’exercices corrigés et aide-mémoire.

Année 2019 – 2020

Dernière mise-à-jour : Mardi 21 janvier 2020

Table des matières


1 Éléments d’analyse matricielle 3
1.1 Généralité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Calcul matriciel élémentaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Définition et calcul pratique du déterminant . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Systèmes linéaires et calcul pratique de la matrice inverse . . . . . . . . . . . . . . . . . . . 13

2 Introduction à Octave/Matlab 23
2.1 Les environnements MATLAB et Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2 Premiers pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3 Notions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4 Opérations arithmétiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.7 Graphes de fonctions R → R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.8 Polynômes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.9 Structure conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.10 Structures itératives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.11 Vectorisation, i.e. optimisation des performances . . . . . . . . . . . . . . . . . . . . . . . . 37

3 Exercices 39
3.1 Calcul matriciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2 Matlab/Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3 Suites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.4 Systèmes linéaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.5 Calcul de la matrice inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.6 Systèmes linéaires : méthode de Gauss pour des systèmes rectangulaires (sur ou sous
déterminés) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.7 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Ce fascicule est un support pour le cours d’initiation au calcul matriciel avec Matlab/Octave de la première année d’une
Licence Scientifique. Ce document donne une aperçue de certains outils qui constituent un socle de connaissances
indispensables pour votre parcours. Actuellement il est impossible d’aborder ce sujet sans faire des simulations numériques
et le langage Octave/Matlab a été choisi comme langage de programmation du cours. La documentation et les sources
peuvent être téléchargées à l’adresse https://www.gnu.org/software/octave/. Avec un souci de rigueur, mais sans
insister sur les concepts les plus abstraits que ne rencontrera probablement pas un élève, le moindre calcul est détaillé et les
difficultés apparaissent progressivement.

R22 – Calcul matriciel


CM-TP 12h 4 séances de 3h

Séance 1 : Éléments d’analyse matricielle


Séance 2 : Introduction à Matlab/Octave
Séance 3 : TP
Séance 4 : TP
? ? ? CC

Gloria FACCANONI

IMATH Bâtiment M-117 T 0033 (0)4 83 16 66 72


Université de Toulon
Avenue de l’université B [email protected]
83957 LA GARDE - FRANCE i http://faccanoni.univ-tln.fr
Chapitre 1
Éléments d’analyse matricielle
1.1 Généralité
On appelle MATRICE m × n (ou d’ordre m × n) à coefficients dans K tout tableau de m lignes et n colonnes d’éléments de K.
L’ensemble des matrices m × n à coefficients dans K est noté Mm,n (K).
On convient de noter a i j l’élément de la matrice situé sur la i -ème ligne et j -ème colonne (1 ≤ i ≤ m et 1 ≤ j ≤ n).
Une matrice A est représentée entre deux parenthèses ou deux crochets :
   
a 11 ... a1 j ... a 1n a 11 ... a1 j ... a 1n
 . .. ..   . .. .. 
 .. . .   .. . . 
   
A =  ai 1 ... ai j ... ai n  ou A =  ai 1 ... ai j ... ai n 
   
 .. .. ..   .. .. .. 
   
 . . .   . . . 
a m1 ... am j ... a mn a m1 ... am j ... a mn

ou encore
A = (a i j )1≤i ≤m ou A = [a i j ]1≤i ≤m
1≤ j ≤n 1≤ j ≤n

? Si m = n on dit qu’on a une MATRICE CARRÉE. L’ensemble des matrices carrées d’ordre n à coefficients dans K est noté
Mn (K).
? Une matrice m × 1 est appelée VECTEUR - COLONNE et une matrice 1 × n est appelée VECTEUR - LIGNE.
? La MATRICE NULLE, notée Om,n , est la matrice dont tous les éléments sont nuls.
? On appelle MATRICE DIAGONALE toute matrice carrée D = (d i j )1≤i , j ≤n telle que i 6= j =⇒ d i j = 0. Si on note d i ≡ d i i ,
une matrice diagonale est de la forme
 
d1 0 ... 0 0
0
 d2 ... 0 0 
 . .. .. .. 
Dn = 
 .. . . . .

 
0 0 ... d n−1 0
0 0 ... 0 dn

On la note Diag(d 1 , d 2 , . . . , d n ).
? La MATRICE IDENTITÉ d’ordre n, notée In , est la matrice diagonale Diag(1, 1, . . . , 1).
| {z }
n fois
? On dit qu’une matrice carrée A = (a i j )1≤i , j ≤n est
? TRIANGULAIRE SUPÉRIEURE si i > j =⇒ a i j = 0,
? TRIANGULAIRE INFÉRIEURE si i < j =⇒ a i j = 0.
? On appelle matrice TRANSPOSÉE de A, notée AT , la matrice A = (a j i ) 1≤ j ≤n . C’est donc une matrice de Mn,m (R)
1≤i ≤m
obtenue en échangeant lignes et colonnes de la matrice initiale.
? Une matrice A est dite SYMÉTRIQUE si AT = A, i.e. si a i j = a j i pour tout i 6= j .
? Si A est une matrice carrée d’ordre n, on définit la TRACE de A comme la somme des éléments de la diagonale
principale : tr(A) ≡ ni=1 a i i . Par conséquent tr(AT ) = tr(A).
P

On remarque qu’une matrice DIAGONALE est triangulaire supérieure et inférieure (i.e. i 6= j =⇒ a i j = 0).

E XEMPLE ³ −1 4 2 ´
? La matrice A = 0 1 −3 est carrée et d’ordre 3 à coefficients dans Z.
4 1 5

3
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

µ1 2 3
4

? La matrice U =0 5 6 7 est une matrice triangulaire supérieure.
0 0 2 −1
0 0 0 −5
µ1 0 0 0¶
? La matrice L = 4 0 0 0
5 −1 2 0 est une matrice triangulaire inférieure.
7 9 15 4
µ1 0 0 0¶
? La matrice D = 0 −8 0 0
0 0 7 0 est une matrice diagonale.
0 0 00
µ1 0 0 0¶
? La matrice I4 = 0 100
0 0 1 0 est la matrice identité d’ordre 4.
0001
? La matrice B = ( 7 0 8 2 ) est une matrice ligne (= vecteur ligne) d’ordre 4.
³7´
? La matrice C = 0 est une matrice colonne (= vecteur colonne) d’ordre 3.
9
³ 1 5 −9 ´
? La matrice A = 5 4 0 est symétrique.
−9 0 7
³ 1 3´
Si A = 3 0 7 alors AT = −1 0 .
¡ 1 −1 5 ¢
?
5 7
³1 2 0 ´
? La trace de la matrice A = 0 2 3 est tr(A) = a 11 + a 22 + a 33 = 1 + 2 + (−2) = 1.
0 −1 −2

1.2 Calcul matriciel élémentaire


1.2.1 Addition de matrices
Si A = (a i j )1≤i ≤m et B = (b i j )1≤i ≤m sont deux matrices m × n, on définit l’ADDITION des matrices par
1≤ j ≤n 1≤ j ≤n

A + B = (a i j + b i j )1≤i ≤m .
1≤ j ≤n

La MATRICE OPPOSÉE D ’ UNE MATRICE A est notée −A. Si A = (a i j )1≤i ≤m alors −A = (−a i j )1≤i ≤m .
1≤ j ≤n 1≤ j ≤n

E XEMPLE
Soient les matrices 2 × 3 suivantes :
µ ¶ µ ¶
3 4 2 6 1 9
A= , B= .
1 3 5 2 0 3
La somme de A et B est la matrice 2 × 3 suivante :
µ ¶ µ ¶
3+6 4+1 2+9 9 5 11
A+B = = .
1+2 3+0 5+3 3 3 8

ATTENTION
La somme de deux matrices d’ordres différents n’est pas définie.

Si A, B et C sont des matrices de même ordre, alors nous avons


? A + B = B + A (commutativité),
? A + (B + C) = (A + B) + C (associativité),
? tr(A + B) = tr(A) + tr(B).

E XEMPLE
Soient les matrices 2 × 2 suivantes :
µ ¶ µ ¶ µ ¶
1 −1 6 −5 0 2
A= , B= , C= .
3 0 2 1 2 4

On a alors
µ ¶ µ ¶ µ ¶ µ ¶ µ ¶ µ ¶
1+6 −1 − 5 7 −6 6+1 −5 − 1 7 −6 6+0 −5 + 2 6 −3
A+B = = , B+A = = , B+C = = .
3+2 0+1 5 1 2+3 1+0 5 1 2+2 1+4 4 5

4 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

De plus, µ ¶ µ ¶
7 −4 7 −4
(A + B) + C = , A + (B + C) = .
7 5 7 5

1.2.2 Produit d’une matrice par un scalaire


Si A = (a i j )1≤i ≤m est une matrice m × n et si α ∈ K, on définit le PRODUIT D ’ UNE MATRICE PAR UN SCALAIRE comme la
1≤ j ≤n
matrice
α · A = (α · a i j )1≤i ≤m
1≤ j ≤n

Si A et B sont deux matrices de même ordre et α ∈ K un scalaire, alors α · (A + B) = α · A + α · B (distributivité).


De plus, (αA)T = αAT .

E XEMPLE µ ¶ µ3 ¶
3 4 2 /2 2 1
Si α = 12 et A = alors α · A = 1 .
1 3 5 /2 3
/2 5
/2

1.2.3 Produit de matrices


Si A = (a i k )1≤i ≤m est une matrice m × n et B = (b k j )1≤k≤n une matrice n × p, on définit le PRODUIT DES MATRICES par
1≤k≤n 1≤ j ≤p
à !
n
AB =
X
ai k bk j
k=1 1≤i ≤m
1≤ j ≤p

C’est une matrice m × p dont l’élément (AB)i j est le produit scalaire de la ligne i de A et de la colonne j de B.

B : n lignes p colonnes
 

 b 11 ... b1 j ... b 1p 

 
 
 
 .. .. .. .. .. 
. . . . .
 
 
 
 
 
 b k1 ... bk j ... b kp 
1j

 
b

 
×

 
i1

 
a

.. .. .. .. ..
+

 
.
..

 . . . . 
.+

 
j  
bk  
× 
b n1 ... bn j ... b np

k
ai
 
+
..
.+

j
bp
×
p
ai
   

 a 11 ... a 1k ... a 1n 


 c 11 ... c1 j ... c 1p 

   
   
   
 .. .. .. .. ..   .. .. .. .. .. 

 . . . . . 


 . . . . . 

   
   

 ai 1 ... ai k ... ai n 


 ci 1 ... ci j ... ci p 

   
   
   
 .. .. .. .. ..   .. .. .. .. .. 
. . . . . . . . . .
   
   
   
   
  
c m1 c mk c mp

 a m1 ... a mk ... a mn   ... ... 

A : m lignes n colonnes C = AB : m lignes p colonnes

© 2018-2019ÉÀ G. Faccanoni 5
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

E XEMPLE
Soient les deux matrices
 
µ ¶ 1 2 0
1 3 0
A= et B = 0 2 3 .
−1 1 2
0 −1 −2
La matrice A est d’ordre 2 × 3, la matrice B est d’ordre 3 × 3, donc la matrice produit AB est une matrice d’ordre 2 × 3 :
µ ¶ µ ¶
1×1+3×0+0×0 1 × 2 + 3 × 2 + 0 × (−1) 1 × 0 + 3 × 3 + 0 × (−2) 1 8 9
AB = = .
−1 × 1 + 1 × 0 + 2 × 0 −1 × 2 + 1 × 2 + 2 × (−1) −1 × 0 + 1 × 3 + 2 × (−2) −1 −2 −1

E XEMPLE
Une société commerciale possède deux magasins dont l’aménagement du parc informatique est le suivant :
? Magasin 1 : 12 PC, 5 tablettes et 10 smartphones,
? Magasin 2 : 17 PC, 6 tablettes et 14 smartphones.
On peut associer à cet équipement la matrice M = 12
¡ 5 10 ¢
17 6 14 .
La société souhaite améliorer son équipement de la manière suivante :
? Magasin 1 : +3 PC, +2 tablettes et +2 smartphones,
? Magasin 2 : +5 PC, +3 tablettes et +4 smartphones.
Ce nouvel équipement peut être associé à la matrice N = 35 23 24 .
¡ ¢

Le répartition du nouvel aménagement du parc informatique des deux magasins sera donc
µ ¶ µ ¶ µ ¶
12 5 10 3 2 2 15 7 12
M+N = + =
17 6 14 5 3 4 22 9 18

Pour acheter le nouvel équipement, la société commerciale a le choix entre deux fournisseurs :
? Fournisseur 1 : 600 ¤ le PC, 180 ¤ la tablette et 60 ¤ le smartphone,
? Fournisseur 2 : 550 ¤ le PC, 200 ¤ la tablette et 50 ¤ le smartphone.
600 550
³ ´
On peut associer ces prix à la matrice P = 180 200 .
60 50
On obtient les prix du nouvel aménagement selon les magasins et selon les fournisseurs en calculant
 
µ ¶ 600 550 µ ¶ µ ¶
3 2 2  3 × 600 + 2 × 180 + 2 × 60 3 × 550 + 2 × 200 + 2 × 50 2280 2150
NP = 180 200 = =
5 3 4 5 × 600 + 3 × 180 + 4 × 60 5 × 550 + 3 × 200 + 4 × 50 3780 3550
60 50

Par exemple, le prix de l’investissement pour le magasin 1 est de 2280 ¤ avec le fournisseur 1 et de 2150 ¤ avec le
fournisseur 2.

ATTENTION
AB 6= BA en général (non commutativité).
Prenons le cas général avec A d’ordre m × p et B d’ordre p × n. Le produit AB est défini, c’est une matrice d’ordre m × n.
Qu’en est-il du produit BA ? Il faut distinguer trois cas :
? si m 6= n le produit BA n’est pas défini ;
? si m = n mais p 6= n, le produit AB est défini et c’est une matrice d’ordre m × n tandis que le produit BA est défini
mais c’est une matrice d’ordre p × p donc AB 6= BA ;
? si m = n = p, A et B sont deux matrices carrées d’ordre m. Les produits AB et BA sont aussi carrés et d’ordre m mais
là encore, en général, AB 6= BA ;

E XEMPLE
Soient les matrices
µ ¶ µ ¶
1 −1 6 −5
A= , B= .
3 0 2 1

6 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

On obtient µ ¶ µ ¶
4 −6 −9 −6
AB = et BA = .
18 −15 5 −2

Si les dimensions sont compatibles, on a les propriétés suivantes :


1. A(BC) = (AB)C (associativité) 2. A(B + C) = AB + AC (distributivité) 3. AIn = In A = A

4. (AB)T = BT AT 5. tr(AB) = tr(BA)


q
Si A est une matrice carrée, on note A (pour q ≥ 2) la matrice définie par

Aq ≡ A
| ×A×
{z· · · × A} .
q fois

Si la matrice est diagonale, i.e. si Ai j = 0 pour i 6= j , alors (Aq )i j = (Ai j )q .

1.2.4 Produit matriciel d’Hadamard (produit “pointé”)


Le produit matriciel de H ADAMARD est une opération qui pour deux matrices de mêmes dimensions, associe une autre
matrice, de même dimension, où chaque coefficient est le produit terme à terme des deux matrices. Dans ce polycopié on le
notera “.∗” :
H = A. ∗ B ⇐⇒ Hi j = Ai j . ∗ Bi j .
def

Il est associatif, distributif et, contrairement au produit matriciel classique, commutatif.

1.2.5 Inverse d’une matrice carrée et systèmes linéaires carrés


Une matrice carrée A ∈ Mn (K) est dite INVERSIBLE (ou régulière) s’il existe une matrice B ∈ Mn (K) telle que

AB = BA = In .

Si une telle matrice existe, alors elle est unique, on la note A−1 et on l’appelle matrice INVERSE de A.
? Si une matrice est non inversible (i.e. il n’existe pas A−1 ), on dit qu’elle est SINGULIÈRE.
? Une matrice carrée A est dite ORTHOGONALE si elle est inversible et AT A = AAT = In , i.e. si AT = A−1 .
Soit A et B deux matrices inversibles, alors
¢−1
? A−1 l’est aussi et A−1 = A,
¡

−1 ¢T
? AT l’est aussi et AT = A−1 ,
¡ ¢ ¡

? AB l’est aussi et (AB)−1 = B−1 A−1 .

E XEMPLE
Considérons les matrices

− 21
µ ¶ µ ¶
1 1 2
A= B= 1 .
2 4 −1 2

On a

− 12 − 21
µ ¶µ ¶ µ ¶ µ ¶µ ¶ µ ¶
1 1 2 1 0 2 1 1 1 0
AB = 1 = BA = 1 =
2 4 −1 2
0 1 −1 2
2 4 0 1

On dit que B est la matrice inverse de A et réciproquement.

Il est fréquent, dans toutes les disciplines scientifiques, de devoir résoudre des systèmes linéaires. Tout système linéaire de n
équations à n inconnues peut s’écrire sous la forme matricielle Ax = b ; A est une matrice carrée de dimension n et x et b
sont des vecteurs colonnes de dimension n, où x est l’inconnue et b un vecteur donné.
Si A est inversible alors ce système possède une unique solution x donnée par x = A−1 b.

© 2018-2019ÉÀ G. Faccanoni 7
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

E XEMPLE
Considérons le système linéaire
(
2x + 3y = 15
3x + 4y = 12
¡x¢
Si on pose A = 23 34 , x = y et b = 15
¡ ¢ ¡ ¢
12 , alors
µ ¶µ ¶ µ ¶
2 3 x 2x + 3y
Ax = =
3 4 y 3x + 4y

ainsi le système peut s’écrire Ax = b.


On cherche donc à calculer A−1 , i.e. on cherche a, b, c, d tels que
µ ¶µ ¶ µ ¶µ ¶ µ ¶
a b 2 3 2 3 a b 1 0
= = .
c d 3 4 3 4 c d 0 1

On a
µ ¶µ ¶ µ ¶ µ ¶
a b 2 3 2a + 3b 3a + 4b 1 0
= =
c d 3 4 2c + 3d 3c + 4d 0 1
µ ¶µ ¶ µ ¶ µ ¶
2 3 a b 2a + 3c 2b + 3d 1 0
= =
3 4 c d 3a + 4c 3b + 4d 0 1

si et seulement si a = −4, b = c = 3 et d = −2 ainsi


µ ¶µ ¶ µ ¶
−4 3 15 −24
x = A−1 b = =
3 −2 12 21

1.3 Définition et calcul pratique du déterminant


1.3.1 Déterminant d’une matrice d’ordre n (règle de Laplace)
Soit A une matrice carrée d’ordre n.
Étant donné un couple (i , j ) d’entiers, 1 ≤ i , j ≤ n, on note Ai j la matrice carrée d’ordre n − 1 obtenue en supprimant la
i -ème ligne et la j -ème colonne de A.
Le DÉTERMINANT de A, noté det(A) ou |A|, est défini par récurrence sur l’ordre de la matrice A :
? si n = 1 : le déterminant de A est le nombre
det(A) ≡ a 11 ,

? si n > 1 : le déterminant de A est le nombre


n
(−1)i + j a i j det(Ai j )
X
det(A) ≡ quelque soit la ligne i , 1 ≤ i ≤ n,
j =1

ou, de manière équivalente, le nombre

n
(−1)i + j a i j det(Ai j )
X
det(A) ≡ quelque soit la colonne j , 1 ≤ j ≤ n.
i =1

Astuce
Pour se souvenir des signes de ces deux formules, on peut remarquer que la distribution des signes + et − avec la formule
(−1)i + j est analogue à la distribution des cases noirs et blanches sur un damier :
¯ ¯
¯+ − + − . . . ¯
¯ ¯
¯− + − + . . . ¯
¯ ¯
¯+ − + − . . . ¯
¯ ¯
¯ .. .. .. .. . . ¯
¯ ¯
¯. . . . .¯

8 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

E XEMPLE
Soit la matrice
µ ¶
a 11 a 12
A=
a 21 a 22
alors

det(A11 ) = a 22 , det(A12 ) = a 21 , det(A21 ) = a 12 , det(A22 ) = a 11 ,

donc on peut calculer det(A) par l’une des formules suivantes :


? a 11 det(A11 ) − a 12 det(A12 ) = a 11 a 22 − a 12 a 21 (développement suivant la ligne i = 1)
? −a 21 det(A21 ) + a 22 det(A22 ) = −a 21 a 12 + a 22 a 11 (développement suivant la ligne i = 2)
? a 11 det(A11 ) − a 21 det(A21 ) = a 11 a 22 − a 21 a 12 (développement suivant la colonne j = 1)
? −a 12 det(A12 ) + a 22 det(A22 ) = −a 12 a 21 + a 22 a 11 (développement suivant la colonne j = 2)
Ces formules donnent bien le même résultat.

E XEMPLE
Soit la matrice
 
a 11 a 12 a 13
A = a 21 a 22 a 23 
a 31 a 32 a 33
alors
µ ¶ µ ¶
a 22 a 23 a 21 a 23
det(A11 ) = det = a 22 a 33 − a 23 a 32 , det(A12 ) = det = a 21 a 33 − a 23 a 31 ,
a 32 a 33 a 31 a 33
µ ¶ µ ¶
a 21 a 22 a 12 a 13
det(A13 ) = det = a 21 a 32 − a 22 a 31 , det(A21 ) = det = a 12 a 33 − a 13 a 32 ,
a 31 a 32 a 32 a 33
µ ¶ µ ¶
a 11 a 13 a 11 a 12
det(A22 ) = det = a 11 a 33 − a 13 a 31 , det(A23 ) = det = a 11 a 32 − a 12 a 31 ,
a 31 a 33 a 31 a 32
µ ¶ µ ¶
a 12 a 13 a 11 a 13
det(A31 ) = det = a 12 a 23 − a 13 a 22 , det(A32 ) = det = a 11 a 23 − a 13 a 21 ,
a 22 a 23 a 21 a 23
µ ¶
a 11 a 12
det(A33 ) = det = a 11 a 22 − a 12 a 21 ,
a 21 a 22

donc on peut calculer det(A) par l’une des formules suivantes :


? a 11 det(A11 ) − a 12 det(A12 ) + a 13 det(A13 ) (développement suivant la ligne i = 1)
? −a 21 det(A21 ) + a 22 det(A22 ) − a 23 det(A23 ) (développement suivant la ligne i = 2)
? a 31 det(A31 ) − a 32 det(A32 ) + a 33 det(A33 ) (développement suivant la ligne i = 3)
? −a 11 det(A11 ) + a 21 det(A21 ) − a 31 det(A31 ) (développement suivant la colonne j = 1)
? a 12 det(A12 ) − a 22 det(A22 ) + a 32 det(A32 ) (développement suivant la colonne j = 2)
? −a 13 det(A13 ) + a 23 det(A23 ) − a 33 det(A33 ) (développement suivant la colonne j = 3)
Quelques calculs montrent que ces formules donnent bien le même résultat.

E XEMPLE
Soit la matrice
 
1 0 1
A = 0 2 0
0 3 5
alors
µ ¶ µ ¶ µ ¶
2 0 0 0 0 2
det(A11 ) = det = 10, det(A12 ) = det = 0, det(A13 ) = det = 0,
3 5 0 5 0 3

© 2018-2019ÉÀ G. Faccanoni 9
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

µ ¶ µ ¶ µ ¶
0 1 1 1 1 0
det(A21 ) = det = −3, det(A22 ) = det = 5, det(A23 ) = det = 3,
3 5 0 5 0 3
µ ¶ µ ¶ µ ¶
0 1 1 1 1 0
det(A31 ) = det = −2, det(A32 ) = det = 0, det(A33 ) = det = 2,
2 0 0 0 0 2

donc on peut calculer det(A) par l’une des formules suivantes :


? 1 det(A11 ) + 0 det(A12 ) + 1 det(A13 ) = 10 + 0 + 0 = 10
? 0 det(A21 )+2 det(A22 )+0 det(A23 ) = 0+2×5+0 = 10 L99 formule pratique car il n’y a qu’un déterminant à calculer
? 0 det(A31 ) + 3 det(A32 ) + 5 det(A33 ) = 0 + 0 + 5 × 2 = 10
? 1 det(A11 ) + 0 det(A21 ) + 0 det(A31 ) = 10 + 0 + 0 = 10 L99 formule pratique car il n’y a qu’un déterminant à calculer
? 0 det(A12 ) + 2 det(A22 ) + 3 det(A32 ) = 0 + 2 × 5 + 0 = 10
? 1 det(A13 ) + 0 det(A23 ) + 5 det(A33 ) = 0 + 0 + 5 × 2 = 10

On a les propriétés suivantes :


1. A est inversible si et seulement si det(A) 6= 0,
1
2. det(A−1 ) = ,
det(A)
3. det(AT ) = det(A),
4. det(AB) = det(A) · det(B)
5. le déterminant d’une matrice triangulaire est égal au produit des éléments diagonaux,
6. le déterminant d’une matrice orthogonale est égal à 1.

Astuce
Il convient d’utiliser la définition de déterminant après avoir fait apparaître sur une même rangée le plus possible de zéro
sachant que
? si deux colonnes (resp. deux lignes) sont identiques ou proportionnelles, alors det(A) = 0 ;
? si on multiplie une colonne (resp. une ligne) par un scalaire α 6= 0, alors le déterminant est multiplié par α ;
? si on échange deux colonnes (resp. deux lignes), alors le déterminant est changé en son opposé (i.e., le déterminant
change de signe) ;
? on ne change pas un déterminant si on ajoute à une colonne (resp. une ligne) une combinaison linéaire des autres
colonnes (resp. lignes), i.e.

C i ← C i + αC j , L i ← L i + αL j ,

avec j 6= i et α 6= 0.

E XEMPLE
Soit la matrice
 
1 0 1
A = 0 2 0
0 3 5
On fait apparaître encore plus de zéros dans la matrice jusqu’à obtenir une matrice triangulaire :
   
1 0 1 1 0 1
L 3 ←L 3 − 23 L 2
det(A) = det 0
 2 0 = det 0
 2 0 = 10.
0 3 5 0 0 5

1.3.2 Déterminant d’une matrice d’ordre 2 — méthode pratique


Soit A une matrice carrée d’ordre n = 2.
µ ¶
a 11 a 12
det(A) = det = a 11 a 22 − a 12 a 21 .
a 21 a 22

10 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

+ −
a 11 a 12

a 21 a 22

E XEMPLE
µ ¶
5 7
det = 5 × 3 − 7 × 4 = 15 − 28 = −13.
4 3

1.3.3 Déterminant d’une matrice d’ordre 3 — méthode pratique (règle de Sarrus)


Soit A une matrice carrée d’ordre n = 3. Alors
 
a 11 a 12 a 13 ¡ ¢ ¡ ¢
det(A) = det a 21 a 22 a 23  = a 11 a 22 a 33 + a 12 a 23 a 31 + a 13 a 21 a 32 − a 13 a 22 a 31 + a 11 a 23 a 32 + a 12 a 21 a 33
a 31 a 32 a 33

+ + + − − −
a 11 a 12 a 13 a 11 a 12

a 21 a 22 a 23 a 21 a 22

a 31 a 32 a 33 a 31 a 32

E XEMPLE
Soit la matrice
 
1 0 1
A = 0 2 0
0 3 5
alors avec la règle de S ARRUS
+ + + − − −

1 0 1 1 0

0 2 0 0 2

0 3 5 0 3

det(A) = (1 × 2 × 5 + 0 × 0 × 0 + 1 × 0 × 3) − (1 × 2 × 0 + 1 × 0 × 3 + 0 × 0 × 5) = 10.

Si on utilise la définition (règle de L APLACE), en développant selon la première colonne on obtient


µ ¶
2 0
det(A) = 1 × det = 2 × 5 − 0 × 3 = 10.
3 5

E XEMPLE
Soit la matrice
 
5 7 1
A = 4 3 2
2 1 6
alors

© 2018-2019ÉÀ G. Faccanoni 11
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

+ + + − − −

5 7 1 5 7

4 3 2 4 3

2 1 6 2 1

det(A) = (5 × 3 × 6 + 7 × 2 × 2 + 1 × 4 × 1) − (1 × 3 × 2 + 5 × 2 × 1 + 7 × 4 × 6) = −62.

ATTENTION
La règle de S ARRUS ne s’applique qu’à des matrices d’ordre 3.

E XEMPLE
Soit la matrice d’ordre 4 suivante :
1 0 0 1
 
2 0 1 0
A=
 
1 2 0 4
1 2 3 0
Alors
   
0 1 0 2 0 1 µ ¶
2 4 ¡ ¢
det(A) = det(A11 ) − det(A14 ) = det 2 0 4 − det 1 2 0 = − det
 − 12 + 0 + 2 − 2 − 0 − 0 = −(−8) − 12 = −4.
2 0
2 3 0 1 2 3

Si on essaye de «généraliser» la règle de S ARRUS on n’obtient pas le bon résultat :


³ ´ ³ ´
1 × 0 × 0 × 0 + 0 × 1 × 4 × 1 + 0 × 0 × 1 × 2 + 1 × 2 × 2 × 3 − 1 × 1 × 2 × 1 + 1 × 0 × 0 × 2 + 0 × 2 × 4 × 3 + 0 × 0 × 1 × 0 = 10.

1.3.4 Rang d’une matrice


Le RANG d’une matrice quelconque A ∈ Mm,n , noté rg(A), est égal au plus grand entier s tel que l’on puisse extraire de A
une matrice carrée d’ordre s inversible, c’est-à-dire de déterminant non nul. Il représente le nombre maximum de vecteurs
colonnes de A linéairement indépendants (ou, ce qui est équivalent, le nombre maximum de vecteurs lignes linéairement
indépendants).

Remarque
Soit une matrice A ∈ Mm,n . Alors
0 ≤ rg(A) ≤ min(m, n)
et rg(A) = 0 si et seulement si tous les éléments de A sont nuls.

E XEMPLE
Soit A la matrice suivante
µ ¶
1 3 2
A= .
1 3 1
Le rang de A est 2 car
? A est d’ordre 2 × 3 donc s ≤ min{2, 3} donc s = 0, 1 ou 2 ;
? il existe au moins un élément de A différent de zéro, donc s 6= 0 ;
? comme le déterminant de la sous-matrice composée de la première et de la deuxième colonne est nul, on ne
peut pas conclure ;
? comme le déterminant de la sous-matrice composée de la première et de la troisième colonne est non nul, alors
s = 2.

12 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

E XEMPLE
Soit A la matrice suivante
 
1 0 1
A= 0 5 −1 .
−1 0 −1
Le rang de A est 2 car
? A est d’ordre 3 × 3 donc s ≤ 3, i.e. s = 0, 1, 2 ou 3 ;
? il existe au moins un élément de A différent de zéro, donc s 6= 0 ;
? le déterminant de A est 0 donc s 6= ³3 ; ´
? le déterminant de la sous-matrice 1 0
0 5 est non nul, donc s = 2.

1.4 Systèmes linéaires et calcul pratique de la matrice inverse


Soit n, p ≥ 1 des entiers. Un SYSTÈME LINÉAIRE n × p est un ensemble de n équations linéaires à p inconnues de la forme

a x ... a 1p x p b1 ,

+ + =
 11 1

.. .. ..
(S) . . .


a n1 x 1 + ... + a np x p = bn .

? Les COEFFICIENTS a i j et les SECONDES MEMBRES b i sont des éléments donnés de K.


? Les INCONNUES x 1 , x 2 , . . . , x p sont à chercher dans K.
? Une SOLUTION de (S) est un p-uplet (x 1 , x 2 , . . . , x p ) qui vérifie simultanément les n équations de (S). Résoudre (S)
signifie chercher toutes les solutions.
? Un système est IMPOSSIBLE, ou incompatible, s’il n’admet pas de solution.
Un système est POSSIBLE, ou compatible, s’il admet une ou plusieurs solutions.
? Deux systèmes sont ÉQUIVALENTS s’ils admettent les mêmes solutions.
? Le SYSTÈME HOMOGÈNE associé à (S) est le système obtenu en remplaçant les b i par 0.
? Un système est CARRÉ si n = p.
Si on note

x1 b1 a 11 ... a 1p
     
 .   .   .. .. 
x =  ..  b =  ..  A= . . 
xp bn a n1 ... a np

le système (S) est équivalent à l’écriture matricielle Ax = b.


Si on ajoute le vecteur-colonne des seconds membres b à la matrice des coefficients A, on obtient ce qu’on appelle la
matrice augmentée que l’on note [A|b].

1.4.1 Système échelonné (ou triangulaire supérieur)


Un système (S) est EN ESCALIER, ou ÉCHELONNÉ, si le nombre de premiers coefficients nuls successifs de chaque équation
est strictement croissant. Autrement dit, un système est échelonné si les coefficients non nuls des équations se présentent
avec une sorte d’escalier à marches de longueurs variables marquant la séparation entre une zone composée uniquement
de zéros et une zone où les lignes situées à droite de l’escalier commencent par des termes non nuls, comme dans l’exemple
suivant de 5 équations à 6 inconnues :




 5x 1 −x 2 −x 3 +2x 4 +x 6 = b 1

3x 3 −x 4 +2x 5 = b2




−x 5 +x 6 = b 3

5x 6 = b 4





0 = b


 5

Quand un système contient une équation du type

0x 1 + · · · + 0x p = b,

© 2018-2019ÉÀ G. Faccanoni 13
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

? si b 6= 0 le système est impossible,


? si b = 0, on peut supprimer cette équation, ce qui conduit à un système équivalent à (S) dit SYSTÈME RÉDUIT.
Si la matrice A associée au système linéaire Ax = b est triangulaire supérieure, on dira que le système linéaire est un système
triangulaire supérieur. Pour le résoudre, on utilise la relation de récurrence
 bn
x = ,
 n a nn



à !
 1 n
P
x i = bi − a i j x j , pour i = n − 1, n − 2 . . . , 1


ai i j =i +1


E XEMPLE x 1 +x 2 +x 3 = 6,
Résolution du système triangulaire supérieur : x 2 +x 3 = 5,
x 3 = 3.


b3 3
x 3 = a33 = 1 ,


x 2 = x i = a122 (b 2 − a 23 x 3 ) = 11 (5 − x 3 ) = 2

x = x = 1 (b − a x − a x ) = 1 (6 − x − x ) = 1.

1 i a 11 1 12 2 13 3 1 2 3

La résolution d’un système échelonné est simple car il est triangulaire supérieur. De plus, il permet d’établir si le système est
possible ou impossible comme dans l’exemple suivant.

E XEMPLE
Établir si les trois systèmes linéaires suivantes sont impossibles ou possibles et, dans ce cas, calculer la/les solution(s).
  
x+y+z= 6, x+y+z= 6, x+y+z= 6,
(1) y+z= 5, (2) y+z= 5, (3) y+z= 5,
z= 3. 0= 0. 0= 3.
  

(1) Ce système est possible et admet une et une seule solution : en partant de la dernière ligne et en remontant, on
obtient

z = 3,
y = 5 − z = 5 − 3 = 2,
x = 6 − y − z = 6 − 2 − 3 = 1.

(2) Ce système est possible et admet une infinité de solutions : en partant de la dernière ligne et en remontant, on
obtient

z = κ ∈ R,
y = 5 − κ,
x = 6 − y − z = 1.

(3) Le système n’a pas de solution car aucune valeur de z permet de résoudre 0z = 3.

1.4.2 Systèmes équivalents et opérations élémentaires


Deux systèmes sont équivalents s’ils ont les mêmes solutions.
Les opérations suivantes donnent des systèmes équivalents :

? remplacer une ligne par elle même ± un multiple d’une autre ligne, comme par exemple
 
x+y+ z= 6, x+y+z= 6,
L 3 ←L 3 −L 2
y+ z= 5, −−−−−−−→ y+z= 5,
y + 2z= 8, z= 3.
 

14 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

? échanger deux lignes, comme par exemple


 
x+y+z= 6, x+y+z= 6,
L 2 ↔L 3
z= 3, −−−−−→ y+z= 5,
y+z= 5, z= 3.
 

Ces transformations sont équivalentes à la multiplication à gauche (pré-multiplication) de la matrice M ∈ Mm,n par la matrice
inversible obtenue en appliquant à la matrice identité Im la transformation correspondante. Par exemple, la transformation
qui échange les premières deux lignes de la matrice M ∈ M4,3 suivante

a b c d e f
   
d e f L 1 ↔L 2
a b c
  −−−−−→  
g h i g h i
p q r p q r

équivaut à multiplier M à gauche par la matrice obtenue en échangeant les premières deux lignes de la matrice identité I4 :

0 1 0 0 a b c d e f
    

 d e f
1 0 0 0  a b c
 = 
0 0 1 0  g h i  g h i
0 0 0 1 p q r p q r

1.4.3 Méthode de Gauss


La méthode de G AUSS transforme un système linéaire quelconque en un système échelonné équivalent.
Soit A = (a i j ) 1≤i ≤n la matrice des coefficients du système (S) et [A|b] la matrice augmentée.
1≤ j ≤p
La méthode de G AUSS comporte n − 1 étapes : à chaque étape j on fait apparaître des 0 sur la colonne j pour les lignes i > j
par des opérations élémentaires sur les lignes.
Étape j : en permutant éventuellement deux lignes de la matrice augmentée (i.e. deux équations du système linéaire), on
peut supposer a j j 6= 0 (appelé pivot de l’étape j ). On transforme alors toutes les lignes L i avec i > j selon la règle :

ai j
Li ← Li − Lj,
aj j

ainsi on fait apparaître des 0 sur la colonne j pour les lignes i > j (i.e. on élimine l’inconnue x j dans chaque lignes L i du
système linéaire).
En réitérant le procédé pour i de 1 à n − 1, on aboutit à un système échelonné.

E XEMPLE
Soit le système linéaire
x 1 +2x 2 +3x 3 +4x 4 = 1,



2x 1 +3x 2 +4x 3 +x 4 = 2,

3x +4x 2 +x 3 +2x 4 = 3,
 1


4x 1 +x 2 +2x 3 +3x 4 = 4.
1. Résolution par la méthode du pivot de G AUSS :

x 1 +2x 2 +3x 3 +4x 4 = 1 L 2 ←L 2 −2L 1  x 1 +2x 2 +3x 3 +4x 4 = 1


 

 L 3 ←L 3 −3L 1 
2x 1 +3x 2 +4x 3 +x 4 = 2 L 4 ←L 4 −4L 1 −x 2 −2x 3 −7x 4 = 0
 
−−−−−−−−→
3x 1 +4x 2 +x 3 +2x 4 = 3
 Étape 1 
 −2x 2 −8x 3 −10x 4 = 0
 
4x 1 +x 2 +2x 3 +3x 4 = 4 −7x 2 −10x 3 −13x 4 = 0
x 1 +2x 2 +3x 3 +4x 4 = 1 x 1 +2x 2 +3x 3 +4x 4 = 1
 
L 3 ←L 3 −2L 2 
 

−x 2 −2x 3 −7x 4 = 0 L 4 ←L 4 +L 3 −x 2 −2x 3 −7x 4 = 0
 
L 4 ←L 4 −7L 2
−−−−−−−−→ −−−−−−−→
Étape 2 
 −4x 3 +4x 4 = 0 Étape 3 
 −4x 3 +4x 4 = 0
 
4x 3 +36x 4 = 0 40x 4 = 0

© 2018-2019ÉÀ G. Faccanoni 15
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

donc, en résolvant le système triangulaire supérieur obtenu, on obtient

x 4 = 0, x 3 = 0, x 2 = 0, x 1 = 1.

2. Résolution par la méthode du pivot de G AUSS en écriture matricielle :


 L ←L −2L 
1 2 3 4 1 1 2 3 4 1
 
2 2 1
L 3 ←L 3 −3L 1
 2 3 4 1 2  L 4 ←L 4 −4L 1 
 0 −1 −2 −7 0 
[A|b] = 
 −−−−−−−−→  
3 4 1 2 3  Étape 1  0 −2 −8 −10 0 
4 1 2 3 4 0 −7 −10 −13 0
1 2 3 4 1 1 2 3 4 1
   
L 3 ←L 3 −2L 2
 0 −1 −2 −7 0  0 −1 −2 −7 0 
L 4 ←L 4 −7L 2
−−−−−−−−→ 
  −L−4−
←L 4 +L 3 
−−−−→  
Étape 2 0 0 −4 4 0  Étape 3  0 0 −4 4 0 
0 0 4 36 0 0 0 0 40 0

donc
x 4 = 0, x 3 = 0, x 2 = 0, x 1 = 1.

E XEMPLE (S YSTÈME AVEC DES PARAMÈTRES )


Pour quelles valeurs de a et c le système linéaire suivant admet aucune, une seule ou une infinité de solutions ?

x +5y +z= 0,
x +6y −z= 2,
2x+a y+z= c.

Nous avons 3 équations donc il faut effectuer 2 étapes de la méthode de G AUSS :


  
x +5y +z= 0 L 2 ←L 2 −L 1 x+5y +z = 0 x+5y+z =0
L 3 ←L 3 −2L 1 L 3 ←L 3 −(a−10)L 2
x +6y −z= 2 −−−−−−−−→ y −2z= 2 −−−−−−−−−−−−→ y −2z =2
Étape j =1 Étape j =2
2x+a y+z= c (a − 10)y−z = c (2a − 21)z= c − 2(a − 10)
  

Étudions la dernière équation : ¡ ¢ ¡ ¢


2a − 21 z = c − 2a + 20
21 c−2a+20
? Si a 6= 2 alors z = 2a−21 et on trouve y puis x en remontant : il existe une et une seule solution ;
21
? si a = 2 alors
? si c − 2a + 20 = 0 (i.e. c = 1), alors z = κ ∈ R et on trouve y puis x en remontant : il existe une infinité de
solutions ;
? si c − 2a + 20 6= 0 (i.e. c 6= 1), alors il n’y a aucune solution.

1.4.4 Variante de Gauss-Jordan


Dans cette variante de la méthode de G AUSS, à chaque étape on fait apparaître des zéros à la fois au-dessus et en-dessous du
pivot.
Soit A = (a i j ) 1≤i ≤n la matrice des coefficients du système (S) et [A|b] la matrice augmentée.
1≤ j ≤p
La méthode de G AUSS -J ORDAN comporte n étapes : à chaque étape j on fait apparaître des 0 sur la colonne j pour les lignes
i 6= j par des opérations élémentaires sur les lignes.
Étape j : en permutant éventuellement deux lignes de la matrice augmentée, on peut supposer a j j 6= 0. On transforme alors
toutes les lignes L i avec i 6= j selon la règle
ai j
Li ← Li − Lj
aj j
ainsi on fait apparaître des 0 sur la colonne j pour les lignes i 6= j (i.e. on élimine l’inconnue x j dans chaque lignes L i du
système linéaire).
En réitérant le procédé pour i de 1 à n, on aboutit à un système diagonal.

16 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

E XEMPLE
Résoudre le système linéaire
1 2 3 4 x1 1
    
2 3 4 1 x 2  2
   =  
3 4 1 2 x 3  3
4 1 2 3 x4 4
par la méthode de G AUSS -J ORDAN.
 L ←L −2L   L ←L +2L 
1 2 3 4 1 1 2 3 4 1 1 0 −1 −10 1
 
2 2 1 1 1 2
L 3 ←L 3 −3L 1 L 3 ←L 3 −2L 2
 2 3 4 1 2  L ←L −4L 0−1 −2 −7 0  L ←L −7L 2  0 −1 −2 −7 0 
 −−4−−−4−−−→ 1   −−4−−−4−−−→
 
[A|b] = 
 3

4 1 2 3  Étape 1  0−2 −8 −10 0  Étape 2  0 0 −4 4 0 
4 1 2 3 4 0−7 −10 −13 0 0 0 4 36 0
L 1 ←L 1 −L 3 /4
 L ←L +11L /40 
1 0 0 4 1 1 0 0 0 1
 
1 1 4
L 2 ←L 2 −L 3 /2 L 2 ←L 2 +9L 4 /40
L 4 ←L 4 +L 3  0 −1 0 −7 0  L ←L +4L /40 0 −1 0 0 0 
 −−3−−−3−−−− 4

−−−−−−−−−→   0 0 −4 −−→  
Étape 3 4 0  Étape 4
 0 0 −4 0 0 
0 0 0 40 0 0 0 0 40 0

donc
x 1 = 1, x 2 = 0, x 3 = 0, x 4 = 0.

1.4.5 Calcul de la matrice inverse


A étant inversible, pour obtenir A−1 il suffit de résoudre le système Ax = b qui admet pour solution x = A−1 b.
Pour calculer A−1 il faut alors résoudre n systèmes linéaires de termes sources (1, 0, 0, . . . , 0), (0, 1, 0, . . . , 0), . . . , (0, 0, 0, . . . , 1).
La méthode suivante résout ces n systèmes linéaires simultanément : on effectue des opérations élémentaires sur la
matrice [A|In ] jusqu’à obtenir [In |A−1 ] :

Opérations élémentaires
[A|In ] −−−−−−−−−−−−−−−−→ [In |A−1 ].

La matrice A est inversible si et seulement si on obtient par opérations élémentaires sur les lignes de A une matrice
triangulaire sans zéros sur la diagonale ; non inversible si et seulement si on obtient une matrice triangulaire avec un zéro
sur la diagonale.

E XEMPLE
µ ¶
2 0
Soit A = .
2 2

L 1 ← 21 L 1
µ ¶ µ ¶
L 2 ← 12 L 2
µ 1 ¶
2 0 1 0 L 2 ←L 2 −L 1 2 0 1 0 1 0 2 0
[A|I2 ] = −−−−−−−→ −−−−−−→
2 2 0 1 0 2 −1 1 0 1 − 21 1
2

E XEMPLE
µ ¶
2 1
Soit A = .
2 2

L 1 ← 21 L 1 − 21
µ ¶ µ ¶ µ ¶ µ ¶
2 1 1 0 L 2 ←L 2 −L 1 2 1 1 0 L 1 ←L 1 −L 2 2 0 2 −1 1 0 1
[A|I2 ] = −−−−−−−→ −−−−−−−→ −−−−−−→
2 2 0 1 0 1 −1 1 0 1 −1 1 0 1 −1 1

E XEMPLE
µ ¶
a b
Soit A = avec det(A) = ad − bc 6= 0.
c d

L 2 ←L 2 − ac L 1
µ ¶ µ ¶
a b 1 0 a b 1 0
[A|I2 ] = −−−−−−−−−→
c d 0 1 0 d − ac b − ac 1
L 1 ←L 1 − bc L 2 µ
1 + adbc − adab

d− a b a 0 −bc −bc
−−−−−−−−−−−→ c
0 d − ab − ac 1

© 2018-2019ÉÀ G. Faccanoni 17
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

L 1 ← a1 L 1
1 a
L2 ← c b L 2 = ad −cb L 2 1
+ a(adbc−bc) − adab d
− ad b−bc
µ ¶ µ ¶
d− a 1 0 a −bc 1 0 ad −bc
−−−−−−−−−−−−−−−−→ c a = c a
0 1 − ad −cb ad −cb
0 1 − ad −cb ad −cb

E XEMPLE
Calculer l’inverse de la matrice
 
1 1 −1
A = −1 1 1 .
1 −1 1

 
1 1
1 0 0 −1
 
1 1 −1 1 0 0 L 2 ←L 2 +L 1
L 3 ←L 3 −L 1 
[A|I3 ] =  −1 1 1 0 1 0  −−−−−−−→  0 2
1 1 0  0

1 −1 1 0 0 1 0 −1 0 1
−2 2
 
1 1 −1 1 0 0
 
L 1 ←L 1 −L 2 1 0 −1 1
/2 −1/2 0
L 2 ←L 2 /2 L 3 ←L 3 +2L 2 
−−−−−−→  0 1 0 1
/2 1/2 0  −−−−−−−−→  0 1 0 1
/2 1
/2 0 

0 −2 2 −1 0 1 0 0 2 0 1 1
 
1 0 −1 1/2 −1/2 0
 
1 0 0 1
/2 0 1
/2
L 3 ←L 3 /2 L ←L +L 3  −1
−−−−−−→  0 1 0 1
/2 1/2 0  −−1−−−1−−→  0 1 0 1
/2 1
/2 0  = [I3 |A ].

0 0 1 0 1
/2 1/2 0 0 1 0 1
/2 1
/2

1.4.6 Système sur-déterminé


Si le système (S) a n équations et m inconnues avec n > m, on dit que le système est sur-déterminé. On considère alors (S 0 )
un sous-système carré d’ordre m qu’on peut résoudre par exemple par la méthode du pivot de Gauss. Parmi les solutions de
ce système carré, on cherchera celles qui vérifient les équations de (S) qui n’apparaissent pas dans (S 0 ).

E XEMPLE
Soit les systèmes linéaires de n = 3 équations et m = 2 inconnues
 
x + y = 2
 x + y = 2

(S 1 ) x + 2y = 3 (S 2 ) x + 2y = 3
 
x + 3y = 4 x + 3y = 0
 

Prenons comme sous-système carré d’ordre m = 2 celui constitué des deux premières équations et résolvons-le :
( (
0 x+y =2 L 2 ←L 2 −L 1 x+y =2
(S ) −−−−−−−→
x + 2y = 3 y =1

Ce système admet une seule solution : x = y = 1.


On vérifie si cette solution satisfait l’équation de (S 1 ) qui n’apparaît pas dans (S 0 ) :

x + 3y = 1 + 3 = 4

donc x = y = 1 est l’unique solution de (S 1 ).


On vérifie si cette solution satisfait l’équation de (S 2 ) qui n’apparaît pas dans (S 0 ) :

x + 3y = 1 + 3 = 4 6= 0

donc (S 2 ) n’admet pas de solution.

18 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

E XEMPLE
Dans ce puzzle, chaque forme correspond à une valeur.

Le numéro à coté de chaque ligne ou colonne représente


la somme des valeurs dans cette ligne ou colonne.

Que vaut le point d’interrogation ?

On doit calculer • + ■ + F sachant que 


• + ■ + N = 19



2F + N = 14



2• + F = 15

2■ + F = 13





F + 2N = 19

Comme au lycée :
( (
2F + N = 14 F=3
? La deuxième et la dernière équations donnent
F + 2N = 19 N=8
? En injectant ces résultats dans la troisième équation on trouve • = 6 et dans la quatrième ■ = 5.
? La première équation est “en trop” : le système est sur-déterminé ! Puisque • + ■ + N = 6 + 5 + 8 = 19, elle est
vérifiée et on a bien trouvé l’unique solution de ce système linéaire.
? Conclusion : • + ■ + F = 14.
Avec Gauss : Si on écrit le système dans l’ordre suivant,

■+•+N =19



 2■

 +F=13
2• +F=15
2N +F=19





N+2F=14

et si l’on considère le sous-système carré obtenu en ne gardant pas la première équation, il suffit d’un seul pas de
la méthode de Gauss pour échelonner le système :

+F=13 +F=13
 

 2■ 
 2■
2• +F=15 L 4 ←L 4 −2L 3 2• +F=15
 
−−−−−−−−→

 2N +F=19 
 2N+F=19
 
N+2F=14 3F=9

ensuite on résout le système triangulaire obtenu :

9 19 − F 15 − F 13 − F
F= = 3, N= = 8, •= = 6, ■= = 5.
3 2 2 2
Il ne reste plus qu’à vérifier que la solution obtenue satisfait l’équation ■ + • + N = 19.
Astucieusement : la somme de toutes les colonne vaut 15+13+19 = 47 ; la somme de toutes les lignes vaut ?+19+14.
Ces deux quantités devant être égale, on obtient ? = 47 − 33 = 14.

Comment envoyer un message secret avec plusieurs espions. Imaginons que l’on désire envoyer un message secret.
Par codage, on peut remplacer ce message par un nombre, appelons-le n.
Considérons un polynôme P (X ) = a k X k + · · · + a 1 X + n de degré k dont le terme indépendant vaut exactement n. En
particulier, on a P (0) = n. Un corollaire du théorème fondamental de l’algèbre stipule que le polynôme P est complètement
caractérisé par les valeurs qu’il prend en k + 1 points, par exemple en X = 1, 2, . . . , k + 1.
On engage alors au moins k +1 espions (mieux en engager un peu plus au cas où certains seraient capturés par les «ennemis»).
On donne au i -ème espion le nombre P (i ). Les espions se dispersent (par exemple, pour passer les lignes ennemies). Une

© 2018-2019ÉÀ G. Faccanoni 19
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

fois qu’au moins k + 1 espions sont arrivés à destination, il est aisé de reconstituer le polynôme (on a un système d’au moins
k + 1 équations linéaires pour retrouver les k + 1 coefficients de P ) et ainsi retrouver la valeur secrète n.
Si un espion est capturé et qu’il parle, les ennemis auront à leur disposition un des P (i ), cela ne leur permet nullement de
retrouver n.
De même, si un espion étaient en fait un agent double, connaître P (i ) seul ne sert à rien.
Source : http://michelrigo.wordpress.com/2010/01/30/partage-de-secrets-et-tfa/

E XEMPLE
On se propose de calculer n si k = 2 et on envoie des espions avec les messages suivants :
? espion 1, message 45
? espion 2, message 50
? espion 3, message 57
? espion 4, message 66
k = 2 donc on cherche un polynôme de la forme p(x) = a + bx + c x 2 qui satisfait les conditions p(1) = 45, p(2) = 50,
p(3) = 57 et p(4) = 66. Cela donne le système linéaire

a + b + c = 45


a + 2b + 22 c = 50

a + 3b + 32 c = 57


a + 4b + 42 c = 66

On a 4 équations et 3 inconnues : le système est sur-déterminé.


Négligeons pour le moment la dernière équation et résolvons avec Gauss
  
a +b +c = 45 L 2 ←L 2 −L 1 a+b +c = 45 a+b+c = 45 c =1
L 3 ←L 3 −L 1 L 3 ←L 3 −2L 2
a+2b+4c = 50 −−−−−−−→ b +3c = 5 −−−−−−−−→ b+3c = 5 =⇒ b = 5 − 3c = 2
a+3b+9c = 57 Étape j =1 2b+8c = 12 Étape j =2 2c = 2 a = 45 − b − c = 42
  

Vérifions si la dernière équation est bien satisfaite :

42 + 4 × 2 + 42 × 1 = 66.

Le message secret est donc n = a = 42.

1.4.7 Système sous-déterminé


Un système est sous-déterminé si, après échelonnege, le nombre d’équations significatives est inférieur au nombre d’incon-
nues.

Équilibrage de réactions chimiques Du point de vue mathématique, équilibrer une réaction chimique signifie trouver
des coefficients (dans N ou Q), appelés coefficients stœchiométriques, qui satisfont certaines contraintes.
Toutes ces contraintes dépendent linéairement des coefficients stœchiométriques, ce qui amène tout naturellement à
l’écriture d’un système linéaire.
Typiquement on aura n inconnues mais seulement n − 1 équations linéairement indépendantes : en effet, les coefficients
stœchiométriques ne définissent pas des quantités absolues mais seulement les rapports entre les différents éléments. Par
conséquent, si les coefficients trouvés équilibrent la réaction, alors tous les multiples entiers de ces coefficients équilibrent
aussi la réaction.

E XEMPLE
Si on mélange de la soude caustique et de l’acide sulfurique, on obtient du sulfate de sodium et de l’eau :

?NaOH + ?H SO → ?Na2 SO4 +?H2 O


| {z } | 2{z 4} | {z }
soude caustique acide sulfurique sulfate de sodium

Pour que cette réaction ait lieu, il faut que tous les atomes (par exemple de sodium) qui sont à gauche se retrouvent à

20 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 1 Éléments d’analyse matricielle

droite et vice-versa.
|x NaOH
{z } + y H2 SO4
| {z }
→ z Na2 SO4
| {z }
+w H2 O
soude caustique acide sulfurique sulfate de sodium

On voit bien qu’il nous faut au moins 2 molécules de NaOH à gauche pour tomber sur le Na2 de droite. Le 2OH à
gauche venant de la soude et la yH2 venant de l’acide sulfurique se combinent pour donner wH2 O.


 x = 2z [Na]


x + 2y = 2w [H]


 x + 4y = 4z + w [O]

y =z [S]

On trouve z = y = κ, x = 2κ et w = κ et l’équation est alors équilibrée. On peut alors poser κ = 1.

E XEMPLE
Considérons la réaction
H2 + O 2 → H2 O.
Notons x 1 , x 2 et x 3 les coefficients stœchiométriques

x 1 H2 + x 2 O 2 → x 3 H2 O.

Les contraintes sont :


? la conservation du nombre d’atomes d’hydrogène : 2x 1 = 2x 3 ,
? la conservation du nombre d’atomes d’oxygène : 2x 2 = x 3 .
On note qu’on a 3 inconnues mais seulement 2 équations linéairement indépendantes.
Pour résoudre le problème sans paramètres, fixons arbitrairement un des coefficients, par exemple x 3 = 1. On doit
alors résoudre le système linéaire (
2x 1 = 2
2x 2 = 1
On trouve alors x 1 = 1 et x 2 = 1/2. Si nous voulons des coefficients stœchiométriques entiers, il suffit de multiplier tous
les coefficients par 2 et on a ainsi
2H2 + 1O 2 → 2H2 O.

Astuce
Pour résoudre un système (S) de m équations à n inconnues où m > n on considère un sous-système carré (S 0 ) de n
équations à n inconnues et on résout ce système :
? si (S 0 ) n’admet pas de solution, alors (S) non plus ;
? si (S 0 ) admet une unique solution (c 1 , c 2 , . . . , c n ), alors on vérifie si cette solution vérifie les autres m − n équations du
système (S) :
? si oui, alors (S) admet l’unique solution (c 1 , c 2 , . . . , c n ),
? si non, alors (S) n’admet pas de solution ;
0
? si (S ) admet une infinité de solutions, on cherche parmi ces solutions celles qui vérifient également les autres
équations de (S).

E XEMPLE
Considérons le système de 4 équations à 3 inconnues

x + y + z = 3,



x + 2y + 3z = 6,
(S)


−x − y + 2z = 0,

3x + 2y − 4z = 1,

© 2018-2019ÉÀ G. Faccanoni 21
Chapitre 1 Éléments d’analyse matricielle Mis à jour le Mardi 21 janvier 2020

Pour résoudre (S), on considère le sous-système carré d’ordre 3



x + y + z = 3,

(S 0 ) x + 2y + 3z = 6,

−x − y + 2z = 0,

qu’on peut résoudre par la méthode du pivot de G AUSS


 
 x +y +z=3, L 2 ←L 2 −L 1 x+y +z=3,
L 3 ←L 3 +L 1
x+2y+3z=6, −−−−−−−→ y+2z=3,
3z=3,

−x −y+2z=0,

Ce sous-système admet l’unique solution (1, 1, 1). On étudie alors si elle est aussi solution de l’équation de (S) qui
n’apparaît pas dans (S 0 ) : pour (x, y, z) = (1, 1, 1) on a 3x + 2y − 4z = 1 donc le triplet (1, 1, 1) est solution de (S) et c’est
l’unique.

22 © 2018-2019ÉÀ G. Faccanoni
Chapitre 2
Introduction à Octave/Matlab
2.1 Les environnements MATLAB et Octave
MATLAB et Octave sont des environnements intégrés pour le Calcul Scientifique et la visualisation. Ils sont écrits principale-
ment en langage C et C++. MATLAB est distribué par la société The MathWorks (voir le site www.mathworks.com). Son nom
vient de MATrix LABoratory, car il a été initialement développé pour le calcul matriciel. Octave, aussi connu sous le nom
de GNU Octave (voir le site www.octave.org), est un logiciel distribué gratuitement. Vous pouvez le redistribuer et/ou le
modifier selon les termes de la licence GNU General Public License (GPL) publiée par la Free Software Foundation.
Il existe des différences entre MATLAB et Octave, au niveau des environnements, des langages de programmation ou des
toolboxes (collections de fonctions dédiées à un usage spécifique). Cependant, leur niveau de compatibilité est suffisant pour
exécuter la plupart des programmes de ce cours indifféremment avec l’un ou l’autre. Quand ce n’est pas le cas – parce que
les commandes n’ont pas la même syntaxe, parce qu’elles fonctionnent différemment ou encore parce qu’elles n’existent
pas dans l’un des deux programmes – nous l’indiquons et expliquons comment procéder.
Nous utiliserons souvent dans la suite l’expression “commande MATLAB” : dans ce contexte, MATLAB doit être compris
comme le langage utilisé par les deux programmes MATLAB et Octave. De même que MATLAB a ses toolboxes, Octave
possède un vaste ensemble de fonctions disponibles à travers le projet Octave-forge. Ce dépôt de fonctions ne cesse de
s’enrichir dans tous les domaines. Certaines fonctions que nous utilisons dans ce polycopié ne font pas partie du noyau
d’Octave, toutefois, elles peuvent être téléchargées sur le site octave.sourceforge.net. Une fois qu’on a installé MATLAB
ou Octave, on peut accéder à l’environnement de travail, caractérisé par le symbole d’invite de commande : >> sous
MATLAB et octave:1> sous Octave. Il représente le prompt : cette marque visuelle indique que le logiciel est prêt à lire une
commande. Il suffit de saisir à la suite une instruction puis d’appuyer sur la touche «Entrée». 1

2.2 Premiers pas


Lorsqu’on démarre Octave, une nouvelle fenêtre va s’ouvrir, c’est la fenêtre principale qui contient trois onglets : l’onglet
“Fenêtre de commandes”, l’onglet “Éditeur” et l’onglet “Documentation”.

2.2.1 Fenêtre de commandes : mode interactif


L’onglet “Fenêtre de commandes” permet d’entrer directement des commandes et dès qu’on écrit une commande, Octave
l’exécute et renvoie instantanément le résultat. L’invite de commande se compose de deux chevrons (>>) et représente le
prompt : cette marque visuelle indique qu’Octave est prêt à lire une commande. Il suffit de saisir à la suite une instruction
puis d’appuyer sur la touche «Entrée». La console Octave fonctionne comme une simple calculatrice : on peut saisir une
expression dont la valeur est renvoyée dès qu’on presse la touche «Entrée». Voici un exemple de résolution d’un système
d’équations linéaires :
>> A = [2 1 0; -1 2 2; 0 1 4]; % Input 3 x 3 matrix
>> b = [1; 2; 3]; % Input column vector
>> soln = A\b % Solve A*x = b by left division
soln =
0.25000
0.50000
0.62500

Le symbole % indique le début d’un commentaire : tous les caractères entre % et la fin de la ligne sont ignorés par
l’interpréteur.
Le symbole ; a deux fonctions : il supprime l’affichage d’un résultat intermédiaire et il sépare les lignes d’une matrice. Si
on omet le symbole ;, le résultat sera affiché. Par exemple

1. Si Octave n’est pas installé sur vos machines, on pourra utiliser la version en ligne https://octave-online.net/.

23
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

>> A = [2 1 0; -1 2 2; 0 1 4]
A =
2 1 0
-1 2 2
0 1 4
Ce mode interactif est très pratique pour rapidement tester des instructions et directement voir leurs résultats. Son
utilisation reste néanmoins limitée à des programmes de quelques instructions. En effet, devoir à chaque fois retaper toutes
les instructions s’avérera vite pénible.
Si on ferme Octave et qu’on le relance, comment faire en sorte que l’ordinateur se souvienne de ce que nous avons tapé ? On
ne peut pas sauvegarder directement ce qui se trouve dans la onglet “Fenêtre de commandes”, parce que cela comprendrait
à la fois les commandes tapées et les réponses du système. Il faut alors avoir préalablement écrit un fichier avec uniquement
les commandes qu’on a tapées et l’avoir enregistré sur l’ordinateur avec l’extension .m. Une fois cela fait, on demandera à
Octave de lire ce fichier et exécuter son contenu, instruction par instruction, comme si on les avait tapées l’une après l’autre
dans la Fenêtre de commandes. Ainsi plus tard on pourra ouvrir ce fichier et lancer Octave sans avoir à retaper toutes les
commandes. Passons alors à l’onglet “Éditeur”.

2.2.2 Éditeur : mode script


On voit qu’il n’y a rien dans cette nouvelle fenêtre (pas d’en-tête comme dans la “Fenêtre de commandes”). Ce qui veut
dire que ce fichier est uniquement pour les commandes : Octave n’interviendra pas avec ses réponses lorsque on écrira le
programme et ce tant que on ne le lui demandera pas. Ayant sauvé le programme dans un fichier avec l’extension .m, pour
le faire tourner et afficher les résultats dans la “Fenêtre de commandes” il suffira d’appuyer sur la touche «F5». Si on a fait
une faute de frappe, Octave le remarquera et demandera de corriger.
Maintenant qu’on a sauvé le programme, on est capable de le recharger.
Un fichier de script contient des instructions qui sont lues et exécutées séquentiellement par l’interpréteur d’Octave. Ce
sont obligatoirement des fichiers au format texte. Copier par exemple les lignes suivantes dans un fichier appelé first.m 2
A = [2 1 0; -1 2 2; 0 1 4];
b = [1; 2; 3];
soln = A\b
Appuyer sur la touche «F5», cliquer sur “Changer de répertoire” et regarder le résultat dans l’onglet “Fenêtre de commandes”.
Sinon, si ce fichier se trouve dans le répertoire courant d’Octave, pour l’exécuter il suffit de taper son nom (sans l’extension)
sur la ligne de commande d’Octave :
>> first
On peut aussi l’exécuter au moyen de la commande source qui prend en argument le nom du fichier ou son chemin d’accès
(complet ou relatif au répertoire courant). Par exemple :
>> source("Bureau/TP1/first.m")

2.3 Notions de base


2.3.1 Variables et affectation
Une variable peut être vue comme une boîte représentant un emplacement en mémoire qui permet de stocker une valeur et
à qui on a donné un nom afin de facilement l’identifier (boîte ← valeur) :

>> x=1 >> x=[2 5] >> x=’c’


x = 1 x = x = c
2 5

L’affectation x=[2 5] crée une association entre le nom x et le vecteur [2, 5] : la boîte de nom x contient le vecteur [2, 5].
[2, 5]

³ 2 1 0 ´ µ x1 ¶ ³ 1 ´
2. Ces instructions calculent la solution du système linéaire −1 2 2 x2 = 2 . Noter l’usage des points-virgules à la fin de certaines instructions du
0 14 x3 3
fichier : ils permettent d’éviter que les résultats de ces instructions soit affiché à l’écran pendant l’exécution du script.

24 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 2 Introduction à Octave/Matlab

Il faut bien prendre garde au fait que l’instruction d’affectation (=) n’a pas la même signification que le symbole d’égalité
(=) en mathématiques (ceci explique pourquoi l’affectation de 1 à x, qu’en Octave s’écrit x = 1, en algorithmique se note
souvent x ← 1).
Une fois une variable initialisée, on peut modifier sa valeur en utilisant de nouveau l’opérateur d’affectation (=). La valeur
actuelle de la variable est remplacée par la nouvelle valeur qu’on lui affecte. Dans l’exemple précédent, on initialise une
variable à la valeur 1 et on remplace ensuite sa valeur par le vecteur [1, 2].
Il est très important de donner un nom clair et précis aux variables. Par exemple, avec des noms bien choisis, on comprend
tout de suite ce que calcule le code suivant :
base = 8
hauteur = 3
aire = base * hauteur / 2
Octave distingue les majuscules des minuscules. Ainsi mavariable, Mavariable et MAVARIABLE sont des variables diffé-
rentes.
Les noms de variables peuvent être non seulement des lettres, mais aussi des mots ; ils peuvent contenir des chiffres (à
condition toutefois de ne pas commencer par un chiffre), ainsi que certains caractères spéciaux comme le tiret bas «_»
(appelé underscore en anglais). Cependant, certains mots sont réservés :
ans Nom pour les résultats
eps Le plus petit nombre tel que 1+eps>1
inf ∞
NaN Not a number
i ou j i
pi π

>> 5/0
warning: division by zero
ans = Inf
>> 0/0
warning: division by zero
ans = NaN
>> 5*NaN % Most operations with NaN result in NaN
ans = NaN
>> NaN==NaN % Different NaN’s are not equal!
ans = 0
>> eps
ans = 2.2204e-16

2.4 Opérations arithmétiques


Dans Octave on a les opérations arithmétiques usuelles :
+ Addition :
- Soustraction
* Multiplication
/ Division
ˆ Exponentiation
Quelques exemples :

>> a = 100 >> c = a-b >> a^b


a = 100 c = 83 ans = 1.0000e+34
>> b = 17 >> a/b
b = 17 ans = 5.8824

Les opérateurs arithmétiques possèdent chacun une priorité qui définit dans quel ordre les opérations sont effectuées. Par
exemple, lorsqu’on écrit 1 + 2 * 3, la multiplication va se faire avant l’addition. Le calcul qui sera effectué est donc 1 +
(2 * 3). Dans l’ordre, l’opérateur d’exponentiation est le premier exécuté, viennent ensuite les opérateurs *, /, // et %, et
enfin les opérateurs + et -.
Lorsqu’une expression contient plusieurs opérations de même priorité, ils sont évalués de gauche à droite. Ainsi, lorsqu’on
écrit 1 - 2 - 3, le calcul qui sera effectué est (1 - 2) - 3. En cas de doutes, vous pouvez toujours utiliser des parenthèses
pour rendre explicite l’ordre d’évaluation de vos expressions arithmétiques.
Il existe aussi les opérateurs augmentés :

© 2018-2019ÉÀ G. Faccanoni 25
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

a += b équivaut à a = a+b
a -= b équivaut à a = a-b
a *= b équivaut à a = a*b
a /= b équivaut à a = a/b
a ˆ = b équivaut à a = aˆ b

2.5 Matrices
Pour définir une matrice on doit écrire ses éléments de la première à la dernière ligne, en utilisant le caractère ; pour
séparer les lignes (ou aller à la ligne). Par exemple, la commande
>> A = [ 1 2 3; 4 5 6]
ou la commande
>> A = [ 1 2 3
4 5 6]
donnent
A =
1 2 3
4 5 6
c’est-à-dire, une matrice 2 × 3 dont les éléments sont indiqués ci-dessus.
Un vecteur colonne est une matrice 1 × n, un vecteur ligne est une matrice n × 1 :
>> b = [1 2 3]
b =
1 2 3

>> b = [1; 2; 3]
b =
1
2
3

L’opérateur transposition s’obtient par la commande ’ :


>> b = [1 2 3]’
b =
1
2
3
En Octave, les éléments d’une matrice sont indexés à partir de 1. Pour extraire les éléments d’une matrice on utilise la
commande A(i,j) où i et j sont la ligne et la colonne respectivement. On peut extraire une sous-matrice en déclarant
l’indice de début (inclus) et l’indice de fin (inclus), séparés par deux-points : A(i:j), ou encore une sous-matrice en
déclarant l’indice de début (inclus), l’indice de fin (inclus) et le pas, séparés par des deux-points : A(i:j:k). Cette opération
est connue sous le nom de slicing (en anglais).
A(2,3) % element A_{23}
A(:,3) % vecteur colonne [A_{13};...;A_{n3}]
A(1:4,3) % [A_{13};...A_{43}] premieres 4 lignes du vecteur colonne [A_{13};...A_{n3}]
A(1,:) % vecteur ligne [A_{11},...,A_{1n}]
A(2,3:end) % [A_{23},...,A_{2n}] vecteur ligne
diag(A) % vecteur colonne [A_{11};...;A_{nn}] contenant la diagonale de A
Voici des exemples :
>> A = [8 1 6; 3 5 7; 4 9 2]
A =
8 1 6
3 5 7
4 9 2

>> A(2,3) % Element in row 2, column 3


ans = 7
>> A(:,2) % Second column

26 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 2 Introduction à Octave/Matlab

ans =
1
5
9

>> A(2:3,2:3) % The 2 x 2 submatrix in lower right corner


ans =
5 7
9 2

ATTENTION
Dans Octave les indices commences à 1, ainsi A(1,:) indique la première ligne, A(2,:) la deuxième etc.

2.5.1 Matrices particulières


Construction de matrices particulières :
¬ La commande zeros(m,n) construit la matrice rectangulaire nulle O, i.e. celle dont tous les éléments ai j sont nuls
pour i = 1, . . . , m et j = 1, . . . , n.
La commande zeros(n) est un raccourci pour zeros(n,n).
­ La commande ones(m,n) construit une matrice rectangulaire dont les éléments ai j sont égaux à 1 pour i = 1, . . . , m
et j = 1, . . . , n.
La commande ones(n) est un raccourci pour ones(n,n).
® La commande eye(m,n) renvoie une matrice rectangulaire dont les éléments valent 0 exceptés ceux de la diagonale
principale qui valent 1.
commande eye(n) (qui est un raccourci pour eye(n,n)) renvoie une matrice carrée de dimension n appelée matrice
identité et notée I.
¯ Enfin, la commande A=[] définit une matrice vide.

>> Z=zeros(2,3) >> O=ones(3,2) >> E=eye(2,5) >> A=[]


Z = O = E = A = [](0x0)
0 0 0 1 1 Diagonal Matrix
0 0 0 1 1 1 0 0 0 0
1 1 0 1 0 0 0

Construction de vecteurs :
¬ x=[debut:pas:fin]
­ x=linspace(debut,fin,N+1)

x = [-5 : 0.25 : 1] % x = -5, -4.75, -4.5 , ... , 0.5, 0.75, 1 % on a 25 elements


y = linspace(-5, 1, 25) % idem donc pas=(fin-debut)/(N) si on a N+1 elements

2.5.2 Opérations arithmétiques


Opérations sur les matrices (lorsque les dimensions sont compatibles) :
? Somme C = A + B, i.e. Ci j = Ai j + Bi j : C=A+B
? Produit C = AB, i.e. Ci j = k=1 Ai k + Bk j : C=A*B
P
NB il s’agit du produit matriciel !
? Division à droite C = AB−1 : C=A/B
? Division à gauche C = A−1 B : C=A\B
NB si B est un vecteur colonne, C est un vecteur colonne solution du système linéaire AC = B)
? Élévation à la puissance C = AAA : C=A^3
? Calcul d’un déterminant (si la matrice est carrée) : det(A)
? Calcul de la matrice inverse (si la matrice est inversible) : inv(A)

© 2018-2019ÉÀ G. Faccanoni 27
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

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

>> B=ones(2,3)
B =
1 1 1
1 1 1

>> C=[1 2; 3 4; 5 6]
C =
1 2
3 4
5 6

>> D=eye(3,2)
D =
Diagonal Matrix
1 0
0 1
0 0

>> E=A(1:2,1:2)
E =
1 2
4 5

>> A+B
ans =
2 3 4
5 6 7

>> A*C
ans =
22 28
49 64

>> A/B
ans =
1.00000 1.00000
2.50000 2.50000

>> A\B
ans =
-5.0000e-01 -5.0000e-01 -5.0000e-01
8.3267e-17 8.3267e-17 8.3267e-17
5.0000e-01 5.0000e-01 5.0000e-01

>> E^2
ans =
9 12
24 33

Quand on tente d’effectuer des opérations entre matrices de dimensions incompatibles on obtient un message d’erreur.
>> A+C
error: operator +: nonconformant arguments (op1 is 2x3, op2 is 3x2)

2.5.3 Opérations pointées


Quand il s’agit des opérations impliquant des multiplication (donc le produit mais aussi la division et l’élévation à la
puissance), la multiplication de deux matrices, avec les notations habituelles, ne signifie pas la multiplication élément
par élément mais la multiplication au sens mathématique du produit matriciel. C’est pour cela qu’Octave utilise deux
opérateurs distincts pour représenter la multiplication matricielle : * et .*. Le point placé avant l’opérateur indique que

28 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 2 Introduction à Octave/Matlab

l’opération est effectuée élément par élément. Les autres opérations de ce type sont la division à droite et l’élévation à la
puissance :
? Produit Ci j = Ai j Bi j : C=A.*B NB il s’agit du produit d’Hadamard et non pas du produit matriciel
? Division Ci j = Ai j /Bi j : C=A./B
? Élévation à la puissance Ci j = A3i j : C=A.^3

>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B=[0 2 0; 0 0 1]
B =
0 2 0
0 0 1
>> A.*B
ans =
0 4 0
0 0 6
>> A*B
error: operator *: nonconformant arguments (op1 is 2x3, op2 is 2x3)

2.5.4 Opérateurs de comparaison et connecteurs logiques


Les opérateurs de comparaison renvoient 1 si la condition est vérifiée, 0 sinon. Ces opérateurs sont

On écrit Ça signifie
< <
> >
<= ≤
>= ≥
== =
~= 6=

Bien distinguer l’instruction d’affectation = du symbole de comparaison ==.

ATTENTION
Les opérateurs de comparaison agissent élément par élément, ainsi lorsqu’on les applique à une matrice le résultat est un
matrice qui contient que des 0 ou 1 (parfois appelée “masque”). Par exemple

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


>> A>B
ans =
0 0 0
1 0 1

Pour combiner des conditions complexes (par exemple x > −2 et x 2 < 5), on peut combiner les opérateurs de comparaison
avec les connecteurs logiques :

On écrit Ça signifie
& et
| ou
~ non

Par exemple

>> (A > B) | (B > 5)


ans =
1 1 1
1 0 1

© 2018-2019ÉÀ G. Faccanoni 29
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

2.6 Fonctions
De très nombreuses fonctions disponibles dans Octave/Matlab sont définies au moyen de la commande function. Par
convention, chaque définition de fonction est stockée dans un fichier séparé qui porte le nom de la fonction suivi de
l’extension .m Ces fichiers s’appellent des fichiers de fonction. Notez que c’est la même extension que les fichiers de scripts
mais, de plus, il faut absolument que le fichier s’appelle comme la fonction qu’il contient.

Fichier myfunc.m
% Description de la fonction
function [y1,...,yN] = myfunc(x1,...,xM)
instruction_1
instruction_2
...
[y1,...,yN] = ...
end

La structure type d’un fichier de fonction est la suivante :


? toute ligne commençant par un # ou un % est considérée comme un commentaire
? les premières lignes du fichier sont des commentaires qui décrivent la syntaxe de la fonction. Ces lignes seront
affichées si on utilise la commande help myfunc
? la fonction elle-même est déclarée au moyen de la commande function dans laquelle on indique les arguments
(x1,...,xM) et la valeur de retour [y1,...,yN]
? cette déclaration est suivie du corps de la définition qui est un bloc d’instructions à exécuter et se termine par le
mot-clé end ou endfunction
Voici un exemple qui prend en entrée un vecteur de valeurs et renvoie la moyenne et la déviation standard :

Fichier stat.m Script


function [m,s] = stat(x) values = [12.7, 45.4, 98.9, 26.6, 53.1];
n = length(x); [average,stdeviation] = stat(values)
m = sum(x)/n;
s = sqrt(sum((x-m).^2/n));
end

p fonction qui calcule l’aire d’un triangle en fonction des longueurs a, b et c des côtés grâce à
À titre d’exemple, écrivons une
la formule de Héron : Aire = p(p − a)(p − b)(p − c) où p = (a + b + c)/2 est le demi-périmètre. On crée pour cela un fichier
au format texte appelé heron.m contenant les instructions suivantes
% Calcule l’aire s d’un triangle par la formule de Heron.
% a, b, c sont les longueurs des aretes.
function s = heron(a, b, c)
p = (a+b+c)/2;
s = sqrt(p*(p-a)*(p-b)*(p-c));
endfunction

La définition donnée ci-dessus peut être testée directement en chargeant le fichier heron.m avec la commande source et
en invoquant la fonction sur la ligne de commande. Par exemple :
>> source("Bureau/TP1/heron.m")
>> heron(3,5,4)
ans = 6
Un fichier de fonction peut en réalité contenir plusieurs fonctions déclarées au moyen de la commande function mais
seule la première définition est accessible depuis un script. Les autres définitions concernent des fonctions annexes (on dit
parfois des sous-fonctions) qui ne peuvent être utilisées que dans la définition de la fonction principale.

2.6.1 Fonctions anonymes (i.e. lambda function)


La syntaxe usuelle d’une fonction anonyme est fun=@(arg1, arg2,...,argn)[expr]. Quand on définit une fonction
avec function y=f(x)... on fait deux choses : on crée l’objet «fonction qui a x associe f (x)» puis on affecte cet objet à
une variable (globale) f . Ensuite, on peut l’évaluer :

30 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 2 Introduction à Octave/Matlab

Fichier de fonction mydouble.m Fichier de script test.m


function y=mydouble(x)
y=2*x mydouble(2)
endfunction

ATTENTION
Pour éviter de surcharger une fonction déjà définie dans Matlab/Octave, prendre l’habitude d’appeler ses fonctions par
my...

On peut aussi créer une fonction sans lui donner de nom, c’est une fonction anonyme. Dans ce cas, la fonction sera écrite
directement dans le fichier de script.

x 7→ 2x

@(x) [2*x]

Cette écriture se lit «fonction qui a x associe 2x» (i.e. x 7→ 2x).


La fonction est dite anonyme, parce qu’elle n’a pas de nom explicite. Le symbole @ permet la matérialisation de cette création
de fonction anonyme :
@(x)[2*x] % x -> 2x

On peut bien sur lui donner encore un nom :


mydouble = @(x)[2*x] % mydouble(x)=2x
mydouble(2) % mydouble(2)

Nous utiliserons les fonctions anonymes surtout pour écrite directement la fonction dans le fichier de script sans créer
un fichier séparé.

2.7 Graphes de fonctions R → R


Pour tracer le graphe d’une fonction f : [a, b] → R, il faut tout d’abord générer une liste de points x i où évaluer la fonction f ,
puis la liste des valeurs f (x i ) et enfin, avec la fonction plot, Octave reliera entre eux les points (x i , f (x i )) par des segments.
Plus les points sont nombreux, plus le graphe est proche du graphe de la fonction f .
Pour générer les points x i on peut utiliser
? soit l’instruction linspace(a,b,n) qui construit la liste de n éléments

b−a
[a, a + h, a + 2h, . . . , b = a + nh] avec h =
n −1

? soit l’instruction [a:h:b] qui construit la liste de n = E ( b−a


h ) + 1 éléments

[a, a + h, a + 2h, . . . , a + nh]

Dans ce cas, attention au dernier terme : b peut ne pas être pris en compte.
Voici un exemple avec une sinusoïde :
x = linspace(-5,5,101); # h=(5+5)/(101-1)=0.1 donc x = [-5:0.1:5] et on a 101 elements
y = sin(x); # NB operation is broadcasted to all elements of the array
plot(x,y)

On obtient une courbe sur laquelle on peut zoomer, modifier les marges et sauvegarder dans différents formats.
Si la fonction n’est pas prédéfinie (comme dans l’exemple où on a utilisé la fonction sin), il est bonne pratique de la définir
pour qu’elle opère composante par composante lorsqu’on lui passe un vecteur. Par exemple, on se propose de tracer la
fonction

f : [−2; 2] → R
1
x 7→
1 + x2
Suivant la façon de définir la fonction, on pourra utiliser l’une des deux méthodes suivantes.

© 2018-2019ÉÀ G. Faccanoni 31
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

Méthode 1. Deux étapes :


1.1. Dans le fichier f.m on écrit la fonction informatique suivante
function y=f(x)
y=1./(1+x.^2);
end

1.2. Dans un script ou dans la prompt on écrit


x=[-2:0.5:2];
y=f(x) % evaluation en plusieurs points
plot(x,y) % affichage des points (x_i,y_i)

Méthode 2. Parfois on peut éviter la création d’un fichier juste pour la définition de la fonction grâce aux fonctions
anonymes. Dans un script ou dans la prompt on écrit les instructions suivantes :
f=@(x)[1./(1+x.^2)] # declaration de la fonction
x=[-2:0.5:2];
y=f(x) % evaluation en plusieurs points
plot(x,y) % affichage des points (x_i,y_i)

Dans les deux cas, la variable x étant potentiellement un tableau, les opérations /, * et \^ agissant sur elle doivent être
remplacées par les opérations point correspondantes ./, .* et \.^ qui opèrent composante par composante.

2.7.1 Plusieurs courbes sur le même repère


On peut tracer plusieurs courbes sur la même figure.
Par exemple, dans la figure suivante, on a tracé la même fonction : la courbe bleu correspond à la grille la plus grossière, la
courbe rouge correspond à la grille la plus fine :
a = linspace(-5,5,5); % a = [-5,-3,-1,1,3,5]
fa = sin(a);
b = linspace(-5,5,10); % b = [-5,-4,-3,...,5]
fb = sin(b);
c = linspace(-5,5,101); % c = [-5,-4.9,-4.8,...,5]
fc = sin(c);
plot(a,fa,b,fb,c,fc)
% la derniere ligne peut etre remplacee par
% hold on
% plot(a,fa)
% plot(b,fb)
% plot(c,fc)
% hold off
Pour tracer plusieurs courbes sur le même repère, on peut les mettre les unes à la suite des autres en spécifiant la couleur
et le type de trait, changer les étiquettes des axes, donner un titre, ajouter une grille, une légende etc.
Par exemple, dans le code ci-dessous "r-" indique que la première courbe est à tracer en rouge (red) avec un trait continu,
et "g." que la deuxième est à tracer en vert (green) avec des points.
x = linspace(-5,5,101); # x = [-5,-4.9,-4.8,...,5] with
101 elements
y1 = sin(x); # operation is broadcasted to all elements of
the array
y2 = cos(x);
plot(x,y1,"r-",x,y2,"g.")
legend([’sinus’;’cosinus’])
xlabel(’abscisses’)
ylabel(’ordonnees’)
title(’Comparaison de sin(x) et cos(x)’)
grid
Voir la table 2.1 et la documentation de Matlab pour connaître les autres options.

2.7.2 Plusieurs “fenêtres” graphiques


Avec figure() on génère une nouvelle fenêtres graphique :

32 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 2 Introduction à Octave/Matlab

linestyle= color= marker=


- solid line r red . points
– dashed line g green , pixel
: dotted line b blue o filled circles
-. dash-dot line c cyan v triangle down
m magenta ^ triangle up
y yellow > triangle right
w white < triangle left symbols
k black * star
+ plus
s square
p pentagon
x x
X x filled
d thin diamond
D diamond

TABLE 2.1 – Quelques options de plot

x = [-pi:0.05*pi:pi];
figure(1)
plot(x, sin(x), ’r’)
figure(2)
plot(x, cos(x), ’g’)

2.7.3 Plusieurs repères dans la même fenêtre


La fonction subplot(x,y,z) subdivise la fenêtre sous forme d’une matrice (x,y) et chaque case est numérotée, z étant le
numéro de la case où afficher le graphe. La numérotation se fait de gauche à droite, puis de haut en bas, en commençant
par 1.

x = [-pi:0.05*pi:pi];

subplot(4,3,1)
plot(x, sin(x), ’r’)

subplot(4,3,5)
plot(x, cos(x), ’g’)

subplot(4,3,9)
plot(x, x.*x, ’b’)

subplot(4,3,12)
plot(x, exp(-x.*x), ’m’)

E XEMPLE
Dans le code suivant on voit comment tracer plusieurs courbes dans un même graphique (avec légende), plusieurs
graphe sur une même figure et plusieurs figures.
figure(1)
x=[-2:0.5:2];

© 2018-2019ÉÀ G. Faccanoni 33
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

subplot(2,3,2)
plot(x,x,’r-’,x,exp(x),’b*-’)
legend([’y=x’;’y=e^x’])
subplot(2,3,4)
plot(x,x.^2)
title(’y=x^2’)
subplot(2,3,5)
plot(x,x.^3)
xlabel(’Axe x’)
subplot(2,3,6)
plot(x,sqrt(x))

figure(2)
x=linspace(0.1,exp(2),100);
plot(x,log(x));

2.8 Polynômes
Soit Rn [x] l’ensemble des polynômes de degré inférieur ou égale à n, n ∈ N. Tout polynôme de cet espace vectoriel s’écrit de
manière unique comme
n
ai x i = a0 + a1 x + · · · + an x n , où a i ∈ R pour i = 0, . . . n.
X
p n (x) =
i =0

Les n + 1 valeurs réels a 0 , a 1 , . . . , a n sont appelés les coordonnées de p n dans la base canonique 3 de Rn [x] et on peut les
stocker dans un vecteur p :
p = coord(p n , C n ) = (a n , a n−1 , . . . , a 2 , a 1 , a 0 ) ∈ Rn+1
Sous Octave le polynôme p(x) = a n x n + a n−1 x n−1 + · · · + a 1 x + a 0 ∈ Rn [x] est défini par un vecteur p de dimension n + 1
contenant les coefficients { a i }i =0,...,n rangés dans l’ordre décroissant des indices, c’est-à-dire que l’on a p(1) = a n , . . .,
p(n + 1) = a 0 . Par exemple, pour construire le polynôme p(x) = 2 − x + x 2 nous écrirons
p=[1 -1 2]

1. La commande polyval permet d’évaluer le polynôme p (la fonction polynomiale) en des points donnés. La syntaxe
est polyval(p,x) où x est une valeur numérique ou un vecteur. Dans le second cas on obtient un vecteur contenant
les valeurs de la fonction polynomiale aux différents points spécifiés dans le vecteur x. Par exemple, pour évaluer le
polynôme p(x) = 1 + 2x + 3x 2 en x = (−1, 0, 1, 2) nous écrirons
p=[3 2 1] % p(x)=1+2x+3x^2
y=polyval(p,[-1,0,1,2])

2. Utilisée avec la commande fplot, la commande polyval permet de tracer le graphe de la fonction polynomiale
sur un intervalle [xmin, xmax] donné. La syntaxe de l’instruction est (’polyval([a_n,...,a_0],x)’, [x_min,
x_max]). Par exemple, pour tracer le graphe du polynôme p(x) = 1 + 2x + 3x 2 sur l’intervalle [−2; 2] nous écrirons
fplot(’polyval([3 2 1],x)’,[-2,2])

3. La commande roots calcule les racines du polynôme dans C. La syntaxe est roots(p). Par exemple, pour calculer
les racines du polynôme p(x) = 1 − x 2 nous écrirons
p=[-1 0 1] % p(x)=-x^2+1
racines=roots(p)

4. La commande poly définit un polynôme à partir de ses racines r 0 , r 1 , . . . r n comme suit : p(x) = ni=0 (x −r i ). La syntaxe
Q

est poly(r) où r est un vecteur contenant ses racines. Par exemple, pour définir le polynôme p(x) = (x − 1)(x + 1)
nous écrirons
poly([1 -1])

5. Somme de deux polynômes : si les deux polynômes n’ont pas même degré, il faut ajouter des zéros en début du
polynôme de plus petit degré afin de pouvoir calculer l’addition des deux vecteurs représentatifs. Par exemple,

3. La base canonique de l’espace vectoriel Rn [x] est l’ensemble C n = 1, x, x 2 , . . . , x n


© ª

34 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 2 Introduction à Octave/Matlab

p=[1 2 3 4] % p(x)= 4 + 3x + 2x^2 +x^3


q=[0 4 5 6] % q(x)= 6 + 5x + 4x^2 (+0x^3)
s=p+q % s(x)=10 + 8x + 6x^2 +x^3

6. La commande conv permet de calculer le polynôme u produit de deux polynômes p et q. La syntaxe est conv(p,q).
Par exemple, pour calculer u(x) = p(x)q(x) avec p(x) = 4 + 3x + 2x 2 + x 3 et q(x) = 6 + 5x + 4x 2 nous écrirons
p=[1 2 3 4] % p(x)=4+3x+3x^2+x^3
q=[4 5 6] % q(x)=6+5x+4x^2
u=conv(p,q) % u(x)=24+38x+43x^2+28x^3+13x^4+4x^5

7. La commande deconv permet de calculer les polynômes q et r quotient et reste de la division du polynôme u par
le polynôme p. La syntaxe est conv(u,p). Par exemple, pour calculer q et r tel que u(x) = q(x)p(x) + r (x) avec
u(x) = 24 + 38x + 43x 2 + 28x 3 + 13x 4 + 4x 5 et p(x) = 4 + 3x + 2x 2 + x 3 nous écrirons
u=[4 13 28 43 38 25] % u(x)=25+38x+43x^2+28x^3+13x^4+4x^5
p=[1 2 3 4] % p(x)=4+3x+3x^2+x^3
[q,r]=deconv(u,p)

8. La commande polyder permet de calculer le polynôme d dérivée d’un polynôme p. La syntaxe est polyder(p). Par
exemple, pour calculer p 0 (x) avec p(x) = 1 + 2x + 3x 2 nous écrirons
p=[3 2 1] % p(x) =1+2x+3x^2
polyder(p) % p’(x)=2+6x
Rx
9. La commande polyint permet de calculer le polynôme 0 p(t ) dt quiR x s’annule en 0 et qui est une primitive d’un
polynôme p. La syntaxe est polyint(p). Par exemple, pour calculer 0 p(t ) dt avec p(x) = 1 + x 2 nous écrirons
p=[1 0 1] % p(x)=1+x^2
integral=polyint(p) % int(p,0..x)=x+x^3/3 donc integral=[1/3 0 1 0]

10. Utilisée avec la commande polyval, la commandeR polyint permet de calculer l’intégrale d’un polynôme sur un
3
intervalle [a,b] donné. Par exemple, pour calculer 0 p(t ) dt avec p(x) = 1 + x 2 nous écrirons
area=polyval(integral,3)-polyval(integral,0) % area=3+27/3-0=12

11. La commande polyfit permet de calculer le polynôme de Rm [x] de meilleure approximation au sens des moindres
carrés d’un ensemble de points. La syntaxe est polyfit(xx,yy,m) où xx et yy sont deux vecteurs de n composantes
et m le degré du polynôme cherché. Si m = n on obtient le polynôme d’interpolation. Par exemple, pour calculer
l’équation de la droite de meilleur approximation de l’ensemble { (0, 0.1), (1, 0.9), (2, 2) } nous écrirons :
xx=[0 1 2]
yy=[0.1 0.9 2]
polyfit(xx,yy,1)

Pour calculer le polynôme d’interpolation du même ensemble on pose m = 2 et on écrit :


polyfit(xx,yy,2)

12. Pour afficher le polynôme de façon naturelle il faut utiliser la fonction polyout. Par exemple,
p=[3 2 1]
polyout(p,’x’)

2.9 Structure conditionnelle


Supposons vouloir calculer la valeur y = f (x) d’un nombre x selon la règle suivante :

x


si x ≤ −5,

100 si − 5 < x ≤ 0,
y=


 x2 si 0 < x < 10,

x −2 sinon.

On a besoin d’une instruction qui opère une disjonction de cas. En Octave il s’agit de l’instruction de choix introduite par le
mot-clé if. La syntaxe complète est la suivante :

© 2018-2019ÉÀ G. Faccanoni 35
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

if condition_1
instruction_1.1
instruction_1.2
...
elseif condition_2
instruction_2.1
instruction_2.2
...
...
else
instruction_n.1
instruction_n.2
...
end
où condition_1, condition_2. . . représentent des ensembles d’instructions dont la valeur est 1 ou 0 (on les obtient en gé-
néral en utilisant les opérateurs de comparaison). La première condition condition_i ayant la valeur 1 entraîne l’exécution
des instructions instruction_i.1, instruction_i.2. . . Si toutes les conditions sont 0, les instructions instruction_n
.1, instruction_n.2. . . sont exécutées. Les blocs elseif et else sont optionnels.
Voici un exemple pour établir si un nombre est positif : dans le fichier sign_of.m on sauvegarde la fonction
function sign=sign_of(a)
if a < 0
sign = ’negative’
elseif a > 0
sign = ’positive’
else
sign = ’zero’
end
end
Dans la “Fenêtre des commandes” on peut alors tester notre fonction :
>> sign_of(-1.5)
sign = negative
ans = negative
>> sign_of(2)
sign = positive
ans = positive
>> sign_of(0)
sign = zero
ans = zero

2.10 Structures itératives


Les structures de répétition se classent en deux catégories : les répétitions inconditionnelles pour lesquelles le bloc d’instruc-
tions est à répéter un nombre donné de fois et les répétitions conditionnelles pour lesquelles le bloc d’instructions est à
répéter autant de fois qu’une condition est vérifiée.

2.10.1 Répétition for


Lorsque l’on souhaite répéter un bloc d’instructions un nombre déterminé de fois, on peut utiliser un compteur actif,
c’est-à-dire une variable qui compte le nombre de répétitions et conditionne la sortie de la boucle.
La syntaxe de la commande for est schématiquement
for var = expression
instruction_1
instruction_2
end
expression peut être un vecteur ou une matrice. Par exemple, le code suivant calcule les 12 premières valeurs de la suite
de Fibonacci définie par la relation de récurrence u n = u n−1 + u n−2 avec pour valeurs initiales u 0 = u 1 = 1 :
n = 12;
u = ones(1, n);
for i = 3:n

36 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 2 Introduction à Octave/Matlab

u(i) = u(i-1)+u(i-2);
end
disp(u)
Le résultat affiché est
1 1 2 3 5 8 13 21 34 55 89 144
Il est possible d’imbriquer des boucles, c’est-à-dire que dans le bloc d’une boucle, on utilise une nouvelle boucle.
for x = [10,20,30,40,50] % for x = 10:10:50
for y=[3,7]
disp(x+y)
end
end
Dans ce petit programme x vaut d’abord 10, y prend la valeur 3 puis la valeur 7 (le programme affiche donc d’abord 13, puis
17). Ensuite x = 20 et y vaut de nouveau 3 puis 7 (le programme affiche donc ensuite 23, puis 27). Au final le programme
affiche :

2.10.2 Boucle while : répétition conditionnelle


While est la traduction de “tant que. . .”. Concrètement, la boucle s’exécutera tant qu’une condition est remplie (donc tant
qu’elle renverra la valeur 1). Le constructeur while a la forme générale suivante :
while condition
instruction_1
instruction_2
end
où condition représente des ensembles d’instructions dont la valeur est 1 ou 0. Tant que la condition condition a la
valeur 1, on exécute les instructions instruction_i.

ATTENTION
Si la condition ne devient jamais fausse, le bloc d’instructions est répété indéfiniment et le programme ne se termine pas.

Voici un exemple pour créer la liste 1, 12 , 13 , 14 :


£ ¤

nMax = 4;
n = 1;
a = [];
while n<=nMax
a=[a,1/n]; # Append element to list
n += 1;
end
a
Dans l’exemple suivant on calcul la somme des n premiers entiers (et on vérifie qu’on a bien n(n + 1)/2) :
n=100;
s=0;
i=0;
while i<n
i += 1;
s += i;
end
s
n*(n+1)/2

2.11 Vectorisation, i.e. optimisation des performances


La plupart du temps on manipule des vecteurs et des matrices. Les opérateurs et les fonctions élémentaires sont conçus pour
favoriser ce type de manipulation et, de manière plus générale, pour permettre la vectorisation des programmes. Certes, le
langage Octave contient des instructions conditionnelles, des boucles et la programmation récursive, mais la vectorisation
permet de limiter le recours à ces fonctionnalités qui ne sont jamais très efficaces dans le cas d’un langage interprété. Les
surcoûts d’interprétation peuvent être très pénalisants par rapport à ce que ferait un programme C ou FORTRAN compilé
lorsque l’on effectue des calculs numériques. Il faut donc veiller à réduire autant que possible le travail d’interprétation en
vectorisant les programmes.

© 2018-2019ÉÀ G. Faccanoni 37
Chapitre 2 Introduction à Octave/Matlab Mis à jour le Mardi 21 janvier 2020

E XEMPLE
Quasiment toutes les fonctions prédéfinies sont vectorisées.

Le code est significativement plus lent que


phi = linspace(0,2*pi,100000);
tic phi = linspace(0,2*pi,100000);
for i = 1:length(phi), tic
sinphi(i) = sin(phi(i)); sinphi = sin(phi);
end; toc
toc

E XEMPLE
1
Pour calculer 1000
P
n=1 n 2 , on peut utiliser les trois codes suivants, le deuxième étant significativement plus rapide :

n=1:10000; n=1:10000; n=1:10000;

tic tic tic


s=0; s=sum(1./n.^2) s=(1./n)*(1./n)’
for i = n, toc toc
s+=1/i^2;
end;
s
toc

E XEMPLE
Pour calculer 100000 x i y i , on défini deux vecteurs x et y et on remarque que 100000 x i y i = xT y.
P P
i =1 i =1

Le code est significativement plus lent que


tic
s = 0; tic
for i = 1:length(x), s=x’*y
s+=x(i)*y(i); toc
end;
toc

38 © 2018-2019ÉÀ G. Faccanoni
Chapitre 3
Exercices
Pensez à placer la commande clear all au début de vos scripts, de manière à nettoyer l’environnement de travail.

3.1 Calcul matriciel


Exercice 3.1 (Écriture matricielle)
On considère
© ª les matrices A = (a i j ), B = (b i j ) et C = (c i j ) carrées d’ordre 4 définies par a i j = i 2 , b i j = i + j , c i j =
min i ; j . Écrire ces matrices sous la forme de tableaux de nombres.

Correction

2 3 4 5 1 1 1 1
   
3 4 5 6 1 2 2 2
1

1 1 1
 B=
4
 C= 
5 6 7 1 2 3 3
4 4 4 4
A=  5 6 7 8 1 2 3 4
9 9 9 9
16 16 16 16
B=zeros(4); C=zeros(4);
for i=1:4 for i=1:4
A=zeros(4); for j=1:4 for j=1:4
for i=1:4 B(i,j)=i+j; C(i,j)=min(i,j);
A(i,:)=i^2; end end
end end end
A B C

Exercice 3.2
Soient les matrices
   
−3 2 1 2
A= 0 4 et B = 0 1 .
1 −1 1 1
1. Trouver une matrice C telle que A − 2B − C = O.
2. Trouver une matrice D telle que A + B + C − 4D = O.

Correction
1. On cherche C telle que C = A − 2B, i.e.
         
c 11 c 12 −3 2 1 2 −3 − 2 × 1 2−2×2 −5 −2
c 21 c 22  =  0 4  − 2 0 1 =  0 − 2 × 0 4−2×1  =  0 2 .
c 31 c 32 1 −1 1 1 1−2×1 −1 − 2 × 1 −1 −3

A − 2B − C = O.
2. On cherche D telle que D = 14 (A + B + C) = 14 (A + B + A − 2B) = 12 A − 41 B, i.e.
 1 1 1
× 2 − 14 × 2
       7 
d 11 d 12 2 1 2 2 × (−3) − 4 × 1 − /4 /2
1
−3 2
1 1 1 1 1
d 21 d 22  =  0 4  − 0 1 =
 
2 ×0− 4 ×0 2 × 4 − 14 × 1  =  0 7
/4  .
2 4 1 1 1 1
d 31 d 32 1 −1 1 1 2 ×1− 4 ×1 2 × (−1) − 4 × 1
1
/4 −3/4

39
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

A=[-3 2; 0 4; 1 -1]
B=[1 2; 0 1; 1 1]
C=A-2*B
D=1/4*(A+B+C)

Exercice 3.3
Effectuer les multiplications suivantes
    
µ ¶ 2 1 −1 0 2 −3 ¡
3 1 5  ¡ ¢ ¢
3 0 1 8 , −3 0 5 −4 , 0 2 −4 −3 .
2 7 0
0 −5 3 4 −3 5

Correction

3×4
2×3 z }| { 2×4
zµ }| {¶   z
2 1 −1 0 µ }| {¶
3 1 5  3 × 2 + 1 × 3 + 5 × 0 3 × 1 + 1 × 0 + 5 × (−5) 3 × (−1) + 1 × 1 + 5 × 3 3×0+1×8+5×4
3 0 1 8 =

2 7 0 2 × 2 + 7 × 3 + 0 × 0 2 × 1 + 7 × 0 + 0 × (−5) 2 × (−1) + 7 × 1 + 0 × 3 2×0+7×8+0×4
0 −5 3 4
µ ¶
9 −220 13 28
=
25 2 5 560
3×1
z }| {
1×3   1×1
z¡ }| {¢ 2 z¡ }| {¢
−3 0 5 −4 = −3 × 2 + 0 × (−4) + 5 × (−3) = −21
−3
3×1 3×3
z }| { z }| {
  1×3    
−3 z¡ }| {¢ −3 × 2 −3 × (−4) −3 × (−3) −6 12 9
0 2 −4 −3 =  0 × 2 0 × (−4) 0 × (−3)  =  0 0 0 
5 5×2 5 × (−4) 5 × (−3) 10 −20 −15

[3 1 5; 2 7 0]*[2 1 -1 0; 3 0 1 8; 0 -5 3 4]
[-3 0 5]*[2 -4 -3]’ % ce qui equivaut a [-3 0 5]*[2; -4; -3]
[-3 0 5]’*[2 -4 -3] % ce qui equivaut a [-3; 0; 5]*[2 -4 -3]

Exercice 3.4
Soit les matrices
     
1 2 3 µ ¶ 1 1
2 −1 0
A = −1 0 1 B= u= x  v = 0
−1 0 1
0 1 0 x2 1

1. Calculer tous les produits possibles à partir de A, B, u et v.


2. Calculer (A − I)7 et en extraire le coefficient en position (2, 3).
3. Calculer A−1 et la trace de A−1 (i.e. la somme des coefficients sur la diagonale).

Correction
Sans utiliser un module spécifique, il n’est pas possible de faire des calculs formels avec MATLAB/Octave, donc on ne peut
pas utiliser u sans donner une valeur numérique à x.
A=[1 2 3; -1 0 1; 0 1 0] % 3x3
B=[2 -1 0; -1 0 1] % 2x3
v=[1;0;1] % 3x1
% Les produits possibles sont
B*A % (2x3)*(3x3) -> 2x3
A*v % (3x3)*(3x1) -> 3x1

40 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

B*v % (2x3)*(3x1) -> 2x1


%
Id=eye(3)
D=(A-Id)^7 % c’est bien ^7 (produit matriciel) et non .^7
D(2,3) % -> 153
%
invA=A^(-1) % ou inv(A)
sum(diag(invA))

Exercice 3.5 (Multiplication matricielle appliquée)


On modélise une image en noir et blanc formée de 25 pixels par une matrice de 5 lignes et 5 colonnes, dans laquelle 0
correspond à un pixel blanc et 1 à un pixel noir. L’image à modéliser est la suivante :

1. Donner la matrice M associée à l’image.


2. Soient
0 0 0 0 1 0 1 0 0 0
   
0 0 0 1 0 0 0 1 0 0
A= B=
   
0 0 1 0 0
 0 0 0 1 0

0 1 0 0 0 0 0 0 0 1
1 0 0 0 0 1 0 0 0 0
Calculer le produit AM. Quel est l’effet de la matrice A sur l’image ? Quel est l’effet si on fait le produit MA sur
l’image ?
Calculer le produit BM. Quel est l’effet de la matrice B sur l’image ? Quel est l’effet si on fait le produit MB sur
l’image ?
3. Quelle image obtient-on en faisant le produit AMB ?
4. Quel produit matriciel peut-on faire pour obtenir la figure suivante ?

Correction
1.
0 1 1 1 0
 
0 1 0 0 0
M=
 
0 1 1 0 0

0 1 0 0 0
0 1 0 0 0

2. Le produit AM correspond à inverser l’ordre des lignes de la matrice M : l’image est alors symétrique par rapport à la
troisième ligne.
Le produit MA correspond à inverser l’ordre des colonnes de la matrice M : l’image est alors symétrique par rapport à
la troisième colonne.
Le produit BM correspond à translater les lignes de la matrice M d’un rang vers le haut (la première ligne passant en
cinquième ligne) : l’image est alors translatée d’un rang vers le haut (la première ligne passant en cinquième ligne).
Le produit MB correspond à translater les colonnes de la matrice M d’un rang vers la droite (la cinquième colonne
passant en première colonne) : l’image est alors translatée d’un rang vers la droite (la cinquième colonne passant en
première colonne).

0 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 1 1
       
0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0
AM =  MA =  BM =  MB = 
       
0 1 1 0 0
 0 0 1 1 0 0 1 0 0 0 0 0 1 1 0

0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0
0 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0

© 2018-2019ÉÀ G. Faccanoni 41
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

M AM MA BM MB

3. Le produit AMB = (AM)B correspond par exemple à une symétrie horizontale par rapport à la troisième ligne
suivie d’une translation d’un rang vers la droite. On peut aussi l’écrire comme AMB = A(MB) qui correspond à une
translation d’un rang vers la droite suivie d’une symétrie horizontale par rapport à la troisième ligne. Dans tous les cas
on obtient l’image suivante :

M → AM → (AM)B

M → MB → A(MB)

4. On peut par exemple calculer AMAB.

M → AM → (AM)A → (AMA)B

Ou encore calculer AMBABB.

AMB → AMBA → AMBABB

M=[0 1 1 1 0 A=eye(5); A*M


0 1 0 0 0 A=A(:,5:-1:1) M*A
0 1 1 0 0 % B*M
0 1 0 0 0 B=diag(ones(4,1),1); M*B
0 1 0 0 0] B(5,1)=1; A*M*B
B A*M*A*B
A*M*B*A*B*B

Exercice 3.6
Calculer a, b, c et d tels que
µ ¶µ ¶ µ ¶µ ¶
1 3 a b a b 1 3
¬ = I2 , ­ = I2 .
2 8 c d c d 2 8
Que peut-on conclure ?

Correction
Comme
µ ¶ µ ¶ µ ¶
1 3 a b a + 3c b + 3d
× =
2 8 c d 2a + 8c 2b + 8d
il faut que 

 a + 3c = 1,


b + 3d = 0, µ ¶ µ ¶
a b 4 −3/2
⇐⇒ = .

 2a + 8c = 0, c d −1 1/2


2b + 8d = 1,

42 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

De la même manière, pour avoir µ ¶µ ¶ µ ¶


a b 1 3 a + 2b 3a + 8b
=
c d 2 8 c + 2d 3c + 8d
il faut que 

 a + 2b = 1,


3a + 8b = 0, µ ¶ µ ¶
a b 4 −3/2
⇐⇒ = .

 c + 2d = 0, c d −1 1/2


3c + 8d = 1,

A=[1 3; 2 8]
I2=eye(2)
I2/A
A\I2
On conclut que
µ ¶ µ ¶−1 µ ¶
a b 1 3 4 −3/2
= = .
c d 2 8 −1 1/2

inv([1 3; 2 8])

Exercice 3.7
On dit que deux matrices A et B commutent si AB = BA. Trouver toutes les matrices qui commutent avec
 
1 0 0
A = 0 3 0 .
0 0 5

En déduire A−1 .

Correction
On cherche B telle que
     
1 0 0 b 11 b 12 b 13 b 11 b 12 b 13 1 0 0
0 3 0 b 21 b 22 b 23  = b 21 b 22 b 23  0 3 0
0 0 5 b 31 b 32 b 33 b 31 b 32 b 33 0 0 5
Comme     
1 0 0 b 11 b 12 b 13 b 11 b 12 b 13
0 3 0 b 21 b 22 b 23  = 3b 21 3b 22 3b 23 
0 0 5 b 31 b 32 b 33 5b 31 5b 32 5b 33
et     
b 11 b 12 b 13 1 0 0 b 11 3b 12 5b 13
b 21 b 22 b 23  0 3 0 = b 21 3b 22 5b 23 
b 31 b 32 b 33 0 0 5 b 31 3b 32 5b 33
il faut que 
b 11 = b 11 ,






 b 12 = 3b 12 ,




 b 13 = 5b 13 ,

3b 21 = b 21 , κ1
  

 0 0
3b 22 = 3b 22 , ⇐⇒ B= 0 κ2 0 avec κ1 , κ2 , κ3 ∈ R.
0 0 κ3

3b 23 = 5b 23 ,









 5b 31 = b 31 ,

5b 32 = 3b 32 ,





5b 33 = 5b 33 ,

Si de plus on veut que AB = BA = I3 , i.e. B = A−1 , il faut κ1 = 1, κ2 = 1/3 et κ3 = 1/5.


inv(diag([1 3 5]))

© 2018-2019ÉÀ G. Faccanoni 43
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Exercice 3.8
Trouver pour quelles valeurs de t ∈ R les matrices suivantes sont inversibles :

t2 −9 t2 −9
µ ¶ µ ¶
t +3 t +3
A= 2 , B= .
t +9 t −3 t −3 t2 +9

Correction

t2 −9
µ ¶
t +3
det(A) = det = (t + 3) × (t − 3) − (t 2 − 9) × (t 2 + 9) = −(t − 3)(t + 3)(t 2 + 8).
t2 +9 t −3
La matrice est inversible pour tout t ∈ R \ { −3, 3 }.
determinant=@(t)[det([t+3, t^2-9; t^2+9, t-3])];
fsolve(determinant,1)
fsolve(determinant,-1)
µ 2 ¶
t −9 t +3
det(B) = det = (t 2 − 9) × (t 2 + 9) − (t + 3) × (t − 3) = (t − 3)(t + 3)(t 2 + 8).
t −3 t2 +9
La matrice est inversible pour tout t ∈ R \ { −3, 3 }.
determinant=@(t)[det([t^2-9, t+3; t-3, t^2+9])];
fsolve(determinant,1)
fsolve(determinant,-1)

Exercice 3.9
Trouver pour quelles valeurs de t la matrice suivante est inversible
 
t +3 −1 1
 5 t −3 1 .
6 −6 t +4

Correction
On commence par calculer le déterminant de la matrice. Étant une matrice d’ordre 3, on peut par exemple utiliser la
méthode de S ARRUS :
 
t + 3 −1 1
det  5 t −3 1 
6 −6 t + 4
³ ´ ³ ´
= (t + 3) × (t − 3) × (t + 4) + 5 × (−6) × 1 + 6 × (−1) × 1 − 1 × (t − 3) × 6 + 1 × (−6) × (t + 3) + (t + 4) × (−1) × 5

= t 3 − 4t + 4t 2 − 16 = t (t 2 − 4) + 4(t 2 − 4) = (t 2 − 4)(t + 4) = (t − 2)(t + 2)(t + 4).

La matrice est inversible pour tout t ∈ R \ { −4, −2, 2 }.


determinant=@(t)[det([t+3, -1, 1; 5, t-3, 1; 6, -6, t+4])];
fsolve(determinant,1)
fsolve(determinant,-1)
fsolve(determinant,-10)

Exercice 3.10
Soit a, b et c trois réels quelconques, calculer les déterminants suivants :
   
1 1 1 1+a 1 1
D 1 = det  a b c D 2 = det  1 1+a 1 
a2 b2 c2 1 1 1+a

44 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

Correction
Pour calculer un déterminant comportant des paramètres, il est souvent intéressant de faire apparaître des zéros dans une
ligne ou une colonne :
   
1 1 1 C 2 ←C 2 −C 1 1 0
0 µ ¶
C 3 ←C 3 −C 1 b−a c −a
D 1 = det  a b c  −−−−−−−−→ det  a b−a
c − a = det 2
b − a2 c 2 − a2

=
a2 b2 c2 a2 b2 − a2
c 2 − a2
³ ´
= (b − a)(c 2 − a 2 ) − (c − a)(b 2 − a 2 ) = (b − a)(c − a) (c + a) − (b + a) = (b − a)(c − a)(c − b);
     
1+a 1 1 C 2 ←C 2 −C 1 1 + a −a −a 3+a 0 0
C 3 ←C 3 −C 1 L 1 ←L 1 +L 2 +L 3
D 2 = det  1 1+a 1  −−−−−−−−→ det  1 a 0  −−−−−−−−−−→ det  1 a 0  = a 2 (3 + a).
= =
1 1 1+a 1 0 a 1 0 a

Exercice 3.11
κ
¶ µ
1
1. Pour quelles valeurs de κ ∈ R la matrice A = est inversible ?
3 2
   
1 2 8 2 1 3
2. Calculer le rang des matrices B = 2 1 4  et C = 8 4 12.
0 3 12 1 2 0
0 0 1 0 0 2 3 4
   
2 3 7 4 1 7 12 −5
3. Calculer le déterminant des matrices D = 
3 1 12 0 et E = 0
  .
3 1 0
4 0 −5 0 0 4 0 0

Correction
3
1. La matrice A est inversible pour κ 6= 2 car det(A) = 3 − 2κ.
determinant=@(k)[det([1 k; 2 3])];
fsolve(determinant,0)

2. Sans faire de calcul on peut déjà affirmer que 1 ≤ rg(B) ≤µ 3. Comme ¶ det(B) = 0 (sans faire de calcul, il suffit de
1 2
remarquer que C 3 = 4C 2 ), alors 1 ≤ rg(B) ≤ 2. Comme det = −3 6= 0, on conclut que rg(B) = 2. De la même
2 1
manière, 1 ≤µrg(C)¶≤ 3 et puisque det(C) = 0 (sans faire de calcul, il suffit de remarquer que L 2 = 4L 1 ), alors 1 ≤ rg(C) ≤ 2.
2 1
Comme det = 3 6= 0, on conclut que rg(C) = 2.
1 2
rank([1 2 8; 2 1 4; 0 3 12])
rank([2 1 3; 8 4 12; 1 2 0])
 
0 0 1 0
2 3 4
 
µ ¶
2 3 7 4 = det  3 3 4
3. det(D) = det  1 0 = 4 det = −16.
3 1 12 0 1 0
4 0 0
4 0 −5 0
0 2 3 4
 
2 3 4
 
µ ¶
1 7 12 −5 3 4
det(E) = det   = − det  3 1 0 = −4 det = 16.
0 3 1 0 1 0
4 0 0
0 4 0 0
det([0 0 1 0; 2 3 7 4; 3 1 12 0; 4 0 -5 0])
det([0 2 3 4; 1 7 12 -5; 0 3 1 0; 0 4 0 0])

Exercice 3.12 (F. L E R OUX)


En admettant le fait que les nombres 2001, 1073, 5800 et 8903 sont tous divisibles par 29, montrer que le déterminant
de la matrice
2 0 0 1
 
1 0 7 3
A= 5 8 0 0

8 9 0 3

© 2018-2019ÉÀ G. Faccanoni 45
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

est aussi divisible par 29 (sans calculer ce déterminant !).

Correction
Le déterminant ne change pas lorsque on ajoute à une colonne une combinaison linéaire des autres colonnes. Si on ajoute à
la quatrième colonne la combinaison linéaire 3i =1 104−i C i on obtient
P

2 0 0 1 2001 69
           
3 1 2 0
7 3 1073  37 
104−i C i +C 4 = 103 
X  
5 + 10 8 + 10 0 + 0 = 5800 = 29 200
        
i =1
8 9 0 3 8903 307

donc

2 0 0 29 × 69
 
1 0 7 29 × 37 
det(A) = det 
 
5 8 0 29 × 200
8 9 0 29 × 307
       
1 0 7 2 0 0 2 0 0 2 0 0
= −29 × 69 × det 5 8 0 + 29 × 37 × det 5 8 0 − 29 × 200 × det 1 0 7 + 29 × 307 × det 1 0 7
8 9 0 8 9 0 8 9 0 5 8 0
        
1 0 7 2 0 0 2 0 0 2 0 0
= 29 × −69 × det
  5 8 0  + 37 × det 5 8
 0 − 200 × det 1 0 7 + 307 × det 1 0 7
8 9 0 8 9 0 8 9 0 5 8 0

Exercice 3.13
Soit n ≥ 2 un entier naturel pair. Une matrice de taille n × n est à remplir par deux joueurs, A (qui veut un déterminant
non nul, commence) et B (qui veut un déterminant nul). Ils ont le droit de mettre n’importe quel réel dans une case
vide de la matrice, chacun leur tour. Trouver une stratégie gagnante pour B .

Correction
Il suffit de faire en sorte qu’une colonne soit identique (ou un multiple) d’une autre.

3.2 Matlab/Octave
Pensez à placer la commande clear all au début de vos scripts, de manière à nettoyer l’environnement de travail.

Exercice 3.14
Copier les instructions suivantes dans des script files. Exécuter les script et commenter les résultats.

¬ Somme et produit de matrices, calcul de l’inverse ­ La commande diag


d’une matrice :
v=[2 5 10]
A=[1 2 3; 4 5 6] A=diag(v,-1)
B=[7 8 9; 10 11 12] v=[2]
C=[13 14; 15 16; 17 18] A=diag(v,-1)
A+B
A*C ® Matrices triangulaires
A+C
inv(A) A =[3 1 2; -1 3 4; -2 -1 3]
A=[1 2; 0 0] L1=tril(A)
inv(A) L2=tril(A,-1)

Exercice 3.15 (Opérations élément par élément, produit scalaire, produit vectoriel)

46 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

¬ Copier les instructions suivantes dans un script file. ­ Définir le vecteur x=[pi/6 pi/4 pi/3] et calculer
Exécuter le script et commenter les résultats. s=sin(x) et c=cos(x). En déduire tan(x) à l’aide
x = [1; 2; 3]; des vecteurs s et c.
y = [4; 5; 6]; ® Calculer la somme des nombres entiers de 1 à 500.
v = x.^2 Calculer la somme des carrés des nombres entiers
b = sum(v) de 1 à 500. Calculer la somme des nombres impaires
s = y’*x
inférieurs ou égaux à 500. Calculer la somme des
d = dot(x,y)
nombres paires inférieurs ou égaux à 500.
u = x.*y
p = x.^x
c = cross(x,y)

Correction
¬ x, y et v sont des vecteurs-colonne 3 × 1
v est le vecteur tel que v i = x i2 pour i = 1, 2, 3 : v = (1, 4, 9)T
b = v 1 + v 2 + v 3 = 1 + 4 + 9 = 14
s est le produit scalaire yT x = i y i x i = y 1 x 1 + y 2 x 2 + y 3 x 3 = 4 × 1 + 5 × 2 + 6 × 3 = 32
P

u est le vecteur tel que u i = x i y i pour i = 1, 2, 3 : u = (4, 10, 18)T


p est le vecteur tel que p i = (x i )xi pour i = 1, 2, 3 : p = (1, 4, 27)T
c est le vecteur obtenu par le produit vectoriel de x et y : c = (−3, 6, −3)T

­ x=[pi/6 pi/4 pi/3]


s=sin(x)
c=cos(x)
t=s./c
tan(x) % on verifie qu’on a le bon resultat

Pn n(n+1) Pn 2 n(n+1)(2n+1) PN PN
® i =1 i = 2 i =1 i = 6 i =1 (2i − 1) = N 2 i =1 (2i ) = N (N + 1)
n=500 n=500
n=500 n=500
imp=sum(1:2:n) pair=sum(2:2:n)
sum([1:n]) sum([1:n].^2)
N=length(1:2:n); N=length(2:2:n);
n*(n+1)/2 n*(n+1)*(2*n+1)/6
N^2 N*(N+1)

Preuves sans mot

n
(2i − 1) = 1 + 3 + 5 + · · · + (2n − 1) = n 2
X
i =1
n
9
X
i = 2 × (1 + 2 + 3 + · · · + n) = n × (n + 1)
i =1 2×5−1

1 4 7
2×4−1

2 3 5
2×3−1

3 2 3
2×2−1

4 1 1
2×1−1

Remarque
Quelque somme remarquable :
n
X n(n + 1)
1. i= .
i =1 2
n
(2i − 1) = n 2 . En effet, on remarque qu’il s’agit d’une somme télescopique :
X
2.
i =1

n n
(i 2 − (i − 1)2 ) = (12 − 02 ) + (22 − 12 ) + (32 − 22 ) + . . . (n 2 − (n − 1)2 ) = n 2 .
X X
(2i − 1) =
i =1 i =1

© 2018-2019ÉÀ G. Faccanoni 47
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

n
X n
X
3. (2i ) = 2 i = n(n + 1).
i =1 i =1
n n(n + 1)(2n + 1)
i2 =
X
4. . En effet,
i =1 6

n n n n n n n
(i + 1)3 = j 3 − 1 + (n + 1)3 , (i + 1)3 = i3 +3 i2 +3
X X X X X X X
i+ 1
i =1 j =1 i =1 i =1 i =1 i =1 i =1

donc
n n n n n
i2 = j 3 − 1 + (n + 1)3 − i3 −3
X X X X X
3 i− 1
i =1 j =1 i =1 i =1 i =1
n(n + 1) (n + 1) ¡ ¢ n(n + 1)(2n + 1)
= −1 + (n + 1)3 − 3 −n = 2(n + 1)2 − 3n − 2 = .
2 2 2
n ¶2
n(n + 1)
µ
3
X
5. i = . En effet,
i =1 2

n n n n n n n n
(i + 1)4 = j 4 − 1 + (n + 1)4 , (i + 1)4 = i4 +4 i3 +6 i2 +4
X X X X X X X X
i+ 1
i =1 j =1 i =1 i =1 i =1 i =1 i =1 i =1

donc
n n n n n n n
i3 = j 4 − 1 + (n + 1)4 − i4 −4 i3 −6 i2 −4
X X X X X X X
4 i− 1
i =1 j =1 i =1 i =1 i =1 i =1 i =1
n(n + 1)(2n + 1) n(n + 1)
= −1 + (n + 1)4 − 6 − n = (n + 1) (n + 1)3 − n(2n + 1) − 2n − 1
¡ ¢
−4
6 2
= (n + 1)2 (n + 1)2 − (2n + 1) = n 2 (n + 1)2 .
¡ ¢

Exercice 3.16
On se propose ici d’utiliser Octave pour résoudre graphiquement des équations.

Considérons un cercle de rayon r . Si nous traçons un angle


A
t (mesuré en radians) à partir du centre du cercle, les deux B
rayons formant cet angle coupent le cercle en A et B . Nous t
r

appelons a l’aire délimitée par la corde et l’arc AB (en bleu


r2
sur le dessin). Cette aire est donnée par a = (t − sin(t )).
2
Pour un cercle donné (c’est à dire un rayon donné), nous
choisissons une aire (partie en bleu) a. Quelle valeur de
l’angle t permet d’obtenir l’aire choisie ? Autrement dit,
connaissant a et r , nous voulons déterminer t solution de
l’équation
2a
= t − sin(t ).
r2

1. Résoudre graphiquement l’équation en traçant les courbes correspondant aux membres gauche et droit de
l’équation (pour a = 4 et r = 2). Quelle valeur de t est solution de l’équation ?
2. Comment faire pour obtenir une valeur plus précise du résultat ?

Correction lhs=2*a/(r^2)*ones(size(t));
t=[0:pi/180:2*pi]; plot(t,rhs,t,lhs), grid
rhs=t-sin(t);
a=4;
r=2;

48 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

Le graphe nous dit que la solution est entre 2 et 3. On peut fsolve( @(x) 2*a/(r^2)-(x-sin(x)) , 2.5)
calculer une solution approchée comme suit :

Exercice 3.17 (Vectorisation)


Réécrire les codes suivants sans utiliser de boucles :

¬ [n,m]=size(a); ­ n=length(b); ® n=length(a);


for i = 1:n for i = 1:n-1 for i = 1:n-1
for j = 1:m a(i) = b(i+1) - b(i); if (a(i) > 5)
c(i,j) = a(i,j) + b(i, end a(i) -= 20
j); end
end end
end

Exercice 3.18 (Vectorisation)


Considérons la fonction f : R → R définie par


 0 si x < 0,


x si 0 ≤ x < 1,
f (x) =
2 − x
 si 1 ≤ x ≤ 2,


0 si x > 2.

Écrire et afficher cette fonction en deux manières différentes :


1. avec une instruction conditionnelle du type if ... elseif ... else non vectorisée,
2. avec une instruction conditionnelle vectorisée.

Correction
La fonction non vectorisée peut s’écrire comme suit :
function y=f1(x)
n=length(x);
for i=1:n
if x(i)<0
y(i)=0;
elseif x(i)<1
y(i)=x(i);
elseif x(i)<=2
y(i)=2-x(i);
else
y(i)=0;
endif
endfor
endfunction

La fonction vectorisée peut s’écrire comme suit :


f2 = @(x) [ 0*(x<0) + x.*(x>=0).*(x<1) + (2-x).*(x>=1).*(x<2) + 0.*(x>2) ];
On compare le graphe des deux fonctions :
xx=[-1:0.1:3];
yy1=f1(xx);
yy2=f2(xx);
plot(xx,yy1,’r’,xx,yy2,’b.’)

© 2018-2019ÉÀ G. Faccanoni 49
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Exercice 3.19 (Sommes, produits et algèbre linéaire pour éliminer les boucles)
Soient u =, v, w, x, y des vecteurs ligne de Rn . On se propose de calculer

n n n
w i x i2 ,
X X X
ui v i , w i xi y i .
i =1 i =1 i =1

Correction n
u i v i = u · vT donc
X
1. Notons que
i =1

u = [1 2 3 4 5];
v = [3 6 8 9 10]; % dot notation
y = sum(u.*v)
% Avec une boucle
y = 0; % produit scalaire
for i=1:length(u) y = u*v’
y = y + u(i)*v(i); y = v*u’
end y=dot(u,v)
y y=dot(v,u)

Pn
2. 2
i =1 w i x i = xDw xT avec
w1 ... 0
 
 .. .. .. 
Dw =  . . . 
0 wn
donc

w = [0.1 0.25 0.12 0.45 0.98]; y


x = [9 7 11 12 8];
% dot notation
% Avec une boucle y = sum(w.*(x.^2))
y = 0;
for i = 1:length(w) % algebre lieaire
y = y + w(i)*x(i)^2; y = x*diag(w)*x’
end

Pn
3. i =1 w i x i y i = xDw yT donc

w = [0.1 0.25 0.12 0.45 0.98]; z


x = [9 7 11 12 8];
y = [2 5 3 8 0]; % dot notation
z = sum(w.*x.*y)
% Avec une boucle
z = 0; % algebre lieaire
for i=1:length(w) z = x*diag(w)*y’
z = z + w(i)*x(i)*y(i); z = y*diag(x)*w’
end z = w*diag(y)*x’

Exercice 3.20
¬ Copier les instructions suivantes dans un script file. Exécuter le script et commenter les résultats.

A=[1 2; 4 5]; A*B A^2 A/B


B=[1 0; 1 1]; A.*B A.^2 A.\B

50 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

­ Afficher la table de multiplication par 1, . . . , 10, i.e. la matrice

1 2 3 4 5 6 7 8 9 10
1 1 2 3 4 5 6 7 8 9 10
2 2 4 6 8 10 12 14 16 18 20
3 3 6 9 12 15 18 21 24 27 30
4 4 8 12 16 20 24 28 32 36 40
5 5 10 15 20 25 30 35 40 45 50
6 6 12 18 24 30 36 42 48 54 60
7 7 14 21 28 35 42 49 56 63 70
8 8 16 24 32 40 48 56 64 72 80
9 9 18 27 36 45 54 63 72 81 90
10 10 20 30 40 50 60 70 80 90 100

Correction
¬ A*B calcule le produit AB = ( 3k=1 ai k bk j )1≤i , j ≤3 , A.*B calcule la matrice C = (ai j bi j )1≤i , j ≤3 .
P

>> A*B >> A.*B


ans = ans =
3 2 1 0
9 5 4 5

P3
A^2 calcule le produit AA = ( k=1
a i k a k j )1≤i , j ≤3 , A.^2 calcule la matrice C = (a i2j )1≤i , j ≤3 .

>> A^2 >> A.^2


ans = ans =
9 12 1 4
24 33 16 25

A/B calcule le produit AB−1 si B est inversible, A.\B calcule la matrice C = (ai j /bi j )1≤i , j ≤3 .

>> A/B >> A.\B


ans = ans =
-1 2 1.00000 0.00000
-1 5 0.25000 0.20000

­ Avec les instructions suivantes, on construit la matrice A qui contient juste les produits, et la matrice B qui contient
aussi l’entête des lignes et colonnes :
A(:,:)=[1:10]’.*[1:10]
B(:,:)=[1,1:10]’.*[1,1:10]

Exercice 3.21 (Construction de matrices)


¬ Écrire les instructions pour construire une matrice triangulaire supérieure de dimension 10 ayant des 2 sur la
diagonale principale et des −3 sur la seconde sur-diagonale.

2 0 −3 0 0 0 0 0 0 0
 
0 2 0 −3 0 0 0 0 0 0
 
0 0 2 0 −3 0 0 0 0 0
 
0 0 0 2 0 −3 0 0 0 0
 
0 0 0 0 2 0 −3 0 0 0
 
0 0 0 0 0 2 0 −3 0 0
 
 
0 0 0 0 0 0 2 0 −3 0
 
0 0 0 0 0 0 0 2 0 −3
 
0 0 0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 0 0 2

­ Écrire les instructions permettant d’interchanger la troisième et la septième ligne de la matrice construite au

© 2018-2019ÉÀ G. Faccanoni 51
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

point précédent, puis les instructions permettant d’échanger la quatrième et la huitième colonne.
® Écrire la matrice carrée de taille n comprenant des n sur la diagonale principale, des n − 1 sur les deux lignes qui
l’encadrent, etc.
¯ Écrire la matrice à n lignes et m colonnes dont la première colonne ne contient que des 1, la deuxième colonne
ne contient que des 2, etc. Écrire ensuite la matrice à m lignes et n colonnes dont la première ligne ne contient
que des 1, la deuxième ligne ne contient que des 2, etc.
° Écrire la matrice carrée A de taille 2n + 1 comportant des 1 sur la (n + 1)ième ligne et la (n + 1)ième colonne et des 0
ailleurs.
± Écrire la matrice carrée Z de taille n comportant des 1 sur la première et dernière ligne et sur la deuxième
diagonale et des 0 ailleurs.
² Étant donné une liste de nombres retourner la liste obtenue en écrivant d’abord les termes de rang pair suivis
des termes de rang impair.
³ Écrire la matrice (n, n) dont les éléments sont 1, 2, . . . , n 2 écrits dans l’ordre habituel (sur chaque ligne, de la
gauche vers la droite, de la première à la dernière ligne).

Correction
¬ U=2*eye(10)+diag(-3*ones(8,1),2)

­ On peut échanger les troisième et septième lignes de la matrice (sans modifier la matrice initiale) avec les instructions :
r=[1:10]
r(3)=7
r(7)=3
Ur=U(r,:)

Remarquer que le caractère : dans U(r,:) fait que toutes les colonnes de U sont parcourues dans l’ordre croissant
habituel (du premier au dernier terme).
Sinon, si on veut modifier la matrice initiale, on peut utiliser l’instruction :
U([3 7],:)=U([7 3],:)

Pour échanger les quatrième et huitième colonnes on peut écrire


c=[1:10]
c(8)=4
r(4)=8
Uc=U(:,c)

® En utilisant deux boucles


for i=1:n
for j=1:n
M(i,j)=n-abs(i-j);
end
end

qu’on peut écrire en version compacte


for i=1:n
M(i,1:n)=n-abs(i-[1:n]);
end

En utilisant l’instruction diag


M=diag(n*ones(1,n));
for i=2:n
M+=diag((n-i+1)*ones(1,n-i+1),i-1)+diag((n-i+1)*ones(1,n-i+1),1-i);
end

¯ Soit n et m fixés.
A(1:n,:)=ones(n,1)*[1:m]
A’

52 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

° n=5;
A=zeros(2*n+1);
A(:,n+1)=1;
A(n+1,:)=1

± n=5;
A=eye(n);
A(1,:)=1;
A(n,:)=1;
A=A(:,n:-1:1)

² liste=rand(1,10)
liste2=[liste([2:2:end]) liste([1:2:end])]

³ n=5;
M=[1:n^2];
M=reshape(M,n,n)’

Exercice 3.22 (Construction de matrices, vectorisation, script et function)


1. Dans un fichier zorro.m écrire une function appelée zorro qui prend en entrée un entier n ∈ N∗ et renvoi la
matrice carrée Z de taille n comportant des 1 sur la première et dernière ligne et sur la deuxième diagonale et
des 0 ailleurs (sans utiliser de boucles).
Par exemple, pour n = 5, la commande Z=zorro(5) devra donner

1 1 1 1 1
 
0 0 0 1 0
Z=
 
0 0 1 0 0
0 1 0 0 0
1 1 1 1 1

2. Dans un fichier exercice1.m écrire un script pour tester cette fonction pour n = 1, . . . , 5.

Dans le fichier zorro.m on écrit la fonction


function A=zorro(n) Dans le fichier exercice1.m on écrit le script
Correction
A=eye(n);
for n=1:5
A(1,:)=1;
Z=zorro(n)
A(n,:)=1;
end
A=A(:,n:-1:1);
end

Exercice 3.23 (Coût (en temps) d’un produit matrice-vecteur)


Exécuter les instructions suivantes et commenter :
n=10000;
step=100;
A=rand(n,n);
v=rand(n,1);
T=[];
sizeA=[];
for k=500:step:n
AA = A(1:k,1:k);
vv = v(1:k);
t = cputime;
b = AA*vv;
tt = cputime - t;
T = [T, tt];
sizeA = [sizeA,k];
end

© 2018-2019ÉÀ G. Faccanoni 53
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

plot(sizeA,T,’o’)

Correction
L’instruction a:step:b intervenant dans la boucle for génère tous les nombres de la forme a+step*k où k est un entier
variant de 0 à kmax, où kmax est le plus grand entier tel que a+step*kmax est plus petit que b (dans le cas considéré, a=500,
b=10000 et step=100). La commande rand(n,m) définit une matrice n × m dont les éléments sont aléatoires. Enfin, T est
le vecteur contenant les temps CPU nécessaires à chaque produit matrice-vecteur, et cputime renvoie le temps CPU (en
secondes) consommé par Octave depuis son lancement. Le temps nécessaire à l’exécution d’un programme est donc la
différence entre le temps CPU effectif et celui calculé juste avant l’exécution du programme courant, stocké dans la variable
t. La commande plot(sizeA,T,’o’), montre que le temps CPU augmente comme le carré de n l’ordre de la matrice.

Exercice 3.24 (Boucle for)


Il est possible de calculer les premières décimales de π avec l’aide du hasard. On considère un carré de coté 1 et un
cercle de rayon 1 centré à l’origine :

Si on divise l’aire de la portion de disque par celle du carré on trouve π4 . Si on tiré au hasard dans le carré, on a une
probabilité de π4 que le point soit dans la portion de disque. On considère l’algorithme suivant pour approcher π :
N
on génère N couples {(x k , y k )}k=1 de nombres aléatoires dans l’intervalle [0, 1], puis on calcule le nombre m ≤ N de
ceux qui se trouvent dans le premier quart du cercle unité. π est la limite de la suite 4m/N lorsque N → +∞. Écrire un
programme pour calculer cette suite et observer comment évolue l’erreur quand N augmente.

Correction
La méthode proposée est une méthode de Monte Carlo. Elle est implémentée dans le programme suivant :
format long

N=10^4
# On tire au hasard N points [x,y] dans [0,1[ x [0,1[
[xx,yy]=rand(N,2);
# Nombre de tirs dans le disque
m=sum( xx.^2+yy.^2<=1 );
myPi=4*m/N
err=abs(pi-myPi)
La commande rand génère une suite de nombres pseudo-aléatoires. L’instruction z <= 1 se lit de la manière suivante :
on teste si z(k)<= 1 pour chaque composante du vecteur z ; si l’inégalité est satisfaite pour la k-ème composante de z
(c’est-à-dire, si le point (x k , y k ) appartient à l’intérieur du disque unité) on donne la valeur 1, sinon on lui donne la valeur 0.
La commande sum(z <= 1) calcule la somme de toutes les composantes de ce vecteur, c’est-à-dire le nombre de points se
trouvant à l’intérieur du disque unité.
On peut réécrire le tout comme une fonction anonyme :
format long
myPi = @(N) [ 4*sum( rand(N,1).^2+rand(N,1).^2<=1 )/N ];
err=abs(pi-myPi(10^4)) % test
On exécute maintenant le programme pour différentes valeurs de N . Plus N est grand, meilleure est l’approximation de π.
Par exemple, pour N = 1000 on obtient 3.1120, tandis qu’avec N = 300000 on a 3.1406 (naturellement, comme les nombres
sont générés aléatoirement, les résultats obtenus pour une même valeur de N peuvent changer à chaque exécution).
format long
myPi = @(N) [ 4*sum( rand(N,1).^2+rand(N,1).^2<=1 )/N ];
NN=100:100:10000;
for i=1:length(NN)
err(i)=abs(pi-myPi(NN(i)));
end
plot(NN,err)
Cette méthode n’est pas très efficace, il faut beaucoup de tirs pour obtenir le deux premières décimales de π.

54 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

Exercice 3.25 (function)


Comme π vérifie
N µ
4 2 1 1

−n
π = lim
X
16 − − −
N →+∞ n=0 8n + 1 8n + 4 8n + 5 8n + 6
on peut calculer une approximation de π en sommant les N premiers termes, pour N assez grand.
? Écrire une fonction pour calculer les sommes partielles de cette série (i.e. pour n = 0 . . . N avec N donné en
paramètre).
? Pour quelles valeurs de N obtient-on une approximation de π aussi précise que celle fournie par la variable π ?

Correction
Pour répondre à la question on peut utiliser le script suivant :
format long

piapproche = @(v) sum( ( 4./(8*v+1) - 2./(8*v+4) - 1./(8*v+5) - 1./(8*v+6) ).*(1/16).^v );

N=0;
while abs(pi-piapproche([0:N]))>0
N+=1;
end
N
piapproche([0:N])
pi
Pour n = 10 on obtient une approximation de π qui coïncide (à la précision Octave) avec la variable interne pi d’Octave. Cet
algorithme est en effet extrêmement efficace et permet le calcul rapide de centaines de chiffres significatifs de π.

Exercice 3.26 (function)


Fabriquer une fonction-octave qui calcule le volume v d’un cylindre de révolution de hauteur h et dont la base est un
disque de rayon r . Cette fonction doit accepte que r et h soient des listes de nombres et renvoyer un tableau. Si r est
un vecteur de n nombres et h de m nombres alors v sera une matrice A de dimension n × m telle que a i j = v(r i , h j ).

Correction
On écrit la fonction soit avec function soit avec une fonction anonyme, puis on valide la fonction avec un test dont on
connaît le résultat :
function v=cylindre(r,h) % h et r sont 2 matrices-lignes
v = (r.^2)’.*h *pi;
return
% cylindre = @(r,h) (r.^2)’.*h *pi ;
Quand on exécute cette fonction, on obtient un tableau à n lignes et à p colonnes qui sont les volumes recherchés. Sur les
lignes de ce tableau, on lit les volumes pour r fixé, h variant. Sur les colonnes, c’est h qui est fixé.

Exercice 3.27
Un dispositif fournit un signal s(t ) = A sin(2πt + ϕ) avec A et ϕ inconnus. On mesure le signal à deux instants (en ms) :
s(0.5) = −1.76789123 et s(0.6) = −2.469394443. On posera α = A cos(ϕ) et β = A sin(ϕ).
1. Écrire et résoudre le système d’inconnue α et β. En déduire A et ϕ.
2. Tracer le signal et montrer qu’il passe par les points mesurés.

Correction
Rappel : sin(a + b) = sin(a) cos(b) + cos(a) sin(b) ainsi

s(t ) = A sin(2πt + ϕ) = A sin(2πt ) cos(ϕ) + cos(2πt ) sin(ϕ) = α sin(2πt ) + β cos(2πt ).


¡ ¢

On doit donc résoudre le système linéaire :


(
α sin(π) + β cos(π) = −1.76789123
α sin 56 π + β cos 56 π = −2.469394443
¡ ¢ ¡ ¢

© 2018-2019ÉÀ G. Faccanoni 55
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

qu’on écriture matricielle s’écrit

α α
µ ¶µ ¶ µ ¶ µ ¶µ ¶ µ ¶
sin(π) cos(π) −1.76789123 ¡0 ¢ −1 −1.76789123
= i.e. =
sin 65 π cos 65 π β sin 65 π cos 65 π β
¡ ¢ ¡ ¢ ¡ ¢
−2.469394443 −2.469394443

xx=[sin(2*pi*0.5) , cos(2*pi*0.5) ; sin(2*pi*0.6) , cos(2*pi*0.6)]\[-1.76789123;-2.469394443]


alpha=xx(1)
beta=xx(2)
p
Puisqu’on trouve α = β, alors cos(ϕ) = sin(ϕ), i.e. ϕ = π4 et A = 2α avec α ≈ 1.7679 :
s=@(t)[sqrt(2)*alpha*sin(2*pi*t+pi/4)];
tt=[0:0.01:1];
hold on
plot(tt,s(tt),’r-’) % la courbe
plot([0.5 0.6],[-1.76789123;-2.469394443],’b*’) % les deux points
plot([0 0.5 0.5], [-1.76789123 -1.76789123 -3], ’g:’) % trait pointille
plot([0 0.6 0.6], [-2.469394443 -2.469394443 -3], ’g:’) % trait pointille
xlabel(’t’)
ylabel(’s’)
hold off
print("signal.jpg") % sauvagarde de la figure en .jpg

Exercice 3.28 (Résolution graphique d’une équation)


Soit la fonction

f : [−10, 10] → R
x 3 cos(x) + x 2 − x + 1
x 7→ p
x 4 − 3x 2 + 127

1. Tracer le graphe de la fonction f en utilisant seulement les valeurs de f (x) lorsque la variable x prend successive-
ment les valeurs −10, −9.2, −8.4, . . . , 8.4, 9.2, 10 (i.e. avec un pas 0.8).
2. Apparemment, l’équation f (x) = 0 a une solution α voisine de 2. En utilisant le zoom, proposer une valeur
approchée de α.
3. Tracer de nouveau le graphe de f en faisant varier x avec un pas de 0.05. Ce nouveau graphe amène-t-il à corriger
la valeur de α proposée ?
4. Demander à Octave d’approcher α (fonction fsolve).

Correction
En utilisant un pas de 0.8 il semblerai que α = 1.89. En utilisant un pas de 0.05 il semblerai que α = 1.965. En utilisant la
fonction fsolve on trouve α = 1.9629.
clear all; clc;
f = @(x) [(x.^3 .*cos(x)+x.^2-x+1) ./ (x.^4-sqrt(3)*x.^2+127)] ;

56 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

subplot(1,2,1)
xx=[-10:0.8:10];
plot(xx,f(xx),’r-’)
grid()

subplot(1,2,2)
xx=[-10:0.05:10];
plot(xx,f(xx),’r-’)
grid()

fsolve(f,1.9)

Exercice 3.29 (Courbe parametrée)


Tracer la courbe papillon (t ∈ [0; 100]) :
( ¡ t ¢¢
x(t ) = sin(t ) e cos(t ) − 2 cos(4t ) − sin5 12
¡
¡ t ¢¢
y(t ) = cos(t ) e cos(t ) − 2 cos(4t ) − sin5 12
¡

x=@(t) [ sin(t).*( exp(cos(t))-2*cos(4*t)-(sin(t/12)).^5 ) ];


Correction
y=@(t) [ cos(t).*( exp(cos(t))-2*cos(4*t)-(sin(t/12)).^5 ) ];
tt=[0:0.05:100];
plot(x(tt),y(tt))

Exercice 3.30 (Équation polaire)


Tracer la courbe papillon (t ∈ [0; 100]) :
(
x(t ) = r (t ) cos(t )
avec r (t ) = sin(7t ) − 1 − 3 cos(2t ).
y(t ) = r (t ) sin(t )

r=@(t) [sin(7*t)-1-3*cos(2*t)];
Correction
x=@(t) [ r(t).*cos(t) ];
y=@(t) [ r(t).*sin(t) ];
tt=[0:0.05:100];
plot(x(tt),y(tt))

3.3 Suites
Suite arithmétique Une suite (v n )n∈N est arithmétique de raison r ∈ R et de premier terme v 0 si

∀n ∈ N, v n+1 = v n + r = v 0 + (n + 1)r.

Somme des termes d’une suite arithmétique :


n
X n(n + 1)
v k = v 0 + v 1 + · · · + v n = v 0 + (v 0 + r ) + · · · + (v 0 + nr ) = (n + 1)v 0 + r .
k=0 2

En particulier, pour v 0 = 0 et r = 1 on a
n
X n(n + 1)
i = 1+2+···+n = ;
i =1 2

© 2018-2019ÉÀ G. Faccanoni 57
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Suite géométrique Une suite (v n )n∈N est géométrique de raison q ∈ R et de premier terme v 0 si

∀n ∈ N, v n+1 = q v n = v 0 q n+1 .

? Si q < −1, la suite (v n ) diverge et ne possède pas de limite ;


? si q = −1, la suite (v n ) diverge et possède deux valeurs d’adhérence 1 et −1 ;
? si |q| < 1, la suite (v n ) converge vers 0 ;
? si q = 1, la suite (v n ) est constante et converge vers 1 ;
? si q > 1, la suite (v n ) est divergente mais possède une limite égale à +∞.
Somme des termes d’une suite géométrique :
1−q n+1
(
n
X v0 1−q si q 6= 1
vk = v0 + v1 + · · · + vn =
k=0 (n + 1)v 0 si q = 1
Pn
Soit la suite s n = v , alors
k=0 k
? si q < −1, la suite (s n ) est divergente et ne possède pas de limite ;
? si q = −1, la suite (s n ) est divergente et possède deux valeurs d’adhérence 0 et 1 ;
1
? si |q| < 1, la suite (s n ) converge vers 1−q ;
? si q = 1, la suite (s n ) est divergente mais possède une limite égale à +∞ ;
? si q > 1, la suite (s n ) est divergente mais possède une limite égale à +∞.
En particulier pour v 0 = 1 :
( 1+q n+1
n
n
X i 1−q si q 6= 1,
1+ q +···+ q = q =
i =1 n +1 si q = 1;

Suite arithmético-géométrique Une suite (v n )n∈N est arithmético-géométrique de premier terme v 0 si

∀n ∈ N, v n+1 = q v n + r

avec q, r ∈ R. On remarque que


? si q = 1, la suite (v n ) est arithmétique de raison r ,
? si r = 0, la suite (v n ) est géométrique de raison q.
? si q 6= 1
qn − 1 r r
µ ¶
∀n ∈ N, vn = v0 q n + r = q n v0 + −
q −1 q −1 q −1
r
Elle converge si et seulement si |q| < 1 et la limite vaut 1−q .

Somme des termes d’une suite arithmético-géométrique : soit (v n )n∈N une suite arithmético-géométrique de pre-
mier terme v 0 , on a
1−q n+1
(³ ´
n r r
X v 0 − 1−q1−q + 1−q n si q 6= 1
v0 + v1 + · · · + vn = vk =
k=0 (n + 1)v 0 + r n(n+1)
2 si q = 1

Exercice 3.31
Soit (u n )n∈N la suite définie par u n = (0.7)3n . Quel est le plus petit n tel que u n < 10−4 ?

Correction
³¡ ¢ ´n ¡
7 3 343 n
. Il s’agit d’une suite géométrique de raison 0 < q < 1 : elle est donc décroissante. On a u n < 10−4 ssi
¢
u n = 10 = 1000
¡ 343 ¢n ¡ 343 ¢n 4 4
1000 < 10−4 ssi log10 1000 < −4 ssi n > − ¡ 343 ¢ = −
log (343)−log (103 )
= 3−log4 (343) ' 0.5
4
= 8. La valeur cherchée est
log10 1000 10 10 10
donc n = 9.
Vérifions nos calculs :

58 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

n=0
u=1
while u>=1.e-4
n+=1
u=(0.7)^(3*n)
end
On peut même afficher u n en fonction de n :
u = @(n) (0.7)^(3*n)
nn=[0];
uu=[1];
while uu(end)>=1.e-4
nn = [ nn, nn(end)+1 ];
uu = [ uu, u(nn(end)) ];
end
plot(nn,uu,’*’,[nn(1),nn(end)],[1.e-4,1.e-4])

Exercice 3.32
On achète un ordinateur portable à 430 ¤. On estime qu’une fois sorti du magasin sa valeur u n en euro après n mois
est donnée par la formule
u n = 40 + 300 × (0.95)n .
1. Que vaut l’ordinateur à la sortie du magasin ?
2. Que vaut-il après un an de l’achat ?
3. À long terme, à quel prix peut-on espérer revendre cet ordinateur ?
4. Déterminer le mois à partir duquel l’ordinateur aura une valeur inférieure à 100 ¤.

Correction
1. À la sortie du magasin u 0 = 340
2. Après un an de l’achat on a u 12 = 40 + 300 × (0.95)12 = 202.11
3. À long terme, on peut espérer revendre cet ordinateur à limn→+∞ u n = 40.
4. À partir du 32-ème mois l’ordinateur aura une valeur inférieure à 100 ¤ car :

100 − 40 1 ln(5)
40 + 300 × (0.95)n < 100 ⇐⇒ (0.95)n < = = 5−1 ⇐⇒ n ln(0.95) < − ln(5) ⇐⇒ n > − ' 31.377
300 5 ln(0.95)

Vérifions nos calculs :


nn=[0];
uu=[430];
for n=1:50
nn=[nn,n];
uu=[uu, 40+300*(0.95)^n];
end
plot(nn,uu,’*-’,nn,100*ones(size(nn)),’-’)
indice=max(find(uu>100))
printf(strcat("u_",num2str(nn(indice)),"=",num2str(uu(indice)),"\n"))
printf(strcat("u_",num2str(nn(indice+1)),"=",num2str(uu(indice+1)),"\n"))
plot(nn,uu,’*-’,nn,100*ones(size(nn)),’-’,[nn(indice),nn(indice)],[0,uu(indice)],[nn(indice+1),nn(indice
+1)],[0,uu(indice+1)])

Exercice 3.33 (Suite de F IBONACCI)


La suite de F IBONACCI est une suite d’entiers dans laquelle chaque terme est la somme des deux termes qui le
précèdent. Elle commence généralement par les termes 0 et 1 (parfois 1 et 1). Elle doit son nom à Leonardo F IBONACCI,
un mathématicien italien du XIIIe siècle qui, dans un problème récréatif posé dans un de ses ouvrages, le Liber Abaci,
décrit la croissance d’une population de lapins :
«Un homme met un couple de lapins dans un lieu isolé de tous les côtés par un mur. Combien de couples
obtient-on en un an si chaque couple engendre tous les mois un nouveau couple à compter du troisième
mois de son existence ?»
Le problème de F IBONACCI est à l’origine de la suite dont le n-ième terme correspond au nombre de paires de lapins

© 2018-2019ÉÀ G. Faccanoni 59
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

au n-ème mois. Dans cette population (idéale), on suppose que :


? au (début du) premier mois, il y a juste une paire de lapereaux ;
? les lapereaux ne procréent qu’à partir du (début du) troisième mois ;
? chaque (début de) mois, toute paire susceptible de procréer engendre effectivement une nouvelle paire de
lapereaux ;
? les lapins ne meurent jamais (donc la suite de F IBONACCI est strictement croissante).
Notons F n le nombre de couples de lapins au début du mois n. Jusqu’à la fin du deuxième mois, la population se
limite à un couple (ce qu’on note F 1 = F 2 = 1). Dès le début du troisième mois, le couple de lapins a deux mois et il
engendre un autre couple de lapins ; on note alors F 3 = 2. Plaçons-nous maintenant au mois n et cherchons à exprimer
ce qu’il en sera deux mois plus tard, soit au mois n + 2 : F n+2 désigne la somme des couples de lapins au mois n + 1 et
des couples nouvellement engendrés. Or, n’engendrent au mois (n + 2) que les couples pubères, c’est-à-dire ceux qui
existent deux mois auparavant. On a donc, pour tout entier n strictement positif, F n+2 = F n+1 + F n . On choisit alors de
poser F 0 = 0, de manière que cette équation soit encore vérifiée pour n = 0. On obtient ainsi la forme récurrente de la
suite de F IBONACCI : chaque terme de cette suite est la somme des deux termes précédents :

F 0 = 0,

F = 1,
 1
F n+2 = F n+1 + F n

On souhaite comparer les temps CPU pour calculer le 30-ème élément F 30 de la suite de F IBONACCI suivant la méthode
choisie :
Boucle calcul de Fn à l’aide d’une boucle ;
Écriture matricielle calcul de Fn en exploitant la relation matricielle
· ¸ · ¸· ¸
Fn 1 1 F n−1
=
F n−1 1 0 F n−2

Fonction récursive calcul de Fn à l’ide d’une fonction récursive


Expression fonctionnelle calcul de Fn en exploitant une expression fonctionnelle de la suite, c’est-à-dire une expres-
sion telle que le calcul de F n pour une valeur de n donnée ne présuppose la connaissance d’aucune autre valeur
de n.

Correction
Boucle On utilise l’écriture Fn+2 = Fn+1 + Fn avec pour valeurs initiales F1 = F2 = 1. À chaque étape on peut stocker toutes
les valeurs de la suite ou juste les trois dernières.
Écriture matricielle En exploitant la relation matricielle on obtient par récurrence
· ¸ · ¸· ¸ · ¸2 · ¸ · ¸n · ¸
Fn 1 1 F n−1 1 1 F n−2 1 1 F1
= = = ··· =
F n−1 1 0 F n−2 1 0 F n−3 1 0 F0

Expression fonctionnelle Comme la suite de F IBONACCI est linéaire d’ordre deux, on peut écrire son
p
équation caractéris-
1+ 5
tique. On obtient une équation du second degré x 2 − x − 1 = 0 qui a pour solutions x 1 = ϕ = 2 (le nombre d’or) et
p
1− 5 n n
x2 = 1 − ϕ = 2 . Il en résulte que F n = αϕ + β(1 − ϕ) où α et β sont deux constantes à déterminer à partir de F 0 et
p
F 1 . On a α + β = 0 et (α − β)ϕ + β = 1 ce qui donne α = −β = 1/ 5. On trouve alors l’expression générale de la suite de
F IBONACCI (appelée formule de B INET) :
1 ¡
F n = p ϕn − (1 − ϕ)n .
¢
5
Si on calcule la limite du rapport de deux nombres consécutifs de la suite de F IBONACCI on trouve le nombre d’or :

1−ϕ n+1
³ ´
F n+1 ϕn+1 − (1 − ϕ)n+1 1− ϕ
= = ϕ ´ −−−−→ ϕ
ϕn − (1 − ϕ)n 1−ϕ n n→∞
³
Fn 1− ϕ

1−ϕ
car 1 < ϕ < 2 et donc −1 < ϕ < 1.

60 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

clear all; clc; end


n = 30; c
toc
# Boucle 1
printf(’Boucle, on stocke toute la suite\n’) # Matricielle
tic printf(’\nCalcul matriciel\n’)
F = ones(1,n); tic
for i = 3:n fibmat(n)
F(i) = F(i-1)+F(i-2); toc
end
F(end) # Recoursive
toc printf(’\nCalcul recursif\n’)
tic
# Boucle 2 fibrec(n)
printf(’\nBoucle, on stocke juste 3 terms de la toc
suite\n’)
tic # Fonctionnelle
a=1; sprintf(’\nCalcul fonctionnel\n’)
b=1; tic
for i = 3:n #phi=fsolve(@(x)(x^2-x-1),1);
c = b+a; phi=(1+sqrt(5))/2;
a=b; Fn=(phi^n-(1-phi)^n)/sqrt(5)
b=c; toc

Exercice 3.34 (Coïncidences et anniversaires)


Combien faut-il réunir d’individus dans une salle de classe pour être certain que deux d’entre eux possèdent la même
date de naissance ? La réponse est presque évidente, il en faut 366 : même si les 365 premières personnes ont un
anniversaire différent, la 366ème personne aura forcément une date d’anniversaire commune avec une personne déjà
présente. a
Maintenant, passons à une question moins évidente : combien faut il réunir de personne pour avoir une chance sur
deux que deux d’entre elles aient le même anniversaire ? Au lieu de nous intéresser à la probabilité que cet événement
se produise, on va plutôt s’intéresser à l’événement inverse : quelle est la probabilité pour que n personnes n’aient pas
d’anniversaire en commun ?
1. si n = 1 la probabilité est 1 (100%) : puisqu’il n’y a qu’une personne dans la salle, il y a 1 chance sur 1 pour qu’elle
n’ait pas son anniversaire en commun avec quelqu’un d’autre dans la salle (puisque, fatalement, elle est toute
seule dans la salle) ;
2. si n = 2 la probabilité est 364/365 (99,73%) : la deuxième personne qui entre dans la salle a 364 chances sur 365
pour qu’elle n’ait pas son anniversaire en commun avec la seule autre personne dans la salle ;
3. si n = 3 la probabilité est 364/365 × 363/365 (99,18%) : la troisième personne qui entre dans la salle a 363 chances
sur 365 pour qu’elle n’ait pas son anniversaire en commun avec les deux autres personnes dans la salle mais cela
sachant que les deux premiers n’ont pas le même anniversaire non plus, puisque la probabilité pour que les deux
premiers n’aient pas d’anniversaire en commun est de 364/365, celle pour que les 3 n’aient pas d’anniversaire
commun est donc 364/365 × 363/365 ;
4. si n = 4 la probabilité est 364/365 × 363/365 × 362/365 (98,36%) et ainsi de suite ;
5. si n = k la probabilité est 364/365 × 363/365 × 362/365 × · · · × (365 − k + 1)/365.
On obtient la formule de récurrence (
P 1 = 1,
P k+1 = P k 365−k+1
365 .

Tracer un graphe qui affiche la probabilité que deux personnes ont la même date de naissance en fonction du nombre
de personnes. Calculer pour quel k on passe sous la barre des 50%.
Source : http://eljjdx.canalblog.com/archives/2007/01/14/3691670.html

a. On va oublier les années bissextiles et le fait que plus d’enfants naissent neuf mois après le premier de l’an que neuf mois après la Toussaint.

Correction
clear all
totale=365;
seuil=50/100;
n=[1:totale];

© 2018-2019ÉÀ G. Faccanoni 61
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

P(1)=1;
for k=1:totale-1
P(k+1)=(totale-k+1)*P(k)/totale;
end
nP=1-P;
personnes=sum(nP<seuil);
printf(strcat("On passe la barre de \t", num2str(seuil)," pour k=",num2str(personnes),"\n"))

plot(n,nP,’-’,n,seuil*ones(length(n)),’-’)
axis([1 totale 0 1])
title(strcat("Seuil=", num2str(seuil), " Personnes=",num2str(personnes) ))
grid

Dans un groupe de 23 personnes, il y a plus d’une chance sur deux pour que deux personnes de ce groupe aient leur
anniversaire le même jour. Ou, dit autrement, il est plus surprenant de ne pas avoir deux personnes qui ont leur anniversaire
le même jour que d’avoir deux personnes qui ont leur anniversaire le même jour (et avec 57, on dépasse les 99% de chances !)
On peut s’amuser à adapter les calculs à d’autres problèmes, par exemple on a 61% de chances que parmi 5 personnes
prises au hasard, deux ont le même signe astrologique :
totale=12;
seuil=61/100;

Exercice 3.35 (Conjecture de Syracuse)


Considérons la suite récurrente
u 1 ∈ N (donné,



un
2 si n est pair,
u n+1 =

3u n + 1 sinon.

En faisant des tests numérique on remarque que la suite obtenue tombe toujours sur 1 peut importe l’entier choisit a
au départ. La conjecture de Syracuse affirme que, peu importe le nombre de départ choisi, la suite ainsi construite
atteint le chiffre 1 (et donc boucle sur le cycle 4, 2, 1). Cet énoncé porte le nom de «Conjecture» et non de théorème, ce
qui signifie qu’un tel résultat n’a pas été démontré pour tous les nombres entiers. En 2004, la conjecture a été “juste”
vérifiée pour tous les nombres inférieurs à 264 .
1. Écrire un script qui, pour une valeur de u 1 > 1 donnée, calcule les valeurs de la suite jusqu’à l’apparition du
premier 1.
2. Tracer les valeurs de la suite en fonction de leur position (on appelle cela la trajectoire ou le vol), i.e. les points
{ (n, u n ) }n=N
n=1
3. Calculer ensuite le durée de vol, i.e. le nombre de terme avant l’apparition du premier 1 ; l’altitude maximale, i.e.
le plus grand terme de la suite et le facteur d’expansion, c’est-à-dire l’altitude maximale divisée par le premier
terme.
On peut s’amuser à chercher les valeurs de u 1 donnant la plus grande durée de vol ou la plus grandes altitude maximale.
On notera que, même en partant de nombre peu élevés, il est possible d’obtenir des altitudes très hautes. Vérifiez que,
en partant de 27, elle atteint une altitude maximale de 9232 et une durée de vol de 111. Au contraire, on peut prendre
des nombres très grands et voir leur altitude chuter de manière vertigineuse sans jamais voler plus haut que le point de
départ. Faire le calcul en partant de 106 .
Ce problème est couramment appelé Conjecture de Syracuse (mais aussi problème de Syracuse, algorithme de H ASSE,
problème de U LAM, problème de K AKUTANI, conjecture de C OLLATZ, conjecture du 3n + 1). Vous pouvez lire l’article de
vulgarisation https://automaths.blog/2017/06/20/la-conjecture-de-syracuse/amp/
a. Dès que u i = 1 pour un certain i , la suite devient périodique de valeurs 4, 2, 1

Correction
function u = mysuite(u_init)
u=[u_init];
while u(end)~=1
if rem(u(end),2)==0
u=[u,u(end)/2];
else
u=[u,3*u(end)+1];
end

62 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

end
end

N=60;

L=[]; M=[]; F=[];

for n=[2:N]
U=mysuite(n);
L=[L,length(U)];
M=[M,max(U(:))];
F=[F,M(end)/n];
end

subplot(1,3,1)
maxL=max(L);
indicemaxL=find(L==maxL,1)+1
plot(Uinit,L,’b-’,[0,indicemaxL,indicemaxL],[maxL,maxL,0],’r:’)
title(strcat( ["Duree de vol:\n max=" num2str(maxL) " obtenu avec u_1=" num2str(indicemaxL)] ))
grid()

subplot(1,3,2)
maxM=max(M);
indicemaxM=find(M==maxM,1)+1
plot(Uinit,M,’b-’,[0,indicemaxM,indicemaxM],[maxM,maxM,0],’r:’)
title(strcat( ["Altitude maximale:\n max=" num2str(maxM) " obtenue avec u_1=" num2str(indicemaxM)] ))
grid()

subplot(1,3,3)
maxF=max(F);
indicemaxF=find(F==maxF,1)+1
plot(Uinit,F,’b-’,[0,indicemaxF,indicemaxF],[maxF,maxF,0],’r:’)
title(strcat( ["Facteur d’expansion:\n max=" num2str(maxF) " obtenu avec u_1=" num2str(indicemaxF)] ))
grid()

3.4 Systèmes linéaires


3.4.1 Systèmes linéaires : utilisation de fonctions prédéfinies

Exercice 3.36 (Systèmes linéaires)


On a demandé à 215 étudiants de dire quel est leur langage de programmation préféré parmi Python, Matlab, Java et C.
Chaque étudiant devait fournir une seule réponse. On sait que 163 étudiants ont déclaré préférer Python ou Matlab ; 65
ont déclaré préférer Matlab ou C ; 158 ont déclaré préférer Python ou C.
Traduire les données par un système linéaire de 4 équations et 4 inconnues et le résoudre par la méthode de Gauss.

Correction
On note p, m, j et c le nombre d’étudiants préférant respectivement Python, Matlab, Java et C. D’après l’énoncé on a

p + m + j + c = 215,



p + m = 163,


 m + c = 65,

p + c = 158.

On passe à la notation matricielle et on résout le système par la méthode de Gauss (4 équations donc 3 étapes) :
 L ←L −L 
1 1 1 1 215 1 1 1 1 215 1 1 1 1 215
   
2 2 1
L 3 ←L 3
 1 1 0 0 163  L 4 ←L 4 −L 1  0 0 −1 −1 −52  0 1 0 1 65 
 −−L−
2 ↔L 3 
 

 0 −−−−−−−→  −−−→  
1 0 1 65  Étape 1  0 1 0 1 65  Pivot nul 0 0 −1 −1 −52 
1 0 0 1 158 0 −1 −1 0 −57 0 −1 −1 0 −57

© 2018-2019ÉÀ G. Faccanoni 63
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

1 1 1 1 215 1 1 1 1 215
   
L 3 ←L 3
 0 1 0 1 65  0 1 0 1 65 
L 4 ←L 4 +L 2
−−−−−−−→   −L−4−
←L 4 −L 3 
−−−−→  .
Étape 2
 0 0 −1 −1 −52  Étape 3
 0 0 −1 −1 −52 
0 0 −1 1 8 0 0 0 2 60

On résout le système triangulaire supérieur ainsi obtenu par remonté :

2c = 60 =⇒ c = 30,
− j − c = −52 =⇒ j = −c + 52 = 22,
m + c = 65 =⇒ m = −c + 65 = 35,
p + m + j + c = 215 =⇒ p = 215 − m − j − c = 128.

Les préférences sont donc : 128 pour Python, 35 pour Matlab, 22 pour Java et 30 pour C.
A=[1 1 1 1; 1 1 0 0; 0 1 0 1; 1 0 0 1]
b=[215; 163; 65; 158]
sol=A\b

Exercice 3.37 (Système linéaire, existence et unicité)


Considérons le système linéaire de 3 équations en les 3 inconnues x 1 , x 2 , x 3 suivant :

x 1 − x 2 + x 3 = 0

10x 2 + 25x 3 = 90

20x 1 + 10x 2 = 80.

Pour résoudre le système linéaire on commence par définir la matrice A des coefficients du système et le vecteur
colonne b contenant le terme source.
Méthode 1. On calcule la matrice inverse A−1 et on pose x = A−1 b (méthode déconseillée).
Méthode 2. On utilise l’opérateur backslash.
Méthode 3. On définit la matrice augmentée [A|b] et on applique la méthode de G AUSS -J ORDAN pour obtenir la forme
échelonnée (instruction rref(Aaug).
Dans tous les cas, on teste la solution obtenue en calculant ||Ax − b||2 .

Correction
A = [ 1 -1 1; 0 10 25; 20 10 0]
b = [0; 90; 80]

% Methode 1
x = inv(A)*b
norm(A*x-b)
% while mathematically correct, computing the inverse of a matrix is
% computationally inefficient, and not recommended most of the time.

% Methode 2
x = A\b
norm(A*x-b)

% Methode 3
Aaug=[A b]
RRAaug=rref(Aaug)
x=RRAaug(:,4)
norm(A*x-b)

64 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

Exercice 3.38 (Système linéaire, non existence)


Considérons le système linéaire de 3 équations en les 3 inconnues x 1 , x 2 , x 3 suivant :

3x 1 + 2x 2 + x 3 = 3

2x 1 + x 2 + x 3 = 0

6x 1 + 2x 2 + 4x 3 = 6.

Pour résoudre le système linéaire on commence par définir la matrice A des coefficients du système et le vecteur
colonne b contenant le terme source.
1. On définit la matrice augmentée [A|b] et on applique la méthode de G AUSS -J ORDAN pour obtenir la forme
échelonnée (instruction rref(Aaug). Pourquoi peut-on conclure que le système n’a pas de solution ?
2. Octave nous donne malgré tout une solution ! Vérifiez-le avec l’opérateur backslash.
3. Que se passe-t-il si on essaye de calculer la matrice inverse A−1 et poser ensuite x = A−1 b ?
Dans tous les cas, on teste la solution obtenue en calculant ||Ax − b||2 .

Correction
A = [ 3 2 1; 2 1 1; 6 2 4]
b = [3; 0; 6]

% Point 1
rref([A ,b])
% the last line of this matrix states that 0 = 1. That is not true, which
% means there is no solution.

% Point 2
x = A\b
norm(A*x-b)

% Point 3
invA=inv(A)
x = invA*b
norm(A*x-b)

3.4.2 Systèmes linéaires : méthode de Gauss pour des systèmes carrés


Exercice 3.39
Résoudre les systèmes linéaires suivants :
 
x 1 + 2x 2 − x 3 = 2 −x 1 + x 2 + 3x 3 = 12

  −2u−4v+3w=−1
¬ x 1 − 2x 2 − 3x 3 = −6 ­ 2x 1 − x 2 + 2x 3 = −8 ® 2v −w=1
u +v−3w=−6
  
x 1 + 4x 2 + 4x 3 = 3 4x 1 + x 2 − 4x 3 = 15
 

1 2 3 4 x1

−2x −y +4t =2 10
    
    

 6 1 1 x1 12 2 3 4 1 x 2  10
2x+3y+3z+2t =14

¯ ° 2 4 0  x 2  =  0  ±3 4 1 2 x 3  = 10
   
x+2y +z +t =7
1 2 6 x3 6



−x −z +t =−1 4 1 2 3 x4 10

Correction
On utilise la méthode du pivot de G AUSS :
¬
  
x 1 +2x 2 −x 3 = 2, L 2 ←L 2 −L 1 x 1 +2x 2 −x 3 = 2, x 1 +2x 2 −x 3 = 2,
L 3 ←L 3 −L 1 L 3 ←L 3 +L 2 /2
x 1 −2x 2 −3x 3 = −6, −−−−−−−→ −4x 2 −2x 3 = −8, −−−−−−−−−→ −4x 2 −2x 3 = −8,
x 1 +4x 2 +4x 3 = 3. 2x 2 +5x 3 = 1. 4x 3 = −3.
  

−3 19 −7
donc x 3 = 4 , x2 = 8 et x 1 = 2 .

© 2018-2019ÉÀ G. Faccanoni 65
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

­
  
−x 1 +x 2 +3x 3 = 12 L 2 ←L 2 +2L 1 −x 1 +x 2 +3x 3 = 12 −x 1 +x 2 +3x 3 = 12
L 3 ←L 3 +4L 1 L 3 ←L 3 −5L 2
2x 1 −x 2 +2x 3 = −8 −−−−−−−−→ x 2 +8x 3 = 16 −−−−−−−−→ x 2 +8x 3 = 16
4x 1 +x 2 −4x 3 = 15 5x 2 +8x 3 = 63
  
−32x 3 = −17

17 47 43
donc x 3 = 32 , x2 = 4 et x 1 = 32 .
®
  
−2u−4v+3w=−1 −2u−4v +3w=−1 −2u−4v+3w=−1
L 3 ←L 3 +L 1 /2 L 3 ←L 3 +L 2 /2
2v −w=1 −−−−−−−−−→ 2v −w=1 −−−−−−−−−→ 2v −w=1
u +v−3w=−6 −v− 32 w=−13/2
  
−2w=−6

donc w = 3, v = 2 et u = 1.
¯

+4t =2 L 2 ←L 2 +L 1 
 
−2x −y −2x−y +4t =2

 L 3 ←L 3 +L 1 /2 

2x+3y+3z+2t =14 L 4 ←L 4 −L 1 /2
 2y+3z+6t =16
−−−−−−−−−→ 3

 x+2y +z +t =7 
 2 y +z+3t =8
  1
2 y −z −t =−2
−x −z +t =−1
 
−2x−y +4t =2 −2x−y +4t =2
L 3 ←L 3 −3L 2 /4 
 

L 4 ←L 2 −L 2 /4
 2y +3z +6t =16 L 4 ←L 4 −7L 3 /5  2y +3z +6t =16
−−−−−−−−−−→ −−−−−−−−−−→

 − 45 z− 32 t =−4 
 − 45 z− 32 t =−4
7 5
− 52 t =− 25
 
− 4 z− 2 t =−6

donc t = 1, z = 2, y = 2 et x = 0.
°
 L 2 ←L 2 − 62 L 1  11
6 1 1 12
   
6 1 1 12 6 L
L 3 ←L 3 − 11 2 6 1 1 12
L 3 ←L 3 − 61 L 1 11
− 13 11
− 13
3
[A|b] =  2 4 0 0  −−−−−−−−→  0 3 −4  −−−−−−−−−−→  0 3 −4 
11 35
1 2 6 6 0 6 6 4 0 0 6 6

donc 
6x 1 + x 2 + x 3 = 12,

11 1
3 x 2 − 3 x 3 = −4
=⇒ x 3 = 1, x 2 = −1, x 1 = 2.

6x 3 = 6

±
 L ←L −2L 
1 2 3 4 10 1 2 3 4 10
 
2 2 1
L 3 ←L 3 −3L 1
 2 3 4 1 10  L 4 ←L 4 −4L 1 
 0 −1 −2 −7 −10 
[A|b] = 
 3
 −−−−−−−−→ 
4 1 2 10   0 −2 −8 −10 −20 
4 1 2 3 10 0 −7 −10 −13 −30
1 2 3 4 10 1 2 3 4 10
   
L 3 ←L 3 −2L 2
 0 −1 −2 −7 −10  0 −1 −2 −7 −10 
L 4 ←L 4 −7L 2
−−−−−−−−→   −L−4−
←L 4 +L 3 
−−−−→  
 0 0 −4 4 0   0 0 −4 4 0 
0 0 4 36 40 0 0 0 40 40

donc 
x 1 + 2x 2 + 3x 3 + 4x 4 = 10



−x − 2x − 7x = −10
2 3 4
=⇒ x 4 = 1, x 3 = 1, x 2 = 1, x 1 = 1.


 −4x 3 + 4x 4 = 0

40x 4 = 40

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


b=[2; -6; 3] b=[-1; 1; -6]
A\b A\b
A=[-1 1 3; 2 -1 2; 4 1 -4] A=[-2 -1 0 4; 2 3 3 2; 1 2 1 1; -1 0 -1 1]
b=[12; -8; 15] b=[2; 14; 7; -1]
A\b A\b

66 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

A=[6 1 1; 2 4 0; 1 2 6] A=[1 2 3 4; 2 3 4 1; 3 4 1 2; 4 1 2 3]
b=[12; 0; 6] b=[10; 10; 10; 10]
A\b A\b

Exercice 3.40
Soit le système linéaire

2x 1 − x 2 − 3x 3 = 0,

(S) −x 1 + 2x 3 = 0,

2x 1 − 3x 2 − x 3 = 0.

Ce système est-il compatible ? Possède-t-il une solution unique ?

Correction

  
2x 1 − x 2 − 3x 3 = 0,
 2x 1 − x 2 − 3x 3 = 0,
L 2 ←L 2 +L 1 /2
 2x 1 − x 2 − 3x 3 = 0,

L 3 ←L 3 −L 1 L 3 ←L 3 −4L 2
−x 1 + 2x 3 = 0, −−−−−−−−−→ −1/2x 2 + 1/2x 3 = 0, −−−−−−−−→ −1/2x 2 + 1/2x 3 = 0,
  
2x 1 − 3x 2 − x 3 = 0. −2x 2 + 2x 3 = 0, 0 = 0,
  

Le système est compatible car le rang du système est 2 inférieur au nombre d’inconnues 3 et la solution n’est pas unique car
rg(S) < 3. Il admet une infinité de solutions de la forme (2κ, κ, κ), κ ∈ R.
Que dit Octave ?
>> [2,-1,-3;-1,0,2;2,-3,-1]\[0;0;0]
warning: matrix singular to machine precision

Exercice 3.41
Trouver toutes les solutions du système linéaire homogène

−3x 1 + x 2 + 2x 3 = 0,

(S) −2x 1 + 2x 3 = 0,

−11x 1 + 6x 2 + 5x 3 = 0.

Correction
Le système étant homogène, il est inutile d’écrire le terme source dans la méthode du pivot de G AUSS :
     
−3 1 2 L 2 ←L 2 −2L 1 /3 −3 1 2 −3 1 2
L 3 ←L 3 −11L 1 /3 L 3 ←L 3 +7L 2 /2
A =  −2 0 2 −−−−−−−−−−→  0 −2/3 /3  −−−−−−−−−−→  0
2
−2/3 /3
2

−11 6 5 0 7
/3 −7/3 0 0 0

Le système admet une infinité de solutions de la forme (κ, κ, κ) avec κ ∈ R.

Exercice 3.42
Équilibrer la réaction
Zn + H2 SO4 + K2 Cr2 O7 → KCr(SO4 )2 + ZnSO4 + H2 O.

Correction
Écrivons les coefficients stœchiométriques et les contraintes :

x 1 Zn + x 2 H2 SO4 + x 3 K2 Cr2 O7 → x 4 KCr(SO4 )2 + x 5 ZnSO4 + x 6 H2 O

1. Atomes de Zn : x 1 = x 5 , i.e. x 1 − x 5 = 0
2. Atomes de H : 2x 2 = 2x 6 , i.e. x 2 − x 6 = 0
3. Atomes de S : x 2 = 2x 4 + x 5 , i.e. x 2 − 2x 4 − x 5 = 0
4. Atomes de K : 2x 3 = x 4 , i.e. 2x 3 − x 4 = 0
5. Atomes de Cr : 2x 3 = x 4 , i.e. 2x 3 − x 4 = 0

© 2018-2019ÉÀ G. Faccanoni 67
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

6. Atomes de O : 4x 2 + 7x 3 = 8x 4 + 4x 5 + x 6 , i.e. 4x 2 + 7x 3 − 8x 4 − 4x 5 − x 6 = 0
Notons que la contrainte 2x 3 − x 4 = 0 est répétée deux fois, donc on ne l’écrira qu’une seule fois dans le système linéaire ;
cela donne 5 équations pour 6 inconnues. Fixons arbitrairement un des coefficients, par exemple x 6 = 1 ; on obtient alors le
système linéaire
1 0 0 0 −1 x 1 0
    
0 1 0 0 0  x 2  1
    
0 1 0 −2 −1 x 3  = 0
    
0 0 2 −1 0  x 4  0
0 4 7 −8 −4 x 5 1
ce qui donne

1 0 0 0 −1 0 1 0 0 0 −1 0 1 0 0 0 −1 0
     

 0 1 0 0 0 1  L 3 ←L 3 −L 2 
 L 5 ←L 5 −4L 2  0 1 0 0 0 1  
 L 3 ↔L 4  0 1 0 0 0 1 


 0 1 0 −2 −1 0  −−−−−−−−→ 
  0 0 0 −2 −1 −1  −−−−−→ 
  0 0 2 −1 0 0 

 0 0 2 −1 0 0   0 0 2 −1 0 0   0 0 0 −2 −1 −1 
0 4 7 −8 −4 1 0 0 7 −8 −4 −3 0 0 7 −8 −4 −3
   
1 0 0 0 −1 0 1 0 0 0 −1 0
 0 1 0 0 0 1   0 1 0 0 0 1 
L 5 ←L 5 − 27 L 3
  L 5 ←L 5 − 9 L 4 
4

−−−−−−−−→  0 0 2 −1 0 0  −−−−−−−−→  0 0 2 −1 0 0
   

0 0 0 −2 −1 −1 0 0 0 −2 −1 −1
   
   
0 0 0 − 92 −4 −3 0 0 0 0 − 47 − 34

dont la solution est bien


x1 /7
  3 
x 2   1 
   
x 3  = 1/7
   
x 4  2/7
x5 /7
3

Si on multiplie tous les coefficients par 7 on obtient


 
3
x1
 
7 
x 2   

  1 
x 3  =  
  2 
x 4    
3 
x5
7

et donc la réaction équilibrée

3Zn + 7H2 SO4 + K2 Cr2 O7 → 2KCr(SO4 )2 + 3ZnSO4 + 7H2 O.

Exercice 3.43 (V. G UIRARDEL)


Vous projetez de passer un concours de recrutement l’an prochain. Vous avez sous les yeux le tableau de notes suivant :

C ANDIDAT Mathématique Anglais Informatique Moyenne


QUI 7 12 6 8
QUO 11 6 10 9
QUA 11 16 14 14

Retrouver les coefficients de chaque épreuve. La solution est-elle unique ?

Correction
Il s’agit de trouver les trois coefficients m, a, i ∈ [0; 1] tels que

7m + 12a + 6i = 8,

11m + 6a + 10i = 9,

11m + 16a + 14i = 14.

68 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

Utilisons la méthode de G AUSS :


 L 2 ←L 2 − 11 L 1  
 7m+12a +6i =8, L 3 ←L 3 − 117 L 1 7m+12a +6i =8, L 3 ←L − 2
3 9 2L 7m+12a +6i =8,
− 90 4 25
− 90 4 25
7
11m +6a+10i =9, −−−−−−−−−→ 7 a + 7 i =− 7 , −− − −− −− −→ 7 a+ 7 i =− 7 ,
20 32 10 40 20
11m+16a+14i =14, − 7 a+ 7 i = 7 , 9 i= 9 ,
  

qui admet l’unique solution (0.2, 0.3, 0.5).

Une autre interprétation est la suivante : il s’agit de trouver les trois coefficients m, a, i ∈ [0; 1] tels que

7m + 12a + 6i = 8(m + a + i )

11m + 6a + 10i = 9(m + a + i ),

11m + 16a + 14i = 14(m + a + i ).

Utilisons la méthode de G AUSS :


 L 2 ←L 2 − 11 L 1  
 −m+4a−2i =0, L 3 ←L 3 − 117 L 1 −m +4a−2i =0, L 3 ←L 3 − 2 L 2 −m+4a−2i =0,
7 9
2m−3a +i =0, −−−−−−−−−→ 5a−3i =0, −−−−−−−−→ 5a−3i =0,
0=0,

−3m+2a =0,

−10a+6i =0,

qui admet une infinité de solutions de la forme (2κ, 3κ, 5κ) avec κ ∈ [0; 1/5].

Exercice 3.44 (V. G UIRARDEL)


Une entreprise fabrique des manteaux. Ces manteaux sont composés de tissu rouge, de tissu bleu et d’une doublure
noire. Le tableau suivant résume les mètres carrés de chaque tissu nécessaires à la confection du manteau en tailles S,
M, L et XL :

S M L XL
Tissu rouge 0.4 0.5 0.6 0.7
Tissu bleu 1 1.1 1.2 1.3
Doublure 1.5 1.7 1.9 2.1

Chaque tissu est tissé à l’aide de plusieurs types de fil : coton, polyester et polyamide. Le tableau suivant résume les
mètres de fil de chaque type nécessaires par mètre carré de tissu :

Tissu rouge Tissu bleu Doublure


Coton 500 400 1000
Polyamide 1000 900 700
Polyester 500 600 0

1. L’entreprise veut produire s manteaux taille S, m manteaux taille M, ` manteaux taille L et x manteaux taille XL.
Quelle quantité de fil de chaque catégorie doit-elle commander ? Répondre à cette question dans le langage des
matrices.
2. En fin d’année, l’entreprise veut écouler entièrement ses stocks de fils. Il lui reste 100 000 m de coton et de
polyamide, et 20 000 m de Polyester. Peut-elle transformer entièrement ses stocks de fils en manteaux ?

Correction
Introduisons les deux matrices A et B et les deux vecteurs u et v suivants

s
 
     
0.4 0.5 0.6 0.7 500 400 1000 m  c
A= 1 1.1 1.2 1.3 B = 1000 900 700  u=
`
 v = a 
1.5 1.7 1.9 2.1 500 600 0 e
x

1. Pour produire s manteaux taille S, m manteaux taille M, ` manteaux taille L et x manteaux taille XL, l’entreprise doit
commander c mètres de coton, a mètres de polyamide et e mètres de polyester où c, a, e sont les entrées du vecteur v
suivant :  
2100s + 2390m + 2680` + 2970x
v = BAu = 2350s + 2680m + 3010` + 3340x  .
800s + 910m + 1020` + 1130x

© 2018-2019ÉÀ G. Faccanoni 69
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

2. On cherche s’il existe un vecteur u tel que


 
100000
100000 = BAu,
20000
i.e. s’il existe une solution du système linéaire

 s
 
  
2100 2390 2680 2970   100000
2350 m 
2680 3010 3340 
 `  = 100000 .

800 910 1020 1130 20000
x

En appliquant la méthode de G AUSS on obtient le système

 s
 
100000
  
2100 2390 2680 2970  
 0 115 230 m
115     250000 
21 21 7  `  = − 21
0 0 0 0 − 440000
23
x

qui n’admet pas de solution.

Exercice 3.45
Soit le système linéaire
(
x − αy = 1,
(S)
αx − y = 1.
Déterminer les valeurs de α de telle sorte que ce système possède :
1. une infinité de solutions ;
2. aucune solution ;
3. une solution unique.

Correction

µ ¶ µ ¶
1 −α 1 L 2 ←L 2 −αL 1 1 −α 1
−−−−−−−−→ .
α −1 1 0 −1 + α2 1−α

Comme −1 + α2 = (α − 1)(α + 1) on conclut que


1. si α = 1 (i.e. la dernière équation correspond à 0 = 0) alors (S) possède une infinité de solutions,
2. si α = −1 (i.e. la dernière équation correspond à 0 = 2) alors (S) ne possède aucune solution,
1 1
3. si α 6∈ { −1; 1 } alors (S) possède une solution unique x = α+1 et y = − α+1 .

Exercice 3.46
Soit le système linéaire
(
x + αy = 1,
(S)
−αx − y = 1.
En utilisant le pivot de G AUSS, déterminer les valeurs de α ∈ R de telle sorte que ce système possède :
a) une infinité de solutions ;
b) aucune solution ;
c) une solution unique.

Correction

½ ½
x+αy=1 L 2 ←L 2 +αL 1 x +αy=1
−−−−−−−−→
−αx −y=1 (−1 + α2 )y=α + 1

Comme −1 + α2 = (α − 1)(α + 1) on conclut que

70 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

a) si α = −1 (i.e. la dernière équation correspond à 0 = 0) alors (S) possède une infinité de solutions,
b) si α = 1 (i.e. la dernière équation correspond à 0 = 2) alors (S) ne possède aucune solution,
1 1
c) si α 6∈ { −1; 1 } alors (S) possède une solution unique x = − α−1 et y = α−1 .

Exercice 3.47
Soit le système linéaire

x + y − z = 1,

(S) 2x + 3y + βz = 3,

x + βy + 3z = −3.

Déterminer les valeurs de β de telle sorte que ce système possède :


1. une infinité de solutions ;
2. aucune solution ;
3. une solution unique.

Correction

     
1 1 −1 1 L 2 ←L 2 −2L 1 1 1 −1 1 1 1 −1 1
L 3 ←L 3 −L 1 L 3 ←L 3 +(1−β)L 2
 2 3 β 3  −−−−−−−−→  0 1 β+2 1  −−−−−−−−−−−→  0 1 β+2 1 .
1 β 3 −3 0 β−1 4 −4 0 0 (6 − β − β2 ) −(3 + β)

Comme 6 − β − β2 = (2 − β)(3 + β) on conclut que


1. si β = −3 (i.e. la dernière équation correspond à 0z = 0) alors (S) possède une infinité de solutions,
2. si β = 2 (i.e. la dernière équation correspond à 0z = −5) alors (S) ne possède aucune solution,
3. si β 6∈ { 2; −3 } alors (S) possède une solution unique.

Exercice 3.48
Trouver les valeurs de κ ∈ R pour lesquelles le système suivant a un nombre respectivement fini et infini de solutions :

2x 1 − x 2 = κ,


x 1 − x 2 − x 3 = 0,

x 1 − κx 2 + κx 3 = κ.

Correction

κ κ κ
     
2 −1 0 L 2 ←L 2 −L 1 /2 2 −1 0 2 −1 0
L 3 ←L 3 −L 1 /2 L 3 ←L 3 +(1−2κ)L 2
 1 −1 −1 0  −−−−−−−−−→  0 −1/2 −1 −κ/2  −−−−−−−−−−−−→  0 −1/2 −1 −κ/2  .
1 −κ κ κ 0 −κ + 1/2 κ κ/2 0 0 3κ − 1 κ2

On conclut que
1
1. si κ = 3 alors (S) ne possède aucune solution,
1 κ2 −κ/2+x 3 κ(κ−1) κ+x 2 κ(2κ−1)
2. si κ 6= 3 alors (S) possède une solution unique donnée par x 3 = 3κ−1 , x2 = −1/2 = 3κ−1 et x 1 = 2 = 3κ−1 ,
3. il n’existe aucune valeur de κ pour que (S) possède une infinité de solutions.

Exercice 3.49
Résoudre le système linéaire en discutant suivant la valeur du paramètre a ∈ R :

x + 2y + 3z = 2,

x − y + 2z = 7,

3x + az = 10.

© 2018-2019ÉÀ G. Faccanoni 71
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Correction
Si on utilise la méthode de G AUSS on trouve
     
1 2 3 2 L 2 ←L 2 −L 1 1 2 3 2 1 2 3 2
L 3 ←L 3 −3L 1 L 3 ←L 3 −2L 2
[A|b] =  1 −1 2 7  −−−−−−−−→  0 −3 −1 5  −−−−−−−−→  0 −3 −1 5 .
3 0 a 10 0 −6 a −9 4 0 0 a −7 −6

On a ainsi transformé le système linéaire initial dans le système linéaire triangulaire supérieur équivalent

x + 2y + 3z = 2,

−3y − z = 5,

(a − 7)z = −6.

Par conséquent,
−6 5+z 5a − 41 2(8a − 35)
? si a 6= 7, z = ,y= = et x = 2 − 2y − 3z = est l’unique solution du système linéaire ;
a −7 −3 −3(a − 7) 3(a − 7)
? si a = 7 il n’y a pas de solutions du système linéaire.

Exercice 3.50
En utilisant la méthode de G AUSS, résoudre le système linéaire en discutant suivant la valeur du paramètre a ∈ R :

x − y + 2z = 7,

x + 2y + 3z = 2,

3x + az = 10.

Correction

     
1 −1 2 7 L 2 ←L 2 −L 1 1 −1 2 7 1 −1 2 7
L 3 ←L 3 −3L 1 L 3 ←L 3 −L 2
 1 2 3 2  −−−−−−−−→  0 3 1 −5  −−−−−−−→  0 3 1 −5  .
3 0 a 10 0 3 a −6 −11 0 0 a −7 −6
On a ainsi transformé le système linéaire initial dans le système linéaire triangulaire supérieur équivalent

x − y + 2z = 7,

3y + z = −5,

(a − 7)z = −6.

Par conséquent,
−6 −5 − z −5a + 41 2(8a − 35)
? si a 6= 7, z = ,y= = et x = 7 − y − 2z = est l’unique solution du système linéaire ;
a −7 3 3(a − 7) 3(a − 7)
? si a = 7 il n’y a pas de solutions du système linéaire.

Exercice 3.51
En utilisant la méthode du pivot de G AUSS, résoudre le système linéaire en discutant suivant la valeur du paramètre
a ∈R: 

 x + z + w = 0,


ax + y + (a − 1)z + w = 0,


2x + a y + z + 2w = 0,

x − y + 2z + aw = 0.

Correction
Il s’agit d’un système homogène, il est alors inutile d’écrire le terme source dans la méthode du pivot de G AUSS. En appliquant
cette méthode on obtient
 L ←L −aL 
1 0 1 1 1 0 1 1 1 0 1 1
   
2 2 1
L 3 ←L 3 −2L 1 L 3 ←L 3 −aL 2
 a 1 a −1 1  0 1 −1 1 − a  0 1 −1 1−a 
  −L−4−←L 4 −L 1 
−−−−−→   −L−4−←L 4 +L 2 
−−−−−→  .
 2 a 1 2   0 a −1 0   0 0 a − 1 a(a − 1) 
1 −1 2 a 0 −1 1 a − 1 0 0 0 0

72 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

On a ainsi transformé le système linéaire initial dans le système linéaire triangulaire supérieur équivalent


 x + z + w = 0,


 y − z + (1 − a)w = 0,


(a − 1)z + a(a − 1)w = 0,

0 = 0.

Par conséquent, si on pose w = κ1 ∈ R une constante réelle quelconque, alors


? si a 6= 1, z = −a(a−1)w
a−1 = −aκ1 , y = −(1−a)w+z = −κ1 et x = −w−z = (a−1)κ1 : tous les vecteurs de Vect { (a − 1, −1, −a, 1) }
sont solution du système linéaire ;
? si a = 1, on pose z = κ2 ∈ R une constante réelle quelconque et on a y = −(1 − a)w + z = −(1 − a)κ1 + κ2 et x = −w − z =
−κ1 − κ2 : tous les vecteurs de Vect { (−1, 1, 1, 0), (−1, 0, 0, 1) } sont solution du système linéaire.

Exercice 3.52
En utilisant la méthode du pivot de G AUSS, résoudre le système linéaire en discutant suivant la valeur du paramètre
b∈R: 

 x + z + w = 0,


(b + 1)x + y + bz + w = 0,


 2x + (b + 1)y + z + 2w = 0,

x − y + 2z + (b + 1)w = 0.

Correction
Il s’agit d’un système homogène, il est alors inutile d’écrire le terme source dans la méthode du pivot de G AUSS. En appliquant
cette méthode on obtient
 L ←L −(b+1)L 
1 0 1 1 1 0 1 1 1 0 1 1
   
2 2 1
L 3 ←L 3 −2L 1 L 3 ←L 3 −(b+1)L 2
 b +1 1 b 1   0 1 −1 −b   0 1 −1 −b
 −L−4−←L 4 −L 1  L 4 ←L 4 +L 2

−−−−−−−−→   0 b + 1 −1 0  −−−−−−−−−−−→  0 0 b b(b + 1)  .
  
 2 b +1 1 2 
1 −1 2 b +1 0 −1 1 b 0 0 0 0

On a ainsi transformé le système linéaire initial dans le système linéaire triangulaire supérieur équivalent


 x + z + w = 0,


 y − z − bw = 0,


bz + b(b + 1)w = 0,

0 = 0.

Par conséquent, si on pose w = κ1 ∈ R une constante réelle quelconque, alors


? si b 6= 0,
−b(b + 1)w
z= = −(b + 1)κ1 , y = bw + z = −κ1 , x = −w − z = bκ1 ;
b
tous les vecteurs de Vect { (b + 1, 1, b + 1, −1) } sont solution du système linéaire ;
? si b = 0, on pose z = κ2 ∈ R une constante réelle quelconque et on a y = bw + z = κ2 et x = −w − z = −κ1 − κ2 : tous les
vecteurs de Vect { (−1, 1, 1, 0), (−1, 0, 0, 1) } sont solution du système linéaire.

Exercice 3.53
Discuter et résoudre le système

(1 + a)x + y + z = 0,

(S a ) x + (1 + a)y + z = 0,

x + y + (1 + a)z = 0,

d’inconnue (x, y, z) ∈ R3 et de paramètre a ∈ R.

Correction
Comme le système contient un paramètre, on commence par calculer le déterminant de la matrice associée :
¯ ¯
¯1 + a 1 1 ¯¯
1 ¯¯ = (1 + a)3 + 1 + 1 − (1 + a) − (1 + a) − (1 + a) = (1 + a)3 − 3(1 + a) + 2
¯
¯ 1
¯ 1+a
¯ 1 1 1 + a¯

© 2018-2019ÉÀ G. Faccanoni 73
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

³ ´³ ´ ³ ´³ ´³ ´
= (1 + a) − 1 (1 + a)2 + (1 + a) − 2 = (1 + a) − 1 (1 + a) + 2 (1 + a) − 1 = a 2 (3 + a).

Le système a une et une seule solution si et seulement si ce déterminant est non nul, donc

(S a ) a une et une seule solution si et seulement a ∈ R \ { −3, 0 } .

Notons S l’ensemble des solutions.


? Étude du cas a = −3. Le système s’écrit

−2x + y + z = 0,

(S −3 ) x − 2y + z = 0,

x + y − 2z = 0,

On utilise la méthode du pivot de G AUSS :


  
−2x y +z=0 L 2 ←L 2 +L 1 /2 −2x y +z=0 −2x −y +z=0
L 3 ←L 3 +L 1 /2 L 3 ←L 3 +L 2
x−2y +z=0 −−−−−−−−−→ − 23 y+ 23 z=0 −−−−−−−→ − 52 y+ 23 z=0
3 3
x y−2z=0 2 y− 2 z=0
0z=0
  

donc z = κ ∈ R, y = z et x = z, ainsi
S = { (κ, κ, κ) | κ ∈ R } .

? Étude du cas a = 0. Le système s’écrit



x + y + z = 0,

(S 0 ) x + y + z = 0,

x + y + z = 0,

donc z = κ1 ∈ R, y = κ2 ∈ R et x = −κ1 − κ2 , ainsi

S = (−κ1 − κ2 , κ2 , κ1 ) ¯ (κ1 , κ2 ) ∈ R2 .
© ¯ ª

? Étude du cas a ∈ R \ { −3, 0 }. Il s’agit d’un système de Cramer homogène, donc l’unique solution est (0, 0, 0) :

S = { (0, 0, 0) } .

Exercice 3.54
Discuter et résoudre le système

x + a y + (a − 1)z = 0,

(S a ) 3x + 2y + az = 3,

(a − 1)x + a y + (a + 1)z = a,

d’inconnue (x, y, z) ∈ R3 et de paramètre a ∈ R.

Correction
Comme le système contient un paramètre, on commence par calculer le déterminant de la matrice associée :
¯ ¯
¯ 1 a a − 1¯¯
a ¯¯ = 2(a + 1) + a 2 (a − 1) + 3a(a − 1) − 2(a − 1)2 − a 2 − 3a(a + 1) = a 2 (a − 4).
¯
¯ 3 2
¯
¯a − 1 a a + 1¯

Le système a une et une seule solution si et seulement si ce déterminant est non nul, donc

(S a ) a une et une seule solution si et seulement a ∈ R \ { 0, 4 } .

Notons S l’ensemble des solutions.


? Étude du cas a = 0. Le système s’écrit

x − z = 0,

(S 0 ) 3x + 2y = 3,

−x + z = 0,

74 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

3−3κ
donc z = κ ∈ R, y = 2 et x = κ, ainsi
½µ ¶¯ ¾
3 − 3κ
S = κ, ,κ ¯ κ ∈ R .
¯
¯
2

? Étude du cas a = 4. Le système s’écrit



x + 4y + 3z = 0,

(S 4 ) 3x + 2y + 4z = 3,

3x + 4y + 5z = 4,

On utilise la méthode du pivot de G AUSS :


  
 x+4y+3z=0, L 2 ←L 2 −3L 1 x +4y+3z=0, x +4y+3z=0,
L 3 ←L 3 −3L 1 L 3 ←10L 3 −8L 2
3x+2y+4z=3, −−−−−−−−→ −10y−5z=3, −−−−−−−−−−→ −10y−5z=3,
3x+4y+5z=4, 0=16.
 
−8y−4z=4,

La dernière équation est impossible donc


S = ;.

? Étude du cas a ∈ R \ { −3, 0 }. On utilise la méthode du pivot de G AUSS :


 
 x+a y+(a − 1)z=0, L 2 ←L 2 −3L 1 x +a y +(a − 1)z=0,
L 3 ←L 3 −(a−1)L 1
3x +2y +az=3, −−−−−−−−−−−→ (2 − 3a)y +(3 − 2a)z=3,
(a − 1)x+a y+(a + 1)z=a, (2 − a)a y+(3 − a)az=a,
 

L 3 ←L 3 − (2−a)a x
 +a y +(a − 1)z=0,
(2−3a) L 2
−−−−−−−−−−−−→ (2 − 3a)y+(3 − 2a)z=3,
2 (a−4)
− a 3a−2 4a

 z= 3a−2 .

4 a−6 a 2 −2a−4
On obtient z = − a(a−4) , y = − a(a−4) ,x= a(a−4) , ainsi

a 2 − 2a − 4 a −6
½µ ¶¾
4
S= ,− ,− .
a(a − 4) a(a − 4) a(a − 4)

3.5 Calcul de la matrice inverse


Exercice 3.55
1 0 −1
³ ´
Calculer A−1 où A est la matrice 4 −1 −2 .
−2 0 1

Correction

  L 1 ←L 1  
1 0 −1 1 0 0 L 2 ←L 2 −4L 1 1 0 −1 1 0 0
L 3 ←L 3 +2L 1
[A|I3 ] =  4 −1 −2 0 1 0  −−−−−−−−→  0 −1 2 −4 1 0 
−2 0 1 0 0 1 0 0 −1 −2 0 1
L 1 ←L 1   L 1 ←L 1 −L 3  
L 2 ←−L 2 1 0 −1 1 0 0 L 2 ←L 2 −2L 3 1 0 0 −1 0 −1
L 3 ←L 3 L 3 ←−L 3
−−−−−−→  0 1 −2 4 −1 0  −−−−−−−−→  0 1 0 0 −1 −2  = [I3 |A−1 ].
0 0 −1 −2 0 1 0 0 1 −2 0 −1

A=[1 0 -1; 4 -1 -2; -2 0 1]


inv(A)

Exercice 3.56 ³1 0 1´
Calculer A−1 où A est la matrice 012 .
201

© 2018-2019ÉÀ G. Faccanoni 75
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Correction

  L 1 ←L 1  
1 0 1 1 0 0 L 2 ←L 2 1 0 1 1 0 0
L 3 ←L 3 −2L 1
[A|I3 ] =  0 1 2 0 1 0  −−−−−−−−→  0 1 2 0 1 0 
2 0 1 0 0 1 0 0 −1 −2 0 1
L 1 ←L 1   L 1 ←L 1 +L 3  
L 2 ←L 2 1 0 1 1 0 0 L 2 ←L 2 +2L 3 1 0 0 −1 0 1
L 3 ←L 3 L 3 ←−L 3
−−−−−→  0 1 2 0 1 0  −−−−−−−−→  0 1 0 −4 1 2  = [I3 |A−1 ].
0 0 −1 −2 0 1 0 0 1 2 0 −1

A=[1 0 1; 0 1 2; 2 0 1]
inv(A)

Exercice 3.57
Calculer les inverses des matrices suivantes (si elles existent) :
   
µ ¶ 1 5 −3 1 5 −3
2 −3
A= , B = 2 11 1 , C = 2 11 1 .
4 5
2 9 −11 1 4 −10

Correction
A est inversible et on trouve
µ ¶
−1 1 5 3
A = .
22 −4 2
B est inversible et on trouve  
−130 28 38
1
B−1 =  24 −5 −7 .
2
−4 1 1
C n’est pas inversible.
A=[2 -3; 4 5]
inv(A)
B=[1 5 -3; 2 11 1; 2 9 -11]
inv(B)
C=[1 5 -3; 2 11 1; 1 4 -10]
inv(C)

Exercice 3.58
Soit A la matrice
1 0 0 −1
 
1 1 −1 −1
A=
1
.
2 −1 −2
1 2 0 −2
1. Calculer det(A).
6 0, calculer A−1 .
2. Si det(A) =

Correction
1. Pour calculer le déterminant de la matrice A on développe par rapport à la première ligne
³ 1 −1 −1 ´ ³ 1 1 −1 ´
det(A) = 1 · det(A11 ) − 0 · det(A12 ) + 0 · det(A13 ) − (−1) · det(A14 ) = det 2 −1 −2 + det 1 2 −1 .
2 0 −2 12 0

On note que la première colonne de la sous-matrice A11 est l’opposée de la deuxième colonne, ainsi le déterminant
de A11 est nul et il ne reste plus qu’à calculer le déterminant de A14 (par exemple en utilisant la règle de S ARRUS).
³ 1 1 −1 ´
det(A) = 0 + det 1 2 −1 = 1.
12 0

76 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

2. Calculons A−1
 L ←L −L 
1 0 0 −1 1 0 0 0 1 0 0 −1 1 0 0 0
 
2 2 1
L 3 ←L 3 −L 1
 1 1 −1 −1 0 1 0 0  L 4 ←L 4 −L 1 
 0 1 −1 0 −1 1 0 0 
[A|I4 ] = 
 1 −−−−−−−→  
2 −1 −2 0 0 1 0   0 2 −1 −1 −1 0 1 0 
1 2 0 −2 0 0 0 1 0 2 0 −1 −1 0 0 1
L 1 ←L 1
 L ←L
1 0 0 −1 1 0 0 0 1 0 0 −1 1 0 0 0
  
1 1
L 3 ←L 3 −2L 2 L 2 ←L 2 +L 3
L 4 ←L 4 −2L 2  0 1 −1 0 −1 1 0 0  L 4 ←L 4 −2L 3
 0 1 0 −1 0 −1 1 0 
−−−−−−−−→   0
 −−−−−−−−→  
0 1 −1 1 −2 1 0   0 0 1 −1 1 −2 1 0 
0 0 2 −1 1 −2 0 1 0 0 0 1 −1 2 −2 1
L 1 ←L 1 +L 4 1 0 0 0 0 2 −2 1
 
L 2 ←L 2 +L 4
L 3 ←L 3 +L 4  0 1 0 0 −1 1 −1 1 
 = [I4 |A−1 ].
−−−−−−−→  
0 0 1 0 0 0 −1 1 
0 0 0 1 −1 2 −2 1

A=[1 0 0 -1; 1 1 -1 -1; 1 2 -1 -2; 1 2 0 -2]


det(A)
inv(A)

3.6 Systèmes linéaires : méthode de Gauss pour des systèmes


rectangulaires (sur ou sous déterminés)
Exercice 3.59
Résoudre le système
(
−2x + y + z = 0,
(S)
x − 2y + z = 0,

d’inconnue (x, y, z) ∈ R3 .

Correction
(S) est équivalent au système
(
−2x + y + z = 0,
−3y + 3z = 0,
qui admet une infinité de solutions de la forme (κ, κ, κ) pour κ ∈ R.

Exercice 3.60
Soit le système linéaire
(
x 1 + x 2 − 2x 3 + 4x 4 = 6,
(S)
−3x 1 − 3x 2 + 6x 3 − 12x 4 = b.
1. Pour quelle valeur de b le système est-il possible ?
2. Donner à b la valeur trouvée au point précédent et calculer la solution complète du système.

Correction
(S) est équivalent au système
(
x 1 + x 2 − 2x 3 + 4x 4 = 6,
0 = b + 18.
1. (S) est possible si et seulement si b = −18.
2. Si b = −18, (S) admet ∞3 solutions de la forme (x 1 , x 2 , x 3 , x 4 ) = (6 − a + 2b − 4c, a, b, c) avec a, b, c ∈ R.

© 2018-2019ÉÀ G. Faccanoni 77
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Exercice 3.61
Résoudre le système


 x + 2y + z = −1,


2x + y − z = 1,
(S)


−x + y + 2z = −2,

x + y + z = 4.

Correction
(S) étant un système de 4 équations à 3 inconnues, on considère le sous-système carré d’ordre 3

x + 2y + z = −1,

(S 0 ) 2x + y − z = 1,

−x + y + 2z = −2,

qu’on peut résoudre par la méthode du pivot de G AUSS


  
 x+2y +z=−1, L 2 ←L 2 −2L 1 x+2y +z=−1, x+2y +z=−1,
L 3 ←L 3 +L 1 L 3 ←L 3 +L 2
2x +y −z=1, −−−−−−−−→ −3y−3z=3, −−−−−−−→ −3y−3z=3,
3y+3z=−3, 0=0,

−x +y+2z=−2,
 

qui admet une infinité de solutions de la forme (1+κ, −1−κ, κ) pour κ ∈ R. Cherchons parmi ces solutions celles qui vérifient
l’équation de (S) qui n’apparaît pas dans (S 0 ) : pour (x, y, z) = (1 + κ, −1 − κ, κ) on a x + y + z = 1 + κ − 1 − κ + κ = κ donc
x + y + z = 4 si et seulement si κ = 4 ainsi (S) admet l’unique solution (5, −5, 4).

Exercice 3.62
Déterminer si le système suivant a une solution non nulle. Dans le cas affirmatif trouver la(les) solution(s) et expliquer
pourquoi : 

 x − 2y + 2z = 0,


2x + y − 2z = 0,
(S)


 3x + 4y − 6z = 0,

3x − 11y + 12z = 0.

Correction
(S) étant un système de 4 équations à 3 inconnues, on considère le sous-système carré d’ordre 3

x − 2y + 2z = 0,

(S 0 ) 2x + y − 2z = 0,

3x + 4y − 6z = 0,

qu’on peut résoudre par la méthode du pivot de G AUSS


  
 x−2y+2z=0, L 2 ←L 2 −2L 1 x−2y +2z=0, x−2y+2z=0,
L 3 ←L 3 −3L 1 L 3 ←L 3 −2L 2
2x +y−2z=0, −−−−−−−−→ 5y −6z=0, −−−−−−−−→ 5y−6z=0,
3x+4y−6z=0, 10y−12z=0, 0=0,
  

qui admet une infinité de solutions de la forme (2κ, 6κ, 5κ) pour κ ∈ R. Cherchons parmi ces solutions celles qui vérifient
l’équation de (S) qui n’apparaît pas dans (S 0 ) : pour (x, y, z) = (2κ, 6κ, 5κ) on a 3x − 11y + 12z = 6κ − 66κ + 60κ = 0 donc
3x − 11y + 12z = 0 pour tout κ ∈ R ainsi (S) admet une infinité de solutions de la forme (2κ, 6κ, 5κ) pour κ ∈ R.

Exercice 3.63
Équilibrer l’équation

x 1 CuSCN + x 2 KIO3 + x 3 HCl → x 4 CuSO4 + x 5 KCl + x 6 HCN + x 7 ICl + x 8 H2 O

78 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

Correction
Méthode “par tentatives”. Chaque élément chimique en jeu fournit une équation :

Le sulfure de cuire CuS donne x 1 = x 4 (3.1)


Le cyanure CN donne x 1 = x 6 (3.2)
Le potassium K donne x 2 = x 5 (3.3)
Le iode I donne x 2 = x 7 (3.4)
Le chlore Cl donne x 3 = x 5 + x 7 (3.5)
L’oxygène O donne 3x 2 = 4x 4 + x 8 (3.6)
L’hydrogène H donne x 3 = x 6 + 2x 8 (3.7)

On a alors
(3.1) (3.2)
x1 = x4 = x6 , (3.8)
(3.3) (3.4)
x2 = x5 = x7 , (3.9)
(3.5) (3.8)
x 3 = x 5 + x 7 = 2x 2 (3.10)

De plus

(3.6) (3.8)
x 8 = 3x 2 − 4x 4 = 3x 2 − 4x 1 (3.11)
(3.7) (3.8)
2x 8 = x 3 − x 1 = 2x 2 − x 1 (3.12)

(3.12) (3.11)
2x 2 − x 1 = 2x 8 = 2(3x 2 − 4x 1 )
Cela donne
4x 2 = 7x 1 (3.13)
d’où
(3.12) (3.13)
4x 8 = 2(2x 2 − x 1 ) = 4x 2 − 2x 1 = 7x 1 − 2x 1 = 5x 1 (3.14)
Enfin on a
(3.7) (3.8)−(3.14)
2x 3 = 2(x 6 + 2x 8 ) = 2x 1 + 5x 1 = 7x 1
Conclusion :
7
x2 = x1
4
7
x3 = x1
2
x4 = x1
7
x5 = x2 = x1
4
x6 = x1
7
x7 = x2 = x1
4
5
x8 = x1
4
On choisit x 1 = 4 (pour ne pas avoir de fractions) ainsi

4CuSCN + 7KIO3 + 14HCl → 4CuSO4 + 7KCl + 4HCN + 7ICl + 5H2 O

© 2018-2019ÉÀ G. Faccanoni 79
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Méthode de Gauss : on réécrit les équations dans l’ordre suivant


 

 x1 −x 4 =0 
 x1 −x 4 =0
x −x = 0 x −x =0
 
2 7 2 7

 


 



 x 3 −x 5 −x 7 = 0 

 x 3 −x 5 −x 7 = 0 L 5 ←L 5 −L 2
L 4 ←L 4 −L 1 L 6 ←L 6 −3L 2
x1 −x 6 = 0 −−−−−−−→ x4 −x 6 = 0 −−−−−−−−→
x2 =0 x2 =0

−x 5






 −x 5
 



 3x 2 −4x 4 −x 8 = 0 


 3x 2 −4x 4 −x 8 0
=
x3 −x 6 −2x 8 = 0 x3 −x 6 −2x 8 = 0
 
 

 x1 −x 4 =0 
 x1 −x 4 =0
x −x = 0 x −x =0
 
2 7 2 7

 


 



 x 3 −x 5 −x 7 = 0 

 x 3 −x 5 −x 7 =0
L 7 ←L 7 −L 3 L 6 ←L 6 +4L 4
x4 −x 6 = 0 −−−−−−−→ x4 −x 6 = 0 −−−−−−−−→
=0 =0

−x 5 +x 7






 −x 5 +x 7
 



 −4x 4 +3x 7 −x 8 = 0 


 −4x 4 +3x 7 −x 8= 0
x3 −x 6 −2x 8 = 0 x 5 −x 6 +x 7 −2x 8 = 0
 
 

 x1 −x 4 =0 
 x1 −x 4 =0
x −x = 0 x −x =0
 
2 7 2 7

 


 

 x 3 −x 5 −x 7 = 0  x 3 −x 5 −x 7 =0
L 7 ←L 7 − 41 L 6

 

L 7 ←L 7 +L 5
x4 −x 6 = 0 −−−−−−−→ x4 −x 6 = 0 −−−−−−−−→
=0 =0

−x 5 +x 7






 −x 5 +x 7
 



 −4x 6 +3x 7 −x 8 = 0 


 −4x 6 +3x 7 −x 8= 0
x 5 −x 6 +x 7 −2x 8 = 0 −x 6 +2x 7 −2x 8 = 0
 


 x1 −x 4 =0
x −x =0

2 7






 x 3 −x 5 −x 7 =0
x4 −x 6 =0
−x +x =0

5 7






 −4x 6 +3x 7 −x 8 =0
5 7

x
4 7 4 8= 0
− x

x 8 −3x 7
On pose donc x 8 = 5κ ainsi x 7 = 75 x 8 = 7κ, x 6 = −4 = 4κ, x 5 = x 7 = 7κ, x 4 = x 6 = 4κ, x 3 = x 5 + x 7 = 14κ, x 2 = x 7 = 7κ
et x 1 = x 4 = 4κ.
On peut choisir par exemple κ = 1 et on a

4CuSCN + 7KIO3 + 14HCl → 4CuSO4 + 7KCl + 4HCN + 7ICl + 5H2 O

3.7 Pour aller plus loin

Exercice 3.64 (Représentation et manipulation de polynômes)


Dans cette exercice nous allons construire des fonctions qui se trouvent déjà dans Octave, on pourra comparer donc
le résultat obtenu avec celui d’Octave. Attention, vous devez programmer vous même les fonctions indiquées. Toute
utilisation de fonctions toutes prêtes ne sera pas prise en compte.
Soit Rn [x] l’ensemble des polynômes de degré inférieur ou égale à n, n ∈ N∗ . Tout polynôme de cet espace vectoriel
s’écrit de manière unique comme
n
ai x i = a0 + a1 x + · · · + an x n , où a i ∈ R pour i = 0, . . . n.
X
p n (x) =
i =0

Les n + 1 valeurs réels a 0 , a 1 , . . . , a n sont appelés les coordonnées de p n dans la base canonique a de Rn [x] et on peut
les stocker dans un vecteur p :
p = coord(p n , C n ) = (a 0 , a 1 , a 2 , . . . , a n ) ∈ Rn+1
Dans Octave nous utiliserons le vecteur p pour manipuler un polynôme et nous construirons des fonctions pour opérer
sur les polynômes à partir de cette représentation. Par exemple, pour construire le polynôme p 2 (x) = 2 − x + x 2 nous
écrirons

80 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

p=[2 -1 1]

Dans le script script_pol.m on écrira les instructions utilisées pour tester les function suivantes :
1. Implémenter une fonction appelée eval_pol permettant d’évaluer le polynôme p (la fonction polynomiale)
en des points donnés. La syntaxe doit être function y=eval_pol(p,x) où x est une valeur numérique ou
un vecteur. Dans le second cas on doit obtenir un vecteur contenant les valeurs de la fonction polynomiale
aux différents points spécifiés dans le vecteur x. Par exemple, pour évaluer le polynôme p(x) = 1 + 2x + 3x 2 en
x = (−1, 0, 1, 2) nous écrirons
p=[1 2 3]
y=eval_pol(p,[-1,0,1,2])

et on veut obtenir le vecteur y = p(x) = (2, 1, 6, 17). En effet on a

p(−1) = 1 + 2 × (−1) + 3 × ((−1)2 ) = 1 − 2 + 3 = 2


p(x) = 1 + 2x + 3x 2 p(0) = 1 + 2 × 0 + 3 × (02 ) = 1 + 0 + 0 = 1
p = coord(p, C 2 ) = (1, 2, 3) p(1) = 1 + 2 × 1 + 3 × (12 ) = 1 + 2 + 3 = 6
p(2) = 1 + 2 × 2 + 3 × (22 ) = 1 + 4 + 12 = 17

2. Implémenter une fonction appelée plot_pol prenant en entrée un polynôme p (i.e. le vecteur qui contient
ses coordonnées) et deux réels a et b > a et qui trace le graphe de p pour x ∈ [a, b]. La syntaxe de l’instruction
doit être plot_pol(p,a,b). Par exemple, pour tracer le graphe du polynôme p(x) = 1 + 2x + 3x 2 sur l’intervalle
[−2; 2] nous écrirons
p=[1 2 3]
plot_pol(p,-2,2)

3. Implémenter une fonction appelée sum_pol renvoyant la somme de deux polynômes (attention, si les deux
polynômes n’ont pas même degré, il faudra ajouter des zéros en fin du polynôme de plus petit degré afin de
pouvoir calculer l’addition des deux vecteurs représentatifs). Par exemple, pour p = (1, 2, 3) et q = (1, −2), on veut
obtenir s = (2, 0, 3) :

p(x) = 1 + 2x + 3x 2 p = coord(p, C 2 ) = (1, 2, 3)


q(x) = 1 − 2x q = coord(q, C 1 ) = (1, −2) =⇒ q = coord(q, C 2 ) = (1, −2, 0)
2
s(x) = p(x) + q(x) = 2 + 3x s = coord(p + q, C 2 ) = (2, 0, 3)

4. Implémenter une fonction appelée prod_pol renvoyant le produit de deux polynômes.


Exemple, pour p = (1, 0, 3) et q = (1, −2), on veut obtenir u = (1, −2, 3, −6).

p(x) = 1 + 3x 2 p = coord(p, C 2 ) = (1, 0, 3)


q(x) = 1 − 2x q = coord(q, C 2 ) = (1, −2, 0)
u(x) = p(x) × q(x) = 1 × p(x) − 2x × p(x) = 1 − 2x + 3x 2 − 6x 3 u = coord(p × q, C 3 ) = (1, −2, 3, −6)

5. Implémenter une fonction appelée derivee_pol renvoyant la dérivée d du polynôme p donné en entrée
(attention, si p ∈ Rn [x], alors d ∈ Rn−1 [x]).
Exemple, pour p = (1, 2, 6), on veut obtenir d = (2, 12).

p(x) = 1 + 2x + 6x 2 p = coord(p, C 2 ) = (1, 2, 6)


0
d (x) = p (x) = 2 + 12x d = coord(d , C 1 ) = (2, 12)

6. Implémenter une fonction appelée primitive_pol renvoyant la primitive v du polynôme p donné en entrée
ayant 0 pour racine (attention, si p ∈ Rn [x], alors v ∈ Rn+1 [x]).
Exemple, pour p = (1, 2, 6), on veut obtenir v = (0, 1, 1, 2).

p(x) = 1 + 2x + 6x 2 p = coord(p, C 2 ) = (1, 2, 6)


Z x Z x
v(x) = p(t ) dt = 1 + 2t + 6t 2 dt = x + x 2 + 2x 3 v = coord(v, C 3 ) = (0, 1, 1, 2)
0 0

© 2018-2019ÉÀ G. Faccanoni 81
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

7. Implémenter une fonction appelée integrale_pol renvoyant l’intégrale d’un polynôme entre deux valeurs a et
b.
Exemple, pour p = (1, 2, 6), a = 1 et b = 2, on veut obtenir c = 18 :

p(x) = 1 + 2x + 6x 2
Z b Z b Z a
c= p(t ) dt = p(t ) dt − p(t ) dt = v(b) − v(a) = b + b 2 + 2b 3 − a − a 2 − 2a 3 = 18.
a 0 0

8. Implémenter une fonction appelée print_pol prenant en entrée un polynôme p (i.e. le vecteur qui contient ses
coordonnées) et qui écrit dans la fenêtre de commande le polynôme dans la base canonique.
Exemple, pour p = (1, 2, −3, 0, 7), on veut afficher le message 1+2x-3x^2+7x^4.
a. La base canonique de l’espace vectoriel Rn [x] est l’ensemble C n = 1, x, x 2 , . . . , x n
© ª

Correction
Dans le fichier script_pol.m on écrit les instructions qui permettent de tester les différents points de cet exercice.

1. Dans le fichier eval_pol on écrit et on teste cette fonction par exemple comme suit
function [y]=eval_pol(p,x) y=eval_pol([1 2 3],[-1 0 1 2])
y=zeros(size(x));
for k=1:length(p)
y+=p(k)*x.^(k-1);
end
end

2. Dans le fichier plot_pol.m on écrit et on teste cette fonction par exemple comme suit
function plot_pol(p,a,b) plot_pol([-1 0 1],-2,2)
x=linspace(a,b,100);
y=eval_pol(p,x);
plot(x,y);
end

3. Sans perte de généralité, supposons que n > m, alors


n m n
ai x i = ai x i + ai x i coord(p, C ) = (a 0 , a 1 , a 2 , . . . , a m , a m+1 , . . . , a n )
X X X
p(x) =
i =0 i =0 i =m+1
m m n
bi x i = bi x i + 0 × xi coord(q, C ) = (b 0 , b 1 , b 2 , . . . , b m )
X X X
q(x) =
i =0 i =0 i =m+1
m n
(a i + b i )x i + ai x i coord(p + q, C ) = (a 0 + b 0 , a 1 + b 1 , a 2 + b 2 , . . . , a m + b m , a m+1 , . . . , a n )
X X
(p + q)(x) =
i =0 i =m+1

Dans le fichier sum_pol.m on écrit et on teste cette fonction par exemple comme suit
function s=sum_pol(p,q) s=sum_pol([1 2 3],[4 5 6])
n=length(p); s=sum_pol([1 2 3],[4 5])
m=length(q); s=sum_pol([1 2],[4 5 6])
A=zeros(2,max(n,m));
A(1,1:n)=p;
A(2,1:m)=q;
s=sum(A);
end

4. Dans le fichier prod_pol.m on écrit et on teste cette fonction par exemple comme suit
function s=prod_pol(p,q) u=prod_pol([1],[4 5 6])
n=length(p); u=prod_pol([1 2],[4 5 6])
m=length(q); u=prod_pol([1 2 3],[4 5 6])
A=zeros(m,n+m-1); u=prod_pol([1 2 3 4],[4 5 6])
for i=1:m
A(i,i:n+i-1)=q(i)*p;
end
s=sum(A);
end

82 © 2018-2019ÉÀ G. Faccanoni
Mis à jour le Mardi 21 janvier 2020 Chapitre 3 Exercices

5. Remarquons que
n n
ai x i d (x) = p 0 (x) = i a i x i −1
X X
p(x) =
i =0 i =0
coord(p, C n ) = (a 0 , a 1 , a 2 , . . . , a n ) coord (d , C n−1 ) = (a 1 , 2a 2 , . . . , na n )

Dans le fichier derivee_pol.m on écrit et on teste cette fonction par exemple comme suit
function d=derivee_pol(p) d=derivee_pol([1])
n=length(p); d=derivee_pol([1 2])
d=p(2:end).*(1:n-1); d=derivee_pol([1 2 3])
end d=derivee_pol([1 2 1 1])

6. Remarquons que
n x n x n x i +1
Z Z
ai x i t i dt =
X X X
p(x) = v(x) = p(t ) dt = ai ai
i =0 0 i =0 0 i =0 i +1
³ a0 a1 a2 an ´
coord(p, C n ) = (a 0 , a 1 , a 2 , . . . , a n ) coord (v, C n+1 ) = 0, , , ,...,
0+1 1+1 2+1 n +1
Dans le fichier primitive_pol.m on écrit et on teste cette fonction par exemple comme suit
function prim=primitive_pol(p) v=primitive_pol([1])
n=length(p); v=primitive_pol([1 2])
prim(1)=0; v=primitive_pol([1 2 3])
prim([2:n+1])=p([1:n])./[1:n]; v=primitive_pol([1 2 1 1])
end

7. Dans le fichier integrale_pol.m on écrit et on teste cette fonction par exemple comme suit
function integr=integrale_pol(p,a,b) w=integrale_pol([1 1], 1, 2)
prim=primitive_pol(p);
n=length(prim); % = 1+length(p)
aa([1:n])=a.^([0:n-1]);
prima=sum(prim.*aa);
bb([1:n])=b.^([0:n-1]);
primb=sum(prim.*bb);
integr=primb-prima;
end

8. Dans le fichier print_pol.m on écrit et on teste cette fonction par exemple comme suit
function str=print_pol(p) print_pol([1 2 -3 -7 5])
n=length(p); print_pol([1 0 -3 0 5])
str=’’; print_pol([1 2 -3 7])
if n==1; print_pol([1 2 -3])
str=strcat(num2str(p(1))); print_pol([1 2])
else print_pol([1])
strsign=char((p>0)*’+’ + (p<0)*’ ’ + (p==0)*
’0’);
if p(1)~=0
str=num2str(p(1));
end
if p(2)~=0
str=strcat(str,strsign(2),num2str(p(2)),
’x’);
end
for i=3:n
if p(i)~=0
str=strcat(str,strsign(i),num2str(p(i)),
’x^’,num2str(i-1));
end
end
end
end

© 2018-2019ÉÀ G. Faccanoni 83
Chapitre 3 Exercices Mis à jour le Mardi 21 janvier 2020

Exercice 3.65
Considérons un système linéaire sous la forme matricielle Ax = b où A est une matrice de Rn×n non singulière et b est
un vecteur colonne de Rn .
Implémenter une fonction appelée mygauss qui transforme la matrice augmentée [A|b] en une matrice triangulaire
supérieure par la méthode de G AUSS et, à chaque étape, affiche les opérations sur les lignes ainsi que la matrice
modifiée. Enfin, elle résout le système linéaire triangulaire par remontée.
La syntaxe doit être function [x]=mygauss(A,b)
Écrire un script appelé TESTmygauss.m pour tester cette fonction sur l’exemple suivant : pour
   
1 0 3 4
A = 2 2 2 b= 6 
3 6 4 13

on doit obtenir
 
1
x = 1
1

Correction
Dans le fichier mygauss.m on écrit
function [x]=mygauss(A,b)
printf("Matrice augmentee : [A|b]\n")
Ab = [A,b]
[n,m]=size(A);
tol=1.0e-9;
for k=1:n-1
printf(strcat("\nEtape ",num2str(k),"\n"))
for i=k+1:n
L(i,k)=Ab(i,k)/Ab(k,k);
printf(strcat("\tL_",num2str(i)," <- L_",num2str(i)," - (",num2str(L(i,k)),") L_",num2str(k),"\
n"))
Ab(i,k:n+1)=Ab(i,k:n+1)-L(i,k)*Ab(k,k:n+1);
end
Ab
end
printf("\nResolution du systeme triangulaire ainsi obtenu\n")
U=triu(Ab(:,1:n));
y=Ab(:,n+1);
x(n)=y(n)/U(n,n);
for i=n-1:-1:1
x(i)=(y(i)-dot(U(i,i+1:n),x(i+1:n)))/U(i,i);
end
end
et on teste cette fonction par exemple comme suit
clear all
A=[1 0 3; 2 2 2; 3 6 4];
b=[4; 6; 13];
x=mygauss(A,b)’
% Pour verifier notre resultat on peut
% comparer au resultat d’Octave
xOctave=A\b
% ou verifier qua Ax=b
printf(strcat("||Ax-b||=",num2str(norm(A*x-b)),"\n"))

84 © 2018-2019ÉÀ G. Faccanoni

Vous aimerez peut-être aussi