FORMAV Votre partenaire Formation http://formav.eu
#-*- coding: utf-8 -*-
#Diagonalisation de matrices
#Programme créé par Martine Arrou-Vignod 11 Juin 2015
%matplotlib inline
from math import *
import numpy as np
import numpy.linalg as la
import matplotlib.pyplot as plt
#pour faire du calcul formel
from sympy import *
#précision pour écriture des nombres réels dans les matrices et vecteurs
np.set_printoptions(precision=2)
#Pour éviter que le nombre 0 soit approché
#par les programmes de calcul par un nombre très petit
def precision(a):
if abs(a)< 0.00001:
a=0
return a
def diagonalisation(A, nom_matrice):
print("La matrice à diagonaliser: "+nom_matrice+"\n" ,A)
#Détermination de l'ordre de la matrice carrée
n=A[0].size
#Vérification que la matrice est une matrice carrée
if (A.size != n*n):
print("La matrice n'est pas une matrice carrée ")
print ( "Rappel :")
print("Seules matrices d'endomorphismes peuvent être diagonalisées")
print("Valeurs propres")
val=la.eigvals(A)
for i in range(0,n):
val[i]=precision(val[i])
print("%1.1f" %val[i])
D=np.diag(val)
print("Matrice diagonale obtenue par la connaissance des valeurs propres\n", D,"\n")
print('Les vecteurs propres sont:')
for i in range(0,n):
if i ==0 or val[i] != val[i-1]:
print("Valeur propre :",val[i])
print("v_", i+1,"=",la.eig(A)[1][i])
P=la.eig(A)[1]
print('La matrice de passage est:')
print("P=",P)
print('L\'inverse de la matrice de passage est:')
print(la.inv(P))
print('La matrice diagonale obtenue par calcul D=inverse(P)'+nom_matrice+ 'P est :')
D=np.dot(np.dot(la.inv(P),A),P)
for i in range(0,n):
for j in range(0,n):
D[i][j]=precision( D[i][j])
print(D)
#Déclaration de la matrice#Diagonalisation
A=np.array([[1,1,1],[1,1,1],[1,1,1]] )
#Diagonalisation
diagonalisation(A,"A")
#Déclaration de la matrice
B=np.array([[-5,2,4,-4],[10,-3,-6,8],[11,-4,-6,8],[22,-8,-14,17]])
#Diagonalisation
diagonalisation(B,"B")
C=np.array([[1,0,0],[1,-1,1],[3,0,-2]] )
#Diagonalisation
diagonalisation(C,"C")
M=np.array([[4,-7,-7],[-10,7,13],[10,-10,-16]] )
#Diagonalisation
diagonalisation(M,"M")