In [ ]:
import numpy as np
import random as rd

Révisions et compléments de calcul matriciel¶

Introduction¶

Les matrices sont essenetielles car elles donnent la possibilité d'effectuer des opérations sur des tableaux de nombres. On peut citer de nombreuses applications :

  • Résolution des systèmes d'équations linéaires (que nous aborderons un peu plus tard)
  • Transformation géométriques: translation, rotation, symétrie...
  • Calcul de volumes et de surfaces
  • Parcours et résolution de graphes

Révisions¶

Définition : On appelle matrice $m \times n$ (ou d’ordre $m \times n$) à coefficients dans $\mathbb{K}$ tout tableau de m lignes et n colonnes d’éléments de $\mathbb{K}$. L’ensemble des matrices $m \times n$ à coefficients dans $\mathbb{K}$ est noté $\mathcal{M}_{ m,n}(\mathbb{K})$.

Nous travaillerons avec $\mathbb{K} = \mathbb{R}, \mathbb{Q} \text{ ou } \mathbb{C}$

On convient de noter $a_{ij}$ l’élément de la matrice situé sur la i-ème ligne et j-ème colonne ($1 \leq i \leq m\quad$ et $\quad1 \leq j \leq n$).

$$A = \begin{pmatrix} a_{1,1} & \cdots & a_{1,n} \\ \vdots & \ddots & \vdots \\ a_{m,1} & \cdots & a_{m,n} \end{pmatrix}$$

ou encore

$$A = (a_{ij})_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq n \end{array}}$$

Matrices particulières :¶

  • Une matrice $m \times 1$ est appelée matrice colonne.
  • Une matrice $1 \times n$ est appelée matrice ligne.
  • Si $m = n$ on dit qu’on a une matrice carrée, Les coefficients ayant même indice de ligne et de colonne s’appellent les coefficients diagonaux ($a_{ii}$).
  • Une matrice carrée dont tous les coefficients strictement au dessus de la diagonale (c’est-à-dire d’indices ij avec j > i) sont nuls est appelée matrice triangulaire inférieure.
  • Une matrice carrée dont tous les coefficients strictement au dessous de la diagonale (c’est-à-dire d’indices ij avec j < i) sont nuls est appelée matrice triangulaire supérieure.
  • Les matrices carrées à la fois triangulaires supérieures et triangulaires inférieures sont dites matrices diagonales. Elles sont notées Diag($a_1, \dots, a_n$) ou $a_1, \dots, a_n$ sont les coefficients de la diagonale.
  • La matrice dont tous les coefficients diagonaux valent 1 est dite matrice identité et elle est notée $I_n$.
  • La matrice non nécessairement carrée dont tous les coefficients sont nuls est appelée matrice nulle. Elle est notée $0_{mn}$ ou $0_{m,n}$

Exercice Donner un exemple pour chaque matrice particulière

Les matrices avec Python et numpy¶

In [ ]:
print
print(np.array([[1,9,5]]))         #matrice ligne de type ndarray
print
print(np.array([[2],[7],[3]]))     #matrice colonne
print
print(np.zeros([4,3]))             #matrice nulle d'ordre 4,3
print
print(np.eye(3))                   #matrice identité d'ordre 3
print
print(np.diag([4,0]))              #matrice diagonale d'ordre 2
print
print(np.diag([int(rd.random()*100) for i in range(4)]))  #matrice diagonale d'ordre 4

Sélectionner une ligne ou une colonne dans une matrice numpy

Soit un tableau numpy $tab$, la sélection d'une ligne ou d'une colonne se fait avec la la technique du slicing qui est une forme avancée de l’indexation. La syntaxe est la suivante.

$$tab[debut:fin:pas, debut:fin:pas]$$
In [ ]:
print
tab = np.array([[int(rd.random()*10) for j in range(3)]for i in range(3)])
print(tab)
print
print(tab[0:1,:])   # La première ligne
print
print(tab[:,-1])    #La dernière colonne
print
print(tab[0:2,0:2]) #Le carré 2x2 en haut à gauche

Calcul matriciel¶

Égalité de matrices¶

Deux matrices $A$ et $B$ sont égales, ce qu’on note $A = B$ si

  • elles ont même nombre de lignes ;
  • elles ont même nombre de colonnes ;
  • les coefficients $a_{ij}$ et $b_{ij}$ sont égaux, ($1 \leq i \leq m\quad$ et $\quad1 \leq j \leq n$).

