(pour l'enseigner l'an prochain, par exemple)

jeudi 2 mai 2013

diagonalisation d'une matrice

Avec numpy:

>>> from numpy import *

on donne une matrice $3\times 3$ ligne par ligne :


>>> A = matrix([[1,2,3],[4,5,6],[7,8,1]])

>>> A
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 1]])


le tableau de ses valeurs propres :
>>> eigvals(A)
array([ 12.45416474,  -0.37976219,  -5.07440255])

$3$ racines réelles simples, $A$ est donc diagonalisable, voici ses valeurs propres suivies de la matrice de passage dans la base des vecteurs propres :
>>> eig(A)
(array([ 12.45416474,  -0.37976219,  -5.07440255]), matrix([[-0.29373774, -0.73967882, -0.29720654],
        [-0.69005397,  0.66500848, -0.39870229],
        [-0.66147083, -0.10314536,  0.86758559]]))
>>> P=eig(A)[1]

on construit une matrice diagonale à partir du tableau des valeurs propres :
>>> D=diag(eig(A)[0])

et on vérifie que $A = P D P^{-1}$
>>> A-P*D*inv(P)
matrix([[ -2.22044605e-15,  -1.33226763e-15,  -4.44089210e-16],
        [ -1.77635684e-15,   0.00000000e+00,   1.77635684e-15],
        [ -4.44089210e-15,  -5.32907052e-15,  -2.66453526e-15]])

comme mumpy fait des calculs approchés, le résultat n'est pas exactement $0$, mais pas loin...

Aucun commentaire:

Enregistrer un commentaire