viewgit/index.php:465 Only variables should be passed by reference [2048]

viewgit/index.php:466 Non-static method GeSHi::get_language_name_from_extension() should not be called statically [2048]

  1. \chapter{Il calcolo degli autovalori}
  2.  
  3. In questo capitolo ci occuperemo di presentare i metodi principalmente usati nel calcolo
  4. effettivo degli autovalori di matrici Hermitiane tridiagonali e in forma di Hessenberg.
  5.  
  6. \section{Il metodo di Sturm}
  7. Introdurremo ora un metodo efficiente per il calcolo di singoli autovalori di una matrice
  8. hermitiana in forma tridiagonale. Per tutta la sezione tratteremo il caso di una matrice
  9. reale per semplicità, ma il caso complesso è risolubile in modo analogo.
  10.  
  11. Abbiamo visto nella Sezione~\ref{sec:eqsecolare} un metodo efficiente per valutare il polinomio
  12. caratteristico di una matrice di questo tipo con costo $O(n)$. Possiamo affinare la nostra osservazione
  13. notando che anche la valutazione di tutti i polinomi $p_k$ in un punto $x$ fissato continua
  14. ad avere un costo $O(n)$. \\
  15. Consideriamo, data una matrice $T_n$ in forma tridiagonale hermitiana, la seguente funzione
  16. \[
  17. \begin{array}{cccl}
  18. f: & \R & \longto & \{ 0 , \ldots , n \} \\
  19. & x & \longmapsto & \sharp \{ \ \textrm{cambi di segno nel vettore} \ (p_0(x) , \ldots , p_n(x)) \ \}
  20. \end{array}
  21. \]
  22. Perché $f$ sia ben definita conveniamo che se $p_j(x) = 0$ allora il suo segno è lo stesso di $p_{j-1}(x)$.
  23. Questa è una buona definizione perché $p_0(x) = 1$ e quindi non è mai $0$.
  24. \begin{os}
  25. Dalla definizione di $f$ si deduce che se il suo valore di cambia in un punto, allora in quel punto ci deve
  26. essere uno zero di (almeno) uno dei polinomi $p_j(x)$.
  27. \end{os}
  28. Osserviamo cosa succede quando un polinomio ``interno'', ovvero un $p_j$ con $j \in 1 \ldots n-1$ ha uno
  29. zero in $\bar x$.
  30. Innanzitutto sappiamo da quanto visto nel capitolo precedente che $p_{j-1}(x) \neq 0 \neq p_{j+1}(x)$; è
  31. possibile però affinare questa affermazione osservando meglio la relazione ricorrente a tre termini:
  32. \[
  33. p_{j+1}(x) = (\alpha_{j+1} - x) p_j(x) - \beta_j^2 p_{j-1}(x)
  34. \]
  35. Se $p_j(x) = 0$ si ottiene che $p_{j-1}(x) \cdot p_{j+1}(x) < 0$, e quindi anche in un intorno di $\bar x$.
  36. Ricordando le definizione di $f$ si osserva che il segno di $p_j(x)$ è quindi indifferente ai fini del numero
  37. di cambiamenti di segno. In particolare $f$ non cambia segno in $\bar x$.
  38. Evidentemente $p_0(x)$ non può cambiare segno, quindi ci rimane da verificare cosa succede quando cambia segno
  39. $p_n(x)$. \\
  40. Ricordiamo alcune particolarità dei polinomi $p_n$ viste precedentemente
  41. \begin{enumerate}[(i)]
  42. \item Ogni $p_j$ ha limite a $-\infty$ uguale a $+\infty$;
  43. \item Gli zeri di $p_{j-1}$ separano gli zeri di $p_j$, nel senso visto alla fine del precedente capitolo
  44. (Sezione~\ref{sec:eqsecolare});
  45. \item Tutti gli zeri di un polinomio di una matrice hermitiana tridiagonale sono semplici;
  46. \end{enumerate}
  47. Osserviamo quindi che per ogni radice di $p_n$ si ha che il segno della sua derivata e quello di $p_{n-1}$ sono
  48. opposti. La condizione di semplicità sugli zeri ci assicura che la derivata sarà infatti diversa da $0$ in
  49. $\bar x$ e quindi $p_n'(\bar x) p_{n-1}(\bar x) < 0$. In particolare la costanza locale del segno della derivata
  50. intorno allo $0$ ci assicura anche la costanza di quello di $p_{j-1}$ e quindi il \emph{cambio di valore di $f$}.
  51. In sintesi $f$ agisce come una sorta di ``contatore di zeri''. Dato infatti un qualsiasi intervallo $[a,b]$ si verifica,
  52. usando le considerazioni precedenti che
  53. \[
  54. f(b) - f(a) = \sharp \{ \ \text{zeri del polinomio caratteristico in } [a,b) \ \}
  55. \]
  56.  
  57. Possiamo dunque applicare questa considerazione per applicare il metodo di bisezione per calcolare
  58. uno specifico autovalore di $T_n$. Queste proprietà di $f$ ci permettono di calcolare infatti singolarmente
  59. l'$i$-esimo autovalore di $T_n$ (ordinati con l'ordinamento di $\R$) senza bisogno di calcolare tutti gli altri.
  60. Ricordando la diseguaglianza di Hirsch ($||\lambda|| \leq ||T_n||$) e supponendo di aver fissato $i$ possiamo
  61. applicare il seguente procedimento.
  62.  
  63. Cominciamo col calcolare $f(0)$; il suo valore ci dirà quanti autovalori ci sono prima dello $0$, e quindi
  64. nell'intervallo $[-||T_n||, 0)$. Se il nostro autovalore sta lì (ovvero $i \leq f(0)$) allora calcoliamo
  65. $f(-\frac{||T_n||}{2})$ e ripetiamo il procedimento; in caso contrario procediamo analogamente con $f(\frac{||T_n||}{2})$. \\
  66. Iterando un numero sufficiente di volte questo procedimento otterremo alla fine il valore desiderato.
  67.  
  68. Osserviamo che il procedimento può essere applicato a ad una qualsiasi matrice hermitiana, a patto
  69. di portarla in forma tridiagonale (che è sempre possibile tramite matrici unitarie).
  70. Ricordando le stime dei costi computazionali fatte in precedenza ci rendiamo conto che il costo principale è
  71. quello della riduzione ($O(n^3)$) rispetto a quello del calcolo dell'autovalore ($O(n^2)$).
  72. Se si volessero calcolare tutti gli autovalori il costo rimarrebbe ancora dell'ordine di $n^3$. Nonostante questo
  73. esistono metodi (che vedremo in seguito) che permettono di calcolare tutti gli autovalori con una complessità di
  74. $O(n^2)$ e che quindi saranno più interessanti per il calcolo dello spettro completo della matrice. \\
  75. Il metodo di Sturm, comunque, trova delle applicazioni anche in questo ultimo caso nell'ambito del calcolo parallelo,
  76. dove altri algoritmi non possono essere implementati. Si può osservare invece che, una volta ottenuta la fattorizzazione,
  77. non sia difficile implementare il metodo di Sturm dividendo fra i vari processori gli autovalori da calcolare.
  78.  
  79. \section{Il metodo QR}
  80. In questa sezione esporremo il metodo QR per il calcolo degli autovalori, che è il metodo più utilizzato
  81. nelle moderne applicazioni del calcolo degli autovalori. Si basa sulla fattorizzazione QR già vista nel corso
  82. di Analisi Numerica per la risoluzione di sistemi lineari. Questa può venire realizzata tramite matrici
  83. di Householder. Cominceremo ricordando alcuni risultati riguardo la fattorizzazione, per poi esporre ed
  84. analizzare il metodo e le sue implementazioni.
  85.  
  86. \subsection{La fattorizzazione QR}
  87. \`E noto che ogni matrice $A \in \mat{\C}{n}$ si può fattorizzare nel seguente modo
  88. \[
  89. A = QR
  90. \]
  91. dove $Q$ è una matrice unitaria e $R$ è una matrice triangolare superiore.
  92. \begin{os}
  93. La fattorizzazione non è unica. Se supponiamo $A = QR$ e $S$ una matrice di fase, ovvero diagonale tale che $|s_{ii}|=1$
  94. per ogni $i = 1 \ldots n$, allora $A = QS\herm{S}R$ è ancora un fattorizzazione. Se $S \neq I$ le fattorizzazioni sono
  95. diverse. Si può però mostrare che non ci sono altre matrici (non di fase) per cui questo è vero. Si dice che
  96. la fattorizzazione QR è \emph{essenzialmente unica}.
  97. \end{os}
  98. Il nostro scopo è costruire una successione di matrici tramite questo procedimento di fattorizzazione
  99. che ci porti a determinare gli autovalori.
  100.  
  101. \subsection{Costruzione della successione}
  102. Data una matrice $A$ di cui vogliamo conoscere gli autovalori, consideriamo
  103. la successione definita nel seguente modo
  104. \[
  105. \left\{ \begin{array}{ll}
  106. A_0 & = A \\
  107. A_{k+1} & = R_k Q_k \quad \text{dove} \ Q_k R_k \ \text{è la fattorizzazione QR di} \ A_k
  108. \end{array} \right.
  109. \]
  110. \begin{os} \label{os:qr_simili_ak}
  111. Osserviamo che per ogni $k$ $A_{k+1}$ è simile ad $A_k$. Infatti $A_{k+1} = \herm{Q_k}Q_k R_k Q_k$.
  112. Per ogni $k$ la matrice $A_k$ è simile a $A_{k+1}$ tramite trasformazione unitaria, che preserva
  113. il condizionamento del problema di calcolo degli autovalori. Questa quindi è una ``buona'' successione
  114. nel senso in cui ne avevamo parlato nella Sezione~\ref{sec:analisidelcondizionamento}.
  115. \end{os}
  116.  
  117. Cominceremo ad analizzare il metodo QR facendo delle supposizioni piuttosto restrittive, che poi allenteremo
  118. in seguito. Cominciamo col supporre che gli autovalori della matrice $A$ siano tutti distinti e ordinabili
  119. per modulo in modo strettamente crescente, ovvero $|\lambda_1| < \ldots < |\lambda_n|$. Questo in
  120. particolare implica che la matrice $A$ è diagonalizzabile e quindi esiste una $X$ invertibile tale che
  121. $A = XDX^{-1}$. Supponiamo ora che $X^{-1}$ ammetta fattorizzazione $ X^{-1} = LU$\footnote{dove supponiamo
  122. che $L$ sia triangolare inferiore con gli elementi delle diagonale uguali a $1$ e $U$ triangolare superiore}.
  123. \begin{pr} \label{pr:metpot:ak}
  124. Se si ha la successione di matrici $A_k$ come quella definita sopra, e per ogni $k$ si considera $Q_k R_k$
  125. la\footnote{al solito, sarebbe corretto dire \textbf{una} fattorizzazione.} fattorizzazione QR di $A_k$, allora
  126. \[
  127. A^k = Q_0 Q_1 \ldots Q_{k-1} R_{k-1} \ldots R_1 R_0
  128. \]
  129. \end{pr}
  130. \begin{proof}
  131. Proviamo la tesi per induzione su $k$. Se $k = 1$ si ha $A^1 = A = Q_0 R_0$ che è banalmente vero. Se considero
  132. la tesi vera per $k$. Considerando le seguenti uguaglianze
  133. \[ \begin{array}{ll}
  134. \displaystyle
  135. A^{k+1} = \prod_{i=1}^{k+1} Q_0 R_0 = Q_0 (\prod_{i=1}^{k} R_0 Q_0) R_0 = Q_0 (\prod_{i=1}^{k} A_1) R_0 = \\
  136. \displaystyle
  137. = Q_0 (\prod_{i=1}^{k-1} Q_1 R_1) R_0 = Q_0 \prod_{i=1}^{k} Q_i \prod_{i=1}^{k} R_{k-i+1} R_0
  138. \end{array}
  139. \]
  140. si ottiene esattamente la tesi. Per quanto oscure possano sembrare provare a fare il calcolo con $k = 3$ o $4$
  141. potrebbe chiarire molto le idee.
  142. \end{proof}
  143. Ora vorremmo usare quanto scoperto sulle potenze di $A$ per studiare la convergenza del nostro metodo. Consideriamo
  144. che $A^k = X D^{k} X^{-1}$ e quindi ricordando che esiste la fattorizzazione $LU$ di $X^{-1}$ si ha
  145. \begin{equation}
  146. A^k = XD^{k}LU= X D^k LD^{-k}D^k U
  147. \end{equation}
  148. Osserviamo ora che la matrice $D^k L D^{-k}$ è triangolare inferiore ed ha la diagonale con soli $1$. Se chiamiamo
  149. $X = QR$ la fattorizzazione QR di $X$ possiamo scrivere
  150. \begin{equation} \label{eq:metpot:1}
  151. A^k = X[I + \Gamma^{(k)}]D^k U = QR [ I + \Gamma^{(k)}] D^k U = Q[I + R\Gamma^{(k)}R^{-1}]RD^k U
  152. \end{equation}
  153. A questo punto consideriamo anche che per ogni $k$ esiste la fattorizzazione QR di $[I + R\Gamma^{(k)}R^{-1}] = P_k T_k$
  154. ed in particolare possiamo scegliere $P_k$ a termini positivi. Osserviamo ora che i termini di $\Gamma^{(k)}$
  155. sono dati dalla seguente relazione
  156. \[
  157. \gamma_{ij} =
  158. \left\{ \begin{array}{ll}
  159. 0 & \text{se} \ i \leq j \\
  160. (\frac{\lambda_j}{\lambda_i})^{k} l_{ij} & \text{se} \ i > j
  161. \end{array} \right.
  162. \]
  163. ed in particolare ricordando che se $j < i$ si ha che $\lambda_j < \lambda_i$ si ottiene che la matrice $\Gamma^{(k)}$
  164. tende ad una matrice diagonale per $k$ che tende all'infinito. Più precisamente, $\lim_{k \to \infty} \Gamma^{(k)} = I$.
  165. Da questo si ottiene che $P_k \to I$ e anche $T_k \to I$\footnote{questo non sarebbe vero a priori, in quanto la scomposizione
  166. QR è sempre definita a meno di una matrice di fase. Richiedere però che $P_k$ abbia elementi positivi ci permette
  167. sia di definire univocamente la scomposizione desiderata sia di avere l'esistenza del limite.}
  168. Confrontando l'equazione~\ref{eq:metpot:1} e la Proposizione~\ref{pr:metpot:ak} si ottengono due fattorizzazioni
  169. QR della matrice $A^k$.
  170. \[
  171. A^k = QP_k T_k R D^k U = Q_0 \ldots Q_k R_k \ldots R_0
  172. \]
  173. Due fattorizzazioni QR della stessa matrice devono forzatamente differire per una matrice di fase e quindi
  174. si ottengono le due relazioni
  175. \[
  176. \left\{ \begin{array}{l}
  177. Q_0 \ldots Q_{k-1} = Q P_k S_k \\
  178. R_{k-1} \ldots R_0 = \herm{S_k}T_k R D^k U
  179. \end{array} \right.
  180. \]
  181. Possiamo riscrivere ora $Q_k$ ed $R_k$ in modo da riuscire ad utilizzare queste relazioni\footnote{Si può
  182. osservare quanto i passaggi di questa dimostrazione siano la cosa meno intuitiva pensabile (o quasi). Presumibilmente
  183. questa è risultato di anni di affinamento e di ``pulizia'' }
  184. \[
  185. \left\{ \begin{array}{l}
  186. Q_k = \herm{(Q_0 \ldots Q_{k-1})}(Q_0 \ldots Q_k) = \herm{S_{k}}\herm{P_{k}}\herm{Q}Q P_{k+1} S_{k+1} =
  187. \herm{S_{k}}\herm{P_{k}}P_{k+1} S_{k+1}\\
  188. R_k = (R_k \ldots R_0)(R_{k-1} \ldots R_0)^{-1} = \herm{S_{k+1}}T_{k+1} R D^{k+1} U U^{-1} D^{-k} R^{-1} T_{k}^{-1} S_{k}
  189. \end{array} \right.
  190. \]
  191. Dunque $Q_k R_k = A_k = \herm{S_{k}}\herm{P_{k}}P_{k+1} T_{k+1} R D R^{-1} T_{k}^{-1} S_{k}$ e ricordando che
  192. $T_k$ e $P_k$ al limite vanno all'identità se scriviamo la nostra uguaglianza per $k~\to~\infty$ otteniamo
  193. $S_{k} A_k \herm{S_{k}} = R D R^{-1}$. Possiamo quindi osservare che gli elementi sulla diagonale di $RDR^{-1}$
  194. sono gli stessi di $D$ (grazie al fatto che $R$ è triangolare superiore). In particolare gli elementi diagonali
  195. sono gli autovalori di $A$ e quindi abbiamo provato che il metodo converge.
  196. \begin{os}
  197. In realtà non è rilevante conoscere esplicitamente $S_k$ perché siamo interessati solo a conoscere gli elementi
  198. sulla diagonale di $RDR^{-1}$. Avendo che gli elementi di $S_k$ sono di modulo $1$ gli elementi diagonali vengono
  199. moltiplicati per un numero complesso e per il suo coniugato, lasciandoli invariati.
  200. \end{os}
  201.  
  202. \subsection{Il costo computazionale} \label{subsec:qr_costo}
  203. Vorremmo ora valutare il costo computazionale di questo metodo. Consideriamo dapprima il caso di una matrice
  204. generale. Sappiamo che il costo di una fattorizzazione $QR$ è $O(n^3)$ e sperimentalmente si ottiene che il
  205. numero di passi per avere convergenza cresce linearmente con la dimensione. Questo ci permette di concludere
  206. che in un caso totalmente generale il costo computazionale del metodo QR è $O(n^4)$.
  207.  
  208. Facciamo ora qualche supposizione sulla matrice. Prendiamo ad esempio una matrice tridiagonale hermitiana.
  209. In questo caso ci ricordiamo che il costo del calcolo della fattorizzazione QR (almeno della prima) è $O(n)$.
  210. Possiamo osservare che la matrice ottenuta dopo il primo passo è ancora tridiagonale hermitiana, e quindi
  211. le considerazioni fatte sul primo passo valgono anche per i seguenti. In particolare il costo del metodo
  212. è $O(n^2)$.
  213.  
  214. Analogamente per le matrici di Hessenberg (anche se non lo mostriamo ora) il costo è di $O(n^3)$ perché
  215. il calcolo della scomposizione QR è $O(n^2)$.
  216.  
  217. \subsection{Migliorare la convergenza}
  218. Il metodo QR come esposto fino ad ora funziona ma ha il difetto di avere una convergenza di tipo
  219. lineare. In generale questo può essere un problema perché più gli autovalori della matrice sono
  220. vicini più, potenzialmente, potrebbe essere lenta (o addirittura assente) la convergenza.
  221.  
  222. Possiamo osservare meglio questo con un esempio; consideriamo una matrice $2\times 2$ con un
  223. elemento ``piccolo'' in posizione $(2,1)$, ovvero sulla buona strada per essere triangolarizzata\footnote{%
  224. Ovviamente tutta questa frase è terribilmente imprecisa, ma il nostro scopo è, per ora, solo dare
  225. un'idea dei vantaggi che si potrebbero ottenere da un nuovo approccia e non formalizzarlo in
  226. alcun modo}.
  227. Proviamo a vedere cosa succede effettuando un passo generico dell'iterazione. Consideriamo la matrice $A_k$
  228. con un elemento piccolo $\eps$ sotto la diagonale e una sua scomposizione QR
  229. \[
  230. A_k = \left[ \begin{array}{cc}
  231. a & b \\
  232. \eps & c \\
  233. \end{array}\right]
  234. = \left[ \begin{array}{cc}
  235. \frac{a}{\sqrt{a^2 + \eps^2}} & \frac{-\eps}{\sqrt{a^2+\eps^2}} \\
  236. \frac{\eps}{\sqrt{a^2+\eps^2}} & \frac{a}{\sqrt{a^2 + \eps^2}}
  237. \end{array} \right]
  238. \left[ \begin{array}{cc}
  239. \sqrt{a^2 + \eps^2} & \frac{ab + \eps c}{\sqrt{a^2 + \eps^2}} \\
  240. 0 & \frac{ac - \eps b}{\sqrt{a^2+\eps^2}}
  241. \end{array} \right] = Q_kR_k
  242. \]
  243. Si avrà che
  244. \[
  245. A_{k+1} = R_kQ_k = \left[ \begin{array}{cc}
  246. \sqrt{a^2 + \eps^2} & \frac{ab + \eps c}{{a^2 + \eps^2}} \\
  247. 0 & \frac{ac - \eps b}{{a^2+\eps^2}}
  248. \end{array} \right]
  249. \left[ \begin{array}{cc}
  250. \frac{a}{\sqrt{a^2 + \eps^2}} & \frac{-\eps}{\sqrt{a^2+\eps^2}} \\
  251. \frac{\eps}{\sqrt{a^2+\eps^2}} & \frac{a}{\sqrt{a^2 + \eps^2}}
  252. \end{array} \right]
  253. = \left[ \begin{array}{cc}
  254. \times & \times \\
  255. \frac{\eps(ac - \eps b)}{a^2 + \eps^2} & \times
  256. \end{array} \right]
  257. \]
  258. Considerando che $ac -\eps b$ è il determinante delle matrice (e quindi
  259. il prodotto degli autovalori) e $a^2 + \eps^2$ una buona
  260. approssimazione del quadrato di un autovalore\footnote{questo perché il vettore $e_1$ va a finire in se stesso moltiplicato
  261. per $a$, a meno di epsilon che è piccolo}, $\eps$ è stato diminuito di un fattore dell'ordine
  262. di $\frac{\lambda_1}{\lambda_2}$, come ci si aspettava.
  263.  
  264. Consideriamo ora cosa succede applicando una tecnica di \emph{shifting}. Calcoliamo la fattorizzazione QR della
  265. matrice $A-cI$, invertiamo l'ordine dei fattori e risommiamo $cI$.
  266. Abbiamo dunque
  267. \[
  268. A_k - cI = \hat Q \hat R \quad \longrightarrow \quad A_{k+1} = \hat R \hat Q + cI
  269. \]
  270. \begin{os}
  271. $A_k$ ed $A_{k+1}$ sono simili. Consideriamo infatti le seguenti uguaglianze
  272. \[
  273. A_{k+1} = \hat R \hat Q + cI = \herm{\hat Q}\hat Q \hat R \hat Q + cI = \herm{\hat Q} (A_k - cI) \hat Q + cI
  274. = \herm{\hat Q} A_k \hat Q
  275. \]
  276. E quindi le due matrici sono simili per trasformazione hermitiana, il che preserva anche il condizionamento del
  277. problema come visto nella Sezione~\ref{sec:analisidelcondizionamento}.
  278. \end{os}
  279.  
  280. Possiamo osservare che risvolgendo i conti con il ``nuovo'' algoritmo si ottiene in posizione sottodiagonale
  281. un fattore dell'ordine di $\eps^2$. Sembra quindi che questo nuovo metodo abbia una convergenza molto più veloce
  282. del precedente!
  283.  
  284. Anche se questo esempio ci fornisce solo delle osservazioni in un caso particolare e non una
  285. dimostrazioni formale delle proprietà di convergenza che si potrebbero ottenere in generale
  286. con uno shifting, possiamo in ogni caso discutere come applicarlo. Esistono teoremi che provano
  287. l'effettiva efficienza di questo approccio ma sono piuttosto tecnici e ``conterecci'' (cit.) e
  288. non li affronteremo in questo corso.
  289. \begin{figure}[hb]
  290. \[
  291. A_k = \left[ \begin{array}{cccc}
  292. \alpha_{11}^{(k)} & \times & \hdots & \times \\
  293. \beta_{1}^k & \ddots & & \vdots \\
  294. & \ddots & \ddots& \times \\
  295. & & \beta_{n-1}^k & \alpha_{nn}^{(k)}
  296. \end{array} \right]
  297. \]
  298. \caption{Struttura di una matrice in forma di Hessenberg superiore}
  299. \label{fig:hessenbergsup}
  300. \end{figure}
  301. Appurato che questo trucco funziona, ci chiediamo come applicarlo ad una matrice generale. L'idea
  302. è di togliere alla matrice $A_k$ un'altra matrice $\alpha_k I$, dove $\alpha_k = \alpha_{nn}^{(k)}$
  303. (si veda la Figura~\ref{fig:hessenbergsup}).
  304. Per semplicità osserviamo il caso delle matrici di Hessenberg, che poi sarà il caso implementato in pratica
  305. date le considerazioni sulla complessità fatte in precedenza.
  306.  
  307. Il caso di una matrice complessa viene gestito esattamente con lo shifting di $-\alpha_{nn}^{(k)}I$ come descritto
  308. sopra, e si verifica che le cose funzionano bene. Più complesso, invece, è il caso di una matrice reale.
  309. In quella situazione infatti gli autovalori possono essere complessi coniugati e non si desidera passare da aritmetica
  310. reale ad aritmetica complessa. Questo porterebbe a problemi di complessità, ma il danno più grave sarebbe
  311. perdere la simmetria\footnote{Per simmetria intendiamo la certezza di ottenere autovalori complessi coniugati,
  312. cosa di cui non si potrebbe essere certi con una matrice complessa qualsiasi. } della matrice,
  313. e quindi in definitiva parecchia informazione sul problema.
  314. \begin{os}
  315. Nel caso complesso Hessenberg risulta semplice determinare la qualità dell'approssimazione ottenuta
  316. dell'autovalore. Possiamo assumere di fermare l'iterazione quando
  317. \[
  318. |\beta_n| \leq u( |\alpha_{nn}^{(k)}| + |\alpha_{n-1,n-1}^{(k)}|)
  319. \]
  320. dove $u$ è la precisione di macchina,
  321. ed a quel punto assumere che $\alpha_{nn}^{(k)}$ è una buona approssimazione dell'autovalore
  322. cercato e ridurci a ripetere il procedimento sul minore di nord ovest di ordine $n-1$, che è ancora in forma
  323. di Hessenberg.
  324. \end{os}
  325. Per determinare come eseguire lo shifting nel caso reale conviene cambiare punto di vista su quanto effettuato fino
  326. ad ora. Possiamo osservare che se poniamo $p_k(z) = z - \alpha_k$ di fatto lo shifting è equivalente a considerare
  327. la matrice $\hat A_k = p(A_k)$. Dato che riteniamo che $\alpha_k$ sia una buona approssimazione dell'autovalore
  328. cercato della matrice per analogia nel caso reale possiamo utilizzare $p_k(x) = (x - \lambda)(x - \con{\lambda})$
  329. che è un polinomio reale. Si verifica (e, ancora una volta, noi non lo faremo) che tutto continua a funzionare
  330. bene ma sorgono dei problemi di complessità. \\
  331. Il polinomio $p_k$ è infatti adesso di II grado e non è per nulla banale, in generale, calcolare $A_k^2$.
  332. Inoltre $p_k(A_k)$ non è neppure una matrice in forma di Hessenberg, il che sembrerebbe farci perdere tutti
  333. i vantaggi computazionali che avevamo fino a questo momento. Per fortuna esiste una tecnica che, modificando
  334. l'iterazione, riesce a riolvere questo problema.
  335.  
  336. \subsection{La tecnica del Bulge Chasing}
  337. Nell'applicazione della tecnica dello shifting vista nel paragrafo precedente, abbiamo supposto di
  338. calcolare $p_k(A_k)$ e dopo calcolare la fattorizzazione QR. Ci siamo però accorto che se $p_k$ è
  339. un polinomio di secondo grado vengono persi tutti i vantaggi computazionali dati dalla forma di Hessenberg.
  340. Vogliamo quindi ora modificare la fattorizzazione QR \textbf{mentre} calcoliamo $p_k(A_k)$ in modo da
  341. rendere la risultante matrice in forma di Hessenberg e diminuire la complessità del calcolo del polinomio.
  342. La fattorizzazione QR ottenuta sarà ``essenzialmente uguale''\footnote{ovvero sarà uguale a meno di una
  343. matrice di fase reale} a quella che avremmo ottenuto seguendo
  344. il procedimento precedente; questo modo di operare è detto \emph{Bulge Chasing}\footnote{bulge chasing in inglese significa inseguimento
  345. del bernoccolo, e s riesce ad apprezzare il senso del nome osservando come questa tecnica si traduce graficamente sugli elementi
  346. non zero della matrice. Questi si comportano infatti come un bernoccolo che scende sempre di più sulla
  347. sottodiagonale per poi sparire lasciando una matrice in forma di Hessenberg superiore.}.
  348.  
  349. Possiamo cominciare a calcolare solo la prima colonna della matrice $p_k(A_k)$, ovvero $p_k(A_k)e_1$.
  350. Una volta calcolata questa possiamo calcolare anche una matrice di Householder $P_0$ tale che
  351. $P_0 p_k(A_K)e_1 = \alpha e_1$. \\
  352. Si costruiscono poi altre $n-1$ matrici di Householder tali che fissato
  353. \[
  354. Z = P_0 \ldots P_{n-1}
  355. \]
  356. si abbia
  357. \[
  358. A_{k+1} = \herm{Z} A_k Z
  359. \]
  360. ed è possibile dimostrare che questa iterazione produce una matrice simile a meno di una matrice di fase reale
  361. rispetto a quella presentata in precedenza.
  362.  
  363. \section{Divide et Impera}
  364. \subsection{L'idea}
  365. Introdurremo ora un altro metodo, piuttosto recente, per il calcolo di tutti gli autovalori della matrice.
  366. Questo è stato introdotto nel 1980 da Cuppen. Il metodo permette il calcolo di autovalori solo per matrici
  367. tridiagonali hermitiane e l'osservazione che ne sta alla base è che una matrice tridiagonale è ``quasi''
  368. diagonale a blocchi, più precisamente se $H$ è la nostra matrice
  369. \[
  370. H = \left[ \begin{array}{cc|cc}
  371. \sblocko{T_1}{2} & & \\
  372. & & & \\ \hline
  373. & & \sblocke{T_2}{2} \\
  374. & & & \\
  375. \end{array} \right]
  376. + \left[ \begin{array}{cc|cc}
  377. & & & \\
  378. & \beta_{n-1} & & \\ \hline
  379. & & \beta_{n-1} & \\
  380. & & &
  381. \end{array} \right]
  382. \]
  383. Ovvero è una diagonale a blocchi più una correzione di rango 2. A ben vedere, però, si può fare anche di meglio.
  384. Se sostituiamo in $T_1$ il valore $\alpha_{\frac{n}{2}}$ con $\hat \alpha_{\frac{n}{2}} = \alpha_{\frac{n}{2}} - \beta_{n-1}$
  385. e in $T_2$ il valore $\alpha_{\frac{n}{2} + 1}$ con $\hat \alpha_{\frac{n}{2} + 1} = \alpha_{\frac n 2 + 1} - \beta_{n-1}$, otteniamo
  386. una matrice a blocchi tridiagonali più un correzione di rango $1$:
  387. \[
  388. H = \left[ \begin{array}{cc|cc}
  389. \sblocko{\hat T_1}{2} & & \\
  390. & & & \\ \hline
  391. & & \sblocke{\hat T_2}{2} \\
  392. & & & \\
  393. \end{array} \right]
  394. + \left[ \begin{array}{cc|cc}
  395. & & & \\
  396. & \beta_{n-1} & \beta_{n-1}& \\ \hline
  397. & \beta_{n-1} & \beta_{n-1} & \\
  398. & & &
  399. \end{array} \right]
  400. \]
  401. Supponiamo ora di conoscere gli autovalori di $\hat T_1$ e di $\hat T_2$, ed in particolare le matrici
  402. unitarie $Q_1$ e $Q_2$ che ci permettono di diagonalizzarle, ovvero
  403. \[
  404. T_1 = Q_1 D_1 \herm Q_1 \qquad
  405. T_2 = Q_2 D_2 \herm Q_2
  406. \]
  407. con $D_1$ e $D_2$ le matrici con gli autovalori sulla diagonale e $0$ altrove.
  408.  
  409. Tutto questo può funzionare se
  410. riusciamo a mostrare che siamo veramente in grado di calcolare facilmente gli autovalori della matrice a blocchi
  411. con la correzione.
  412.  
  413. Se consideriamo ora la matrice $D$ così formata
  414. \[
  415. \hat D = \left[ \begin{array}{cc|cc}
  416. \sblocko{D_1}{2} & & \\
  417. & & & \\ \hline
  418. & & \sblocke{D_2}{2} \\
  419. & & &
  420. \end{array} \right]
  421. \]
  422. e calcoliamo $B = \herm Q A Q$ otteniamo
  423. \[
  424. B = \herm Q A Q = \hat D + \beta_{\frac{n}{2}}z\herm z
  425. \]
  426. con $z = \left[ \begin{array}{c} q_1 \\ q_2 \end{array}\right]$ dove $q_i$ è l'ultima colonna di $\herm Q_i$
  427. per $i = 1,2$.
  428.  
  429. \subsection{La ricerca degli autovalori}
  430. Abbiamo quindi ricondotto il problema a calcolare gli autovalori di una matrice $D + w\herm w$ dove $D$
  431. è diagonale e $w$ è un vettore qualsiasi. Calcolando il polinomio caratteristico di $B$ ed assumendo
  432. che $\lambda \neq \hat d_i$ otteniamo
  433. \[
  434. p(\lambda) = \deter{\lambda I - B} = \deter{ \lambda I - D }\cdot \deter{I + \theta(\lambda I - D)^{-1} z\herm z}
  435. \]
  436. Osserviamo che stiamo assumendo che $\lambda I - D$ sia invertibile, e quindi questa formula per il calcolo
  437. del polinomio caratteristico vale solo per $\lambda \in \C \setminus (\spe{D_1} \cup \spe{D_2})$. Sapendo che $p$
  438. è continuo possiamo però concludere che vale per tutto $\C$. \\
  439. Notiamo inoltre che $( I + \theta(\lambda I - D)^{-1}z\herm z)$ è una matrice elementare e quindi ha determinante\footnote{%
  440. Ricordiamo che in genearale una matrice elementare $I - \sigma u \herm v$ ha determinante $1 - \sigma \herm v u$}
  441. $1 - \theta (\lambda I - D)^{-1} \herm zz$; sviluppando ulteriormente si ottiene
  442. \begin{equation} \label{eqn:polmindivetimp}
  443. p(\lambda) = \prod_{j=1}^{n} (\lambda - \hat d_j) ( 1 + \theta (\lambda I - D)^{-1} \herm zz )
  444. = \prod_{j=1}^{n} (\lambda - \hat d_j) ( 1 + \theta \sum_{k=1}^{n} \frac{z_k^2}{\lambda - \hat d_k} )
  445. \end{equation}
  446. ed estendendo per continuità a tutto $\C$ si ottiene infine
  447. \[
  448. p(\lambda) = \prod_{j=1}^n (\lambda - \hat d_j) + \theta\sum_{k=1}^n z_k \prod_{\substack{s=1 \\ s\neq k}}^n (\lambda - \hat d_s)
  449. \]
  450. che è una sorta di equazione secolare come quella che si era ottenuta partendo dalle relazioni ricorrenti a tre
  451. termini nella Sezione~\ref{sec:eqsecolare}.
  452.  
  453. Siamo ora costretti a fare delle assunzioni sulla struttura di $z$ e di $\hat D$. In realtà ci renderemo conto
  454. in seguito che queste non sono restrittive perché nei casi in cui non saranno verificate ci troveremo con un
  455. problema semplificato, che potremo riportare a questo caso.\footnote{Penso, perché in realtà non mi è ancora
  456. molto chiaro come si dovrebbe fare}. \\
  457. Assumiamo dunque che
  458. \begin{itemize}
  459. \item $z_j \neq 0$ per ogni $j = 1 \ldots n$;
  460. \item $\hat d_k \neq \hat d_j$ per ogni $k \neq j$, ovvero che tutti gli autovalori siano distinti;
  461. \end{itemize}
  462. A questo punto dalla relazione~\ref{eqn:polmindivetimp} ricaviamo che
  463. \begin{equation} \label{eqn:eqsecdivetimp}
  464. p(\lambda) = 0 \iff 1 + \theta \sum_{j=1}^n \frac{z_j^2}{\lambda - \hat d_j} = 0
  465. \end{equation}
  466.  
  467. e quindi gli autovalori delle matrici di ordine $\frac{n}{2}$ separano quelli della matrice grande, e si
  468. può applicare (ad esempio) il metodo di bisezione, o in generale altri procedimenti di iterazione
  469. funzionale.
  470.  
  471. \begin{os}
  472. Notiamo che per applicare la bisezione nella (\ref{eqn:eqsecdivetimp}) abbiamo bisogno di conoscere, oltre
  473. ai $\hat d_j$ anche gli $z_j$ e ricordando che $z$ è costruito a partire dalle matrici $Q_1$ e $Q_2$, è chiaro
  474. che dobbiamo conoscere anche queste due. Queste erano le matrici che diagonalizzavano $T_1$ e $T_2$ e si
  475. ottenevano quindi \textbf{conoscendo gli autovettori} di $T_1$ e $T_2$. Dobbiamo allora, per poter procedere
  476. con il metodo, calcolarci tutti gli autovettori.
  477. \end{os}
  478.  
  479. \subsection{Autovettori e problemi di stabilità}
  480. Il fatto di dover calcolare gli autovettori ha un lato positivo ed uno negativo, precisamente
  481. \begin{enumerate}[(a)]
  482. \item Il calcolo effettivo risulta inaspettatamente semplice, tanto che, trovati gli autovalori saremo
  483. capaci di trovare ogni autovettore con costo $O(n)$ e quindi di ottenerli tutti con costo $O(n^2)$;
  484. \item Il problema del calcolo degli autovettori non è in generale ben condizionato e non si riescono a
  485. dare condizioni perchè lo sia. Dato che influenzerà anche il calcolo degli autovalori nei passaggi successivi,
  486. non possiamo garantire l'accuratezza del risultato finale;
  487. \end{enumerate}
  488.  
  489. L'idea per trovare gli autovettori è cercare quelli di $\hat D + \beta_{\frac n 2}z\herm z$ e poi una
  490. volta ottenuta la matrice $U$ con questi, moltiplicarla per la matrice a blocchi con $Q_1$ e $Q_2$ sulla
  491. diagonale (che d'ora in poi chiameremo $\hat Q$) per trovare gli autovettori della matrice $T$. \\
  492. Osserviamo che se $v$ è autovettore per la matrice $D + \beta_{\frac n 2}z\herm z$ allora
  493. \[
  494. (\hat D + \theta z \herm z - \lambda I)v = 0
  495. \]
  496. e quindi
  497. \[
  498. (\hat D - \lambda I)v = -\theta z \herm z v
  499. \]
  500. Se fosse $\herm z v = 0$ avrei che $(\hat D - \lambda I)v = 0$ ma questo non è possibile perché $v$
  501. è non nullo e $\hat D - \lambda I$ è invertibile (come assunto precedentemente). Quindi deve essere
  502. $\herm z v \neq 0$ e quindi dato che $v$ è determinato a meno di uno scalare possiamo assumere
  503. $\herm z v = 1$. In definitiva si ottiene
  504. \[
  505. v = - \theta z (\hat D - \lambda I)^{-1}
  506. \]
  507. che si può scrivere anche più esplicitamente come
  508. \begin{equation} \label{eqn:calcoloautovettdivetimp}
  509. v_j = \frac{- \theta z}{d_j - \lambda}
  510. \end{equation}
  511. Riassumendo, vogliamo trovare la matrice $U$ con i $v_j$ sulla diagonale e questo si può fare con
  512. la Formula~\ref{eqn:calcoloautovettdivetimp} con costo $O(n^2)$. Ottenuta la matrice $U$ avremo
  513. la matrice per diagonalizzare $T$ calcolando $\hat Q U$, e potremmo quindi procedere con il metodo.
  514.  
  515. Sorgono però dei problemi computazionali non banali, più precisamente
  516. \begin{enumerate}[(i)]
  517. \item La matrice $U$ deve essere ortogonale ma questo non è garantito dall'algoritmo. Se ad un passo
  518. abbiamo perdita di ortogonalità questo poi causerà un accumulo di errore in tutti i passi successivi
  519. portando ad una imprecisione del calcolo. Sembra che in una implementazione del 2006 si sia riusciti
  520. a risolvere questo problema. %% TODO: inserire una citazione
  521. \item Come già sottolineato prima il calcolo degli autovalori potrebbe essere mal condizionato dal principio
  522. portando ad un accumulo di errore notevole ad ogni passo.
  523. \item Apparentemente il costo computazionale del calcolo di $\hat Q U$ non è trascurabile in quanto
  524. un prodotto matrice per matrice in generale costa $O(n^3)$. Fortunatamente $U$ non è una matrice qualsiasi:
  525. matrici del tipo $u_{ij} = \frac{r_i s_j}{x_i - y_j}$ sono dette matrici \emph{Cauchy-like} ed esistono
  526. algoritmi per calcolare il prodotto fra una Cauchy-like ed una matrice generica con costo $O(n^2\log{n})$
  527. \end{enumerate}
  528.  
  529. Come ultima nota, ricordiamo che questo algoritmo è applicabile solo alle matrici tridiagonali hermitiante
  530. (e, previa tridagonalizzazione, a qualsiasi matrice hermitiana) ma non alle matrici in forma di Hessenberg
  531. che non presentano purtroppo alcuna proprietà di separazione\footnote{ovvero quella che ci permette di trovare
  532. i limite su cui applicare la bisezione o qualsiasi altra iterazione funzionale}. \\
  533. Sono stati fatti molti tentativi a questo proposito, ma non esiste attualmente nessuna implementazione
  534. robusta del metodo Divide et Impera sulle matrici di Hessenberg.
  535.  
  536. \section{Il metodo delle potenze} \label{sec:metodopotenze}
  537. Per ultimo analizzeremo il metodo delle potenze che ci permette di trovare gli autovettori di una matrice
  538. conoscendo gli autovalori. In generale è particolarmente comodo per calcolare l'autovalore dominante.
  539. Consideriamo dunque questo caso per primo
  540.  
  541. \subsection{Il metodo diretto}
  542. Supponiamo $A \in \mat{\C}{n}$ diagonalizzabile, per semplicità. Elimineremo questa ipotesi in seguito.
  543. Consideriamo gli autovalori ordinati in modo che
  544. \[
  545. |\lambda_1| \geq |\lambda_2| \geq \ldots \geq |\lambda_n|
  546. \]
  547. e aggiungiamo l'ipotesi che $\lambda_1$ sia semplice e che sia in modulo strettamente maggiore degli altri.
  548. Il metodo si basa su questa semplice osservazione (la cui paternità viene, ancora una volta, attribuita a Gauss):
  549. Se prendiamo un vettore $y_0 \in \C^n$ e la nostra scelta non è incredibilmente sfortunata\footnote{%
  550. dove con incredibilmente sfortunata intendiamo che il prodotto scalare tra $y_0$ e l'autovettore relativo
  551. a $\lambda_1$ è esattamente uguale a $0$} possiamo considerare la successione
  552. \begin{equation}
  553. \left\{ \begin{array}{ll}
  554. y_0 & = y_0 \\
  555. y_k & = Ay_{k-1}
  556. \end{array} \right.
  557. \end{equation}
  558. Se scriviamo $y_0$ nella base di autovettori per $A$ abbiamo
  559. \begin{equation}
  560. y_0 = \sum_{i=1}^{n} \alpha_i v_i
  561. \end{equation}
  562. e quindi osservando che $y_k = Ay_{k-1} = A^{k}y_0$ dopo $k$ iterazioni otteniamo
  563. \begin{equation} \label{eqn:metpotite}
  564. y_k = A^ky_0 = \sum_{i=1}^n \alpha_i \lambda_i^k v_i =
  565. \lambda_i^k \cdot \Big( \alpha_1 v_1 + \underbrace{\sum_{i=2}^n \alpha_i (\frac{\lambda_i}{\lambda_1})^k v_i}_{%
  566. \text{tende a}\ 0\ \text{se}\ k \to \infty} \Big)
  567. \end{equation}
  568. e ricordando l'ipotesi fatta precedentemente, ovvero che $|\lambda_1| > |\lambda_i|$ per ogni $i$ abbiamo
  569. che la seconda parte dell'uguaglianza va a $0$ per $k \to \infty$ e quindi la successione di vettori
  570. tende ad un multiplo di $v_1$, ovvero l'autovettore cercato.
  571.  
  572. Purtroppo questa implementazione del metodo non è realistica, perché si incorrerebbe sicuramente nel caso di
  573. overflow o underflow in poche iterazioni, e probabilmente prima di avere una buona approssimazione dell'autovettore.
  574. Si ricorre quindi al semplice stratagemma di riscalare ad ogni iterazione il vettore ottenuto, ad esempio
  575. dividendolo per la sua norma infinito. In questo modo otteniamo una successione di vettori unitari che convergeranno
  576. all' autovettore unitario. \\
  577. Possiamo ora emprimere la successione in questo modo
  578. \[
  579. \left\{ \begin{array}{ll}
  580. y_0 & = y_0 \\
  581. y_k & = \displaystyle \frac{Ay_{k-1}}{||Ay_{k-1}||_\infty}
  582. \end{array} \right.
  583. \]
  584. \begin{os}
  585. Questo metodo mi permette anche di valutare e raffinare la stima dell'autovalore dominante. Se considero
  586. infatti il rapporto fra le $j$-esime componenti di due vettori consecutivi, ovvero $\frac{y_k,j}{y_{k-1,j}}$
  587. non è difficile verificare tramite la (\ref{eqn:metpotite}) che
  588. converge all'autovalore cercato.
  589. \end{os}
  590.  
  591. Esistono delle varianti del metodo delle potenze che sfruttano le idee qui esposte per risolvere problemi simili
  592. e migliorare le condizioni di convergenza.
  593.  
  594. \subsection{Il metodo inverso con shift}
  595. Osserviamo come prima cosa che con pochi cambiamenti si potrebbe calcolare l'autovalore di modulo più piccolo
  596. considerando, invece che la matrice $A$, la matrice $A^{-1}$. \\
  597. Potremmo riscrivere l'iterazione in questo modo
  598. \begin{equation}
  599. \left\{ \begin{array}{ll}
  600. y_0 & = y_0 \\
  601. y_k & = \beta_{k} \cdot A^{-1}y_{k-1}
  602. \end{array} \right.
  603. \end{equation}
  604. dove $\beta_{k} = ||y_{k}||_\infty$\footnote{adotteremo questa notazione per tutta la sezione, d'ora in poi}.
  605. Questo procedimento ci imporrebbe però di calcolare l'inversa di $A$, un procedimento che in generale si tende ad
  606. evitare per problemi di instabilità. Possiamo quindi rileggere l'espressione precedente come risoluzione di
  607. un sistema lineare, ovvero
  608. \begin{equation}
  609. \left\{ \begin{array}{lll}
  610. y_0 &=& y_0 \\
  611. Az_k &=& y_{k-1} \\
  612. y_k &=& \beta_k \cdot z_k
  613. \end{array} \right.
  614. \end{equation}
  615. A questo punto possiamo scegliere varie tecniche per risolvere il sistema lineare; sottolineamo che un metodo diretto
  616. che utilizza una fattorizzazione in questo caso è molto conveniente rispetto ad uno iterativo. Se calcoliamo
  617. la fattorizzazione di $A$, infatti, possiamo poi usarla per risolvere tutti i sistemi lineari della successione con
  618. un costo basso.
  619.  
  620. In particolare, ricordiamo che per una tridiagonale hermitiana e per una matrice in forma di Hessenberg superiore
  621. il costo di una fattorizzazione QR sono rispettivamente $O(n)$ e $O(n^2)$, e sono anche il costo della risoluzione
  622. del sistema lineare. Si verifica sperimentalmente che, partendo da una buona approssimazione degli autovalori,
  623. il metodo converge in genere in 3-4 passi, indipendemente dalla dimensione di $A$. Si conclude quindi che il calcolo
  624. dell'autovettore dominante risulta essere $O(n)$ per le tridiagonali e $O(n^2)$ per le matrici in forma di
  625. Hessenberg.
  626.  
  627. Ci poniamo ora il problema di come calcolare gli autovettori che stanno nella parte centrale dello spettro, ed è qui
  628. che interviene lo \emph{shifting}. Non è difficile osservare che gli autovalori della matrice $A - \gamma I$ sono gli
  629. stessi di $A$ ``shiftati'' di $\gamma$, ovvero sono
  630. \[
  631. \spe{A - \gamma I} = \{ \lambda - \gamma \ | \ \lambda \in \spe{A} \ \}
  632. \]
  633. Supponiamo ora di avere una buona approssimazione $\hat \lambda_j$ dell'autovalore $\lambda_j$, dove con ``buona
  634. approssimazione'' intendiamo tale che
  635. \[
  636. |\hat \lambda_j - \lambda_j| < |\hat \lambda_j - \lambda_k| \quad \forall k \in \spe{A}\setminus\{\lambda_j\}
  637. \]
  638. In questo caso $\hat \lambda_j - \lambda$ è l'autovalore di modulo più piccolo della matrice $A - \hat \lambda_j I$
  639. e il suo autovettore è quello relativo all'autovalore $\lambda_j$ della matrice $A$. Possiamo quindi applicare
  640. il metodo delle potenze inverso a $A - \lambda_j I$ e ottenere l'autovettore cercato. Questa operazione prende
  641. il nome di \emph{metodo delle potenze inverso con shift}.
  642.  
  643. \begin{os}
  644. In questo modo si può applicare un metodo qualsiasi per ottenere un'approssimazione degli autovalori (ad esempio
  645. il metodo QR) e poi calcolare tutti gli autovettori della matrice con il metodo delle potenze inverso con shift.
  646. Se la matrice è tridiagonale hermitiana si possono ottenere tutti con costo $O(n^2)$, mentre se è in forma di
  647. Hessenberg superiore il costo diventa $O(n^3)$ per le considerazioni fatte in precedenza.
  648. \end{os}
  649.  
  650. \begin{os}
  651. Un'altra cosa che si può notare è che il metodo fornisce anche un possibile raffinamento per l'autovalore
  652. $\lambda_j$ tramite il rapporto fra le componenti di $y_k$ e di $y_{k-1}$. Si potrebbe essere tentati
  653. di sostituire questo eventuale raffinamento al posto dello shifting ma si verifica che questa non è necessariamente
  654. una buona pratica. Esistono alcuni casi in cui può inficiare la convergenza del metodo.
  655. \end{os}
  656.