Home CAMA : ma04 Vecteurs propres
Post
Cancel

CAMA : ma04 Vecteurs propres

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

1
2
aas1 = A @ A @ mouse
aaas1 = A @ A @ A @ mouse

La figure s’étire suivant le vecteur $(2, 1)$

Vecteurs propres et valeurs 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]]
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]]

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

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
This post is licensed under CC BY 4.0 by the author.