Lien de la note Hackmd
Cours du 30 / 03
Soit A une matrice qui représente une application linéaire quelconque. Que se passe-t-il si on l’applique $n$ fois ?
1
2
| array([[ 0.707, 0.966, 0.966, 0.707, 0.259, -0.259, -0.707, -1.061, -1.414, -1.061, -0.707, -0. , 0.707],
[-0.707, -0.259, 0.259, 0.707, 0.966, 0.966, 0.707, 0.354, 0. , -0.354, -0.707, -0.707, -0.707]])
|
1
2
| # on prend une matrice de transformation au hasard (donc probablement pas orthoganale)
A = np.array([[3,2], [1,2]])
|
1
2
| as1 = np.dot(A, mouse)
as2 = 3 * A @ mouse # souris 3 fois plus grande
|
La transformation n’est pas une isométrie donc la matrice n’est pas orthogonale.
La souris 3x plus grande est isométrique car $A$ est une application linéaire.
1
2
| aas1 = A @ A @ mouse
aaas1 = A @ A @ A @ mouse
|
La figure s’étire suivant le vecteur $(2, 1)$
Si $A{\bf x}$ fait tourner la souris d’environ 25°, appliquer 2 ou 3 fois $A$ ne fait plus tourner la figure.
Vecteurs propres et valeurs propres
Les valeurs et vecteurs propres respectent cette priopriété : \(A \, {\bf v_i} = \lambda_i \, {\bf v_i}\)
- $(\lambda_i, {\bf v_i})$ : couple valeur / vecteur propres
1
| val_propre, vec_propre = lin.eig(A)
|
1
2
3
4
5
| Valeurs propres de A : [4.+0.j 1.+0.j]
Vecteurs propres de A (chaque vecteur propre est écrit verticalement):
[[ 0.894 -0.707]
[ 0.447 0.707]]
|
Les vecteurs propres sont des attracteurs qui capturent tous les points si on fait un nombre infini de multiplications par $A$. Les points s’alignent sur l’un des deux vecteurs propres.
1
2
3
4
5
6
7
8
| N = 100
cercle = np.array([[np.cos(i * 2*np.pi/N), np.sin(i * 2*np.pi/N)] for i in range(N)]).T
a10c = np.array([x for x in (A10 @ cercle).T]).T
a10cn = np.array([x/lin.norm(x) for x in a10c.T]).T # a10c normé
nb1 = np.sum([lin.norm(a10cn[:,i] - vec_propre[:,0]) < 0.01 for i in range(N)]) \
+ np.sum([lin.norm(a10cn[:,i] + vec_propre[:,0]) < 0.01 for i in range(N)])
nb2 = np.sum([lin.norm(a10cn[:,i] - vec_propre[:,1]) < 0.01 for i in range(N)]) \
+ np.sum([lin.norm(a10cn[:,i] + vec_propre[:,1]) < 0.01 for i in range(N)])
|
1
2
| Nombre de points proche du 1er vecteur propre : 100
Nombre de points proche du 2e vecteur propre : 0
|
Seuls les points colinéaires au second vecteur propre le resteront, les autres rejoignent le premier vecteur propre.
Le cas des matrices de rotation
Quels sont les vecteurs propres d’une matrice de rotation ?
1
2
3
4
5
6
| def Rot(θ):
return np.array([[np.cos(θ), -np.sin(θ)], [np.sin(θ), np.cos(θ)]])
R = Rot(2*np.pi/10)
R_valp, R_vecp = lin.eig(R)
|
1
2
3
4
5
| Valeurs propres de R : [0.809+0.588j 0.809-0.588j]
Vecteurs propres de R :
[[0.707+0.j 0.707-0.j ]
[0. -0.707j 0. +0.707j]]
|
1
2
3
4
| # regardons un autre angle
R = Rot(2*np.pi/3)
R_valp, R_vecp = lin.eig(R)
|
1
2
3
4
5
| Valeurs propres de R : [-0.5+0.866j -0.5-0.866j]
Vecteurs propres de R :
[[ 0.-0.707j 0.+0.707j]
[-0.707+0.j -0.707-0.j]]
|
- Les valeurs et vecteurs propres sont des complexes
- Les valeurs propres ont la même norme
Symétrie axiale horizontale
\(Sx = \begin{bmatrix} 1 & 0 \\ 0 & -1 \\ \end{bmatrix}\)
1
2
3
| Sx = np.array([[1, 0], [0, -1]])
Sx_valp, Sx_vecp = lin.eig(Sx)
|
1
2
3
4
5
| Valeurs propres de Sx : [ 1.+0.j -1.+0.j]
Vecteurs propres de Sx :
[[1. 0.]
[0. 1.]]
|
- Une matrice diagonale modifie que la i-ième coordonnéee de ${\bf x}$ par la i-ième valeur de sa diagonale.
- Ses vecteurs propres sont ceux de la base d’origine :
1
2
| D = np.diag(np.random.randint(10,size=5))
D_valp, D_vecp = lin.eig(D)
|
1
2
3
4
5
6
7
8
| Valeurs propres de D : [8.+0.j 8.+0.j 4.+0.j 7.+0.j 1.+0.j]
Vecteurs propres de D :
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
|
Diagonalisation d’une matrice
En changeant de repère, on peut représenter une application linéaire par une matrice diagonale contenant ses valeurs propres. \(\exists P \; / \; A = P\, \Lambda \, P^{-1} \quad\)
- avec $\Lambda$ la matrice diagonale des valeurs propres $\lambda_i$
- P matrice de passage : vecteurs propres
1
2
| A
vec_propre @ np.diag(val_propre) @ lin.inv(vec_propre)
|
1
2
3
4
5
6
7
| A :
[[3 2]
[1 2]]
𝑃 Λ inv(𝑃) :
[[3.+0.j 2.+0.j]
[1.+0.j 2.+0.j]
|
- Matrice inversible : si une des valeurs propre est nulle alors $\Lambda$ n’est pas inversible et donc A n’est pas inversible
- Matrice non diagonalisable : si l’ensemble des vecteurs propres ne genere pas un espace de meme dimension que d’origine, alors on ne peut pas diagonaliser la matrice