Strano modo di calcolare gli autovettori, me lo dimostrate?

spopolus
Salve a tutti,
ho sempre conosciuto un solo modo di calcolare gli autovettori di una matrice.
Una volta trovati gli autovalori con il polinomio caratteristicio, procedevo a risolvere il sistema dato da (A-Lambada I)[X] =0
dove [X] è il vettore colonna di incognite, lambada l'autovalore, e I la matrice identità.


Tutto liscio. Ieri un mio amico mi ha mostrato che ha implementato una funzione che calcola gli autovettori in un modo leggermente diverso,
solamente che non riesco a trovare una dimostrazione che effettivamente giustifichi la sua implementazione ( e soprattutto che ne rintracci i vincoli e le assunzioni che il suo metodo da per scontate).

In poche parole, lui crea una matrice di dimensione n+1*n+1 (dove n è la dimensione della matrice da cui si parte), aggiungendo 0 nella colonna n+1 e nella riga n+1, ad unica eccezione di un 1 nella posizione n*n.

Fatto questo sottrae alla posizione (i,i) l'autovalore (ad eccezione fatta di i = n, che rimane 1).

Successivamente la Inverte.

Crea un vettore di dimensione (1,n) con valori presi dalla diagonale della matrice invertita, ovvero metto in (1,i) il valore che si trova in (i,i).

(ora il vettore ha esattamente la dimensione della matrice di partenza).

Lo normalizza e ha l'autovettore di partenza.


========
A naso lui porta la matrice in uno spazio vettoriale di dimensione superiore, ci aggiunge un vettore linearmente indipendente.
Dopo di che non vedo come l'inversione gli faccia trovare automaticamente gli autovettori nella diagonale.
Sicuramente ha a che fare con il fatto che la matrice degli autovettori V ha la proprietà di AV = LAMBADA V e V^-1 A V = D

Ma sinceramente un po' mi perdo.

Voi che ne dite ?

Risposte
cirasa
Vediamo un po' se ho capito...
[tex]A[/tex] è la matrice iniziale [tex]n\times n[/tex] di cui vuoi calcolare l'autovettore relativo all'autovalore [tex]\lambda[/tex].

"spopolus":
In poche parole, lui crea una matrice di dimensione n+1*n+1 (dove n è la dimensione della matrice da cui si parte), aggiungendo 0 nella colonna n+1 e nella riga n+1, ad unica eccezione di un 1 nella posizione n*n.

Cioè si crea la matrice [tex]B=\left(\begin{matrix}A & 0 \\ 0^t & 1\end{matrix} \right)[/tex],
dove [tex]0[/tex] è il vettore [tex]n\times 1[/tex] i cui elementi sono tutti nulli.

"spopolus":
Fatto questo sottrae alla posizione (i,i) l'autovalore (ad eccezione fatta di i = n, che rimane 1).

Forse intendevi dire "alla posizione i=n+1".
Praticamente ottiene la matrice [tex]C=\left(\begin{matrix}A-\lambda I & 0 \\ 0^t & 1\end{matrix} \right)[/tex]
dove [tex]I[/tex] è la matrice identica [tex]n\times n[/tex].

"spopolus":
Successivamente la Inverte.

... ovvero calcola [tex]C^{-1}[/tex].
Domanda: è un'operazione che si può fare?
Con Laplace sull'ultima colonna si ottiene che [tex]\det C=\det(A-\lambda I)[/tex].
Ma se [tex]\lambda[/tex] è un autovalore di [tex]A[/tex], [tex]A-\lambda I[/tex] ha [tex]\ker[/tex] non banale, quindi non è invertibile e perciò [tex]\det C=0[/tex].
Come si inverte questa matrice?


Edit: Avevo dimenticato un simbolo di "trasposto"...

spopolus
è tutto corretto come hai riscritto tu (scusami sono stato poco chiaro con gli indici).

Diciamo che il mio amico (secondo me) da per scontato che il determinante di C sia non nullo, e che la nuova matrice n+1 * n+1 abbia rango n+1 (e che gli autovalori hanno tutti molteplicità 1), ovvero che il vettore riga aggiunto sia linearmente indipendente ..

Assunto questo ...

com'è possibile che invertendola, prendendo la diagonale come fosse un vettore,e normalizzando questo vettore, si ottenga un autovettore ?

cirasa
Il problema è che la matrice che ho chiamato [tex]C[/tex] non è mai invertibile!

Prendi la matrice $A=((0,-1),(2,3))$.
Il suo polinomio caratteristico è $\lambda^2-3\lambda+2=(\lambda-2)(\lambda-1)$.
Gli autovalori sono distinti di molteplicità algebrica e geometrica $1$.
Prendiamo l'autovalore $\lambda=1$.

Con le notazioni precedenti si ha che
$C=((-1,-1,0),(2,2,0),(0,0,1))$
che ovviamente non è invertibile.
A questo punto cosa fa il tuo amico?

Forse non ho ancora capito come si procede...

spopolus
oibo hai proprio ragione, c'è qualcosa che non va allora.

Non mi ero accordo di questo perchè questa disquisizione l'avevamo fatta via codice, chiamando le funzioni che il linguaggio offriva sulle matrici, e alla chiamata invert() non dava segnali di errore.

provo a guardare per bene cosa succede, (e se magari l'inversione viene fatta con metodi matematici che approssimano la matrice data rendendola sempre invertibile) e ti faccio sapere dove sta l'inghippo.

cirasa
Ok.
Intanto, visto che non l'ho ancora fatto, ti porgo il mio benvenuto in questo forum :-)

Per le prossime volte cerca di imparare l'uso delle formule (click) per scrivere tutti i simboli nel modo giusto.
A presto :wink:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.