Matrices équivalentes¶

On appelle opérations élémentaires sur les lignes :

  • permuter 2 lignes
  • Multiplier par un même élément de $\mathbb{K}$ non nul les éléments d’une ligne
  • Ajouter ou retrancher à une ligne un certain nombre de fois une autre ligne

Définition

On dit que deux matrices $A$ et $A'$ sont équivalentes par lignes si elles se déduisent l'une de l'autre par une suite finie d'opérations élémentaires. On note $A {_{\stackrel{\LARGE\sim}{\text{L}}}} A'$. La relation $ {_{\stackrel{\LARGE\sim}{\text{L}}}} $ est une relation d'équivalence sur l'ensemble des matrices de $\mathcal{M}_{ m,n}(\mathbb{K})$

Somme de matrices¶

Soient $A = (a_{ij})_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq n \end{array}}$ et $B = (b_{ij})_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq n \end{array}}$ deux matrices de $\mathcal{M}_{ m,n}(\mathbb{K})$, on définit l’addition des matrices par $$A + B = (a_{ij} + b_{ij})_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq n \end{array}}$$

Propriétés¶

Soient $A$, $B$, $C$ trois matrices de $\mathcal{M}_{ m,n}(\mathbb{K})$

  • L'addition est associative : $A+(B+C) = (A+B)+C$
  • L'addition est commutative : $A+B = B+A$
  • La matrice nulle ($0_{m,n}$) est un élément neutre pour l'addition $A+0=A$
  • Toute matrice admet une matrice opposée $-A = (-a_{ij})_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq n \end{array}}$ et $-A + A = 0$

Exercices

Effectuer la somme suivante

$$ \text{Soient}\quad A = \begin{pmatrix} 1 & 2 & -3\\ 0 & -2 & 2\\ 5 & 6 & 1\end{pmatrix} \quad\text{et}\quad B = \begin{pmatrix} 1 & -2 & 7\\ 6 & 1 & -2\\ -8 & 9 & 1\end{pmatrix}$$

La somme de matrices avec Python et numpy¶

L’opérateur $+$ additionne terme à terme deux tableaux de même dimension. Donc très pratique pour l'addition de deux matrices

In [ ]:
A = np.array([[-1, 4, 1],[0, 1, 1]])
B = np.array([[1, 3, -1],[1, 5, 8]])
print(A + B)
print
print(-A + A)

Produit d'une matrice par un scalaire (élément de $\mathbb{K}$)¶

Définition:¶

Soit $A \in\mathcal{M}_{ m,n}(\mathbb{K})$ et $\lambda\in \mathbb{K}$

Le produit d’une matrice par un scalaire est donné par :

$$\lambda\times(a_{ij})_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq n \end{array}}=(\lambda\times a_{ij})_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq n \end{array}}$$

Propriété¶

Soient $A$ et $B$ deux matrices de même ordre et $\lambda\in \mathbb{K}$ un scalaire.

$\lambda\times (A+B) = \lambda\times A + \lambda\times B$ (distributivité)

Avec Python et numpy¶

Multplier une matrice par un scalaire se fait selon le même principe que pour l'addition. Les opérations sont effectuées terme à terme

In [ ]:
A = np.ones((4,4))
print(A)
print
print(4*A)
print
print(A/2)

Produit de matrices¶

Définition:¶

Soient $A = (a_{ik})_{ \begin{array}{c}1\leq i\leq m\\1\leq k\leq n \end{array}}$ une matrice de $\mathcal{M}_{m,n}(\mathbb{K})$ et $B = (b_{kj})_{ \begin{array}{c}1\leq k\leq n\\1\leq j\leq p \end{array}}$ une matrice de $\mathcal{M}_{n,p}(\mathbb{K})$, on définit le produit des matrices par $$A \times B = \left( \sum_{\substack{k=1}}^n a_{ik}\times b_{kj} \right)_{ \begin{array}{c}1\leq i\leq m\\1\leq j\leq p \end{array}}$$

  • Pour chaque ligne de A on parcourt toutes les colonnes de B.
  • Le nombre d'éléments d'une ligne de A doit être égal au nombre d'éléments d'une colonne de B.
  • En d'autres termes le nombre de colonnes de A doit être égal au nombre de lignes de B

