Lo scalare \(\lambda_0\) è autovalore della matrice quadrata \(A\) se esiste un vettore colonna non nullo \({\bold v}\) tale che \(A{\bold v} = \lambda_0*{\bold v}\). Nella pratica
Il calcolo degli autovalori si può effettuare direttamente con:
eigenvals = A.eigenvals()
autovalori = list(eigenvals.keys())
molt_algebriche = list(eigenvals.values())
di simpy. Per trovare l'autospazio relativo vedi succssiva sezione "Molteplicità algebrica e geometrica".
Il calcolo della determinante può restituire un equzione con \(\lambda\) (possibilmente a diversi gradi) come incognita. Per la sua risoluzione vedasi il solver di Python: https://docs.sympy.org/latest/modules/solvers/solvers.html
Ad. es: l'esempio di YouMath dava come determinante risultante \(-\lambda^3 + 7*(\lambda^2) - 14*\lambda + 8\) che ho risolto mettendo questa espressione in
l = sympy.Symbol('l')
sympy.solvers.solve(expr, l)
che ha restituito \([1, 2, 4]\), i tre autovalori che YouMath aveva calcolato con Ruffini.
import sympy as sp
x, y, z, a, b, c = sp.symbols('x,y,z,a,b,c')
arr3 = sp.Matrix(([1-a,6,8-x],[2-b,10,12-y],[6-c,3,15-z]))
print(sp.det(arr3))
IN BREVE, mettendo insieme calcolo determinante e estrazione possibili valori di lambda, si può fare tutto con sympy:
l = sp.symbols('l')
mat = sp.Matrix(([...], [...]))
# calcola la determinante
det = sp.det(mat)
# Trova i valori possibili di lambda
sp.solve(det, l)
Con Sympy si può ottenere il polinomio caratteristico anche nel seguente modo:
p = A.charpoly(l)
print(sp.factor(p.as_expr()))