不用numpy库,用sympy来写
时间: 2024-01-04 09:02:26 浏览: 40
Voici une autre implémentation en Python de la diagonalisation d'une matrice complexe en utilisant la bibliothèque sympy :
```python
import sympy as sp
# Définition de la matrice A
A = sp.Matrix([[4-1j, 1-4j], [-1j, 1+1j]])
# Calcul du déterminant et de la trace de A
det_A = A.det()
tr_A = A.trace()
# Calcul des valeurs propres de A
lambda_1, lambda_2 = sp.symbols('lambda_1 lambda_2')
eq = sp.Eq((A - sp.eye(2)*lambda_1).det(), 0)
lambda_1 = sp.solve(eq, lambda_1)[0]
eq = sp.Eq((A - sp.eye(2)*lambda_2).det(), 0)
lambda_2 = sp.solve(eq, lambda_2)[0]
# Calcul des vecteurs propres normalisés
v_1 = (A - sp.eye(2)*lambda_1).nullspace()[0]
v_1 = v_1 / v_1.norm()
v_2 = (A - sp.eye(2)*lambda_2).nullspace()[0]
v_2 = v_2 / v_2.norm()
# Construction de la matrice de passage P
P = sp.Matrix.hstack(v_1, v_2)
# Calcul de la matrice diagonale D
D = sp.Matrix.diag(lambda_1, lambda_2)
# Vérification de la diagonalisation : A = PDP^-1
assert A == P*D*sp.inverse(P)
```
Cette implémentation utilise la bibliothèque sympy pour effectuer les calculs symboliques. Notez que les vecteurs propres sont calculés avec la méthode `nullspace` de la classe `Matrix`, qui retourne une liste de vecteurs propres normalisés. La vérification de la diagonalisation est effectuée avec la méthode `inverse` de la classe `Matrix`, qui calcule l'inverse d'une matrice symbolique.