Exercices

Effectuer les produits de matrice $A\times B$, $B\times A$, $C\times D$ et $C\times B$

$$ A = \begin{pmatrix} 2 & 1 & -1\\ -3 & 1 & 0\\ \end{pmatrix} \quad B = \begin{pmatrix} 0 & 4\\ 1 & -1 \\ 2 & 1\end{pmatrix}$$

$$ C = \begin{pmatrix} -1 & 1 & 0\\ 2 & -1 & 1\\ \end{pmatrix} \quad D = \begin{pmatrix} 4\\ 1\\ 2\\ \end{pmatrix}$$

Avec Python et numpy¶

Pour le produit matriciel on utilise la fonction : dot

In [ ]:
A = np.array([3, 0, 1])
B = np.array([[1], [-1], [0]])
C = np.dot(A, B)
print(C)
print
A = np.arange(6).reshape(2,3)
C = np.dot(A, B)
print(C)

Propriétés¶

Soient $A \in \mathcal{M}_{m,n}(\mathbb{K})$, $B \in \mathcal{M}_{n,p}(\mathbb{K})$, $C \in \mathcal{M}_{p,q}(\mathbb{K})$

  • Associativité : $(A\times B)\times C = A\times (B\times C)$
  • Distributivité : $A\times (B + C) = A \times B + A \times C$ (Attention à l'ordre des matrices)
  • Quelque soit $A \in \mathcal{M}_n(\mathbb{K})$, alors $A \times I_n = I_n \times A = A$.

ATTENTION :

  • Dans le cas général il n'y a pas commutativité pour le produit de matrices : $A\times B \neq B\times A$
  • Le produit de deux matrices peut-être nul alors qu’aucune des matrices n’est nulle.
In [ ]:
A = np.array([[0, 0],[1, 0]])
B = np.array([[0,0],[5, 8]])
C = np.dot(A,B)  #C est une matrice nulle
print(C)
print 
C = np.dot(B,A)  #Le produit n'est pas commutatif
print(C)

Changement de base

Soient deux repères cartésiens orthonormés $(O,\vec{x_1}, \vec{x_2}, \vec{x_3})$ et $(O,\vec{x'_{1}}, \vec{x'_{2}}, \vec{x'_{3}})$

Déterminer les matrices $B$ et $P$ (matrice de passage) pour exprimer sous la forme d'un produit matricielle les coordonées des vecteurs $\vec{x'_{1}}, \vec{x'_{2}}, \vec{x'_{3}}$ en fonctions des vecteurs $\vec{x_1}, \vec{x_2}, \vec{x_3}$

$$\begin{pmatrix} \vec{x'_1} & \vec{x'_2} & \vec{x'_3}\\ \end{pmatrix} = B\times P$$

Trace¶

Soit $A \in \mathcal{M}_{m,n}(\mathbb{K})$, une matrice carrée de terme général $a_{ij}$, on définit la trace de A comme la somme des éléments de la diagonale principale :

$$\mathrm{tr}\,(A) = \sum_{i=1}^n a_{ii}$$

Exercices

Calculer la trace de la matrice suivante :

$$ \text{Soit}\quad A = \begin{pmatrix} 1 & 2 & 0\\ 0 & 2 & 3\\ 0 & -1 & -2\end{pmatrix}$$

Pour quelle valeur de $x\in [-3, 2]$ la trace de la matrice $A$ est-elle minimale ? Et pour quelle valeur de $x$ est-elle maximale ?

$$ \text{Soit}\quad A = \begin{pmatrix} 2x^3 & 4 & 1\\ 0 & 3x^2 & 2\\ 5 & 6 & -12x\end{pmatrix}$$

Propriétés

Si $A$ et $B$ sont deux matrices carrées d’ordre $n$, alors

  • $\mathrm{tr}\,(A + B) = \mathrm{tr}\,(A) + \mathrm{tr}\,(B)$.

Si $A$ est une matrice $m\times n$ et $B$ une matrice $n\times m$, alors

  • $\mathrm{tr}\,(A × B) = \mathrm{tr}\,(B × A).$

Transposition¶

Définition : Tansposée d'une matrice

Soit $A \in \mathcal{M}_{m,n}(\mathbb{K})$, de terme général $a_{ij}$ . On appelle transposée de $A$ et on note $A^T$ la matrice $B \in \mathcal{M}_{n,m}(\mathbb{K})$ de terme général $b_{ij} = a_{ji}$ .

$$ \text{Soient}\quad A = \begin{pmatrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9\end{pmatrix} \quad\text{et}\quad A^T = \begin{pmatrix} 1 & 4 & 7\\ 2 & 5 & 8\\ 3 & 6 & 9\end{pmatrix}$$

Propriétés

  • Soient $A \in \mathcal{M}_{m,p}(\mathbb{K})$ et $B \in \mathcal{M}_{p,n}(\mathbb{K})$ alors $(AB)^T = B^T\times A^T$
  • Soient $A \in \mathcal{M}_{m,n}(\mathbb{K})$, $B \in \mathcal{M}_{m,n}(\mathbb{K})$ et $\lambda$, $\mu$ dans $\mathbb{K}$ alors $(\lambda A+\mu B)^T = \lambda A^T + \mu B^T$ et $(A^T)^T = A$
  • Soit $A$ une matrice carrée d'ordre $n$ alors $\mathrm{tr}\,(A^T) = \mathrm{tr}\,(A)$

Exercices

Exo : 1

Revenons sur notre changement de base, exprimez $\begin{pmatrix} \vec{x'_1}\\ \vec{x'_2}\\ \vec{x'_3}\\ \end{pmatrix}$

nous pouvons aussi vouloir exprimer les coordonées des vecteurs $\vec{x_{1}}, \vec{x_{2}}, \vec{x_{3}}$ en fonctions des vecteurs $\vec{x'_1}, \vec{x'_2}, \vec{x'_3}$, dans ce cas on a :

$$\begin{pmatrix} \vec{x_1}\\ \vec{x_2}\\ \vec{x_3}\\ \end{pmatrix} = P\times \begin{pmatrix} \vec{x'_1}\\ \vec{x'_2}\\ \vec{x'_3}\\ \end{pmatrix}$$

Exprimez $P$

Exo : 2

Quatre élèves $e_1$, $e_2$, $e_3$ et $e_4$ ont quatre notes de mathématiques $n_1$ , $n_2$ , $n_3$ et $n_4$ au cours du premier trimestre . Les notes de $e_1$ sont dans l’ordre $8, 12, 16, 10$ ; celle de $e_2$ sont $13, 15, 19, 14$ ; celles de $e_3$ sont $6, 8, 13, 9$ et celles de $e_4$ sont $10, 9, 7, 15$.

  • Écrire la matrice $A$ dont le coefficient $a_{ij}$ représente la note $n_i$ de l’élève $e_j$ . Quel est l'ordre de la matrice $A$ ?
  • Ces évaluations ont été notées sur 20. Les deux premières sont des interrogations écrites (coefficient 2), la troisième est un devoir maison (coefficient 1) et la quatrième est un contrôle (coefficient 3). Calculer la matrice ligne B correspondant à la moyenne trimestrielle de mathématiques des élèves $e_1$, $e_2$, $e_3$ et $e_4$ à l’aide d’une matrice coefficient C et de la matrice A.
In [ ]:
A=np.array([[8,12, 16, 10],[13,15,19,14],[6,8,13,9],[10,9,7,15]])
A = np.transpose(A) 
print(A)
print
C = np.array([1./4, 1./4, 1./8, 3./8])
B = np.dot(C,A)
print(B)

Puissances d'une matrice carrée¶

Soit $k \geq 0$ un entier et $A \in \mathcal{M}_n(\mathbb{K})$, on définit la puissance k de la matrice A de la façon suivante :

$$A_0 = I_n \quad\text{et si}\quad k>1\text{, } \quad A = A^{k-1}\times A = \underbrace{A\times\dots \times A}_{\text{produit de k copies de A}}$$

Exercices

$$ \text{Soient}\quad A = \begin{pmatrix} 1 & 1 & 1\\ 1 & -1 & 1\\ 4 & 2 & 1\end{pmatrix} \quad\text{et}\quad I = \begin{pmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\end{pmatrix}$$

Déterminer la matrice $A^2$

On donne la matrice :

$$ A^3 = \begin{pmatrix} 20 & 10 & 11\\ 12 & 2 & 9\\ 42 & 20 & 21\end{pmatrix} $$

Vérifier que $A^3 = A^2 +8\,A +6\,I_3$

Soient $A \in \mathcal{M}_{m,n}(\mathbb{K})$, $B \in \mathcal{M}_{n,p}(\mathbb{K})$, comment développer l'identité remarquable $(A + B)^2$ ?

Avec Python

Une fonction naïve pour le calcul d'une matrice carrée à la puissance $k\in \mathbb{N^*}$

In [ ]:
def pow_mat(A, k):
    B = np.copy(A)
    for i in range(k-1):
        B = np.dot(B,A)
    return B
In [ ]:
A = np.tri(4,dtype=int)
print(A)
print
print(pow_mat(A,10))

Puissance n ième d'une matrice associée à un graphe

Définitions : Longueur et distance

  • La longueur d’une chaîne est le nombre d’arêtes qui composent la chaîne.
  • La distance entre deux sommets est la plus courte longueur des chaînes qui les relient.
  • Le diamètre d’un graphe est la plus grande distance entre deux sommets.
  • Un graphe orienté est un graphe dont les arêtes sont orientées.

Propriété

Soit $A \in \mathcal{M}_n(\mathbb{K})$ la matrice associée (encore appelée matrice d'adjacence) à un graphe (orienté ou non). Alors le terme de $A^n$ situé sur la $i^{ieme}$ ligne et la $j^{ieme}$ colonne est égal au nombre de chaîne de longueur $n$ reliant le sommet $i$ au sommet $j$.

La matrice d’adjacence, est une matrice carrée telle que les lignes et les colonnes identifient les sommets du graphe. Les éléments de la matrice identifient le nombre d’arcs ou d’arêtes entre deux sommets.

Exo 2:

figure avec Matplotlib

Les arêtes du graphe ci-contre représentent le réseau routier reliant 4 villes différentes et chaque arête mesure 2 km. (le dessin n'est pas à l'échelle)

  • Écrire la matrice $R$ d’ordre 4 dont les coefficients $m_{ij}$ représentent le nombre de routes reliant les villes $A_i$ à $A_j$ pour i et j entiers entre 1 et 4.
  • Calculer $R^2$ et $R^3$
  • En déduire le nombre de circuits :
    • de 4 km reliant $A_2$ et $A_3$ ;
    • de 6 km reliant $A_3$ à lui-même ;
    • d’au plus 6 km reliant $A_1$ et $A_4$ .

Matrices inversibles¶

Définition Une matrice $A \in \mathcal{M}_n(\mathbb{K})$ est dite inversible s’il existe $B \in \mathcal{M}_n(\mathbb{K})$ telle que $AB = I_n $. La matrice $B$ est alors unique et on la note $A^{ −1}$ .

Remarque : Par définition pour montrer qu’une matrice $A$ est inversible et que son inverse est $B$, il suffit donc de vérifier $AB = I$ et $BA = I$.

$$ \text{Soient}\quad A = \begin{pmatrix} 1 & 2 & -3\\ 0 & 1 & 2\\ 0 & 0 & 1\end{pmatrix} \quad\text{et}\quad B = \begin{pmatrix} 1 & -2 & 7\\ 0 & 1 & -2\\ 0 & 0 & 1\end{pmatrix}$$

Montrer que la matrice $B$ est l'inverse de la matrice $A$

In [ ]:
A = np.array([[1, 2, -3], [0, 1, 2], [0, 0, 1]])
B = np.array([[1, -2, 7], [0, 1, -2], [0, 0, 1]])
C = np.dot(A,B)
D = np.dot(B,A)
print(C)
print
print(D)

Soit la matrice $A = \begin{pmatrix} 1 & 1 & 1\\ 1 & -1 & 1\\ 4 & 2 & 1\end{pmatrix}$ qui vérifie $A^3 = A^2 +8\,A +6\,I_3$, en déduire l'expression de $A^{-1}$ puis calculer la matrice $A$

In [ ]:
A = np.array([[1, 1, 1],[1, -1, 1],[4, 2, 1]])
A3 = pow_mat(A, 3)
print(A3 == pow_mat(A, 2) + 8*A + 6*np.eye(3))
print
inverse_A = 1./6 * (pow_mat(A,2) - A - 8*np.eye(3))
print(inverse_A)

Avec python et numpy

Calcul de l'inverse d'une matrice inversible

Soit Une matrice $A \in \mathcal{M}_n(\mathbb{K})$, et soient $X$, $B$ deux matrices colonne de hauteur $n$. Le système $AX = B$, d’inconnue $X$, possède une solution unique si et seulement si A est inversible.

Considérons l'exemple suivant:

$$ \text{Soit}\quad A = \begin{pmatrix} 0 & 1 & 1\\ 1 & 1 & 1\\ 1 & 0 & 1\end{pmatrix}$$

Résoudre

$$A\begin{pmatrix} x\\ y\\ z\end{pmatrix} = \begin{pmatrix} a\\ b\\ c\end{pmatrix}$$

Voici des conditions suffisantes pour dire, au premier coup d’œil, qu’une matrice est non inversible :

  • si elle contient une ligne nulle, ou une colonne nulle
  • si elle contient deux lignes (ou deux colonnes) proportionnelles

Calculer de la même manière l'inverse de la matrice $$A = \begin{pmatrix} 1 & 2 & -3\\ 0 & 1 & 2\\ 0 & 0 & 1\end{pmatrix}$$

Calculer l'inverse d'une matrice avec python et numpy

Pour cela on utilise np.linalg.inv(A) , attention 1/A ne désigne pas l’inverse $A^{−1}$ de $A$, mais la matrice dont les coefficients sont les inverses, terme à terme, de ceux de A.

In [ ]:
A = np.array([[0, 1, 1],[1, 1, 1],[1, 0, 1]])
print(np.linalg.inv(A))

Comme on peut le voir le résultat de l'inverse d'une matrice avec python est automatiquement transformé en float. Cela peut être génant quand on travaille avec des entiers ou des rationnels

In [ ]:
A = np.array([[4, 0, 0],[0, 6, 0],[0, 0, 8]])
A = np.linalg.inv(A)
print A

Une solution possible est d'utiliser le package fractions qui permet de mettre sous forme rationnelle les valeurs flottantes

In [ ]:
import fractions
for l in A:
    for val in l:
        f = fractions.Fraction(val)
        print f

Le passage à la forme rationnelle peut poser quelques problèmes si la valeur flottante n'est pas exacte, dans ce cas on peut limiter le nombre de chiffres significatifs au dénominateur en précisant une valeur maximale acceptable

In [ ]:
def to_frac(mat, d):
    import fractions
    A = []
    for l in mat:
        line = []
        for val in l:
            line.append(fractions.Fraction(val).limit_denominator(d))
        A.append(line)
    return A
to_frac(A, 10)

Déterminant d'une matrice¶

On associe à chaque matrice un nombre permettant de déterminer si elle est inversible : le déterminant. Le déterminant d’une matrice n’est défini que si la matrice est carrée.

Définition

Soit une matrice $A \in \mathcal{M}_n(\mathbb{K})$, Le déterminant de $A$, noté $det(A)$, est l’élément de $\mathbb{K}$ défini par

  • si $n = 1$ alors $A = (a_{11} )$ et $det(A) = a_{11}$ ;
  • si $n > 1$ alors $A = (a_{ij})_{ \begin{array}{c}1\leq i, j\leq n\end{array}}$ et le déterminant de A est :
$$det(A) = \sum_{j=1}^{n}(-1)^{i+j}\,\, a_{ij}\,det(A_{ij})\quad\quad\quad \text{quelle que soit la ligne}\, i,\quad 1 ≤ i ≤ n,$$

De manière équivalente on a :

$$det(A) = \sum_{i=1}^{n}(-1)^{i+j}\, \, a_{ij}\,det(A_{ij})\quad\quad\quad \text{quelle que soit la colonne}\, j,\quad 1 ≤ j ≤ n,$$

où $det(A_{ij})$ est le déterminant de la matrice de $\mathcal{M}_{n-1}(\mathbb{K})$ obtenue en enlevant à $A$ la ligne $i$ et la colonne $j$.

Exemples

$$\text{Soit}\quad A = \begin{pmatrix} a & b\\ c & d\end{pmatrix} \quad\text{alors}\quad det(A) = a\,det((d)) - c\,det((b)) = ad - bc$$

Attention (d) et (b) représentent des matrices contenant un seul élément

$$\text{Soit}\quad A = \begin{pmatrix} 0 & 1 & 2\\ 3 & 4 & 5\\6 & 7 & 8\end{pmatrix} \quad\text{alors}\quad det(A) = 0\times \begin{pmatrix} 4 & 5\\7 & 8\end{pmatrix} - 3\times \begin{pmatrix} 1 & 2\\7 & 8\end{pmatrix} + 6\times \begin{pmatrix} 1 & 2\\4 & 5\end{pmatrix} = 0 - 3\times (8 - 14) + 6\times (5 - 8) = 0$$

Avec numpy

In [ ]:
A = np.array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])
A = np.linalg.det(A)
print A

Propriétés du déterminant :

  • Soit $A \in \mathcal{M}_n(\mathbb{K})$ une matrice carrée. Elle est inversible si et seulement si son déterminant est non nul. Lorsque A est inversible, on a : $$det(A^{-1}) = \dfrac{1}{det(A)}$$
  • Le déterminant d’une matrice carrée ayant une ligne nulle est 0;
  • si deux lignes (ou colonnes) sont identiques ou proportionnelles, alors $det(A) = 0$ ;
  • Le déterminant d’une matrice triangulaire est égal au produit des éléments diagonaux;
  • Si on multiplie l’une des lignes (ou colonnes) d’une matrice par un élément de $\mathbb{K}$ alors le déterminant de cette matrice est multiplié par le même élément de $\mathbb{K}$;
  • on ne change pas un déterminant si on ajoute à une ligne (ou colonnes) une combinaison linéaire des autres lignes (ou colonnes);
  • Soit $A \in \mathcal{M}_n(\mathbb{K})$ et $\lambda\in \mathbb{K}$ alors $det(\lambda A) = \lambda^n det(A)$;
  • Soient $A$ et $B$ $\in \mathcal{M}_n(\mathbb{K})$ alors $det(A\times B) = det(A)\times det(B)$;

Exercices

Calculer les déterminants des matrices suivantes :

$$A = \begin{pmatrix} 1 & 2\\ -8 & 5\\ \end{pmatrix} \quad B = \begin{pmatrix} 5 & 1 & 3\\ 4 & 2 & 7\\ 0 & -1 & 0\end{pmatrix} \quad C = \begin{pmatrix} 3 & -2 & 1 & 0\\ 3 & 3 & 2 & 5\\ -3 & 1 & -1 & 4\\ 0 & 1 & 2 & 3\end{pmatrix}$$

Quelques exemples de calculs de déterminants avec numpy

  1. Comment multiplier une seule ligne ou colonne de la matrice ?
In [ ]:
A = np.array([[1, 1, 2],[3, 4, 5],[6, 7, 8]])
print "det(A) = ", np.linalg.det(A)

On multiplie la ligne $2$ par $3$

In [ ]:
A[1,:] *= 3
print(A)
A = np.linalg.det(A)
print
print "det(A) = ",A
In [ ]:
A = np.array([[1, 1, 2],[3, 4, 5],[6, 7, 8]], dtype='float')
print "det(A) = ", np.linalg.det(A)

Pour multiplie la dernière colonne par $-4.5$

In [ ]:
A[:,-1] *= -4.5
print(A)
A = np.linalg.det(A)
print
print "det(A) = ",A

_2. Comment ajouter à une ligne une combinaison linéaire des autres lignes ?

In [ ]:
A = np.array([[1, 1, 2],[3, 4, 5],[6, 7, 8]], dtype='float')
print "det(A) = ", np.linalg.det(A)

$L_1 \longleftarrow 3\,L_2 - 2\, L_3$

In [ ]:
A[0,:] += (3*A[1,:]-2*A[2,:])   #Attention A[1,:] = A[1] mais A[:,1] différent de A[1]
print(A)
A = np.linalg.det(A)
print
print "det(A) = ",A

Surfaces et volumes¶

La notion de déterminant est intimement liée à la notion d’aire et de volume.

Systèmes linéaires¶

Généralités¶

Définition

On appelle système linéaire à $n$ équations et $p$ inconnues $x_1, \dots, x_p$ tout ensemble d'équations de la forme :

$$ \left\{\begin{aligned} a_{11}x_1 &+ a_{12}x_2 &+ \dots &+ a_{1p}x_p &= \quad &b_1\\ a_{21}x_1 &+ a_{22}x_2 &+ \dots &+ a_{2p}x_p &= \quad &b_2\\ \vdots & &&&&\vdots\\ a_{i1}x_1 &+ a_{i2}x_2 &+ \dots &+ a_{1i}x_p &= \quad &b_i\\ \vdots & &&&&\vdots\\ a_{n1}x_1 &+ a_{n2}x_2 &+ \dots &+ a_{np}x_p &= \quad &b_n\\ \end{aligned}\right.$$

On appelle solution du système tout p-uplet $(x_1, x_2,\dots,x_p) \in \mathbb{K}^p$ vérifiant les $n$ équations du système. le système est dit compatible s'il admet au moins une solution (sinon il est incompatible).

$$(S) \left\{\begin{aligned} a_{11}x_1 &+\quad \cdots\quad + &a_{1p}x_p &=& b_1\\ \vdots & &\vdots&&\vdots\\ a_{n1}x_1 &+\quad \cdots\quad + &a_{np}x_p &=& b_n\\ \end{aligned}\right. \quad \text{équivalent à}\quad \begin{pmatrix} a_{11} & \cdots & a_{1p}\\ \vdots& & \vdots\\ a_{n1} & \cdots & a_{np}\\ \end{pmatrix} \begin{pmatrix} x_1 \\ \vdots\\ x_n \\ \end{pmatrix} = \begin{pmatrix} b_1 \\ \vdots\\ b_n \\ \end{pmatrix} \quad\text{noté}\quad AX=B $$

Si $A$ est inversible alors on peut écrire : $X = A^{-1}B$

Résoudre :

$$ \left\{\begin{array}{c} x_1 + 3x_2 + 4x_3 = 50\\ 3x_1 + 5x_2 - 4x_3 = 2\\ 4x_1 + 7x_2 - 2x_3 = 31\\ \end{array}\right.$$

Avec numpy

In [ ]:
A = np.array([[1,3,4],[3,5,-4],[4,7,-2]], dtype=float)
B = np.array([[50],[2],[31]])
inv_A = np.linalg.inv(A)
X = np.dot(inv_A, B)
print(X)            #Solution de notre système
print
print(np.dot(A,X))  #On vérifie que X est bien solution du système

Le package numpy possède également une fonction permettant de résoudre les systèmes linéaires

In [ ]:
X = np.linalg.solve(A, B)
print (X)

Exemple : Le passage du courant dans un circuit électrique est régi par trois lois fondamentales :

  • Loi d’Ohm : la tension aux bornes d’un résistor est le produit du courant qui le traverse par sa résistance, soit $U=R\times I$
  • Loi des courants de Kirchhoff : En tout point d’un circuit, la somme des courants entrants est égale à la somme des courants sortants.
  • Loi des tensions de Kirchhoff : Dans toute maille (boucle fermée) d’un circuit, la somme algébrique des tensions est nulle.
  1. Mettre le problème en équation pour trouver les valeurs de $I_1$, $I_2$, $I_3$, $I_4$
  2. En déduire la matrice du système linéaire ainsi que la matrice colonne du second membre.
  3. Calculer les valeurs des intensités des différents courants

Le système linéaire correspondant peut être écrit à partir:

$$A = \begin{pmatrix} 5 & 3 & 3 & 3\\ -2 & 9 & 6 & 6\\ 0 & -3 & 14 & 10\\ 0 & 0 & 4 & -21\end{pmatrix} \quad\quad B = \begin{pmatrix} 40\\ -30\\ 20\\ 10\end{pmatrix}$$
In [ ]:
A = np.array([[5,3,3,3],[-2,9,6,6],[0,-3,14,10],[0,0,4,-21]], dtype=float)
B = np.array([[40],[-30],[20],[10]])
X = np.linalg.solve(A, B)
print (X)

Sur le tableau de notes d'un concours vous lisez les notes et les moyennes suivantes:

$$ \begin{array}{ccccc} \text{Candidats} & \text{Informatique} & \text{Mathématiques} & \text{Physique} & \text{Moyennes}\\ X_1 & 7 & 12 & 8 & 9\\ X_2 & 9 & 6 & 10 & 8.6\\ X_3 & 11 & 16 & 14 & 14\\ \end{array} $$

En déduire les coefficients de chaque matière

In [ ]:
A = np.array([[7,12,8],[9,6,10],[11,16,14]],float)
B = np.array([9,8.6,14])
X = np.linalg.solve(A, B)
print (X)

Christophe Casseau ENSAM 2017-2018, Bachelor 2