Autovalori ed autovettori di una matrice

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

  • calcolare il polinomio caratteristico di \(A\) -> \(det(A - \lambda*Id_n)\): si ottiene la matrice \(A - \lambda*Id_n\) con le semplici operazioni tra matrici e quindi si calcola la determinante (vedi nota per il calcolo della determinante con incognite)
  • dalla determinante risultante estrarre i possibili valori di \(\lambda\) (vedi sotto). Ciascuno di questi n valori è un'autovalore di \(A\)
  • per ogni autovalore trovato considerare il sistema lineare omogeneo: (\(A - \lambda*Id_n){\bold v}\) dove \({\bold v}\) è vettore colonna \((x_1, x_2, .., x_n)\) (ad es. \(x, y, z\) nel caso la dimensione della matrice quadrata sia 3)
  • ricavare la base dall'insieme delle soluzioni del sistema (vedasi "Base dello spazio delle soluzioni di un sistema lineare omogeneo")
  • la base risultante descrive l'autospazio. I vettori non nulli appartenenti a tale sottospazio sono gli autovettori dell'autovalore in oggetto
  • reiterare il procedimento per tutti gli altri autovalori precedentemente trovati

Soluzione immediata

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".

Nello specifico

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.

Calcolo determinante con incognite

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)

Polinomio caratteristico

Con Sympy si può ottenere il polinomio caratteristico anche nel seguente modo:

p = A.charpoly(l)
print(sp.factor(p.as_expr()))

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/matrici-e-vettori/735-autovalori-e-autovettori.html