Rivista la struttura in directory.

Leonardo Robol [2009-12-28 15:42]
Rivista la struttura in directory.
Filename
AppFortran.tex
AppPageRank.tex
AppVibrazioni.tex
Bibliografia.tex
CalcoloScientifico.tex
appendice/AppFortran.tex
appendice/AppPageRank.tex
appendice/AppVibrazioni.tex
capitoli/capitolo1.tex
capitoli/capitolo2.tex
capitoli/capitolo3.tex
capitoli/capitolo4.tex
capitoli/capitolo5.tex
capitoli/capitolo6.tex
capitolo1.tex
capitolo2.tex
capitolo3.tex
capitolo4.tex
capitolo5.tex
capitolo6.tex
introduzione.tex
title.tex
varie/Bibliografia.tex
varie/introduzione.tex
varie/title.tex
diff --git a/AppFortran.tex b/AppFortran.tex
deleted file mode 100644
index 67f01a6..0000000
--- a/AppFortran.tex
+++ /dev/null
@@ -1,245 +0,0 @@
-\chapter{Il fortran 95}
-Il linguaggio di programmazione usato per implementare gli algoritmi è stato il FORTRAN, una
-``minor revision''\footnote{non ho mai capito come si traduca veramente in italiano la parola
-revision -- ogni suggerimento è bene accetto} del FORTRAN 90. \\
-Rispetto all versioni precedenti ci sono delle interessanti novità, per cui se state pensando
-``Oddio, il FORTRAN nel 2009, non ci posso credere'' prima leggete il seguito\footnote{Ebbene sì,
-è quello che ho pensato io, ma poi mi sono resoconto che il linguaggio aveva fatto dei progressi
-dagli anni sessanta a questa parte}; è l'elenco delle cose che non mi aspettavo
-\begin{enumerate}[(a)]
- \item Allocazione dinamica della memoria;
- \item Creazione di tipi astratti e overloading degli operatori;
- \item Programmazione ad oggetti e polimorfismo (solo Fortran 2003/2008);
-\end{enumerate}
-
-In ogni caso, in queste note includerò alcune righe su come si scrivono le prime righe di codice
-in fortran. In codice Fortran saranno infatti riportati tutti gli esempi nella parte di esercitazione.
-
-\section{La sintassi}
-\subsection{Hello World!}
-Per una convenzione che di cui non so l'origine non è posibbile cominciare da qualcosa di diverso del
-programma Hello World! Noi non saremo da meno. Cominceremo a guardare il codice e a commentarlo
-passo passo..
-
-\begin{lstlisting}[frame=tb,caption=Hello World,label=lst:helloworld]
- PROGRAM helloworld
-  IMPLICIT NONE
-  WRITE(*,*) 'Hello World'
- END PROGRAM
-\end{lstlisting}
-
-Tutte le righe precedute da \lstinline-!- sono dei commenti e quindi vengono scartate
-dal compilatore. Ad esempio '\lstinline-a = 1 ! Inizializzazione-' è equivalente a
-'\lstinline-a = 1-'.
-
-L'istruzione \lstinline-PROGRAM helloworld- spiega al compilatore che questo è l'inizio del
-nostro programma e che si chiamerà helloworld. Si aspetta di trovare alla fine un
-\lstinline-END PROGRAM- che noi abbiamo prontamente inserito.
-
-L'istruzione \lstinline-IMPLICIT NONE- serve invece a disattivare delle convenzione che si
-usavano nelle prime versione del fortran (e che esistono ancora per retrocompatibilità)
-che stabiliscono che le variabili \lstinline-i,j,k- sono di tipo intero, mentre ad esempio
-\lstinline-x,y,z- sono reali. Questo non è desiderabile in un linguaggio di programmazione
-moderno in cui ci si aspetta di scrivere del codice comprensibile.
-
-Infine l'istruzione \lstinline-WRITE(*,*)- scrive sull stdout\footnote{che, nelle maggior parte
-dei casi, coincide con il monitor} tutti gli argomenti che gli si passano dopo. \`E possibile
-controllare la formattazione di quello che viene stampato ma, come è simboleggiato dagli asterischi,
-per ora non ce ne stiamo preoccupando.
-
-\subsection{La struttura}
-Un programma in FORTRAN ha una struttura prefissata:
-\begin{lstlisting}[label=lst:fotranstruct,frame=tb]
- PROGRAM nomeprogramma
-  IMPLICIT NONE
-  ! Specificazioni: in questa parte si trova la dichiarazione
-  !                 delle variabili e dei nuovi tipi
-
-  ! Parte di esecuzione: qui troviamo il codice vero e proprio che
-  !                      viene eseguito
-
-  ! Subroutine: qui troviamo la definizione dei sottoprogrammi che
-  !             possono venire chiamati dalla parte di esecuzione
- END PROGRAM
-\end{lstlisting}
-\subsection{I tipi}
-Come il C e tutti i linguaggi che vantano una certa storia il FORTRAN è un linguaggio tipato,
-ovvero ogni variabile ha un tipo (ad esempio intero) e non gli si possono assegnare valori
-di tipi differenti. \\
-Si possono aggiungere delle parole chiave alle dichiarazioni di tipi, più precisamente
-\begin{itemize}
- \item \lstinline-PARAMETER-: questa indica che la variabile non verrà modificata, è semplicemente
- un parametro per il programma.
- \item \lstinline-ALLOCATABLE-: Questo parola chiave indica che la memoria per la variabile verrà
- allocata esplicitamente in un secondo momento, è particolarmente utile con l'altra parola chiave
- \item \lstinline-DIMENSION-: questa permette di speicificare che la variabile dichiarate è un array
- e la sua relativa dimensione (Esempio: \lstinline- INTEGER, DIMENSION(5) :: vec-); è possibile specificare
- \lstinline-:- come dimensione, nel qual caso il compilatore assumerà che la dimensione verrà determinata
- in un secondo momento. Un caso tipico è la creazione di un vettore la cui dimensione verrà determinata
- a run-time\footnote{ovvero durante l'esecuzione.}; questo si può realizzare con un codice di questo tipo
- \begin{lstlisting}[frame=tb]
-  PROGRAM allocatore
-   INTEGER , ALLOCATABLE :: i
-   INTEGER :: size
-   ! Leggo da tastiera la dimensione dell'array e lo alloco
-   READ(*,*) size
-   ALLOCATE(i(size))
-  END PROGRAM
- \end{lstlisting}
-
-\end{itemize}
-I tipi principali presenti in Fortran sono
-\begin{itemize}
- \item \textbf{Interi}: Sono denotati dalla parola chiave \lstinline-INTEGER- e sono appunto numeri
- interi. Generalemente occupano $4$ byte.
- \item \textbf{Reali}: Numeri reali, che vengono memorizzati come floating point. La parola chiave
- è \lstinline-REAL- e occupano generalmente $4$ byte. Per i nostri scopi questi sono pochi, e quindi
- useremo in generale il seguente trucchetto:
-  \begin{lstlisting}[frame=tb]
-   INTEGER, PARAMETER :: db = KIND(0.D0)
-   REAL(dp) :: real_var
-  \end{lstlisting}
- che si occuperà di assegnare al tipo \lstinline-REAL- dichiarato la stessa dimensione delle costante di tipo
- \texttt{double} \lstinline-0.D0-.
-\end{itemize}
-
-\subsection{Input e Output}
-Per iniziare ci basterà conoscere le istruzioni di stampa su schermo e lettura da tastiera, che sono rispettivamente
-\begin{itemize}
- \item \lstinline-WRITE(*,*) dato_1, dato_2 , ...- che si occuperà di scrivere sullo schermo (identificato dal primo
- \lstinline-*-) e con una formattazione standard (identificata dal secondo \lstinline-*-) i dati che gli inseriamo dopo;
- \item \lstinline-READ(*,*) var_1, var_2, ...- che si occuperà di leggere da tastiera (il primo \lstinline-*-) i dati
- in un formato standard (il secondo \lstinline-*-);
-\end{itemize}
-In realtà queste istruzioni ci permettono di controllare anche formattazioni e sorgenti e destinazioni di Input e Output.
-Per scrivere (o leggere) su un file è prima necessario \textbf{aprirlo}. Per fare questo bisogna eseguire una
-chiamata alla funzione \lstinline-OPEN()-. Questa si occuperà di aprire un file da noi indicata ed assegnarlo ad
-un numero intero, anche quello indicato da noi. Bisogna fare attenzione in quest'ultimo passaggio a ricordare
-che \lstinline-5- e \lstinline-6- sono già riservati alla tastiera ed allo schermo.
-Potremmo poi fare riferimento (sia in lettura che in scrittura)
-a quel determinato file sostituendo quell'intero a \lstinline-*-. Questo codice probabilmente chiarirà meglio la questione.
-\begin{lstlisting}[frame=tb]
- PROGRAM CopiaIncolla
-  IMPLICIT NONE
-
-  ! Dichiaro delle variabili intere di tipo PARAMETER
-  ! per contenere gli interi con cui poi mi riferiro' ai file.
-  ! Sarebbe infatti complicato dover ricordare tanti numeri
-  ! a memoria e renderebbe il codice meno leggibile
-  INTEGER, PARAMETER :: infile = 11, outfile = 12
-  INTEGER :: j
-  INTEGER :: buf
-
-  ! Cerco di aprire il file in.txt
-  OPEN(FILE='in.txt', UNIT=infile)
-
-  ! E anche il file out.txt
-  OPEN(FILE='out.txt', UNIT=outfile)
-
-  ! Leggo le prime 10 righe da questo file
-  ! e le scrivo su out.txt, raddoppiate (assumendo
-  ! che siano interi)
-  DO j=1,10
-    READ(infile,*)     buf
-    WRITE(outfile,*)   buf * 2
-  END DO
-
-  ! Alla chiusura del programma anche tutti i file vengono chiusi,
-  ! e quindi questo rende le prossime righe superflue. Pero' e' buona
-  ! norma ricordarsi di chiudere i file che si sono aperti, e quindi
-  ! lo facciamo
-  CLOSE(infile)
-  CLOSE(outfile)
-
- END PROGRAM
-\end{lstlisting}
-Abbiamo qui introdotto anche la chiamata \lstinline-CLOSE()- che serve appunto per
-chiudere un file. \`E normalmente buona norma chiudere tutti i file che si aprono e quindi,
-in programma corposi, conviene sempre scrivere la chiamata ad \lstinline-OPEN()- insieme
-alla chiamata \lstinline-CLOSE()- per evitare di dimenticarla.
-
-\section{Subroutine}
-Mano a mano che il programma cresce diventerà necessario razionalizzare la disposizione di
-funzioni e strutturare meglio il listato. In particolare siamo interessati a scrivere delle
-funzioni che si occupino di svolgere un determinato compito in modo che poi possiamo chiamarle
-senza preoccuparci (troppo) di come sono implementate.
-Quelle che in C si chiamavano funzioni in Fortran si chiamano \emph{subroutine}. La sintassi
-per una subroutine assomiglia molto a quella di un programma:
-\begin{lstlisting}[frame=tb,caption=Una subroutine]
- SUBROUTINE nome(...)
-  ! [ Dichiarazioni ]
-  ! [ Corpo della subroutine ]
- END SUBROUTINE
-\end{lstlisting}
-Una particolarità per così dire ``curiosa'' è che le variabili passate alla subroutine dovranno
-essere ridichiarate all'interno della stessa perché essa ci possa accedere. Le variabili inoltre
-vengono sempre passate per riferimento (quello che succede in C passando per riferimento o quello
-che succede in C++ passando una reference) e, per conludere, non c'è un'istruzione di ritorno\footnote{%
-O perlomeno, non ne ho mai incontrate. Notare però che programmo in fortran da pochi giorni e quindi.. potrei
-scoprirle prossimamente :) }.
-Ci saranno quindi variabili di Input e variabili di Output\footnote{in realtà in FORTRAN esistono
-anche delle funzioni, che come in C ritornano dei valori; noi non le scriveremo (e quindi in particolare
-non ne ho mai scritta una) e quindi non sono qui esposte. Nonostante questo verranno utilizzate
-nel corso funzioni interne del fortran come \lstinline-RESHAPE()- o \lstinline-MATMUL()-. }, ma tutte insieme nella chiamata della funzione.
-Per chiarire le idee, e spiegare i passaggi che mancano, proponiamo un esempio di una funzione che prenda un
-numero e lo moltiplichi per due\footnote{che esempio inutile, direte voi\ldots e avete anche ragione ma
-in questo momento non mi viene in mente niente di più costruttivo}
-\begin{lstlisting}[frame=tb,caption=Un semplice programma che fa uso di subroutine]
- ! Questo programma prende in input un numero e lo moltiplica per due;
- ! Di per se' e' piuttosto inutile ma mostra come si utilizza una subroutine
- ! nell'ambito di un programma
-
- PROGRAM sub_doppio
-
-  REAL :: x;
-  ! Leggo dallo standard input x
-  READ(*,*) x;
-
-  ! Lo moltiplico per due facendo uso della subroutine
-  CALL doppio(x);
-
-  ! Lo stampo. Atttenzione! La subroutine ha modificato il vero
-  ! valore di x perche' le ho di fatto passato un puntatore
-  WRITE(*,*) x;
-
-! Terminiamo l'esecuzione del programma principale.
-END PROGRAM sub_doppio
-
-SUBROUTINE doppio(x)
- REAL :: x;
- x = x * 2;
-END SUBROUTINE doppio
-\end{lstlisting}
-Naturalmente si possono fare esempi molto più complessi, e soprattutto più utili. Ad esempio, supponiamo
-di implementare la subroutine \lstinline-dotprod- che avevamo pensato parlando del pagerank per fare il prodotto
-matrice vettore con una matrice sparsa. Non la riportiamo qui perché è già stata scritta (si veda il Listato~\ref{lst:matrixvec})
-ma commentiamo alcuni fatti:
-\begin{itemize}
- \item Le keyword \lstinline-INTENT(IN)- e \lstinline-INTENT(OUT)- servono per l'appunto a specificare se una variabile
- è da considerarsi di input o di output. Questo di fatto non cambia nulla, a parte che il compilatore ci avviserà
- se tentiamo di modificare variabili di input;
- \item La \lstinline-SUBROUTINE- può venir scritta in un file separato e poi linkata insieme al file eseguibile che
- la richiama. Spiegheremo meglio questo concetto con un esempio;
-\end{itemize}
-
-Supponiamo di avere scritto la subroutine in un file di nome \verb-dotprod.f90-, e di aver successivamente
-scritto un listato \verb-matrici.f90- in cui compaia l'istruzione \lstinline-CALL dotprod(...)-. Sarebbe tedioso
-dover copiare il contenuto del file \verb-dotprod.f90- all'interno di \verb-matrici.f90- per poi compilarlo.
-In effetti esiste un metodo più pratico per agire.
-\begin{enumerate}
- \item Compilare i file sorgenti separatamente, senza creare l'eseguibile ma solamente i \emph{file oggetto}
- che contengono la versione compilata del listato, senza che le referenze siano stare risolto. Questo significa
- che all'interno del file oggetto associato a \verb-matrici.f90- ci sarà una chiamata ad una \lstinline-dotprod()-
- senza che abbia la minima idea di dove andare a prenderla; questa operazione si realizza su Linux con \verb-f95- in questo
- modo: \\
- \verb+# f95 -c dotprod.f90 matrici.f90+
-
- \item Il secondo passo consiste nel creare un eseguibile unico con le dipendenze risolte, ovvero in cui ci sia
- la chiamata a \lstinline-dotprod()- ma questa volta sia chiaro dove poterla trovare\footnote{sono conscio che questa
- spiegazione non è molto chiara. Cercherò di migliorarla}; questo compito viene eseguito dal \emph{linker} che, su Linux,
- fa ancora parte di \verb-f95-\footnote{forse si portebbe discutere sulla correttezza di questa affermazione, in ogni caso noi
- daremo il comando f95 per eseguire l'operazione. Quello che poi lui faccia davvero, compreso chiamare altri programmi,
- per il momento non è affar nostro}; il comando è il seguente: \\
- \verb+# f95 -o matrici matrici.o dotprod.o+
-\end{enumerate}
-
diff --git a/AppPageRank.tex b/AppPageRank.tex
deleted file mode 100644
index 846473e..0000000
--- a/AppPageRank.tex
+++ /dev/null
@@ -1,352 +0,0 @@
-\chapter{Page Rank}
-In questo capitolo ci porremo il problema di calcolare il \emph{page rank} di un determinato
-insieme di pagine Web (o, analogamente, documenti \emph{ipertestuali}). \\
-Con Page Rank intendiamo un ``valutazione'' data ad una determinata pagina o documento con lo scopo
-di stimare la sua importanza\footnote{che è ovviamente un concetto poco matematico, ma ci occuperemo
-di formalizzarlo meglio in seguito.}. Un algoritmo derivato da quello che verrà in seguito
-esposto è utilizzato attualmente da Google (\href{http://www.google.it}{http://www.google.it})
-per ordinare i risultati di una query nel suo motore di ricerca, così come da tutti i principali
-\emph{search engine} presenti sul Web.
-
-\section{Presentazione del modello}
-Prima di tutto dobbiamo occuparci di definire il modello matematico che vogliamo usare
-per schematizzare la nostra valutazione di importanza. \\
-In generale l'idea che sta alla base del Page Rank è dare importanza ad una pagina
-basandosi sui link\footnote{Un link in una pagina Web, ma anche in un documento PDF come questo,
-è un ``puntatore'' ad un altro documento. In genere l'utente può attivare il puntatore semplicemente
-cliccandoci sopra con il mouse} che in essa sono presenti.
-
-Alcune idee che potrebbero sembrare valide potrebbero essere valutare l'importanza di una pagina
-in base al numero di link presenti nella pagina, oppure al numero di link che puntano ad essa.
-
-Dopo una breve riflessione ci si rende conto che entrambi i metodi introducono svariate problematiche
-di affidabilità. In generale, infatti, il creatore di una pagina ha il controllo di quanti link
-sono presenti in una pagina, e non fatica molto a creare delle pagine fittizie che puntano a quella
-appena creata. La valutazione sarebbe quindi falsata e molto vulnerabile a frode.
-
-Si può però cercare di affinare l'idea di base in modo da risolvere questi inconvenienti.
-Per convenzione assumiamo di numerare tutte le pagine presenti nel Web con dei numeri naturali
-$1 \ldots N$ (dove $N$ è un numero dell'ordine di $10^{10}$).
-Fissata una certa pagina $j$ consideriamo i link che puntano a lei. Risulta chiaro che non solo
-il \textbf{numero} dei link è importante per valutare la sua importanza, ma a sua volta anche l'\textbf{importanza}
-di questi dovrebbe influire. Per esempio, se la homepage di Yahoo! punta
-alla pagina di una data persona, è naturale che questa pagina acquisisca una certa rilevanza. Viceversa, se sulla
-mia pagina personale metto un link al sito della stessa persona l'importanza di questo varia di poco\footnote{
-a meno che nel momento in cui voi leggiate queste pagine io non sia diventato una persona con una certa influenza,
-ma questo è probabilmente un caso da scartare}.
-Un'ultima e non meno importante considerazione è che se anche Yahoo! punta al mio sito ma lo fa in una pagina
-con un altro centinaio di link è una faccenda molto diversa dall'essere puntati dall'unico link in homepage.
-
-Stiamo quindi arrivando ad un altro modello, in cui le pagine \emph{distribuiscono la loro importanza fra i link al
-loro interno}. Questo modello è molto più ragionevole del precedente, ed è molto meno predisposto a dare
-risultati falsati. Vorremo però averne una descrizione matematica precisa.
-
-\section{Un po' di matematica}
-Consideriamo la matrice quadrata $H = (h_{ij})$, che chiameremo \emph{matrice delle connessioni}, definita
-nel seguente modo
-\[
- h_{ij} = \left\{ \begin{array}{ll}
-                   1 & \text{se esiste un link dalla pagina} \ i \ \text{alla pagina} \ j \\
-		   0 & \text{altrimenti}
-                  \end{array} \right.
-\]
-Questa matrice avrà dimensione $N \times N$ ma sarà sparsa, ovvero la maggior parte dei suoi valori saranno $0$.
-Per fissare le idee consideriamo la Figura~\ref{fig:web}, un modello (molto) semplificato del Web, in cui esistono solamente
-3 pagine.
-\begin{figure}[hb]
-\[
- \xymatrix{
-{\bullet{1}} \ar@/_/[dr] \ar@/^1pc/[drr] & \\
- & {\bullet{2}} \ar@/_/[ul]& {\bullet{3}} \ar@/^/[l]}
-\]
-\caption{Esempio di una rete composta da 3 pagine}
-\label{fig:web}
-\end{figure}
-
-La matrice di connessione $H$ associata a questo grafo è la seguente
-\[
- H = \left[ \begin{array}{ccc}
-             0 & 1 & 1 \\
-	     1 & 0 & 0 \\
-	     0 & 1 & 0
-            \end{array} \right]
-\]
-\begin{os} \label{os:pageranknumcoll}
- \`E facile verificare che valgono le seguenti uguaglianze
- \[
- \left\{ \begin{array}{ll}
-  \sharp \{ \text{collegamenti uscenti da} \ i \} & = \sum_{j=1}^{N} h_{ij} \\
-  \sharp \{ \text{collegamente che arrivano a} \ j \} & = \sum_{i=1}^{N} h_{ij}
-  \end{array} \right.
- \]
-\end{os}
-In particolare sarebbe piuttosto immediato calcolare, partendo dalla matrice $H$, i valori
-del Page Rank con i metodi ipotizzati all'inizio del capitolo (per altro reputati incompleti)
-
-Siamo dunque interessati a calcolare il vettore $W$ dove $w_i$ è l'importanza della pagina $i$,
-in modo che rispetti le linee guide definite precedentemente.
-
-Chiamiamo $d_i$ il numero di link uscenti dalla pagina $i$
-(facilmente calcolabile come visto nell'Osservazione~\ref{os:pageranknumcoll}). Chiameremo inoltre
-$D$ la matrice con i $d_i$ sulla diagonale e nulla per i restanti valori.
-Introdotta questa notazione, secondo il nostro modello ogni componente di $W$ dovrebbe rispettare
-la seguente equazione
-\[
- w_j = \sum_{i=1}^{N} w_i \frac{h_{ij}}{d_i}
-\]
-che rappresenta esattamente l'idea che l'importanza di ogni pagina è la somma delle importanze di quelle
-che la linkano, in cui ogni addendo è normalizzato sul numero di link uscenti\footnote{probabilmente l'equazione
-è molto più chiara di questa frase, ma non commentare mi sarebbe sembrato inopportuno}.
-\`E quindi chiaro come il nostro problema si sia trasformato in un problema di autovalori ed autovettori. In
-particolare, se poniamo $M = D^{-1}H$ la nostra richiesta si può scrivere nella forma più compatta
-$\trasp{W} = \trasp{W}M$, ovvero $\trasp{W}$ è un autovettore sinistro di $M$. Sorgono spontanee alcune
-domande a cui dobbiamo rispondere prima di procedere oltre.
-\begin{enumerate}[(a)]
- \item \label{en:pagerank:a} Cosa succede se per qualche $i$ si ha $d_i = 0$? Stiamo tacitamente assumendo che $D$ sia invertibile
- ma questo non è garantito a priori;
- \item \label{en:pagerank:b} L'autovalore $1$ fa parte dello spettro delle matrice $M$? Se questo non fosse vero la nostra
- richiesta non ammette soluzione, e quindi possiamo rinunciare in partenza alla nostra idea;
- \item \label{en:pagerank:c} Se l'autovettore $W$ esiste, è unico\footnote{In realtà ci stiamo chiedendo se il suo
-autospazio ha dimensione $1$. Siamo ben consci che se ne troviamo uno ogni suo multiplo scalare continuerà
-ad essere un autovettore. Per altro, moltiplicare le valutazioni omogeneamente per lo stesso cofficiente non
-sarebbe in nessun modo un problema}?. Se così non fosse
- sorgerebbero dei seri problemi su come interpretare i risultati ottenuti;
- \item \label{en:pagerank:d} Possiamo scegliere l'autovettore $W$ in modo che $w_i \geq 0$ per ogni $i$? Questo non è necessario,
- a priori, ma sembrerebbe coerente fare in modo che delle votazioni siano numeri positivi;
-\end{enumerate}
-
-Cominciamo col rispondere alla domanda~(\ref{en:pagerank:a}). Ovviamente potrebbe benissimo succedere
-che per qualche $i$ $d_i = 0$. Questi ``nodi'' vengono chiamati \emph{dangling node}, ovvero ``nodi penzolanti'',
-che non portano a niente. Per risolvere questo problema si sostituisce la matrice $H$ con una matrice $\hat H$
-tale che se $h_{ij} = 0 \: \forall j$ allora $\hat h_{ij} = 1 \: \forall j$, e in caso contrario $\hat h_{ij} = h_{ij}$.
-Questa matrice risolve evidentemente il problema e cambia di poco il modello. Supporre che una determinata pagina
-non distribuisca la sua importanza a nessuno o la distribuisca in maniera analoga a tutti non è un gran cambiamento.
-
-La domanda~(\ref{en:pagerank:b}) ha invece una risposta immediata. Sì, l'autovalore $1$ fa parte dello spettro
-ed un autovettore (destro) a lui associato è quello composto di tutti $1$. La verifica è un banale conto.
-
-Per rispondere alle domande~(\ref{en:pagerank:c}) e (\ref{en:pagerank:d}) ci appoggiamo ad un risultato
-che non dimostreremo (in questa sede) ottenuto da Perron-Frobenius sulla Teoria delle Matrici non negative.
-\begin{te}[di Perron-Frobenius] \label{te:PerronFrobenius}
- Se $A$ è irriducibile allora $\rs{A} > 0$ è un autovalore semplice ed
- esistono $x,y$ autovettori destro e sinistro
- con componenti strettamente positive.
-\end{te}
-\begin{os}
- Sembrerebbe, a priori, che non siamo in grado di determinare il raggio spettrale di $A$. Consideriamo però
- che $1$ è nello spettro e che $||A||_{\infty} = 1$ e ogni norma indotta supera il raggio spettrale. Si può
- quindi concludere che $\rs{A} = 1$ e applicare il Teorema~\ref{te:PerronFrobenius}.
-\end{os}
-Sfortunatamente si può osservare che, pur con tutte queste buone proprietà, in generale i metodi applicati
-per trovare l'autovettore (il metodo delle potenze) potrebbe non essere convergente, perché gli autovalori
-diversi da $1$ potrebbero ancora avere modulo $1$\footnote{Come visto nella teoria, la velocità di convergenza
-del metodo di iterazione è data dal rapporto fra il più grande autovalore diverso da quello di cui si sta cercando
-l'autovettore e l'autovalore in questione. In questo caso il rapporto potrebbe essere $1$, che darebbe una situazione
-di non convergenza}.
-Introduciamo una definizione che ci permetterà di formalizzare meglio il problema.
-\begin{de}
-  Una matrice $A$ si dice \emph{ciclica} se esiste un sottoinsieme dei suoi autovalori $J \subseteq \spe{A}$
-  tale che $\forall \lambda,\mu \in J$ si ha che $|\lambda|=|\mu|$.
-\end{de}
-Per superare questa difficoltà si può, ancora una volta, modificare il modello. Fissiamo $\gamma > 0$ e consideriamo
-che il visitatore
-possa in ogni momento, con probabilità $1-\gamma$, decidere di aprire una pagina a caso. Potremmo rappresentare
-questa nuova situazione sostituendo $M$ con la matrice
-\[
- A = \gamma M + (1-\gamma) \left[ \begin{array}{c}
-                                   1 \\
-				   \vdots \\
-				   1
-                                  \end{array} \right] \left[ 1 \: \hdots \:  1 \right]
-\]
-ovvero con una combinazione convessa della matrice $M$ con la matrice di soli $1$. Il valore di $\gamma$ si può
-scegliere a piacimento; Google usa un valore $\gamma = 0.85$. In questo caso la matrice $A$ non ha elementi nulli
-e quindi è irriducibile e non è ciclica\footnote{La condizione di ciclicità è quella che crea problemi
-con gli autovalori di modulo uguale al raggio spettrale}. Possiamo infine utilizzare un'altra versione del Teorema~\ref{te:PerronFrobenius}
-che dice
-\begin{te}
- Sia $A$ una matrice con elementi strettamente positivi. Allora per ogni suo autovalore $\lambda \neq \rs{A}$ si ha
- che vale la diseguaglianza $|\lambda| < |\rs{A}|$.
-\end{te}
-Quest'ultimo ci assicura la convergenza del nostro metodo.
-
-\subsection{Implementazione del metodo delle potenze}
-Presenteremo in questa sezione una versione del metodo delle potenze adattata alle nostre esigenze.
-Consideriamo la matrice $A$ di cui vogliamo trovare l'autovettore sinistro relativo all'autovalore $1$.
-Sappiamo che esiste la forma di Jordan di $A$ ed in particolare una matrice $S$ tale che
-\[
- S^{-1} A S = J \qquad J = \left[ \begin{array}{c|cc}
-                                   1 & \multicolumn{2}{|c}{\herm{0}} \\ \hline
-               \multirow{2}{*}{$0$} & \sblocke{\hat J}{2} \\
-                                   & &
-                                  \end{array} \right]
-\]
-Osserviamo ora che $e_1$ è autovettore destro di $J$ ed anche autovettore sinistro. Entrambi sono relativi
-all'autovalore $1$. Sappiamo quindi che $e = Se_1$ è autovalore destro di $A$ e quindi è il vettore
-con tutte le componenti uguali ad $1$, mentre $\trasp{w} = \trasp{e_1}S^{-1}$ è autovettore sinistro di $A$,
-ovvero il vettore che stiamo cercando.
-In particolare quanto visto nella precedente sezione ci assicura che $\rs{\hat J} < 1$ e quindi possiamo osservare
-che
-\[
- \lim_{k\to\infty} J^{k} = e_1\trasp{e_1} \quad \text{e quindi} \quad \lim_{k\to\infty} A^{k} =
- \lim_{k\to\infty} SJ^kS^{-1} = Se_1 \trasp{e_1}S^{-1} = e\trasp{w}
-\]
-Questo (apparentemente) risolve il nostro problema in quanto $e\trasp{w}$ non è altro che la matrice le cui
-righe coincidono con il vettore $\trasp{w}$ che è precisamente quanto stiamo cercando. \\
-La complessità di questo calcolo non è però trascurabile, in quanto la moltiplicazione di una matrice
-costa in generale $O(n^3)$, decisamente troppo se $n \approx 10^{10}$ come nel nostro caso.
-\begin{os}
- Consideriamo dunque un vettore $x_0$ tale che $\trasp{e}x_0 = 1 = ||x_0||_{1}$, e definiamo la successione per ricorrenza
- \[
-  \left\{ \begin{array}{ll}
-           \trasp{x_0} & = \trasp{x_0} \\
-           \trasp{x_{k+1}} & = \trasp{x_{k}} A
-          \end{array} \right.
- \]
-Possiamo notare che in generale $x_k = x_0 A^{k}$ e quindi data la nostra scelta oculata di $x_0$ abbiamo
-che
-\[
- \lim_{k\to\infty} \trasp{x_k} = \lim_{k\to\infty} \trasp{x_0} A^{k} = x_0 e \trasp{w} = \trasp{w}
-\]
-In questo modo siamo scesi da una complessità $O(n^3)$ ad una $O(n^2)$.
-\end{os}
-Sfortunatamente $O(n^2)$ nel nostro caso continua ad essere un numero troppo grande; arrivati a questo
-punto ci accorgiamo che possiamo sfruttare la particolarità di $A$, che non è assolutamente
-una matrice qualsiasi! Sappiamo infatti che è composta quasi esclusivamente di zeri, e quindi una
-memorizzazione efficiente ci permetterebbe anche un'implementazione efficiente dei procedimenti
-di moltiplicazione.
-%% TODO: QUalcosa di più sull'implementazione del metodo
-
-\subsection{Note tecniche}
-Analizzato il problema matematicamente, sorge il bisogno di analizzare le difficoltà di implementazione dovute
-all'hardware attualmente disponibile. Una matrice delle dimensioni di $A$ non è realmente memorizzabile
-elemento per elemento su nessun calcolatore, e non è pensabile nemmeno in alcun tipo di cluster. \\
-Un rapido conto mostra come, anche ipotizzando di usare dei tipi \verb-float- a 4 byte (in ogni
-caso presumibilmente troppo imprecisi) otteniamo uno spazio necessario di $N^2 \cdot 4$ byte, ovvero
-circa $10^{20}$ byte = $10^{11}$ GB di RAM, probabilmente un quantitativo superiore a quella di tutti i computer
-del mondo messi assieme\footnote{può darsi che nei prossimi anni quest'affermazione smetta di essere vera, ma
-non penso sia rilevante ai fini del problema}.
-Dobbiamo quindi adottare degli stratagemmi per gestire la memoria in modo efficiente.
-
-Una prima osservazione è che la nostra matrice $A$ si può scrivere nel seguente modo
-\[
-A = \gamma D^{-1} \hat H + (1-\gamma) e\trasp{v}
-\]
-dove $\gamma$ e $w$ sono rispettivamente il parametro ed il vettore di personalizzazione. Per memorizzare
-$A$ possiamo quindi memorizzare $D$ ed $\hat H$, $\gamma$ e $w$. \\
-Questo ci dà dei vantaggi perché la matrice $\hat H$ è ``quasi nulla'' nel senso che è fatta solamente di $0$ ed $1$,
-ma la percentuale di $0$ è molto alta\footnote{è infatti presumibile che il numero di link uscenti da una pagina
-sia trascurabile rispetto al numero di pagine esistenti}. Possiamo quindi limitarci a memorizzare i seguenti dati: \\[5pt]
-\begin{tabular}{|lll|} \hline
- \textbf{Variabile} & \textbf{Descrizione} & \textbf{Spazio occupato} \\ \hline \hline
- $N$ & l'ordine della matrice $A$, ovvero il numero di pagine esistenti & 4 byte \\
- $m$ & il numero di campi di $\hat H$ diversi da $0$ & \textasciitilde $N$ byte \\
- $i, j$ & vettori delle coordinate dei campi diversi da $0$ di $\hat H$ & \textasciitilde $N$ byte \\
- $\gamma$ & coefficiente di personalizzazione & 4 byte \\
- $w$ & Vettore di personalizzazione & \textasciitilde $N$ byte \\
- $d$ & il vettore con gli elementi diagonali di $D$ & \textasciitilde $N$ byte \\
-\hline \end{tabular} \\
-
-Possiamo ora porci il problema di calcolare $d$. Questo è reso apparentemente più complicato dal modo in cui abbiamo salvato
-la matrice. In realtà possiamo usare un algoritmo di questo tipo
-
-\begin{lstlisting}[frame=tb,caption=Calcolo di $d$,label=lst:calcolovettorepers]{}
- ! Inizializziamo il vettore d a 0
- d = 0;
- ! Questo ciclo calcola i link uscenti da i per ogni i
- DO k=1,m
-   d(i(k)) = d(i(k)) + 1
- END DO
-\end{lstlisting}
-
-\begin{os}
- L'aver scelto questo tipo di memorizzazione per la matrice non solo non complica i generali procedimenti
- di moltiplicazione, ma riduce addirittura la complessità di questi perché iteriamo sugli elementi diversi da
- $0$ invece che su tutti.
-\end{os}
-
-
-\section{Una prima implementazione}
-In questa sezione ci occuperemo di presentare una prima implementazione della soluzione al problema.
-Non ci preoccuperemo troppo di ottimizzare il codice, compito che affronteremo in seguito.
-Esporremo inizialmente la struttura generale del programma e poi costruiremo tutte le subroutine necessarie.
-
-\subsection{La struttura}
-Il programma dovrà comporsi delle seguenti parti
-\begin{description}
- \item[Lettura della matrice] Supporremo di avere un file da cui leggere i dati della matrice. Dobbiamo
- definire la sintassi del file e scrivere un subroutine per caricarlo in memoria;
- \item[Calcolo del vettore d] Data la matrice di connessione $H$ vorremo calcolare la somma di ogni
- riga che ci servirà in seguito per rinormalizzare il vettore di iterazione;
- \item[Iterazione] Generiamo un vettore $x$ casuale e lo riscaliamo in modo che $\trasp{e} x = 1$. Fatto
- questo cominciamo a calcolare l'iterazione, fino a che l'errore non è piccolo o ragguingiamo il massimo
- numero di iterazioni impostato;
- \item[Salvataggio] Salviamo su un file il vettore calcolato;
-\end{description}
-
-Per questo avremo bisogno anche di alcune subroutine, ad esempio quella che ci calcoli il prodotto matrice
-vettore data la matrice sparsa come l'abbiamo intesa noi.
-
-\subsection{Prodotto di matrice sparsa per un vettore}
-Esponiamo qui un'idea di codice per calcolare questo prodotto matrice vettore. Ricordiamo che per noi una
-matrice sparsa è composta di due scalari \lstinline-n-,\lstinline-m- (rispettivamente dimensione e numero di elementi diversi da $0$)
-e due vettori \lstinline-i-, \lstinline-j- di dimensione $m$ che sono le coordinate dei punti che valgono $1$.\\
-Il codice è il seguente
-\begin{lstlisting}[frame=tb,caption=Calcolo del prodotto matrice vettore,label=lst:matrixvec]
- SUBROUTINE dotprod(n,m,i,j,d,x,v,y)
-  IMPLICIT NONE
-  ! Il parametro dp dei tipi a doppia precisione
-  INTEGER, PARAMETER :: dp = KIND(0.D0)
-
-  ! Dichiarazione degli argomenti della funzione
-  INTEGER, INTENT(IN) :: n,m
-  INTEGER, DIMENSION(m), INTENT(IN) :: i,j
-  INTEGER, DIMENSION(n), INTENT(IN) :: d
-  REAL(dp), DIMENSION(n), INTENT(IN) :: x, v
-
-  ! Dato di output
-  REAL(dp), DIMENSION(n) :: y
-
-  ! Alcune variabili di comodo
-  REAL(dp), DIMENSION(n) :: xx
-  REAL(dp) :: s, gamma = 0.85
-  INTEGER :: k
-
-  ! Calcoliamo x trasposto per la matrice D con i d(i) sulla
-  ! diagonale,  e salviamolo in xx, in modo da non modificare x
-  ! Ricordiamo che i dati in fortrano vengono sempre passati per
-  ! riferimento! Se modificassimo x qui dentro risulterebbe cambiato
-  ! anche all'esterno.
-  DO k=1,m
-   IF(d(k)/=0) THEN
-     xx(i(k)) = x(i(k))/d(k)
-   ELSE
-     xx(i(k)) = x(i(k))/n
-   END IF
-  END DO
-
-  ! Ora eseguiamo la moltiplicazione di xx per la parte non dangling
-  ! della matrice H cappuccio e salviamo il risultato in y
-  y = 0.D0
-  DO k=1,m
-    y(j(k)) = y(j(k)) + xx(i(k))
-  END DO
-
-  ! Ora calcoliamo le righe dangling dalle quali prima non siamo "passati"
-  ! perche' i(k) scorre solo sulle righe dove ci sono elementi non nulli
-  DO k=1,n
-    IF(d(k) == 0)
-      s = s + xx(k)
-    END IF
-  END DO
-
-  ! Sommiamo i due contributi
-  y = y + s
-
-  ! Calcolo la personalizzazione
-  y = y * gamma + (1-gamma)/n
-
- END SUBROUTINE dotprod
-\end{lstlisting}
-
-%TODO: Presentare un'implementazione completa del programma
\ No newline at end of file
diff --git a/AppVibrazioni.tex b/AppVibrazioni.tex
deleted file mode 100644
index c35f1dc..0000000
--- a/AppVibrazioni.tex
+++ /dev/null
@@ -1,361 +0,0 @@
-\chapter{Studio delle Vibrazioni}
-
-In questo capitolo ci occuperemo di capire come si comporta un sistema elastico, ovvero
-un sistema di masse collegate da mollle. In questo modo potremo modellizzare, ad esempio,
-strumenti musicali (come le corde di una chitarra o un tamburo) o un generale sistema
-dinamico costituito da masse e molle.  %TODO: Inserire qualche altro esempio pratico
-
-\section{Sistemi discreti}
-\subsection{L'oscillatore armonico}
-Il nostro scopo sarà, principalmente, risolvere sistemi complicati la cui soluzione esatta non
-si riesce a calcolare (o non si riesce a farlo agevolmente) direttamente con un foglio ed una penna,
-ma per capire di cosa ci occuperemo
-è utile cominciare con un esempio noto. \\
-\begin{wrapfigure}{l}{70mm}
-\begin{tikzpicture}[scale=0.8]
- % Il terreno
- \draw[->] (0,0) -- (7,0) node[anchor=south west] {$x$};
-
- % La parete
- \draw (1,0) -- (1,2.8);
- \foreach \i in {0,...,12}
-   \draw (1,0.2 * \i) -- (0.8, 0.2*\i + 0.2);
-
- % La molla
- \begin{scope}[thick]
-  \foreach \i in {1,1.5,...,3.5}
-    \draw (\i,0.5) -- (\i+0.25,1);
-  \foreach \i in {1,1.5,...,3.5}
-    \draw (\i+0.25,1) -- (\i+0.5,0.5);
-
- % E la massa
- \draw (4,0) rectangle (5.5,1.5);
- \fill[gray!28] (4,0) rectangle (5.5,1.5);
-\end{scope}
-
-\end{tikzpicture} \caption{L'oscillatore armonico} \label{fig:vib:oscarm}\end{wrapfigure}
-Consideriamo il sistema costituito da una massa $m$ attaccata tramite una molla di costante
-elastica $K$ e lunghezza a riposo nulla ad una parete (tralasciando la gravità), ovvero il sistema
-in Figura~\ref{fig:vib:oscarm}.\\
-Questo è un problema di cui conosciamo la soluzione esatta anche se introduciamo una dissipazione proporzionale
-alla velocità $-\gamma v$. Abbiamo infatti che la forza applicata sul blocchetto è
-\[
- F = -Kx - \gamma \dot{x}
-\]
-da cui , ricorando l'uguaglianza $F = ma = m\ddot{x}$ si ottiene l'equazione differenziale
-\begin{equation}
- m \ddot{x} = -K x -\gamma \dot{x}
-\end{equation}
-Se aggiungiamo le condizioni iniziali $x(0) = x_0$ e $\dot{x}(0) = v_0$ la soluzione è anche unica.
-Se consideriamo infatti una soluzione del tipo $x(t) = e^{\lambda t}$ abbiamo che
-\[
- \dot{x}(t) = \lambda e^{\lambda t} \qquad \ddot{x}(t) = \lambda^2e^{\lambda t}
-\]
-e quindi $x$ è soluzione se e solo se
-\[
- m \lambda^2 e^{\lambda t} = -K e^{\lambda t} - \gamma \lambda e^{\lambda t}
-\]
-e considerando che l'esponenziale non è mai nullo questo si verifica solo se
-\[
- m \lambda^2 + \gamma \lambda + K = 0
-\]
-Escludendo il caso in cui il determinante è $0$ abbiamo due scelte per $\lambda$, che possono
-essere reali o complesse. Nel caso reale i due esponenti ci danno una base dello spazio delle soluzioni.
-Nel caso complesso possiamo osservare che, essendo le soluzioni coniugate, abbiamo che
-\[
- \lambda = \alpha + \beta i \qquad \con{\lambda} = \alpha - \beta i
-\]
-e quindi
-\[
- e^{\lambda t} = e^{\alpha}( \cos{\beta t} + i \sin{\beta t}) \qquad e^{\con{\lambda} t} =
- e^{\alpha}(\cos{\beta t} - i \sin{\beta t})
-\]
-dalle quali si ottiene che $e^{\alpha t}\cos{\beta t}$ e $e^{\alpha t}\sin{\beta t}$ sono ancora
-una base per lo spazio delle soluzioni. \\
-Nel caso con determinante nullo si può mostrare che prendendo $e^{\lambda t}$ e $te^{\lambda t}$ queste
-sono ancora una base. In ogni caso, siamo in grado di risolvere esattamente il nostro problema imponendo
-le condizioni iniziali.
-
-Ci piacerebbe ora generalizzare questo procedimento in situazioni più generali e più complicate. In particolare,
-vorremmo costruire un modello matematico di qualche situazione di reale interesse, come la seguente
-
-\subsection{La corda di una chitarra}
-Possiamo modellizzare la corda di una chitarra come in Figura~\ref{fig:vib:cordachitarra}, ovvero come $N$
-masse collegate fra loro da $N-1$ molle e fissate, sempre tramite molle, a dei supporti laterali.
-\begin{figure}[ht!]
- \begin{center}
-  \begin{tikzpicture}
-   % Supporto sx
-   \draw (0,0) rectangle (1,2);
-   \fill[gray!30] (0,0) rectangle (1,2);
-
-   %% Serie di molle
-   \draw[snake=snake] (1,1) -- (2,0.5);
-   \draw (2.2,0.5) circle (0.2) node {$1$};
-   \draw[snake=snake] (2.4,0.5) -- (3.2,1.1);
-   \draw (3.4,1.1) circle (0.2) node {$2$};
-   \draw[snake=snake] (3.6,1.1) -- (4.2,0.5);
-   \draw (4.4,0.5) circle (0.2);
-   \draw[snake=snake] (4.6,0.5) -- (5.8,1.5);
-   \draw (6.0,1.5) circle (0.2);
-   \draw[snake=snake] (6.2,1.5) -- (7.4,0.6);
-   \draw (7.6,0.6) circle (0.2) node {$N$};
-   \draw[snake=snake] (7.8,0.6) --(9,1);
-
-   %% Bloccketto finale
-   \draw (9,0) rectangle (10,2);
-   \fill[gray!30] (9,0) rectangle (10,2);
-  \end{tikzpicture}
-  \caption{Modello di una corda di chitarra}
-  \label{fig:vib:cordachitarra}
- \end{center}
-\end{figure}
-Questo modello non è più rappresentato da una equazione differenziale, ma da un sistema di equazioni.
-In tutta generalità possiamo assumere che le particelle $p_i$ abbiano massa $m_i$ e che la molla che collega
-$p_{i-1}$ con $p_{i}$ abbia costante elastica $k_i$. Indichiamo inoltre con $\gamma_i$ la costante di attrito
-della $i$-esima particella. Possiamo scrivere l'equazione del moto di questa proiettandola sugli assi:
-\begin{equation}
- \left\{ \begin{array}{ll}
- \ddot{x_i} m_i &= -k_i (x_i - x_{i-1}) - k_{i+1}(x_i - x_{i+1}) - \gamma_i \dot{x_i} \\
- \ddot{y_i} m_i &= -k_i (y_i - y_{i-1}) - k_{i+1}(y_i - y_{i+1}) - \gamma_i \dot{y_i}
- \end{array} \right.
-\end{equation}
-Queste possono essere risolte indipendemente per determinare il movimento orizzontale e verticale delle
-particelle. Per affrontare la risoluzione è conveniente scrivere l'equazione in forma matriciale.
-
-Sia $y = \trasp{(y_1, \ldots, y_n)}$, $M$ la matrice diagonale tale che $m_{ii} = m_i$ e $R$ la
-matrice diagonale tale che $r_{ii} = \gamma_i$. Costruiamo infine la matrice $K$ costruita in questo
-modo
-\[
- K = \left[ \begin{array}{cccccc}
-         \ddots & \ddots & & & & \\
-          \ddots & \ddots & \ddots & & & \\
-          & -k_i & k_i+k_{i+1} & k_{i+1} & \\
-          & & \ddots & \ddots & \ddots & \\
-        \end{array} \right]
-\]
-ovvero in modo che le equazioni di prima si possano scrivere nel seguente modo
-\begin{equation}
- My'' + Ry' + Ky = 0
-\end{equation}
-Usiamo ora un piccolo trucco per riportare questa equazione differenziale del secondo ordine ad una
-del primo. Definiamo $w = (y,y')$ il vettore ottenuto giustapponendo il vettore $y$ e la sua derivata.
-Riscrivendo il sistema\footnote{Stiamo tacitamente assumendo che $M$ sia invertibile ma questo è piuttosto
-ragionevole in quanto il determinante di questa è il prodotto delle masse e quindi è $0$ solo se almeno una
-delle masse è $0$, situazione che non siamo interessati a rappresentare con il nostro modello} si ottiene
-\begin{equation}
- w' = \left[ \begin{array}{cc|cc}
-         \sblocko{0}{2} & \sblocke{I}{2} \\
-          & & & \\ \hline
-         \sblocko{M^{-1}K}{2} & \sblocke{M^{-1}R}{2} \\
-          & & & \\
-        \end{array} \right] w = Aw
-\end{equation}
-Supponiamo ora per semplicità che $A$ sia diagonalizzabile, ovvero $A = SDS^{-1}$. Si ha in questo caso
-che $w = SDS^{-1}w$ e quindi $S^{-1}w = DS^{-1}w$ dove $D$ è diagonale. Ponendo $z = S^{-1}w$ si ottiene
-$z_i = z_i d_{ii}$ e quindi ci si può ricondurre al caso precedente con la soluzione per componenti
-$z_i(t) = e^{d_{ii} t}$.
-\begin{os}
- Osserviamo che, in realtà, conosciamo la soluzione di questa equazione differenziale, e la conosciamo
- esplicitamente in ogni caso. Infatti è una verifica piuttosto immediata (e, più probabilmente, un fatto noto)
- che $\frac{d}{dt} \Exp{tA}w_0 = A\Exp(tA)w_0$ e quindi è soluzione del nostro problema di Cauchy. Sorge spontanea
-la domanda: ``Perché abbiamo sviluppato tutto il ragionamento precedente?''. La riposta è che valutare questa
-soluzione per un certo $t$ ha un costo computazionale molto alto. \`E quindi inaccettabile il costo che si ottiene
-per la valutazione in tutti i punti che interessano a noi per ottenere un suono bem campionato (circa 44100 al secondo).
-\end{os}
-
-\section{Sistemi continui} \label{sec:vibsistcont}
-\subsection{Generalizzazione del caso delle $N$ masse}
-Supponiamo di avere una corda tesa fra due supporti fissi, che viene, in un'istante $t = 0$ messa in
-una certa posizione con una data velocità iniziale. Siamo interessati a studiare il successivo moto
-della corda e le sue vibrazioni, come abbiamo fatto nel caso di $N$ particelle discrete. \\
-Consideriamo la seguente formalizzazione matematica di questo problema. Possiamo descrivere il moto della
-corda parametrizzando i suoi punti tramite la coordinata orizzontale $x$ e introducendo una funzione
-$u(x,t)$ che definisce la posizone del punto individuato dalla coordinata $x$ al tempo $t$, come si vede nella
-Figura~\ref{fig:corda}. \\
-\begin{wrapfigure}{l}{70mm}
- \begin{tikzpicture}
-  % Blocchetto 1
-  \draw (0,0) rectangle (1,2);
-  \fill[gray!30] (0,0) rectangle (1,2);
-
-  % Corda
-  \draw[very thick] (1,1) .. controls (2.5,2) and (3.5,2) .. (5,1);
-
-  % Secondo blocchetto
-  \fill[gray!30] (5,0) rectangle (6,2);
-  \draw (5,0) rectangle (6,2);
-
-  % E qualche chiarimento :)
-  \draw[->] (-0.5,-0.5) -- (6.5,-0.5) node[anchor=south] {$x$};
-  \draw (1,-0.4) -- (1,-0.6) node[anchor=north] {$0$};
-  \draw (5,-0.4) -- (5,-0.6) node[anchor=north] {$l$};
-
-  \draw[dashed] (3,-0.5) -- (3,1.75) node[anchor=south] {$u(x,t)$};
- \end{tikzpicture}
- \caption{Rappresentazione della corda}
- \label{fig:corda}
-\end{wrapfigure}
-Un'analisi fisica del fenomeno\footnote{che non è nostro interesse mostrare ora} porta alla seguente
-equazione differenziale:
-\[
- \frac{\partial^2 u}{\partial t^2} - \sigma \frac{\partial^2 u}{\partial x^2} = 0
-\]
-dove $\sigma > 0$ è una costante determinata dalla gravità, dalla tensione e dalla densità
-della corda. Prima di risolverla imponiamo le condizioni al contorno
-\[
- u(0,t) = u(l,t)
-\]
-che ci permettono di controllare che gli estremi della corda siano sempre fissati ai supporti, e
-le condizioni iniziali
-\[
- u_0(x) = u(x,0)
-\]
-che dà la posizione iniziale e
-\[
- v_0(x) = \frac{\partial u}{\partial t}(x,0)
-\]
-che esprime la velocità iniziale di ogni particella. Questa formalizzazione si può facilmente estendere
-supponendo di avere una membrana introducendo $u(x,y,t)$.
-
-Per ora siamo particolarmente interessati a studiare se esistono delle soluzioni in cui tutti i punti
-si muovano con la stessa frequenza $\omega$, anche se eventulamente con diversa ampiezza. Si tratta
-di trovare una soluzione della forma
-\[
- u(x,t) = v(x) \cdot \cos{(\omega t)}
-\]
-Osserviamo che data una $u$ di quest forma le derivate parziali diventano
-\[
- \frac{\partial^2 u}{\partial t^2} = -v(x) \omega^2 \cos(wt) \qquad \frac{\partial^2 u}{\partial x^2} = v''(x) \cos(wt)
-\]
-e quindi l'equazione differenziale risulta essere
-\[
-  \cos(wt) \left[ -\omega^2 v(x) - \sigma v''(x) \right] = 0
-\]
-che può essere identicamente nulla solo se
-\[
- \omega^2 v(x) + \sigma v''(x) \equiv 0 \iff v''(x) = -\frac{\omega^2 v(x)}{\sigma}
-\]
-
-\subsection{Discretizzazione del modello}
-
-Per risolvere effettivamente il problema supponiamo di suddividere l'intervallo $[0,l]$ in $n+1$
-punti equidistanti $x_0, \ldots, x_{n+1}$ tali che $x_0 = 0$ e $x_{n+1} = l$. Si avrà dunque
-che $x_i - x_{i-1} = h = \frac{l}{n+1}$. \\
-Per comodità poniamo $v(x_i) = v_i$ la posizione dell'$i$-esimo
-punto.
-Assumiamo ora che la soluzione dell'equazione differenziale sia di classe $C^4$ su $[0,l]$, e facciamo
-lo sviluppo in serie centrato in un generico punto $x_i$.
-\[
- v(x_i + h) = v_{i+1} =  v_i + hv'(x_i) + \frac{h^2 v''(x_i)}{2} + \frac{h^3 v^{(3)}(x_i)}{6} + \frac{h^4 v^{(4)}(\xi_i)}{24}
-\]
-dove $\xi_i \in (x_i , x_{i+1})$.
-Analogamente si ottiene
-\[
- v(x_i - h) = v_{i-1} = v_i - hv'(x_i) + \frac{h^2 v''(x_i)}{2} - \frac{h^3 v^{(3)}(x_i)}{6} + \frac{h^4 v^{(4)}(\eta_i)}{24}
-\]
-dove $\eta_i \in (x_{i-1}, x_i)$. Sommando queste due si ha
-\[
- v_{i+1} + v_{i-1} = 2v_i + h^2 v''(x_i) + \frac{h^4}{24}[v^{(4)}(\xi_i) + v^{(4)}(\eta_i)]
-\]
-e possiamo ancora una volta ottenere un'espressione ``quasi'' esplicita della $v''(x_i)$:
-\[
- v''(x_i) = \frac{1}{h^2} ( v_{i+1} + v_{i-1} - 2v_i ) - \frac{h^2}{24}[v^{(4)}(\xi_i) + v^{(4)}(\eta_i)]
-\]
-Nel nostro modello $h$ è destinato ad essere piccolo, perché $h = \frac{1}{n+1}$ e intuitivamente $n$ deve essere un
-numero grande se vogliamo approssimare bene il problema continuo. Abbiamo quindi che $h^2 \to 0$ quando $n \to \infty$
-e vorremmo poter dire che possiamo trascurare il termine con le derivate quarte.
-Se così fosse avremmo infatti ricondotto il nostro problema ad un problema di autovalori.
-
-Possiamo riscrivere infatti le relazione in questo modo
-\[
- Av - \frac{h^2}{24} \tau = \lambda v
-\]
-dove $v = \trasp{( v_1 \ldots v_n )}$ e
-\[
- A = \left[ \begin{array}{cccccc}
-             -2 & 1 &  & & & \\
-              1 & -2 & 1 & & & \\
-              & \ddots & \ddots & \ddots & & \\
-              & & 1 & -2 & 1&   \\
-              & & & 1 & -2 \\
-            \end{array} \right]
-\]
-e dove $\tau$ è un opportuno vettore che contiene i termini del tipo $\tau_i = v^{(4)}(\xi_i) + v^{(4)}(\eta_i)$.
-Osserviamo che possiamo dare una maggiorazione alla norma di $\tau$ perché essendo la derivata quarta di $v$ continua
-su un compatto è limitata, e quindi $\forall i \: |\tau_i | \leq M$ per un opportuno $M$.
-
-Ricordiamo il Teorema~\ref{te:BauerFike}; questo dice che presa una norma assoluta ed $A$ diagonalizzabile ed $F$
-una matrice di perturbazione per ogni autovalore $\lambda$ di $A + F$ esiste un autovalore $\mu$ di $A$
-tale che $||\lambda - \mu|| \leq \cond{T}||F||$ dove $T$ è il cambio di base che diagonalizza $A$.
-Se poniamo $F = -\frac{h^2}{24}\tau \trasp v$ dove $v$ è un autovettore di $v$ è tale che
-$Av - \frac{h^2}{24}\tau = \lambda v$ allora si ha
-\[
- (A - \frac{h^2}{24} \tau \trasp v) v = \lambda v
-\]
-e quindi esiste $\mu$ autovalore di $A$ tale che\footnote{Osserviamo che, essendo $A$ reale simmetrica
-il cambio di base che la diagonalizza è ortogonale e quindi ha condizionamento $1$.} $||\lambda - \mu|| \leq ||F||
-= \frac{h^2}{24} \cdot \frac{||\tau\trasp v||}{\trasp vv} \leq \frac{h^2}{24\trasp vv} \sqrt{\rs{\trasp \tau v\trasp v\tau}}
-= ||\tau|| \frac{h^2}{24 \trasp vv}$; questo si ottiene osservando che la norma di una matrice diade $v\trasp v$
-è data dalla norma du $v$.
-
-Vogliamo ora mostrare che $\frac{||\tau||}{||v||}$ è limitato superiormente da una costante, in modo
-da provare la convergenza della nostra approssimazione.
-
-Consideriamo la seguente serie di eguaglianze
-\[
- \sqrt{h} || \tau ||_2 = ( \sum_{i=1}^{n} v^{(4)}(\xi_i)^2 + v{(4)}(\eta_i)^2)^{\frac 1 2} \sqrt{h}
- = ( \sum_{i=1}^{n} h v^{(4)}(\xi_i)^2 + h v{(4)}(\eta_i)^2)^{\frac 1 2}
-\]
-Osserviamo che l'ultima espressione può essere intesa, per $h \to 0$, come un'approssimazione dell'integrale
-di Riemann di $v^2(x)$, ed essendo l'integrale di una funzione continua su un compatto è limitato
-superiormente da una costante. Abbiamo quindi provato la tesi.
-
-Introduciamo ora un metodo iterativo che possiamo vedere come una estensione del metodo delle potenze
-e che ci permetterà di studiare nel dettaglio questa situazione.
-
-\subsection{Il metodo delle iterazioni ortogonali di sottospazi}
-Il metodo delle potenze come è stato analizzato nella Sezione~\ref{sec:metodopotenze} è basato sull'idea
-di prendere un vettore e iterare su di lui l'applicazione individuata dalla matrice $A$ di cui si vogliono
-calcolare gli autovalori. \\
-Osserviamo che questa idea è equivalente (anzi, forse è meglio rappresentata) all'iterare un sottospazio
-vettoriale di dimensione $1$. Supponiamo ora di voler calcolare, invece che 1, più autovalori delle matrice,
-precisamente $k$ (dove $k < n$ ed $n$ è la dimensione delle matrice) ognuno di molteplicità 1\footnote{%
-Questo solo per semplicità di esposizione. Non è complicato generalizzare l'idea}. Una naturale estensione del metodo
-sarebbe iterare un sottospazio vettoriale di dimensione $k$. Questo dovrebbe convergere ad un sottospazio di dimensione
-$k$ uguale alla somma degli autospazi dei primi $k$ autovalori.\\
-Si può osservare subito un problema computazionale. Sebbene questo discorso sia teoricamente corretto, è facile prevedere
-che il nostro spazio di dimensione $k$ convergerà verso l'autospazio relativo
-all'autovalore dominante (che è di dimensione 1). Più precisamente, supponiamo di rappresentare lo spazio
-con una matrice $x$ $n \times k$ le cui colonne siano una base dello spazio. Allora l'iterazione sarebbe
-\[
-\left\{\begin{array}{lcl}
- x_0 &=& x \\
- x_{k+1} &=& Ax_k
-\end{array} \right.
-\]
-Per lo stesso ragionamento fatto nel caso del metodo delle potenze originale tutte le colonne di $A$ convergeranno
-a multipli dello stesso vettore (quello dell'autovalore dominante).
-
-Un modo di risolvere questo problema potrebbe essere assicurarsi che durante l'iterazione tutte le colonne restino
-ortogonali fra loro. Consideriamo la seguente iterazione
-\[
- \left\{ \begin{array}{lcl}
-          x_0 &=& x \\
-          T_{k} &=& A x_k \\
-          Q_k R_k &=& T_k \: \text{(scomposizione $QR$ di $T_k$)} \\
-          x_{k+1} &=& Q_k
-         \end{array} \right.
-\]
-Ricordando che la scomposizione QR di una matrice $n \times k$ con $k < n$ è tale che $Q$ è rettangolare
-ed è $n \times k$ e $R$ è quadrata $k \times k$. In particolare si osserva che nella nostra iterazione
-le colonne di $Q_k$ sono una
-base ortonormale per lo spazio generato dalle colonne di $T_k$.
-Osserviamo che calcolare esplicitamente $x_k$ non è realmente necessario e possiamo riformulare
-l'iterazione. Poniamo
-\[
- B_k = \trasp{Q_k} A Q_k \qquad \text{e} \qquad B_k = U_k D \trasp{U_k}
-\]
-dove $U_K D \trasp{U_k}$ è la decomposizione spettrale di $B_k$. Si osserva che $T_{k+1} = A Q_k =
-Q_k B_k = $.
-% TODO: Capire l'iterazione implicita.
\ No newline at end of file
diff --git a/Bibliografia.tex b/Bibliografia.tex
deleted file mode 100644
index eca1a00..0000000
--- a/Bibliografia.tex
+++ /dev/null
@@ -1,32 +0,0 @@
-\begin{thebibliography}{}
- \bibitem{metnumalglin}{%
-  Dario Bini, Milvio Capovani, Ornella Menchi,
-  \emph{Metodi numerici per l'algebra lineare},
-   Zanichelli}
-
- \bibitem{watkins}{%
- David S. Watkins,
- \emph{The Matrix Eigenvalue problem -- GR and Krylov Subspace Methods},
- SIAM}
-
- \bibitem{demmel}{%
-  James W. Demmel,
-  \emph{Applied Numeric Linear Algebra},
-  SIAM
- }
-
- \bibitem{lshort}{%
-  Tobias Oetiker, Hubert Partl, Irene Hyna and Elisabeth Schlegl,
-  \emph{The not so short introduction to \LaTeXe, or \LaTeXe in 139 minutes},
-  Scaricabile gratuitamente da Internet.
- }
-
- \bibitem{pgfmanual}{%
-  Till Tantau,
- \emph{Tikz and PDF, Manual for version 1.10},
- Institut f\"ur Theoretische Informatik
- Universit\"at zu L\"ubeck,
- October 26, 2006, \verb-http://sourceforge.net/projects/pgf-
- }
-\end{thebibliography}
-
diff --git a/CalcoloScientifico.tex b/CalcoloScientifico.tex
index c677f07..7919403 100644
--- a/CalcoloScientifico.tex
+++ b/CalcoloScientifico.tex
@@ -229,7 +229,7 @@


 %% Prima pagina
-\input{title}
+\input{varie/title}

 %% Non vogliamo il numero sulla prima pagina
 \thispagestyle{empty}
@@ -238,7 +238,7 @@
 \newpage

 %% \input qualche introduzione, quando verrà il giorno
-\include{introduzione}
+\include{varie/introduzione}

 %%
 %% Di nuovo un'altra pagina per metterci l'indice
@@ -260,41 +260,41 @@
 \part{Teoria}

 %% Introduzione e calcolo del polinomio caratteristico
-\include{capitolo1}
+\include{capitoli/capitolo1}

 %% Metodi per il calcolo di autovalori di matrici Hermitiante
 %% tridiagonali
-\include{capitolo2}
+\include{capitoli/capitolo2}

 %% Decomposizione in valori singolari
-\include{capitolo3}
+\include{capitoli/capitolo3}

 %% Risoluzione dei sistemi lineari
-\include{capitolo4}
+\include{capitoli/capitolo4}

 %% Matrici strutturate
-\include{capitolo5}
+\include{capitoli/capitolo5}

 %% Problema generalizzato agli autovalori, qualche nota
-\include{capitolo6}
+\include{capitoli/capitolo6}

 %% Comincia l'appendice, ovvero dove
 %% esponiamo gli algoritmi visti con Bini
 \part{Esercitazioni}

 %% Page rank
-\include{AppPageRank}
+\include{appendice/AppPageRank}

 %% Studio delle vibrazioni
-\include{AppVibrazioni}
+\include{appendice/AppVibrazioni}

 \part{Appendice}

 \appendix

-\include{AppFortran}
+\include{appendice/AppFortran}

 %% Bibliografia
-\include{Bibliografia}
+\include{varie/Bibliografia}

 \end{document}
diff --git a/appendice/AppFortran.tex b/appendice/AppFortran.tex
new file mode 100644
index 0000000..67f01a6
--- /dev/null
+++ b/appendice/AppFortran.tex
@@ -0,0 +1,245 @@
+\chapter{Il fortran 95}
+Il linguaggio di programmazione usato per implementare gli algoritmi è stato il FORTRAN, una
+``minor revision''\footnote{non ho mai capito come si traduca veramente in italiano la parola
+revision -- ogni suggerimento è bene accetto} del FORTRAN 90. \\
+Rispetto all versioni precedenti ci sono delle interessanti novità, per cui se state pensando
+``Oddio, il FORTRAN nel 2009, non ci posso credere'' prima leggete il seguito\footnote{Ebbene sì,
+è quello che ho pensato io, ma poi mi sono resoconto che il linguaggio aveva fatto dei progressi
+dagli anni sessanta a questa parte}; è l'elenco delle cose che non mi aspettavo
+\begin{enumerate}[(a)]
+ \item Allocazione dinamica della memoria;
+ \item Creazione di tipi astratti e overloading degli operatori;
+ \item Programmazione ad oggetti e polimorfismo (solo Fortran 2003/2008);
+\end{enumerate}
+
+In ogni caso, in queste note includerò alcune righe su come si scrivono le prime righe di codice
+in fortran. In codice Fortran saranno infatti riportati tutti gli esempi nella parte di esercitazione.
+
+\section{La sintassi}
+\subsection{Hello World!}
+Per una convenzione che di cui non so l'origine non è posibbile cominciare da qualcosa di diverso del
+programma Hello World! Noi non saremo da meno. Cominceremo a guardare il codice e a commentarlo
+passo passo..
+
+\begin{lstlisting}[frame=tb,caption=Hello World,label=lst:helloworld]
+ PROGRAM helloworld
+  IMPLICIT NONE
+  WRITE(*,*) 'Hello World'
+ END PROGRAM
+\end{lstlisting}
+
+Tutte le righe precedute da \lstinline-!- sono dei commenti e quindi vengono scartate
+dal compilatore. Ad esempio '\lstinline-a = 1 ! Inizializzazione-' è equivalente a
+'\lstinline-a = 1-'.
+
+L'istruzione \lstinline-PROGRAM helloworld- spiega al compilatore che questo è l'inizio del
+nostro programma e che si chiamerà helloworld. Si aspetta di trovare alla fine un
+\lstinline-END PROGRAM- che noi abbiamo prontamente inserito.
+
+L'istruzione \lstinline-IMPLICIT NONE- serve invece a disattivare delle convenzione che si
+usavano nelle prime versione del fortran (e che esistono ancora per retrocompatibilità)
+che stabiliscono che le variabili \lstinline-i,j,k- sono di tipo intero, mentre ad esempio
+\lstinline-x,y,z- sono reali. Questo non è desiderabile in un linguaggio di programmazione
+moderno in cui ci si aspetta di scrivere del codice comprensibile.
+
+Infine l'istruzione \lstinline-WRITE(*,*)- scrive sull stdout\footnote{che, nelle maggior parte
+dei casi, coincide con il monitor} tutti gli argomenti che gli si passano dopo. \`E possibile
+controllare la formattazione di quello che viene stampato ma, come è simboleggiato dagli asterischi,
+per ora non ce ne stiamo preoccupando.
+
+\subsection{La struttura}
+Un programma in FORTRAN ha una struttura prefissata:
+\begin{lstlisting}[label=lst:fotranstruct,frame=tb]
+ PROGRAM nomeprogramma
+  IMPLICIT NONE
+  ! Specificazioni: in questa parte si trova la dichiarazione
+  !                 delle variabili e dei nuovi tipi
+
+  ! Parte di esecuzione: qui troviamo il codice vero e proprio che
+  !                      viene eseguito
+
+  ! Subroutine: qui troviamo la definizione dei sottoprogrammi che
+  !             possono venire chiamati dalla parte di esecuzione
+ END PROGRAM
+\end{lstlisting}
+\subsection{I tipi}
+Come il C e tutti i linguaggi che vantano una certa storia il FORTRAN è un linguaggio tipato,
+ovvero ogni variabile ha un tipo (ad esempio intero) e non gli si possono assegnare valori
+di tipi differenti. \\
+Si possono aggiungere delle parole chiave alle dichiarazioni di tipi, più precisamente
+\begin{itemize}
+ \item \lstinline-PARAMETER-: questa indica che la variabile non verrà modificata, è semplicemente
+ un parametro per il programma.
+ \item \lstinline-ALLOCATABLE-: Questo parola chiave indica che la memoria per la variabile verrà
+ allocata esplicitamente in un secondo momento, è particolarmente utile con l'altra parola chiave
+ \item \lstinline-DIMENSION-: questa permette di speicificare che la variabile dichiarate è un array
+ e la sua relativa dimensione (Esempio: \lstinline- INTEGER, DIMENSION(5) :: vec-); è possibile specificare
+ \lstinline-:- come dimensione, nel qual caso il compilatore assumerà che la dimensione verrà determinata
+ in un secondo momento. Un caso tipico è la creazione di un vettore la cui dimensione verrà determinata
+ a run-time\footnote{ovvero durante l'esecuzione.}; questo si può realizzare con un codice di questo tipo
+ \begin{lstlisting}[frame=tb]
+  PROGRAM allocatore
+   INTEGER , ALLOCATABLE :: i
+   INTEGER :: size
+   ! Leggo da tastiera la dimensione dell'array e lo alloco
+   READ(*,*) size
+   ALLOCATE(i(size))
+  END PROGRAM
+ \end{lstlisting}
+
+\end{itemize}
+I tipi principali presenti in Fortran sono
+\begin{itemize}
+ \item \textbf{Interi}: Sono denotati dalla parola chiave \lstinline-INTEGER- e sono appunto numeri
+ interi. Generalemente occupano $4$ byte.
+ \item \textbf{Reali}: Numeri reali, che vengono memorizzati come floating point. La parola chiave
+ è \lstinline-REAL- e occupano generalmente $4$ byte. Per i nostri scopi questi sono pochi, e quindi
+ useremo in generale il seguente trucchetto:
+  \begin{lstlisting}[frame=tb]
+   INTEGER, PARAMETER :: db = KIND(0.D0)
+   REAL(dp) :: real_var
+  \end{lstlisting}
+ che si occuperà di assegnare al tipo \lstinline-REAL- dichiarato la stessa dimensione delle costante di tipo
+ \texttt{double} \lstinline-0.D0-.
+\end{itemize}
+
+\subsection{Input e Output}
+Per iniziare ci basterà conoscere le istruzioni di stampa su schermo e lettura da tastiera, che sono rispettivamente
+\begin{itemize}
+ \item \lstinline-WRITE(*,*) dato_1, dato_2 , ...- che si occuperà di scrivere sullo schermo (identificato dal primo
+ \lstinline-*-) e con una formattazione standard (identificata dal secondo \lstinline-*-) i dati che gli inseriamo dopo;
+ \item \lstinline-READ(*,*) var_1, var_2, ...- che si occuperà di leggere da tastiera (il primo \lstinline-*-) i dati
+ in un formato standard (il secondo \lstinline-*-);
+\end{itemize}
+In realtà queste istruzioni ci permettono di controllare anche formattazioni e sorgenti e destinazioni di Input e Output.
+Per scrivere (o leggere) su un file è prima necessario \textbf{aprirlo}. Per fare questo bisogna eseguire una
+chiamata alla funzione \lstinline-OPEN()-. Questa si occuperà di aprire un file da noi indicata ed assegnarlo ad
+un numero intero, anche quello indicato da noi. Bisogna fare attenzione in quest'ultimo passaggio a ricordare
+che \lstinline-5- e \lstinline-6- sono già riservati alla tastiera ed allo schermo.
+Potremmo poi fare riferimento (sia in lettura che in scrittura)
+a quel determinato file sostituendo quell'intero a \lstinline-*-. Questo codice probabilmente chiarirà meglio la questione.
+\begin{lstlisting}[frame=tb]
+ PROGRAM CopiaIncolla
+  IMPLICIT NONE
+
+  ! Dichiaro delle variabili intere di tipo PARAMETER
+  ! per contenere gli interi con cui poi mi riferiro' ai file.
+  ! Sarebbe infatti complicato dover ricordare tanti numeri
+  ! a memoria e renderebbe il codice meno leggibile
+  INTEGER, PARAMETER :: infile = 11, outfile = 12
+  INTEGER :: j
+  INTEGER :: buf
+
+  ! Cerco di aprire il file in.txt
+  OPEN(FILE='in.txt', UNIT=infile)
+
+  ! E anche il file out.txt
+  OPEN(FILE='out.txt', UNIT=outfile)
+
+  ! Leggo le prime 10 righe da questo file
+  ! e le scrivo su out.txt, raddoppiate (assumendo
+  ! che siano interi)
+  DO j=1,10
+    READ(infile,*)     buf
+    WRITE(outfile,*)   buf * 2
+  END DO
+
+  ! Alla chiusura del programma anche tutti i file vengono chiusi,
+  ! e quindi questo rende le prossime righe superflue. Pero' e' buona
+  ! norma ricordarsi di chiudere i file che si sono aperti, e quindi
+  ! lo facciamo
+  CLOSE(infile)
+  CLOSE(outfile)
+
+ END PROGRAM
+\end{lstlisting}
+Abbiamo qui introdotto anche la chiamata \lstinline-CLOSE()- che serve appunto per
+chiudere un file. \`E normalmente buona norma chiudere tutti i file che si aprono e quindi,
+in programma corposi, conviene sempre scrivere la chiamata ad \lstinline-OPEN()- insieme
+alla chiamata \lstinline-CLOSE()- per evitare di dimenticarla.
+
+\section{Subroutine}
+Mano a mano che il programma cresce diventerà necessario razionalizzare la disposizione di
+funzioni e strutturare meglio il listato. In particolare siamo interessati a scrivere delle
+funzioni che si occupino di svolgere un determinato compito in modo che poi possiamo chiamarle
+senza preoccuparci (troppo) di come sono implementate.
+Quelle che in C si chiamavano funzioni in Fortran si chiamano \emph{subroutine}. La sintassi
+per una subroutine assomiglia molto a quella di un programma:
+\begin{lstlisting}[frame=tb,caption=Una subroutine]
+ SUBROUTINE nome(...)
+  ! [ Dichiarazioni ]
+  ! [ Corpo della subroutine ]
+ END SUBROUTINE
+\end{lstlisting}
+Una particolarità per così dire ``curiosa'' è che le variabili passate alla subroutine dovranno
+essere ridichiarate all'interno della stessa perché essa ci possa accedere. Le variabili inoltre
+vengono sempre passate per riferimento (quello che succede in C passando per riferimento o quello
+che succede in C++ passando una reference) e, per conludere, non c'è un'istruzione di ritorno\footnote{%
+O perlomeno, non ne ho mai incontrate. Notare però che programmo in fortran da pochi giorni e quindi.. potrei
+scoprirle prossimamente :) }.
+Ci saranno quindi variabili di Input e variabili di Output\footnote{in realtà in FORTRAN esistono
+anche delle funzioni, che come in C ritornano dei valori; noi non le scriveremo (e quindi in particolare
+non ne ho mai scritta una) e quindi non sono qui esposte. Nonostante questo verranno utilizzate
+nel corso funzioni interne del fortran come \lstinline-RESHAPE()- o \lstinline-MATMUL()-. }, ma tutte insieme nella chiamata della funzione.
+Per chiarire le idee, e spiegare i passaggi che mancano, proponiamo un esempio di una funzione che prenda un
+numero e lo moltiplichi per due\footnote{che esempio inutile, direte voi\ldots e avete anche ragione ma
+in questo momento non mi viene in mente niente di più costruttivo}
+\begin{lstlisting}[frame=tb,caption=Un semplice programma che fa uso di subroutine]
+ ! Questo programma prende in input un numero e lo moltiplica per due;
+ ! Di per se' e' piuttosto inutile ma mostra come si utilizza una subroutine
+ ! nell'ambito di un programma
+
+ PROGRAM sub_doppio
+
+  REAL :: x;
+  ! Leggo dallo standard input x
+  READ(*,*) x;
+
+  ! Lo moltiplico per due facendo uso della subroutine
+  CALL doppio(x);
+
+  ! Lo stampo. Atttenzione! La subroutine ha modificato il vero
+  ! valore di x perche' le ho di fatto passato un puntatore
+  WRITE(*,*) x;
+
+! Terminiamo l'esecuzione del programma principale.
+END PROGRAM sub_doppio
+
+SUBROUTINE doppio(x)
+ REAL :: x;
+ x = x * 2;
+END SUBROUTINE doppio
+\end{lstlisting}
+Naturalmente si possono fare esempi molto più complessi, e soprattutto più utili. Ad esempio, supponiamo
+di implementare la subroutine \lstinline-dotprod- che avevamo pensato parlando del pagerank per fare il prodotto
+matrice vettore con una matrice sparsa. Non la riportiamo qui perché è già stata scritta (si veda il Listato~\ref{lst:matrixvec})
+ma commentiamo alcuni fatti:
+\begin{itemize}
+ \item Le keyword \lstinline-INTENT(IN)- e \lstinline-INTENT(OUT)- servono per l'appunto a specificare se una variabile
+ è da considerarsi di input o di output. Questo di fatto non cambia nulla, a parte che il compilatore ci avviserà
+ se tentiamo di modificare variabili di input;
+ \item La \lstinline-SUBROUTINE- può venir scritta in un file separato e poi linkata insieme al file eseguibile che
+ la richiama. Spiegheremo meglio questo concetto con un esempio;
+\end{itemize}
+
+Supponiamo di avere scritto la subroutine in un file di nome \verb-dotprod.f90-, e di aver successivamente
+scritto un listato \verb-matrici.f90- in cui compaia l'istruzione \lstinline-CALL dotprod(...)-. Sarebbe tedioso
+dover copiare il contenuto del file \verb-dotprod.f90- all'interno di \verb-matrici.f90- per poi compilarlo.
+In effetti esiste un metodo più pratico per agire.
+\begin{enumerate}
+ \item Compilare i file sorgenti separatamente, senza creare l'eseguibile ma solamente i \emph{file oggetto}
+ che contengono la versione compilata del listato, senza che le referenze siano stare risolto. Questo significa
+ che all'interno del file oggetto associato a \verb-matrici.f90- ci sarà una chiamata ad una \lstinline-dotprod()-
+ senza che abbia la minima idea di dove andare a prenderla; questa operazione si realizza su Linux con \verb-f95- in questo
+ modo: \\
+ \verb+# f95 -c dotprod.f90 matrici.f90+
+
+ \item Il secondo passo consiste nel creare un eseguibile unico con le dipendenze risolte, ovvero in cui ci sia
+ la chiamata a \lstinline-dotprod()- ma questa volta sia chiaro dove poterla trovare\footnote{sono conscio che questa
+ spiegazione non è molto chiara. Cercherò di migliorarla}; questo compito viene eseguito dal \emph{linker} che, su Linux,
+ fa ancora parte di \verb-f95-\footnote{forse si portebbe discutere sulla correttezza di questa affermazione, in ogni caso noi
+ daremo il comando f95 per eseguire l'operazione. Quello che poi lui faccia davvero, compreso chiamare altri programmi,
+ per il momento non è affar nostro}; il comando è il seguente: \\
+ \verb+# f95 -o matrici matrici.o dotprod.o+
+\end{enumerate}
+
diff --git a/appendice/AppPageRank.tex b/appendice/AppPageRank.tex
new file mode 100644
index 0000000..846473e
--- /dev/null
+++ b/appendice/AppPageRank.tex
@@ -0,0 +1,352 @@
+\chapter{Page Rank}
+In questo capitolo ci porremo il problema di calcolare il \emph{page rank} di un determinato
+insieme di pagine Web (o, analogamente, documenti \emph{ipertestuali}). \\
+Con Page Rank intendiamo un ``valutazione'' data ad una determinata pagina o documento con lo scopo
+di stimare la sua importanza\footnote{che è ovviamente un concetto poco matematico, ma ci occuperemo
+di formalizzarlo meglio in seguito.}. Un algoritmo derivato da quello che verrà in seguito
+esposto è utilizzato attualmente da Google (\href{http://www.google.it}{http://www.google.it})
+per ordinare i risultati di una query nel suo motore di ricerca, così come da tutti i principali
+\emph{search engine} presenti sul Web.
+
+\section{Presentazione del modello}
+Prima di tutto dobbiamo occuparci di definire il modello matematico che vogliamo usare
+per schematizzare la nostra valutazione di importanza. \\
+In generale l'idea che sta alla base del Page Rank è dare importanza ad una pagina
+basandosi sui link\footnote{Un link in una pagina Web, ma anche in un documento PDF come questo,
+è un ``puntatore'' ad un altro documento. In genere l'utente può attivare il puntatore semplicemente
+cliccandoci sopra con il mouse} che in essa sono presenti.
+
+Alcune idee che potrebbero sembrare valide potrebbero essere valutare l'importanza di una pagina
+in base al numero di link presenti nella pagina, oppure al numero di link che puntano ad essa.
+
+Dopo una breve riflessione ci si rende conto che entrambi i metodi introducono svariate problematiche
+di affidabilità. In generale, infatti, il creatore di una pagina ha il controllo di quanti link
+sono presenti in una pagina, e non fatica molto a creare delle pagine fittizie che puntano a quella
+appena creata. La valutazione sarebbe quindi falsata e molto vulnerabile a frode.
+
+Si può però cercare di affinare l'idea di base in modo da risolvere questi inconvenienti.
+Per convenzione assumiamo di numerare tutte le pagine presenti nel Web con dei numeri naturali
+$1 \ldots N$ (dove $N$ è un numero dell'ordine di $10^{10}$).
+Fissata una certa pagina $j$ consideriamo i link che puntano a lei. Risulta chiaro che non solo
+il \textbf{numero} dei link è importante per valutare la sua importanza, ma a sua volta anche l'\textbf{importanza}
+di questi dovrebbe influire. Per esempio, se la homepage di Yahoo! punta
+alla pagina di una data persona, è naturale che questa pagina acquisisca una certa rilevanza. Viceversa, se sulla
+mia pagina personale metto un link al sito della stessa persona l'importanza di questo varia di poco\footnote{
+a meno che nel momento in cui voi leggiate queste pagine io non sia diventato una persona con una certa influenza,
+ma questo è probabilmente un caso da scartare}.
+Un'ultima e non meno importante considerazione è che se anche Yahoo! punta al mio sito ma lo fa in una pagina
+con un altro centinaio di link è una faccenda molto diversa dall'essere puntati dall'unico link in homepage.
+
+Stiamo quindi arrivando ad un altro modello, in cui le pagine \emph{distribuiscono la loro importanza fra i link al
+loro interno}. Questo modello è molto più ragionevole del precedente, ed è molto meno predisposto a dare
+risultati falsati. Vorremo però averne una descrizione matematica precisa.
+
+\section{Un po' di matematica}
+Consideriamo la matrice quadrata $H = (h_{ij})$, che chiameremo \emph{matrice delle connessioni}, definita
+nel seguente modo
+\[
+ h_{ij} = \left\{ \begin{array}{ll}
+                   1 & \text{se esiste un link dalla pagina} \ i \ \text{alla pagina} \ j \\
+		   0 & \text{altrimenti}
+                  \end{array} \right.
+\]
+Questa matrice avrà dimensione $N \times N$ ma sarà sparsa, ovvero la maggior parte dei suoi valori saranno $0$.
+Per fissare le idee consideriamo la Figura~\ref{fig:web}, un modello (molto) semplificato del Web, in cui esistono solamente
+3 pagine.
+\begin{figure}[hb]
+\[
+ \xymatrix{
+{\bullet{1}} \ar@/_/[dr] \ar@/^1pc/[drr] & \\
+ & {\bullet{2}} \ar@/_/[ul]& {\bullet{3}} \ar@/^/[l]}
+\]
+\caption{Esempio di una rete composta da 3 pagine}
+\label{fig:web}
+\end{figure}
+
+La matrice di connessione $H$ associata a questo grafo è la seguente
+\[
+ H = \left[ \begin{array}{ccc}
+             0 & 1 & 1 \\
+	     1 & 0 & 0 \\
+	     0 & 1 & 0
+            \end{array} \right]
+\]
+\begin{os} \label{os:pageranknumcoll}
+ \`E facile verificare che valgono le seguenti uguaglianze
+ \[
+ \left\{ \begin{array}{ll}
+  \sharp \{ \text{collegamenti uscenti da} \ i \} & = \sum_{j=1}^{N} h_{ij} \\
+  \sharp \{ \text{collegamente che arrivano a} \ j \} & = \sum_{i=1}^{N} h_{ij}
+  \end{array} \right.
+ \]
+\end{os}
+In particolare sarebbe piuttosto immediato calcolare, partendo dalla matrice $H$, i valori
+del Page Rank con i metodi ipotizzati all'inizio del capitolo (per altro reputati incompleti)
+
+Siamo dunque interessati a calcolare il vettore $W$ dove $w_i$ è l'importanza della pagina $i$,
+in modo che rispetti le linee guide definite precedentemente.
+
+Chiamiamo $d_i$ il numero di link uscenti dalla pagina $i$
+(facilmente calcolabile come visto nell'Osservazione~\ref{os:pageranknumcoll}). Chiameremo inoltre
+$D$ la matrice con i $d_i$ sulla diagonale e nulla per i restanti valori.
+Introdotta questa notazione, secondo il nostro modello ogni componente di $W$ dovrebbe rispettare
+la seguente equazione
+\[
+ w_j = \sum_{i=1}^{N} w_i \frac{h_{ij}}{d_i}
+\]
+che rappresenta esattamente l'idea che l'importanza di ogni pagina è la somma delle importanze di quelle
+che la linkano, in cui ogni addendo è normalizzato sul numero di link uscenti\footnote{probabilmente l'equazione
+è molto più chiara di questa frase, ma non commentare mi sarebbe sembrato inopportuno}.
+\`E quindi chiaro come il nostro problema si sia trasformato in un problema di autovalori ed autovettori. In
+particolare, se poniamo $M = D^{-1}H$ la nostra richiesta si può scrivere nella forma più compatta
+$\trasp{W} = \trasp{W}M$, ovvero $\trasp{W}$ è un autovettore sinistro di $M$. Sorgono spontanee alcune
+domande a cui dobbiamo rispondere prima di procedere oltre.
+\begin{enumerate}[(a)]
+ \item \label{en:pagerank:a} Cosa succede se per qualche $i$ si ha $d_i = 0$? Stiamo tacitamente assumendo che $D$ sia invertibile
+ ma questo non è garantito a priori;
+ \item \label{en:pagerank:b} L'autovalore $1$ fa parte dello spettro delle matrice $M$? Se questo non fosse vero la nostra
+ richiesta non ammette soluzione, e quindi possiamo rinunciare in partenza alla nostra idea;
+ \item \label{en:pagerank:c} Se l'autovettore $W$ esiste, è unico\footnote{In realtà ci stiamo chiedendo se il suo
+autospazio ha dimensione $1$. Siamo ben consci che se ne troviamo uno ogni suo multiplo scalare continuerà
+ad essere un autovettore. Per altro, moltiplicare le valutazioni omogeneamente per lo stesso cofficiente non
+sarebbe in nessun modo un problema}?. Se così non fosse
+ sorgerebbero dei seri problemi su come interpretare i risultati ottenuti;
+ \item \label{en:pagerank:d} Possiamo scegliere l'autovettore $W$ in modo che $w_i \geq 0$ per ogni $i$? Questo non è necessario,
+ a priori, ma sembrerebbe coerente fare in modo che delle votazioni siano numeri positivi;
+\end{enumerate}
+
+Cominciamo col rispondere alla domanda~(\ref{en:pagerank:a}). Ovviamente potrebbe benissimo succedere
+che per qualche $i$ $d_i = 0$. Questi ``nodi'' vengono chiamati \emph{dangling node}, ovvero ``nodi penzolanti'',
+che non portano a niente. Per risolvere questo problema si sostituisce la matrice $H$ con una matrice $\hat H$
+tale che se $h_{ij} = 0 \: \forall j$ allora $\hat h_{ij} = 1 \: \forall j$, e in caso contrario $\hat h_{ij} = h_{ij}$.
+Questa matrice risolve evidentemente il problema e cambia di poco il modello. Supporre che una determinata pagina
+non distribuisca la sua importanza a nessuno o la distribuisca in maniera analoga a tutti non è un gran cambiamento.
+
+La domanda~(\ref{en:pagerank:b}) ha invece una risposta immediata. Sì, l'autovalore $1$ fa parte dello spettro
+ed un autovettore (destro) a lui associato è quello composto di tutti $1$. La verifica è un banale conto.
+
+Per rispondere alle domande~(\ref{en:pagerank:c}) e (\ref{en:pagerank:d}) ci appoggiamo ad un risultato
+che non dimostreremo (in questa sede) ottenuto da Perron-Frobenius sulla Teoria delle Matrici non negative.
+\begin{te}[di Perron-Frobenius] \label{te:PerronFrobenius}
+ Se $A$ è irriducibile allora $\rs{A} > 0$ è un autovalore semplice ed
+ esistono $x,y$ autovettori destro e sinistro
+ con componenti strettamente positive.
+\end{te}
+\begin{os}
+ Sembrerebbe, a priori, che non siamo in grado di determinare il raggio spettrale di $A$. Consideriamo però
+ che $1$ è nello spettro e che $||A||_{\infty} = 1$ e ogni norma indotta supera il raggio spettrale. Si può
+ quindi concludere che $\rs{A} = 1$ e applicare il Teorema~\ref{te:PerronFrobenius}.
+\end{os}
+Sfortunatamente si può osservare che, pur con tutte queste buone proprietà, in generale i metodi applicati
+per trovare l'autovettore (il metodo delle potenze) potrebbe non essere convergente, perché gli autovalori
+diversi da $1$ potrebbero ancora avere modulo $1$\footnote{Come visto nella teoria, la velocità di convergenza
+del metodo di iterazione è data dal rapporto fra il più grande autovalore diverso da quello di cui si sta cercando
+l'autovettore e l'autovalore in questione. In questo caso il rapporto potrebbe essere $1$, che darebbe una situazione
+di non convergenza}.
+Introduciamo una definizione che ci permetterà di formalizzare meglio il problema.
+\begin{de}
+  Una matrice $A$ si dice \emph{ciclica} se esiste un sottoinsieme dei suoi autovalori $J \subseteq \spe{A}$
+  tale che $\forall \lambda,\mu \in J$ si ha che $|\lambda|=|\mu|$.
+\end{de}
+Per superare questa difficoltà si può, ancora una volta, modificare il modello. Fissiamo $\gamma > 0$ e consideriamo
+che il visitatore
+possa in ogni momento, con probabilità $1-\gamma$, decidere di aprire una pagina a caso. Potremmo rappresentare
+questa nuova situazione sostituendo $M$ con la matrice
+\[
+ A = \gamma M + (1-\gamma) \left[ \begin{array}{c}
+                                   1 \\
+				   \vdots \\
+				   1
+                                  \end{array} \right] \left[ 1 \: \hdots \:  1 \right]
+\]
+ovvero con una combinazione convessa della matrice $M$ con la matrice di soli $1$. Il valore di $\gamma$ si può
+scegliere a piacimento; Google usa un valore $\gamma = 0.85$. In questo caso la matrice $A$ non ha elementi nulli
+e quindi è irriducibile e non è ciclica\footnote{La condizione di ciclicità è quella che crea problemi
+con gli autovalori di modulo uguale al raggio spettrale}. Possiamo infine utilizzare un'altra versione del Teorema~\ref{te:PerronFrobenius}
+che dice
+\begin{te}
+ Sia $A$ una matrice con elementi strettamente positivi. Allora per ogni suo autovalore $\lambda \neq \rs{A}$ si ha
+ che vale la diseguaglianza $|\lambda| < |\rs{A}|$.
+\end{te}
+Quest'ultimo ci assicura la convergenza del nostro metodo.
+
+\subsection{Implementazione del metodo delle potenze}
+Presenteremo in questa sezione una versione del metodo delle potenze adattata alle nostre esigenze.
+Consideriamo la matrice $A$ di cui vogliamo trovare l'autovettore sinistro relativo all'autovalore $1$.
+Sappiamo che esiste la forma di Jordan di $A$ ed in particolare una matrice $S$ tale che
+\[
+ S^{-1} A S = J \qquad J = \left[ \begin{array}{c|cc}
+                                   1 & \multicolumn{2}{|c}{\herm{0}} \\ \hline
+               \multirow{2}{*}{$0$} & \sblocke{\hat J}{2} \\
+                                   & &
+                                  \end{array} \right]
+\]
+Osserviamo ora che $e_1$ è autovettore destro di $J$ ed anche autovettore sinistro. Entrambi sono relativi
+all'autovalore $1$. Sappiamo quindi che $e = Se_1$ è autovalore destro di $A$ e quindi è il vettore
+con tutte le componenti uguali ad $1$, mentre $\trasp{w} = \trasp{e_1}S^{-1}$ è autovettore sinistro di $A$,
+ovvero il vettore che stiamo cercando.
+In particolare quanto visto nella precedente sezione ci assicura che $\rs{\hat J} < 1$ e quindi possiamo osservare
+che
+\[
+ \lim_{k\to\infty} J^{k} = e_1\trasp{e_1} \quad \text{e quindi} \quad \lim_{k\to\infty} A^{k} =
+ \lim_{k\to\infty} SJ^kS^{-1} = Se_1 \trasp{e_1}S^{-1} = e\trasp{w}
+\]
+Questo (apparentemente) risolve il nostro problema in quanto $e\trasp{w}$ non è altro che la matrice le cui
+righe coincidono con il vettore $\trasp{w}$ che è precisamente quanto stiamo cercando. \\
+La complessità di questo calcolo non è però trascurabile, in quanto la moltiplicazione di una matrice
+costa in generale $O(n^3)$, decisamente troppo se $n \approx 10^{10}$ come nel nostro caso.
+\begin{os}
+ Consideriamo dunque un vettore $x_0$ tale che $\trasp{e}x_0 = 1 = ||x_0||_{1}$, e definiamo la successione per ricorrenza
+ \[
+  \left\{ \begin{array}{ll}
+           \trasp{x_0} & = \trasp{x_0} \\
+           \trasp{x_{k+1}} & = \trasp{x_{k}} A
+          \end{array} \right.
+ \]
+Possiamo notare che in generale $x_k = x_0 A^{k}$ e quindi data la nostra scelta oculata di $x_0$ abbiamo
+che
+\[
+ \lim_{k\to\infty} \trasp{x_k} = \lim_{k\to\infty} \trasp{x_0} A^{k} = x_0 e \trasp{w} = \trasp{w}
+\]
+In questo modo siamo scesi da una complessità $O(n^3)$ ad una $O(n^2)$.
+\end{os}
+Sfortunatamente $O(n^2)$ nel nostro caso continua ad essere un numero troppo grande; arrivati a questo
+punto ci accorgiamo che possiamo sfruttare la particolarità di $A$, che non è assolutamente
+una matrice qualsiasi! Sappiamo infatti che è composta quasi esclusivamente di zeri, e quindi una
+memorizzazione efficiente ci permetterebbe anche un'implementazione efficiente dei procedimenti
+di moltiplicazione.
+%% TODO: QUalcosa di più sull'implementazione del metodo
+
+\subsection{Note tecniche}
+Analizzato il problema matematicamente, sorge il bisogno di analizzare le difficoltà di implementazione dovute
+all'hardware attualmente disponibile. Una matrice delle dimensioni di $A$ non è realmente memorizzabile
+elemento per elemento su nessun calcolatore, e non è pensabile nemmeno in alcun tipo di cluster. \\
+Un rapido conto mostra come, anche ipotizzando di usare dei tipi \verb-float- a 4 byte (in ogni
+caso presumibilmente troppo imprecisi) otteniamo uno spazio necessario di $N^2 \cdot 4$ byte, ovvero
+circa $10^{20}$ byte = $10^{11}$ GB di RAM, probabilmente un quantitativo superiore a quella di tutti i computer
+del mondo messi assieme\footnote{può darsi che nei prossimi anni quest'affermazione smetta di essere vera, ma
+non penso sia rilevante ai fini del problema}.
+Dobbiamo quindi adottare degli stratagemmi per gestire la memoria in modo efficiente.
+
+Una prima osservazione è che la nostra matrice $A$ si può scrivere nel seguente modo
+\[
+A = \gamma D^{-1} \hat H + (1-\gamma) e\trasp{v}
+\]
+dove $\gamma$ e $w$ sono rispettivamente il parametro ed il vettore di personalizzazione. Per memorizzare
+$A$ possiamo quindi memorizzare $D$ ed $\hat H$, $\gamma$ e $w$. \\
+Questo ci dà dei vantaggi perché la matrice $\hat H$ è ``quasi nulla'' nel senso che è fatta solamente di $0$ ed $1$,
+ma la percentuale di $0$ è molto alta\footnote{è infatti presumibile che il numero di link uscenti da una pagina
+sia trascurabile rispetto al numero di pagine esistenti}. Possiamo quindi limitarci a memorizzare i seguenti dati: \\[5pt]
+\begin{tabular}{|lll|} \hline
+ \textbf{Variabile} & \textbf{Descrizione} & \textbf{Spazio occupato} \\ \hline \hline
+ $N$ & l'ordine della matrice $A$, ovvero il numero di pagine esistenti & 4 byte \\
+ $m$ & il numero di campi di $\hat H$ diversi da $0$ & \textasciitilde $N$ byte \\
+ $i, j$ & vettori delle coordinate dei campi diversi da $0$ di $\hat H$ & \textasciitilde $N$ byte \\
+ $\gamma$ & coefficiente di personalizzazione & 4 byte \\
+ $w$ & Vettore di personalizzazione & \textasciitilde $N$ byte \\
+ $d$ & il vettore con gli elementi diagonali di $D$ & \textasciitilde $N$ byte \\
+\hline \end{tabular} \\
+
+Possiamo ora porci il problema di calcolare $d$. Questo è reso apparentemente più complicato dal modo in cui abbiamo salvato
+la matrice. In realtà possiamo usare un algoritmo di questo tipo
+
+\begin{lstlisting}[frame=tb,caption=Calcolo di $d$,label=lst:calcolovettorepers]{}
+ ! Inizializziamo il vettore d a 0
+ d = 0;
+ ! Questo ciclo calcola i link uscenti da i per ogni i
+ DO k=1,m
+   d(i(k)) = d(i(k)) + 1
+ END DO
+\end{lstlisting}
+
+\begin{os}
+ L'aver scelto questo tipo di memorizzazione per la matrice non solo non complica i generali procedimenti
+ di moltiplicazione, ma riduce addirittura la complessità di questi perché iteriamo sugli elementi diversi da
+ $0$ invece che su tutti.
+\end{os}
+
+
+\section{Una prima implementazione}
+In questa sezione ci occuperemo di presentare una prima implementazione della soluzione al problema.
+Non ci preoccuperemo troppo di ottimizzare il codice, compito che affronteremo in seguito.
+Esporremo inizialmente la struttura generale del programma e poi costruiremo tutte le subroutine necessarie.
+
+\subsection{La struttura}
+Il programma dovrà comporsi delle seguenti parti
+\begin{description}
+ \item[Lettura della matrice] Supporremo di avere un file da cui leggere i dati della matrice. Dobbiamo
+ definire la sintassi del file e scrivere un subroutine per caricarlo in memoria;
+ \item[Calcolo del vettore d] Data la matrice di connessione $H$ vorremo calcolare la somma di ogni
+ riga che ci servirà in seguito per rinormalizzare il vettore di iterazione;
+ \item[Iterazione] Generiamo un vettore $x$ casuale e lo riscaliamo in modo che $\trasp{e} x = 1$. Fatto
+ questo cominciamo a calcolare l'iterazione, fino a che l'errore non è piccolo o ragguingiamo il massimo
+ numero di iterazioni impostato;
+ \item[Salvataggio] Salviamo su un file il vettore calcolato;
+\end{description}
+
+Per questo avremo bisogno anche di alcune subroutine, ad esempio quella che ci calcoli il prodotto matrice
+vettore data la matrice sparsa come l'abbiamo intesa noi.
+
+\subsection{Prodotto di matrice sparsa per un vettore}
+Esponiamo qui un'idea di codice per calcolare questo prodotto matrice vettore. Ricordiamo che per noi una
+matrice sparsa è composta di due scalari \lstinline-n-,\lstinline-m- (rispettivamente dimensione e numero di elementi diversi da $0$)
+e due vettori \lstinline-i-, \lstinline-j- di dimensione $m$ che sono le coordinate dei punti che valgono $1$.\\
+Il codice è il seguente
+\begin{lstlisting}[frame=tb,caption=Calcolo del prodotto matrice vettore,label=lst:matrixvec]
+ SUBROUTINE dotprod(n,m,i,j,d,x,v,y)
+  IMPLICIT NONE
+  ! Il parametro dp dei tipi a doppia precisione
+  INTEGER, PARAMETER :: dp = KIND(0.D0)
+
+  ! Dichiarazione degli argomenti della funzione
+  INTEGER, INTENT(IN) :: n,m
+  INTEGER, DIMENSION(m), INTENT(IN) :: i,j
+  INTEGER, DIMENSION(n), INTENT(IN) :: d
+  REAL(dp), DIMENSION(n), INTENT(IN) :: x, v
+
+  ! Dato di output
+  REAL(dp), DIMENSION(n) :: y
+
+  ! Alcune variabili di comodo
+  REAL(dp), DIMENSION(n) :: xx
+  REAL(dp) :: s, gamma = 0.85
+  INTEGER :: k
+
+  ! Calcoliamo x trasposto per la matrice D con i d(i) sulla
+  ! diagonale,  e salviamolo in xx, in modo da non modificare x
+  ! Ricordiamo che i dati in fortrano vengono sempre passati per
+  ! riferimento! Se modificassimo x qui dentro risulterebbe cambiato
+  ! anche all'esterno.
+  DO k=1,m
+   IF(d(k)/=0) THEN
+     xx(i(k)) = x(i(k))/d(k)
+   ELSE
+     xx(i(k)) = x(i(k))/n
+   END IF
+  END DO
+
+  ! Ora eseguiamo la moltiplicazione di xx per la parte non dangling
+  ! della matrice H cappuccio e salviamo il risultato in y
+  y = 0.D0
+  DO k=1,m
+    y(j(k)) = y(j(k)) + xx(i(k))
+  END DO
+
+  ! Ora calcoliamo le righe dangling dalle quali prima non siamo "passati"
+  ! perche' i(k) scorre solo sulle righe dove ci sono elementi non nulli
+  DO k=1,n
+    IF(d(k) == 0)
+      s = s + xx(k)
+    END IF
+  END DO
+
+  ! Sommiamo i due contributi
+  y = y + s
+
+  ! Calcolo la personalizzazione
+  y = y * gamma + (1-gamma)/n
+
+ END SUBROUTINE dotprod
+\end{lstlisting}
+
+%TODO: Presentare un'implementazione completa del programma
\ No newline at end of file
diff --git a/appendice/AppVibrazioni.tex b/appendice/AppVibrazioni.tex
new file mode 100644
index 0000000..c35f1dc
--- /dev/null
+++ b/appendice/AppVibrazioni.tex
@@ -0,0 +1,361 @@
+\chapter{Studio delle Vibrazioni}
+
+In questo capitolo ci occuperemo di capire come si comporta un sistema elastico, ovvero
+un sistema di masse collegate da mollle. In questo modo potremo modellizzare, ad esempio,
+strumenti musicali (come le corde di una chitarra o un tamburo) o un generale sistema
+dinamico costituito da masse e molle.  %TODO: Inserire qualche altro esempio pratico
+
+\section{Sistemi discreti}
+\subsection{L'oscillatore armonico}
+Il nostro scopo sarà, principalmente, risolvere sistemi complicati la cui soluzione esatta non
+si riesce a calcolare (o non si riesce a farlo agevolmente) direttamente con un foglio ed una penna,
+ma per capire di cosa ci occuperemo
+è utile cominciare con un esempio noto. \\
+\begin{wrapfigure}{l}{70mm}
+\begin{tikzpicture}[scale=0.8]
+ % Il terreno
+ \draw[->] (0,0) -- (7,0) node[anchor=south west] {$x$};
+
+ % La parete
+ \draw (1,0) -- (1,2.8);
+ \foreach \i in {0,...,12}
+   \draw (1,0.2 * \i) -- (0.8, 0.2*\i + 0.2);
+
+ % La molla
+ \begin{scope}[thick]
+  \foreach \i in {1,1.5,...,3.5}
+    \draw (\i,0.5) -- (\i+0.25,1);
+  \foreach \i in {1,1.5,...,3.5}
+    \draw (\i+0.25,1) -- (\i+0.5,0.5);
+
+ % E la massa
+ \draw (4,0) rectangle (5.5,1.5);
+ \fill[gray!28] (4,0) rectangle (5.5,1.5);
+\end{scope}
+
+\end{tikzpicture} \caption{L'oscillatore armonico} \label{fig:vib:oscarm}\end{wrapfigure}
+Consideriamo il sistema costituito da una massa $m$ attaccata tramite una molla di costante
+elastica $K$ e lunghezza a riposo nulla ad una parete (tralasciando la gravità), ovvero il sistema
+in Figura~\ref{fig:vib:oscarm}.\\
+Questo è un problema di cui conosciamo la soluzione esatta anche se introduciamo una dissipazione proporzionale
+alla velocità $-\gamma v$. Abbiamo infatti che la forza applicata sul blocchetto è
+\[
+ F = -Kx - \gamma \dot{x}
+\]
+da cui , ricorando l'uguaglianza $F = ma = m\ddot{x}$ si ottiene l'equazione differenziale
+\begin{equation}
+ m \ddot{x} = -K x -\gamma \dot{x}
+\end{equation}
+Se aggiungiamo le condizioni iniziali $x(0) = x_0$ e $\dot{x}(0) = v_0$ la soluzione è anche unica.
+Se consideriamo infatti una soluzione del tipo $x(t) = e^{\lambda t}$ abbiamo che
+\[
+ \dot{x}(t) = \lambda e^{\lambda t} \qquad \ddot{x}(t) = \lambda^2e^{\lambda t}
+\]
+e quindi $x$ è soluzione se e solo se
+\[
+ m \lambda^2 e^{\lambda t} = -K e^{\lambda t} - \gamma \lambda e^{\lambda t}
+\]
+e considerando che l'esponenziale non è mai nullo questo si verifica solo se
+\[
+ m \lambda^2 + \gamma \lambda + K = 0
+\]
+Escludendo il caso in cui il determinante è $0$ abbiamo due scelte per $\lambda$, che possono
+essere reali o complesse. Nel caso reale i due esponenti ci danno una base dello spazio delle soluzioni.
+Nel caso complesso possiamo osservare che, essendo le soluzioni coniugate, abbiamo che
+\[
+ \lambda = \alpha + \beta i \qquad \con{\lambda} = \alpha - \beta i
+\]
+e quindi
+\[
+ e^{\lambda t} = e^{\alpha}( \cos{\beta t} + i \sin{\beta t}) \qquad e^{\con{\lambda} t} =
+ e^{\alpha}(\cos{\beta t} - i \sin{\beta t})
+\]
+dalle quali si ottiene che $e^{\alpha t}\cos{\beta t}$ e $e^{\alpha t}\sin{\beta t}$ sono ancora
+una base per lo spazio delle soluzioni. \\
+Nel caso con determinante nullo si può mostrare che prendendo $e^{\lambda t}$ e $te^{\lambda t}$ queste
+sono ancora una base. In ogni caso, siamo in grado di risolvere esattamente il nostro problema imponendo
+le condizioni iniziali.
+
+Ci piacerebbe ora generalizzare questo procedimento in situazioni più generali e più complicate. In particolare,
+vorremmo costruire un modello matematico di qualche situazione di reale interesse, come la seguente
+
+\subsection{La corda di una chitarra}
+Possiamo modellizzare la corda di una chitarra come in Figura~\ref{fig:vib:cordachitarra}, ovvero come $N$
+masse collegate fra loro da $N-1$ molle e fissate, sempre tramite molle, a dei supporti laterali.
+\begin{figure}[ht!]
+ \begin{center}
+  \begin{tikzpicture}
+   % Supporto sx
+   \draw (0,0) rectangle (1,2);
+   \fill[gray!30] (0,0) rectangle (1,2);
+
+   %% Serie di molle
+   \draw[snake=snake] (1,1) -- (2,0.5);
+   \draw (2.2,0.5) circle (0.2) node {$1$};
+   \draw[snake=snake] (2.4,0.5) -- (3.2,1.1);
+   \draw (3.4,1.1) circle (0.2) node {$2$};
+   \draw[snake=snake] (3.6,1.1) -- (4.2,0.5);
+   \draw (4.4,0.5) circle (0.2);
+   \draw[snake=snake] (4.6,0.5) -- (5.8,1.5);
+   \draw (6.0,1.5) circle (0.2);
+   \draw[snake=snake] (6.2,1.5) -- (7.4,0.6);
+   \draw (7.6,0.6) circle (0.2) node {$N$};
+   \draw[snake=snake] (7.8,0.6) --(9,1);
+
+   %% Bloccketto finale
+   \draw (9,0) rectangle (10,2);
+   \fill[gray!30] (9,0) rectangle (10,2);
+  \end{tikzpicture}
+  \caption{Modello di una corda di chitarra}
+  \label{fig:vib:cordachitarra}
+ \end{center}
+\end{figure}
+Questo modello non è più rappresentato da una equazione differenziale, ma da un sistema di equazioni.
+In tutta generalità possiamo assumere che le particelle $p_i$ abbiano massa $m_i$ e che la molla che collega
+$p_{i-1}$ con $p_{i}$ abbia costante elastica $k_i$. Indichiamo inoltre con $\gamma_i$ la costante di attrito
+della $i$-esima particella. Possiamo scrivere l'equazione del moto di questa proiettandola sugli assi:
+\begin{equation}
+ \left\{ \begin{array}{ll}
+ \ddot{x_i} m_i &= -k_i (x_i - x_{i-1}) - k_{i+1}(x_i - x_{i+1}) - \gamma_i \dot{x_i} \\
+ \ddot{y_i} m_i &= -k_i (y_i - y_{i-1}) - k_{i+1}(y_i - y_{i+1}) - \gamma_i \dot{y_i}
+ \end{array} \right.
+\end{equation}
+Queste possono essere risolte indipendemente per determinare il movimento orizzontale e verticale delle
+particelle. Per affrontare la risoluzione è conveniente scrivere l'equazione in forma matriciale.
+
+Sia $y = \trasp{(y_1, \ldots, y_n)}$, $M$ la matrice diagonale tale che $m_{ii} = m_i$ e $R$ la
+matrice diagonale tale che $r_{ii} = \gamma_i$. Costruiamo infine la matrice $K$ costruita in questo
+modo
+\[
+ K = \left[ \begin{array}{cccccc}
+         \ddots & \ddots & & & & \\
+          \ddots & \ddots & \ddots & & & \\
+          & -k_i & k_i+k_{i+1} & k_{i+1} & \\
+          & & \ddots & \ddots & \ddots & \\
+        \end{array} \right]
+\]
+ovvero in modo che le equazioni di prima si possano scrivere nel seguente modo
+\begin{equation}
+ My'' + Ry' + Ky = 0
+\end{equation}
+Usiamo ora un piccolo trucco per riportare questa equazione differenziale del secondo ordine ad una
+del primo. Definiamo $w = (y,y')$ il vettore ottenuto giustapponendo il vettore $y$ e la sua derivata.
+Riscrivendo il sistema\footnote{Stiamo tacitamente assumendo che $M$ sia invertibile ma questo è piuttosto
+ragionevole in quanto il determinante di questa è il prodotto delle masse e quindi è $0$ solo se almeno una
+delle masse è $0$, situazione che non siamo interessati a rappresentare con il nostro modello} si ottiene
+\begin{equation}
+ w' = \left[ \begin{array}{cc|cc}
+         \sblocko{0}{2} & \sblocke{I}{2} \\
+          & & & \\ \hline
+         \sblocko{M^{-1}K}{2} & \sblocke{M^{-1}R}{2} \\
+          & & & \\
+        \end{array} \right] w = Aw
+\end{equation}
+Supponiamo ora per semplicità che $A$ sia diagonalizzabile, ovvero $A = SDS^{-1}$. Si ha in questo caso
+che $w = SDS^{-1}w$ e quindi $S^{-1}w = DS^{-1}w$ dove $D$ è diagonale. Ponendo $z = S^{-1}w$ si ottiene
+$z_i = z_i d_{ii}$ e quindi ci si può ricondurre al caso precedente con la soluzione per componenti
+$z_i(t) = e^{d_{ii} t}$.
+\begin{os}
+ Osserviamo che, in realtà, conosciamo la soluzione di questa equazione differenziale, e la conosciamo
+ esplicitamente in ogni caso. Infatti è una verifica piuttosto immediata (e, più probabilmente, un fatto noto)
+ che $\frac{d}{dt} \Exp{tA}w_0 = A\Exp(tA)w_0$ e quindi è soluzione del nostro problema di Cauchy. Sorge spontanea
+la domanda: ``Perché abbiamo sviluppato tutto il ragionamento precedente?''. La riposta è che valutare questa
+soluzione per un certo $t$ ha un costo computazionale molto alto. \`E quindi inaccettabile il costo che si ottiene
+per la valutazione in tutti i punti che interessano a noi per ottenere un suono bem campionato (circa 44100 al secondo).
+\end{os}
+
+\section{Sistemi continui} \label{sec:vibsistcont}
+\subsection{Generalizzazione del caso delle $N$ masse}
+Supponiamo di avere una corda tesa fra due supporti fissi, che viene, in un'istante $t = 0$ messa in
+una certa posizione con una data velocità iniziale. Siamo interessati a studiare il successivo moto
+della corda e le sue vibrazioni, come abbiamo fatto nel caso di $N$ particelle discrete. \\
+Consideriamo la seguente formalizzazione matematica di questo problema. Possiamo descrivere il moto della
+corda parametrizzando i suoi punti tramite la coordinata orizzontale $x$ e introducendo una funzione
+$u(x,t)$ che definisce la posizone del punto individuato dalla coordinata $x$ al tempo $t$, come si vede nella
+Figura~\ref{fig:corda}. \\
+\begin{wrapfigure}{l}{70mm}
+ \begin{tikzpicture}
+  % Blocchetto 1
+  \draw (0,0) rectangle (1,2);
+  \fill[gray!30] (0,0) rectangle (1,2);
+
+  % Corda
+  \draw[very thick] (1,1) .. controls (2.5,2) and (3.5,2) .. (5,1);
+
+  % Secondo blocchetto
+  \fill[gray!30] (5,0) rectangle (6,2);
+  \draw (5,0) rectangle (6,2);
+
+  % E qualche chiarimento :)
+  \draw[->] (-0.5,-0.5) -- (6.5,-0.5) node[anchor=south] {$x$};
+  \draw (1,-0.4) -- (1,-0.6) node[anchor=north] {$0$};
+  \draw (5,-0.4) -- (5,-0.6) node[anchor=north] {$l$};
+
+  \draw[dashed] (3,-0.5) -- (3,1.75) node[anchor=south] {$u(x,t)$};
+ \end{tikzpicture}
+ \caption{Rappresentazione della corda}
+ \label{fig:corda}
+\end{wrapfigure}
+Un'analisi fisica del fenomeno\footnote{che non è nostro interesse mostrare ora} porta alla seguente
+equazione differenziale:
+\[
+ \frac{\partial^2 u}{\partial t^2} - \sigma \frac{\partial^2 u}{\partial x^2} = 0
+\]
+dove $\sigma > 0$ è una costante determinata dalla gravità, dalla tensione e dalla densità
+della corda. Prima di risolverla imponiamo le condizioni al contorno
+\[
+ u(0,t) = u(l,t)
+\]
+che ci permettono di controllare che gli estremi della corda siano sempre fissati ai supporti, e
+le condizioni iniziali
+\[
+ u_0(x) = u(x,0)
+\]
+che dà la posizione iniziale e
+\[
+ v_0(x) = \frac{\partial u}{\partial t}(x,0)
+\]
+che esprime la velocità iniziale di ogni particella. Questa formalizzazione si può facilmente estendere
+supponendo di avere una membrana introducendo $u(x,y,t)$.
+
+Per ora siamo particolarmente interessati a studiare se esistono delle soluzioni in cui tutti i punti
+si muovano con la stessa frequenza $\omega$, anche se eventulamente con diversa ampiezza. Si tratta
+di trovare una soluzione della forma
+\[
+ u(x,t) = v(x) \cdot \cos{(\omega t)}
+\]
+Osserviamo che data una $u$ di quest forma le derivate parziali diventano
+\[
+ \frac{\partial^2 u}{\partial t^2} = -v(x) \omega^2 \cos(wt) \qquad \frac{\partial^2 u}{\partial x^2} = v''(x) \cos(wt)
+\]
+e quindi l'equazione differenziale risulta essere
+\[
+  \cos(wt) \left[ -\omega^2 v(x) - \sigma v''(x) \right] = 0
+\]
+che può essere identicamente nulla solo se
+\[
+ \omega^2 v(x) + \sigma v''(x) \equiv 0 \iff v''(x) = -\frac{\omega^2 v(x)}{\sigma}
+\]
+
+\subsection{Discretizzazione del modello}
+
+Per risolvere effettivamente il problema supponiamo di suddividere l'intervallo $[0,l]$ in $n+1$
+punti equidistanti $x_0, \ldots, x_{n+1}$ tali che $x_0 = 0$ e $x_{n+1} = l$. Si avrà dunque
+che $x_i - x_{i-1} = h = \frac{l}{n+1}$. \\
+Per comodità poniamo $v(x_i) = v_i$ la posizione dell'$i$-esimo
+punto.
+Assumiamo ora che la soluzione dell'equazione differenziale sia di classe $C^4$ su $[0,l]$, e facciamo
+lo sviluppo in serie centrato in un generico punto $x_i$.
+\[
+ v(x_i + h) = v_{i+1} =  v_i + hv'(x_i) + \frac{h^2 v''(x_i)}{2} + \frac{h^3 v^{(3)}(x_i)}{6} + \frac{h^4 v^{(4)}(\xi_i)}{24}
+\]
+dove $\xi_i \in (x_i , x_{i+1})$.
+Analogamente si ottiene
+\[
+ v(x_i - h) = v_{i-1} = v_i - hv'(x_i) + \frac{h^2 v''(x_i)}{2} - \frac{h^3 v^{(3)}(x_i)}{6} + \frac{h^4 v^{(4)}(\eta_i)}{24}
+\]
+dove $\eta_i \in (x_{i-1}, x_i)$. Sommando queste due si ha
+\[
+ v_{i+1} + v_{i-1} = 2v_i + h^2 v''(x_i) + \frac{h^4}{24}[v^{(4)}(\xi_i) + v^{(4)}(\eta_i)]
+\]
+e possiamo ancora una volta ottenere un'espressione ``quasi'' esplicita della $v''(x_i)$:
+\[
+ v''(x_i) = \frac{1}{h^2} ( v_{i+1} + v_{i-1} - 2v_i ) - \frac{h^2}{24}[v^{(4)}(\xi_i) + v^{(4)}(\eta_i)]
+\]
+Nel nostro modello $h$ è destinato ad essere piccolo, perché $h = \frac{1}{n+1}$ e intuitivamente $n$ deve essere un
+numero grande se vogliamo approssimare bene il problema continuo. Abbiamo quindi che $h^2 \to 0$ quando $n \to \infty$
+e vorremmo poter dire che possiamo trascurare il termine con le derivate quarte.
+Se così fosse avremmo infatti ricondotto il nostro problema ad un problema di autovalori.
+
+Possiamo riscrivere infatti le relazione in questo modo
+\[
+ Av - \frac{h^2}{24} \tau = \lambda v
+\]
+dove $v = \trasp{( v_1 \ldots v_n )}$ e
+\[
+ A = \left[ \begin{array}{cccccc}
+             -2 & 1 &  & & & \\
+              1 & -2 & 1 & & & \\
+              & \ddots & \ddots & \ddots & & \\
+              & & 1 & -2 & 1&   \\
+              & & & 1 & -2 \\
+            \end{array} \right]
+\]
+e dove $\tau$ è un opportuno vettore che contiene i termini del tipo $\tau_i = v^{(4)}(\xi_i) + v^{(4)}(\eta_i)$.
+Osserviamo che possiamo dare una maggiorazione alla norma di $\tau$ perché essendo la derivata quarta di $v$ continua
+su un compatto è limitata, e quindi $\forall i \: |\tau_i | \leq M$ per un opportuno $M$.
+
+Ricordiamo il Teorema~\ref{te:BauerFike}; questo dice che presa una norma assoluta ed $A$ diagonalizzabile ed $F$
+una matrice di perturbazione per ogni autovalore $\lambda$ di $A + F$ esiste un autovalore $\mu$ di $A$
+tale che $||\lambda - \mu|| \leq \cond{T}||F||$ dove $T$ è il cambio di base che diagonalizza $A$.
+Se poniamo $F = -\frac{h^2}{24}\tau \trasp v$ dove $v$ è un autovettore di $v$ è tale che
+$Av - \frac{h^2}{24}\tau = \lambda v$ allora si ha
+\[
+ (A - \frac{h^2}{24} \tau \trasp v) v = \lambda v
+\]
+e quindi esiste $\mu$ autovalore di $A$ tale che\footnote{Osserviamo che, essendo $A$ reale simmetrica
+il cambio di base che la diagonalizza è ortogonale e quindi ha condizionamento $1$.} $||\lambda - \mu|| \leq ||F||
+= \frac{h^2}{24} \cdot \frac{||\tau\trasp v||}{\trasp vv} \leq \frac{h^2}{24\trasp vv} \sqrt{\rs{\trasp \tau v\trasp v\tau}}
+= ||\tau|| \frac{h^2}{24 \trasp vv}$; questo si ottiene osservando che la norma di una matrice diade $v\trasp v$
+è data dalla norma du $v$.
+
+Vogliamo ora mostrare che $\frac{||\tau||}{||v||}$ è limitato superiormente da una costante, in modo
+da provare la convergenza della nostra approssimazione.
+
+Consideriamo la seguente serie di eguaglianze
+\[
+ \sqrt{h} || \tau ||_2 = ( \sum_{i=1}^{n} v^{(4)}(\xi_i)^2 + v{(4)}(\eta_i)^2)^{\frac 1 2} \sqrt{h}
+ = ( \sum_{i=1}^{n} h v^{(4)}(\xi_i)^2 + h v{(4)}(\eta_i)^2)^{\frac 1 2}
+\]
+Osserviamo che l'ultima espressione può essere intesa, per $h \to 0$, come un'approssimazione dell'integrale
+di Riemann di $v^2(x)$, ed essendo l'integrale di una funzione continua su un compatto è limitato
+superiormente da una costante. Abbiamo quindi provato la tesi.
+
+Introduciamo ora un metodo iterativo che possiamo vedere come una estensione del metodo delle potenze
+e che ci permetterà di studiare nel dettaglio questa situazione.
+
+\subsection{Il metodo delle iterazioni ortogonali di sottospazi}
+Il metodo delle potenze come è stato analizzato nella Sezione~\ref{sec:metodopotenze} è basato sull'idea
+di prendere un vettore e iterare su di lui l'applicazione individuata dalla matrice $A$ di cui si vogliono
+calcolare gli autovalori. \\
+Osserviamo che questa idea è equivalente (anzi, forse è meglio rappresentata) all'iterare un sottospazio
+vettoriale di dimensione $1$. Supponiamo ora di voler calcolare, invece che 1, più autovalori delle matrice,
+precisamente $k$ (dove $k < n$ ed $n$ è la dimensione delle matrice) ognuno di molteplicità 1\footnote{%
+Questo solo per semplicità di esposizione. Non è complicato generalizzare l'idea}. Una naturale estensione del metodo
+sarebbe iterare un sottospazio vettoriale di dimensione $k$. Questo dovrebbe convergere ad un sottospazio di dimensione
+$k$ uguale alla somma degli autospazi dei primi $k$ autovalori.\\
+Si può osservare subito un problema computazionale. Sebbene questo discorso sia teoricamente corretto, è facile prevedere
+che il nostro spazio di dimensione $k$ convergerà verso l'autospazio relativo
+all'autovalore dominante (che è di dimensione 1). Più precisamente, supponiamo di rappresentare lo spazio
+con una matrice $x$ $n \times k$ le cui colonne siano una base dello spazio. Allora l'iterazione sarebbe
+\[
+\left\{\begin{array}{lcl}
+ x_0 &=& x \\
+ x_{k+1} &=& Ax_k
+\end{array} \right.
+\]
+Per lo stesso ragionamento fatto nel caso del metodo delle potenze originale tutte le colonne di $A$ convergeranno
+a multipli dello stesso vettore (quello dell'autovalore dominante).
+
+Un modo di risolvere questo problema potrebbe essere assicurarsi che durante l'iterazione tutte le colonne restino
+ortogonali fra loro. Consideriamo la seguente iterazione
+\[
+ \left\{ \begin{array}{lcl}
+          x_0 &=& x \\
+          T_{k} &=& A x_k \\
+          Q_k R_k &=& T_k \: \text{(scomposizione $QR$ di $T_k$)} \\
+          x_{k+1} &=& Q_k
+         \end{array} \right.
+\]
+Ricordando che la scomposizione QR di una matrice $n \times k$ con $k < n$ è tale che $Q$ è rettangolare
+ed è $n \times k$ e $R$ è quadrata $k \times k$. In particolare si osserva che nella nostra iterazione
+le colonne di $Q_k$ sono una
+base ortonormale per lo spazio generato dalle colonne di $T_k$.
+Osserviamo che calcolare esplicitamente $x_k$ non è realmente necessario e possiamo riformulare
+l'iterazione. Poniamo
+\[
+ B_k = \trasp{Q_k} A Q_k \qquad \text{e} \qquad B_k = U_k D \trasp{U_k}
+\]
+dove $U_K D \trasp{U_k}$ è la decomposizione spettrale di $B_k$. Si osserva che $T_{k+1} = A Q_k =
+Q_k B_k = $.
+% TODO: Capire l'iterazione implicita.
\ No newline at end of file
diff --git a/capitoli/capitolo1.tex b/capitoli/capitolo1.tex
new file mode 100644
index 0000000..55c8be3
--- /dev/null
+++ b/capitoli/capitolo1.tex
@@ -0,0 +1,687 @@
+\chapter{Il polinomio caratteristico}
+In questo capitolo ci occuperemo di descrivere le forme normali tipicamente usate per
+calcolare agevolmente gli autovalori di una matrice. Descriveremo dei metodi efficienti
+per valutare in un punto il polinomio caratteristico, che potranno essere usati
+nei capitolo seguenti per implementare gli algoritmi di calcolo effettivo. \\
+Premetteremo a questo una breve esposizione degli utilizzi pratici più comuni dei
+metodi che verranno in seguito esposti.
+
+\section{Esempi pratici di utilizzo}
+Prima di cominciare ad analizzare in dettaglio l'argomento presentiamo due applicazioni pratiche
+(che poi verranno analizzate in maggior dettaglio) che richiederanno la determinazione mediante
+metodi numerici degli autovalori di una matrice associata al problema.
+
+\subsection{Risoluzione di equazioni algebriche}
+\label{subsec:esempi:eqalgebriche}
+Un problema comune è, data un'equazione algebrica della forma
+\[
+ p(z) = p_0 + p_{1}z + \ldots + p_{n}z^{n} = 0
+\]
+trovare la $n$ radici $z_1 , \ldots , z_n$ tali che $p(z_i) = 0 \ \forall i = 1\ldots n$.
+
+Risolvere questo problema tramite algoritmi di iterazione funzionale, come vedremo, potrebbe non essere
+conveniente, e quindi ci si riconduce spesso (quasi sempre) ad un problema di calcolo di autovalori tramite
+il seguente procedimento. \\
+Consideriamo la matrice
+\[
+ F = \begin{bmatrix}
+      0 & 0    & \ldots & -\frac{p_0}{p_n} \\
+      1 & 0     &        & -\frac{p_1}{p_n} \\
+      0 & \ddots & \ddots & \vdots           \\
+      0 &  \hdots & 1      & -\frac{p_{n-1}}{p_n} \\
+     \end{bmatrix}
+\]
+detta matrice di \emph{Frobenius}\index{Frobenius, matrice di} o matrice \emph{Companion} \index{Companion, matrice}. Questa
+ha come polinomio caratteristico esattamente $p(z)$ e quindi i suoi autovalori sono esattamente le radici dello stesso. \\
+Osserveremo inoltre che sarà possibile mostrare la stabilità all'indietro del procedimento per calcolare
+gli autovalori, ovvero potremo essere sicuri che gli autovalori calcolati mediante l'aritmetica approssimata
+di macchina saranno le radici di un polinomio i cui coefficienti ``disteranno poco'' da quelli originali di $p(z)$.
+Questo in generale non ci assicura di avere un risultato con una buona approssimazione; più precisamente questo sarà
+garantito solo nel caso in cui il problema sia ben condizionato\footnote{Ricordiamo che un problema è ben condizionato
+quando a piccole variazioni dei dati iniziali corrispondono piccole variazioni dei dati finali.}.
+
+\subsection{Equazioni differenziali}
+Un altro caso in cui il calcolo di autovalori ci permetterà di risolvere un problema comune sarà quello delle
+equazioni differenziali. Non abbiamo ancora gli strumenti per approfondire questo argomento, ma possiamo anticipare
+che i metodi per il calcolo di autovalori ci permetteranno sia di arrivare alla soluzione (in qualche caso) che
+di stimare l'effetto di una perturbazione dei dati iniziali (in altri casi).
+
+\section{Analisi del condizionamento} \label{sec:analisidelcondizionamento}
+In questa sezione vorremmo analizzare il condizionamento del nostro problema. Il calcolo degli autovalori non
+è sempre un problema ben condizionato, come possiamo mostrare con questo esempio: \\
+Sia $F$ la matrice di Frobenius associata al polinomio $z^n$, ovvero la matrice con soli zeri ad eccezione della
+sottodiagonale, composta da soli $1$. \\
+I suoi autovalori sono tutti $0$ ed hanno moleplicità algebrica $n$ e molteplicità geometrica $1$\footnote{il che si
+capisce facilmente notando che la matrice $F$ è in forma di Jordan}. \\
+Se noi perturbiamo la matrice sottraendole la matrice $\eps e_1 \trasp{e_n}$ otteniamo la matrice di Frobenius
+associata al polinoio $z^n + \eps$. Da quanto abbiamo osservato nella Sezione~\ref{subsec:esempi:eqalgebriche} sappiamo che
+gli autovalori di quest'ultima sono le radici $n$-esime dell'unità moltiplicate per $||\eps||^{\frac{1}{n}}$;
+possiamo osservare che al crescere di $n$ anche se $\eps$ è piccolo questo numero può diventare piuttosto grande, e
+portare quindi ad errori non trascurabili.
+\subsection{Il caso di una matrice diagonalizzabile}
+Cominciamo ad analizzare un caso relativamente semplice, ovvero quello dove $A$ è una matrice diagonalizzabile,
+per cui dimostreremo un risultato detto
+\begin{te}[di Bauer - Fike] \label{te:BauerFike}
+ Se $A \in \mat{\R}{n}$ è una matrice diagonalizzabile tramite il cambio di base $V^{-1}$ ed $\eta$ è
+ un autovalore della matrice perturbata $A + \delta A$ allora esiste un autovalore $\lambda$ di $A$ tale che
+ \[
+  ||\lambda - \eta|| \leq ||\delta A || \cdot \cond{V}
+ \]
+\end{te}
+\begin{proof}
+Sappiamo che esiste $V$ base di autovettori tali che
+\[
+ A = VDV^{-1} \; \textrm{con} \ D \ \textrm{diagonale}
+\]
+Supponiamo ora di aver calcolato $\eta$ autovettore di una matrice $A + \delta A$ e verifichiamo
+quanto dista $\eta$ dagli autovettori di $A$.\\
+Osserviamo che questo equivale a
+\[
+ (A + \delta A) y = \eta y \ \iff \ (A - \eta y) = \delta A y
+\]
+Possiamo distinguere due casi:
+\begin{description}
+ \item[$(A-\eta I)$ è singolare] Questo è il caso migliore in cui possiamo sperare, in quanto questo significa
+ che $\eta$ è un autovalore di $A$ e quindi la distanza è $0$.
+  \item[$(A-\eta I)$ non è singolare] ed allora ammette un'inversa. Abbiamo quindi che
+  \[
+   y = -(A - \eta I)^{-1}( \delta A y )
+  \]
+  Consideriamo dunque una norma matriciale indotta tale che data una matrice $D$ diagonale si abbia
+  $||D|| = \max_{i = 1 \ldots n}\{|d_{ii}|\}$\footnote{la norma $1$, $2$ e $\infty$ soddisfano questo
+  requisito,  ad esempio; questo tipo di norma è detta \emph{assoluta}.} ed effettuiamo le seguenti maggiorazioni
+  \[
+   ||y|| \leq ||(A -\eta I)^{-1}|| \cdot || \delta A || \cdot ||y||
+  \]
+  che si verifica solo se (ricordando che essendo $y$ un autovettore
+  $y \neq 0$ e quindi $||y|| \neq 0$)
+  \[
+   1 \leq ||V|| \cdot ||( D -\eta I)^{-1}|| \cdot ||V^{-1}|| \cdot || \delta A ||
+   \leq \frac{\cond{V} \cdot ||\delta A ||}{\min_{i = 1 \ldots n}\{ \lambda_i - \eta\}}
+  \]
+  da cui si ottiene che esiste un $j \in 1 \ldots n$ tale che
+  \[
+   ||\lambda_j - \eta|| \leq ||\delta A || \cdot \cond{V}
+  \]
+\end{description}
+ \`E evidente quindi che in entrambi i casi è valida la diseguaglianza della tesi (nel primo caso si ha addirittura
+ che $||\lambda - \eta|| = 0$), e quindi il teorema è provato.
+\end{proof}
+
+\begin{os}
+ Dobbiamo fare attenzione al fatto che questa maggiorazione ottenuta dal precedente teorema è in valore
+ assoluto, e quindi non ci dice nulla sull'errore relativo. Saremo certi di ottenere un buon
+ condizionamento solo nel caso in cui gli autovalori trovati non siano troppo ``piccoli''.
+\end{os}
+
+Data questa maggiorazione dell'errore ci possiamo chiedere come fare a minimizzare l'unico fattore
+su cui possiamo avere un ``controllo'', ovvero $\cond{V}$. Dalle proprietà delle norme matriciali
+indotte sappiamo che $\forall V \ \cond{V} \geq 1$. \\
+Inoltre possiamo osservare che se $V$ è una matrice unitaria allora $\cond{V}$ vale esattamente $1$. \\
+Sembra quindi opportuno, quando possibile, cercare di rendere diagonale la matrice $A$ tramite un cambio
+di base unitario. Quando è possibile farlo? \\
+Grazie alla forma normale di Schur possiamo dare una caratterizzazione completa delle matrici per cui questo
+è possibile. Si può infatti provare che data $A \in \mat{\C}{n}$ questa è diagonalizzabile mediante
+matrici unitarie se e solo se $A$ è normale, ovvero $A\herm{A} = \herm{A}A$.
+
+\begin{os}
+ Ci ricordiamo che per risolvere i sistemi lineari abbiamo individuato due classi di metodi:
+ \begin{description}
+  \item[I metodi diretti] i quali forniscono una soluzione ``esatta'' del problema in un numero
+  finito di passi, a meno dell'errore di macchina e algoritmico.
+  \item[I metodi iterativi] i quali invece forniscono una soluzione approssimata del sistema,
+  iterando un numero finito di passi di una successione che converge solamente dopo un numero
+  infinito.
+ \end{description}
+Nel caso della ricerca degli autovalori la prima classe di metodi non può essere applicata, in quanto
+il problema è equivalente a trovare le radici del polinomio caratteristico, problema che \emph{non può
+essere risolto tramite una formula}.
+\end{os}
+
+Siamo quindi consci che la nostra unica opportunità per arrivare alla soluzione sarà eseguire una
+successione di cambi di base (che sono degli invarianti del problema) che porti la matrice in una forma
+in cui gli autovalori siano facilmente determinabili. \\
+Il condizionamento del problema sarà quindi maggiorabile con il prodotto dei condizionamenti di tutti i
+cambi di base (si può infatti mostrare che prese due matrici $V$, $S$ si ha $\cond{VS}\leq\cond{V}\cdot\cond{S}$)
+e quindi dovremo
+cercare dei cambi di base con un piccolo condizionamento (come, ad esempio, quelli unitari).
+
+Il teorema di Bauer--Fike ci permette di dare una maggiorazione globale sul condizionamento degli autovalori,
+ma in alcuni casi è possibile dare anche una maggiorazione del condizionamento per un autovalore singolo. \\
+Consideriamo ad esempio il caso di un autovalore con molteplicità algebrica e geometrica $1$.
+
+\begin{pr}
+ Data una matrice $A \in \mat{\C}{n}$, una matrice di perturbazione $\eps F$, un autovalore
+ $\lambda \in \spe{A}$ ed $\eta$ un autovalore della matrice perturbata $A + \eps F$ si ha che,
+ dati $y, w$ autovettori destro e sinistro di modulo $1$ relativi a $\lambda$
+ \[
+  ||\eta - \lambda|| \leq \frac{1}{\herm{w}y} \cdot ||\eps F||
+ \]
+\end{pr}
+\begin{proof}
+ Sappiamo che $\eta$ e il suo autovettore relativo\footnote{che evidentemente non è unico, ma possiamo supporre
+ di sceglierlo in modo continuo} $y$ sono funzioni analitiche di $\eps$ e quindi
+ possiamo scrivere
+ \[ \left\{\begin{array}{l}
+  \eta(\eps) = \lambda  + \eps \cdot \xi + O(\eps^2) \\
+  y(\eps)   = y + \eps \cdot w + O(\eps^2) \\
+  \end{array}\right.
+ \]
+Effettuando un'analisi al I ordine otteniamo
+\begin{align*}
+ (A + \eps F) ( y + \eps w) & = (\lambda + \eps \xi)(y + \eps w) \\
+ Ay + \eps A w + \eps Fy & = \lambda y + \lambda \eps w + \eps \xi y   \\
+\end{align*}
+considerando che $Ay = \lambda y$ e dividendo tutto per $\eps$ si ottiene
+\[
+ Aw + Fy = \lambda w + \xi y
+\]
+Sappiamo inoltre che deve esistere $u$ autovettore sinistro unitario di $A$ relativo all'autovalore
+$\lambda$ e quindi, moltiplicando tutto per $u$
+\begin{align*}
+ \herm{u}Aw + Fy & = \lambda \herm{u} w + \xi \herm{w} y \\
+ Fy & = \xi \herm{u} y
+\end{align*}
+Ricordando infine che, a meno di termini di ordine maggiore di $1$, $||\eps \xi|| = ||\lambda - \eta||$ e
+che $||u|| = ||y|| = 1$ si ottiene
+\[
+ ||\lambda - \eta|| = ||\eps \xi|| \leq || \eps F|| \cdot \frac{1}{\herm{u}y}
+\]
+che è la tesi.
+\end{proof}
+
+%% 1 ottobre 2009
+\section{Operazioni preliminari}
+In questa sezione vorremmo introdurre delle operazioni preliminari da compiere prima di applicare
+un qualsiasi metodo per il calcolo effettivo degli autovalori. \\
+\subsection{Matrici di Householder}
+I metodi che solitamente vengono usati accettano infatti in input solo matrici particolari, più
+precisamente
+\begin{description}
+ \item[Matrici hermitiane tridiagonali] Ovvero delle matrici hermitiane tali che $a_{ij} = 0$ se
+  $| i -j | \geq 2$ e tale che $a_{ij} = \con{a_{ji}} \ \forall i,j \in 1 \ldots n$.
+  \item[Matrici in forma di Hessenberg superiore] Ovvero le matrici tali che $a_{ij} = 0$ se $i > j +1$.
+\end{description}
+
+\begin{figure}[h]
+\begin{center}
+ \subfigure{
+$ T =
+   \begin{bmatrix}
+    \alpha_1 & \con{\beta_1} & 0      & 0 \\
+    \beta_1  & \ddots        & \ddots & 0  \\
+    0        & \ddots        & \ddots & \con{\beta_{n-1}} \\
+    0        & 0             & \beta_{n-1} & \alpha_n \\
+   \end{bmatrix}$
+}
+\subfigure{
+$ H =
+\begin{bmatrix}
+ \times & \hdots & \hdots & \times \\
+ \times & \ddots &     & \vdots \\
+ 0  & \ddots & \ddots & \vdots \\
+ 0 & 0       & \times   & \times \\
+\end{bmatrix}$
+}
+\end{center}
+ \caption{Struttura delle matrici tridiagonali e di Hessenberg superiore}
+\end{figure}
+
+Abbiamo quindi la necessità di trovare un algoritmo efficiente e stabile per trasformare
+una generica matrice $A$ in una matrice $T$ o $H$ rispettivamente tridiagonale o in forma
+di Hessenberg superiore. \\
+Per quanto osservato nella Sezione~\ref{sec:analisidelcondizionamento} cercheremo una $Q$ unitaria
+tale che
+\[
+ QA\herm{Q} = T \qquad \textrm{oppure} \qquad QA\herm{Q} = H
+\]
+Si osserva subito che sia $Q$ che $T$ sono unitarie e quindi una condizione necessaria per il verificarsi
+della prima eventualità è che anche $A$ sia hermitiana\footnote{in quanto la stiamo trasformando per congruenza,
+che conserva l'hermitianità}
+
+\begin{de}[Matrici di Householder]
+ Una matrice $P$ si dice \emph{matrice elementare di Householder} se esistono $\sigma \in \R \setminus \{0\}$
+ e $u \in \R^n$ tali che $P = I - \sigma u \herm{u}$ e $\sigma = \frac{2}{||u||_2}$.
+\end{de}
+
+Sia $P$ una matrice di Householder. Allora valgono le seguenti:
+\begin{description}
+ \item[$P$ è Hermitiana] Se abbiamo $P = I -\sigma u \herm{u}$ allora $p_{ij} = u_i\con{u_j}$, e quindi
+  $\con{p_{ji}} = \con{u_j\con{u_i}} = u_i\con{u_j} = p_{ij}$.
+ \item[$P$ è unitaria] Se consideriamo che $P$ è hermitiana abbiamo che $P\herm{P} = P^2 =
+  (I - \sigma u \herm{u})^2 = I -2\sigma u \herm u + \sigma^2 \herm u u u \herm u = I$.
+ \item[$\deter{P} = -1$] Consideriamo una base dello spazio ottenuta imponendo come primo
+  vettore $u$ e costruendo gli altri ortogonali a lui. Si osserva facilmente che la matrice
+  associata a $P$ diventa come la matrice identità ad eccezione del posto $(1,1)$ dove si trova
+  un $-1$ (infatti $Pu = -u$) e quindi $\det{P} = -1$.
+\end{description}
+
+Consideriamo ora una generica matrice $A$ e mostriamo che esiste una matrice unitaria $P$ tale che
+$PA\herm{P}$ ha tutti gli elementi delle prima colonna con indice maggiore di $1$ uguali a $0$.
+Questo sarà il passaggio che poi ci permetterà di mostrare per induzione che si può portare una
+qualsiasi matrice in forma di Hessenberg superiore. \\
+Data la seguente matrice generica $A$
+\[
+ A = \left[ \begin{array}{c|cc}
+      a_{11} & \multicolumn{2}{|c}{\herm{w}} \\
+  \hline
+      \multirow{2}{*}{$v$}    & \sblocke{\; \hat{A}\;}{2}  \\
+        & &
+     \end{array} \right]
+\]
+So che esiste una matrice $\hat P$ di Householder tale che $\hat{P}v = \beta e_1$ da cui si ottiene che
+\[
+ P = \left[ \begin{array}{c|cc}
+  1 & \multicolumn{2}{c}{\herm{0}} \\
+  \hline
+  \multirow{2}{*}{$0$} & \sblocke{ \quad \hat P \quad}{2} \\
+  & &
+      \end{array} \right]
+\qquad
+ PA\herm{P} = \left[ \begin{array}{c|cc}
+                      a_{11} & \multicolumn{2}{|c}{\herm{w} \herm{\hat{P}}} \\
+\hline
+		      \multirow{2}{*}{$\hat Pv$} & \sblocke{\hat P \hat A \herm{\hat{P}}}{2} \\
+                      & &
+                     \end{array} \right]
+\]
+Ricordando che $\hat{P}v = \beta e_1$ si ottiene che in $n-2$ passi la matrice di partenza si può ridurre
+in forma di Hessenberg superiore. \\
+Si può osservare che se la matrice di partenza era hermitiana anche la matrice ridotta lo sarà,
+dato che la trasformazione per matrici di Householder è unitaria, e quindi la matrice ottenuta
+sarà tridiagonale.
+
+\subsection{Valutazione del costo computazionale}
+Il costo computazionale di ogni passo del procedimento sopra descritto è dato da
+\begin{enumerate}
+ \item Calcolo di $\hat P$;
+ \item Calcolo di $\herm{w} \hat{P}$ (qualora sia necessario, cioè quando $A$ non è
+  hermitiana);
+ \item Calcolo di $\hat{P}\hat{A}\herm{\hat{P}}$;
+\end{enumerate}
+I primi due sono $O(n)$ mentre il terzo è il più grande, $O(n^2)$. Il procedimento completo
+risulta quindi con un costo computazionale di $O(n^3)$.
+
+\subsection{I vantaggi della riducibilità}
+Data la matrice in forma tridiagonale o in forma di Hessenberg superiore è facile verificare che
+la condizione di riducibilità è verificata solo se $\exists i \: \beta_i = 0$ dove i $\beta_i$ sono
+gli elementi della sottodiagonale. Non è però vero il contrario, ovvero se i $\beta_i$ sono tutti
+diversi da $0$ non è certo che la matrice sia irriducibile\footnote{questa implicazione vale solo
+nel caso hermitiano tridiagonale}. D'ora in poi diremo che la matrice è \emph{non riducibile}
+se tutti i $\beta_i$ non sono $0$, mentre useremo il termine \emph{irriducibile} per
+indicare la condizione usuale di irriducibilità. \\
+La riducibilità porta notevoli vantaggi computazionali alla risoluzione del problema in quanto
+si ottiene una matrice del tipo
+\[
+ M = \left[ \begin{array}{c|c}
+             A & B \\
+  \hline
+             0 & C \\
+            \end{array} \right]
+\]
+e quindi è immediato verificare che gli autovalori di $M$ sono quelli di $A$ uniti a quelli di $C$.
+
+\begin{pr}
+ Sia $A$ una matrice tridiagonale hermitiana irriducibile. Allora tutti i suoi autovalori hanno molteplicità $1$.
+\end{pr}
+\begin{proof}
+ Sia $\lambda$ un autovalore di $A$. Sappiamo che $A - \lambda I$ non è un isomorfismo, e che la molteplicità
+ geometrica di $\lambda$ è pari al rango di $A - \lambda I$.
+ Se consideriamo il minore di sud-ovest $J$ possiamo osservare che:
+ \begin{itemize}
+  \item $J$ è triangolare superiore
+  \item la diagonale $J$ è composta dagli elementi $\beta_1 \ldots \beta_n$ della sottodiagonale di $A$
+ \end{itemize}
+Queste due osservazioni ci permettono di concludere che $\deter{A - \lambda I} = \prod_{i=0}^{n}~\beta_i$ che
+è diverso da $0$, e quindi la molteplicità geometrica di $\lambda$ è $1$. Sapendo che la matrice è
+hermitiana possiamo anche essere sicuri che sia diagonalizzabile, e quindi che per ogni autovalore
+la molteplicità geometrica coincida con quella algebrica. In particolare l'autovalore $\lambda$ ha
+molteplicità $1$.
+\end{proof}
+
+Osserviamo che se la matrice invece che essere tridiagonale hermitiana è in forma di Hessenberg superiore,
+possiamo solo affermare che ogni autovalore ha molteplicità gemetrica $1$. Non possiamo però controllare
+la molteplicità algebrica e quindi non possiamo essere certi della diagonalizzabilità della matrice.
+
+\section{Il polinomio caratteristico}
+Il primo metodo che si può pensare di applicare cercando gli autovalori di una data matrice $A$ è
+quello di cercare gli zeri del polinomio caratteristico. Nonostante questo sia raramente applicabile,
+alcune analisi sulla ``struttura'' del polinomio potranno fornirci dei risultati teorici che ci saranno
+utili in seguito.
+
+\subsection{Il caso delle matrici Hermitiane tridiagonali} \label{subsec:hermdiag}
+Consideriamo una matrice $A \in \mat{\C}{n}$ in forma tridiagonale hermitiana.
+In tutta la sezione indicheremo con
+\begin{description}
+ \item[$A_k$: ] Il minore di nord-ovest di ordine $k$ della matrice $A$. Osserviamo in particolare
+ che si tratta ancora di una matrice hermitiana tridiagonale per ogni $k$.
+ \item[$p_k(z)$: ] Il polinomio caratteristico delle matrice $A_k$, ed in particolare $p_n = p$;
+ \item[$\lambda_i^{(k)}$: ] L'$i$-esimo autovalore della matrice $A_{k}$. L'ordinamento non ha importanza
+ dove non è espressamente specificato;
+\end{description}
+Se proviamo a calcolare il polinomio caratteristico di $A_k$ sviluppando sull'ultima riga (o, analogamente,
+sull'ultima colonna) otteniamo la seguente relazione ricorrente e tre termini:
+\[
+p_k(z) = \deter{A - zI} = (\alpha_k - z) p_{k-1}(z) - |\beta_{k-1}|^2 p_{k-2}(z)
+\]
+Questa relazione ha senso anche nel caso $k = 1, 2$ a patto di porre $p_{0}(z) = 1$ e $p_{-1}(z) = 0$.
+Una volta nota questa relazione valutare il polinomio caratteristico di $A = A_n$ in un punto diventa molto
+meno oneroso (computazionalmente) rispetto al calcolare tutti i coefficienti. \\
+Si può infatti stimare la complessità del calcolo $p_k(z)$ a partire da $p_{k-1}(z)$ e $p_{k-2}(z)$
+con circa $5$ operazioni aritmetiche, e quindi
+la valutazione del polinomio in un qualsiasi punto $z$ risulta costare $O(n)$.
+\begin{os} \label{os:autovalpol}
+ Dalla formula possiamo dedurre che se $\xi$ è un autovalore della matrice $A_k$ allora non può essere
+ anche autovalore della matrice $A_{k-1}$.
+\end{os}
+Supponiamo per assurdo che $p_{k-1}(\xi) = 0 = p_k(\xi)$. Dunque si avrebbe
+$p_k(\xi) = 0 = (\alpha_k - \xi) p_{k-1}(\xi) - |\beta_{k-1}|^2 p_{k-2}(\xi) = |\beta_{k-1}|^2 p_{k-2}(\xi)$
+e quindi anche $p_{k-2}(\xi)$ deve essere nullo. Ripetendo questa considerazione si ottiene che anche $p_0(\xi)$
+deve essere nullo, ma $p_0(\xi) = 1$ (il polinomio costante) che è assurdo.
+In definitiva per ogni $k \neq j$ si ha che $\spe{A_k} \cap \spe{A_j} = \emptyset$.
+
+\subsection{L'equazione secolare} \label{sec:eqsecolare}
+Una domanda che sorge spontanea dopo queste considerazioni è: ``Che relazione possiamo trovare
+fra gli autovalori di due minori $A_k$ e $A_{k-1}$ di una matrice $A$?''. \\
+Il polinomio come scritto nella sezione precedente ci permette solamente di notare che
+gli autovalori sono distinti. Possiamo però estrapolare delle informazioni più dettagliate rappresentandolo
+in una opportuna base (di polinomi).
+Per questo paragrafo possiamo limitarci, per semplicità di notazione, al caso di una matrice simmetrica
+in $\mat{\R}{n}$, anche se il caso complesso si tratta con gli stessi passaggi.
+Dividiamo la matrice $A$ in blocchi nel modo seguente
+\[
+ A= \left[ \begin{array}{cc|c}
+          \sblocko{A_{n-1}}{2} & \\
+           & & \beta_{n-1} \\ \hline
+           &  \beta_{n-1} & \alpha
+        \end{array}
+ \right]
+\]
+Dato che la matrice $A_{n-1}$ è simmetrica esiste una matrice ortogonale $Q_{n-1}$ tale che
+$D_{n-1} = Q_{n-1}A\trasp{Q_{n-1}}$ dove $D$ è la matrice con gli autovalori di $A$ sulla
+diagonale. \\
+Consideriamo dunque la matrice $\hat Q$ così composta:
+\[
+ \hat Q = \left[
+\begin{array}{cc|c}
+ \sblocko{Q_{n-1}}{2} & \\
+  & & \\ \hline
+  & & 1
+\end{array} \right]
+\]
+$\hat Q$ è sempre ortogonale e si verifica che
+\[
+ \left[ \begin{array}{cc|c}
+  \sblocko{Q_{n-1}}{2} & \\
+  & & \\ \hline
+  & & 1
+ \end{array} \right]
+ \left[ \begin{array}{cc|c}
+         \sblocko{A_{n-1}}{2} & \\
+         & &  \beta_{n-1}\\ \hline
+         & \beta_{n-1} & \alpha_{n} \\
+        \end{array} \right]
+ \left[ \begin{array}{cc|c}
+         \sblocko{\trasp{Q_{n-1}}}{2} & \\
+         & & \\ \hline
+         & & 1
+        \end{array} \right]
+=
+\left[ \begin{array}{cc|c}
+        \sblocko{D_{n-1}}{2} & \multirow{2}{*}{$w$} \\
+        & & \\ \hline
+        \multicolumn{2}{c|}{\trasp{w}} & 1
+       \end{array} \right] = B_n
+\]
+Una matrice come $B_n$, ovvero una diagonale ``orlata'' sull'ultima riga e sull'ultima
+colonna si dice \emph{matrice a freccia}\footnote{Penso che il motivo sia piuttosto
+evidente guardando la forma degli elementi non nulli}.
+Dato che questa trasformazione viene realizzata tramite matrici ortogonali anche il
+polinomio caratteristico rimane invariato e quindi si ha che
+\[
+ p_n(z) = \deter{B_n - zI}
+\]
+Ricordiamo ora un risultato di Analisi Numerica
+\begin{pr}
+ Sia $M$ una matrice a blocchi come la seguente
+ \[
+  M = \left[ \begin{array}{c|c}
+              A & B \\ \hline
+              C & D \\
+             \end{array} \right]
+ \]
+dove $A$ e $D$ sono matrici quadrate. Allora Esiste una matrice $\Gamma$ delle stesse dimensioni di $D$
+tale che
+\[
+ M = \left[ \begin{array}{c|c}
+      I & 0 \\ \hline
+      \times & I
+     \end{array} \right]
+ \left[ \begin{array}{c|c}
+         A & 0 \\ \hline
+         0 & \Gamma
+        \end{array} \right]
+\left[ \begin{array}{c|c}
+        I & \times \\ \hline
+        0 & I
+       \end{array} \right]
+\]
+ed in particolare $\Gamma = D - C A^{-1} B$ è detta \emph{complemento di Schur di $A$ in $M$}.
+\end{pr}
+\begin{proof}
+ Provando a scrivere la relazione più esplicitamente otteniamo
+\[
+ \begin{bmatrix}
+  I & 0 \\
+  \trasp{\alpha} & I
+ \end{bmatrix}
+ \begin{bmatrix}
+  A & 0 \\
+  0 & \Gamma
+ \end{bmatrix}
+ \begin{bmatrix}
+  I & \beta \\
+  0 & I
+ \end{bmatrix} =
+ \begin{bmatrix}
+   A & B \\
+   C & D
+ \end{bmatrix}
+\]
+dove $\trasp \alpha$, $\beta$ e $\Gamma$ sono le incognite. Sviluppando si ottengono le seguenti equazioni
+\[
+ \left\{
+ \begin{array}{l}
+  A \beta = B \\
+  \trasp \alpha A = C \\
+  \trasp \alpha A \beta + \Gamma = D
+ \end{array} \right.
+\]
+Ricordando che $\deter{A} \neq 0$ e considerando le prime due equazioni come degli insiemi di
+sistemi lineari si ottiene che esistono e sono unici $\alpha$ e $\beta$ che soddisfano le richieste, ed
+in particolare sono
+\[
+\left\{ \begin{array}{l}
+ \trasp \alpha = C A^{-1} \\
+ \beta = A^{-1} B
+\end{array} \right.
+\]
+In conclusione $\Gamma = D - \trasp \alpha A \beta = D - C A^{-1} A A^{-1} B = D - C A^{-1} B$
+e quindi la tesi è provata.
+\end{proof}
+\begin{os}
+ Questa proposizione ci è utile perché ci permette di calcolare il determinante di una matrice di questo
+tipo calcolando semplicemente il prodotto del determinante di $A$ per quello di $\Gamma$.
+\end{os}
+Osserviamo prima di tutto che la matrice $B_n - zI$, per $z$ fissato, è in questa forma. Possiamo
+scrivere
+\[
+ B_n - zI = \left[ \begin{array}{ccc|c}
+                    \lambda_1^{(n-1)} - z & & & \multirow{3}{*}{$w$} \\
+		    & \ddots & &  \\
+		    & & \lambda_{n-1}^{(n-1)} -z& \\ \hline
+		    \multicolumn{3}{c|}{\trasp{w}} & \alpha_n -z
+                   \end{array} \right] =
+\left[ \begin{array}{cc|c}
+        \sblocko{E_{n-1}}{2} & \multirow{2}{*}{$w$} \\
+        & &  \\ \hline
+        \multicolumn{2}{c|}{\trasp{w}} & \alpha_n -z
+       \end{array} \right]
+\]
+dove $E_{n-1}$ ed $[ \alpha_n -z ]$ sono quadrate\footnote{la seconda in particolare è
+semplicemente uno scalare}.
+Calcoliamo dunque il polinomio caratteristico della matrice (in tutti i punti dove $E_{n-1}$ è
+invertibile, ovvero in tutti gli $z$ che sono diversi dagli autovalori di $A_{n-1}$)
+$B_n$
+\[
+p_n(z)=\deter{B_n - zI}=\deter{A} (\alpha_n - z - \trasp{w}E_{n-1}^{-1}w)
+\]
+E quindi possiamo scrivere
+\[
+ p_n(z) = \Bigg[ \prod_{j=1}^{n-1} (\lambda_j^{(n-1)} - z) \Bigg] \cdot
+ \Bigg[ \alpha_n - z  - \sum_{i=1}^{n} \frac{w_i^2}{\lambda_i^{(n-1)} - z}\Bigg]
+\]
+e per continuità possiamo estenderlo a tutto $\C$, ottenendo
+\[
+ p_n(z) = (\alpha_n - z)\cdot \prod_{j=1}^{n-1} (\lambda_j^{(n-1)} - z) - \sum_{i=1}^{n}w_i^2\prod_{\substack{i=1\\j\neq i}}^{n}(\lambda_i^{(n-1)}-z)
+\]
+\begin{os}
+ Nel definire il polinomio siamo stati costretti ad escludere una quantità finita di punti (precisamente
+ gli autovalori di $A_{n-1}$), ma è evidente che
+ due funzioni polinomiali su $\C$ o su $\R$ che sono uguali a meno di una quantità finita di punti devono coincidere.
+\end{os}
+Questa forma del polinomio ci permette di valutarlo negli autovalori $\lambda_i^{(n-1)}$ della matrice
+$A_{n-1}$. Otteniamo la seguente
+\[
+ p_n( \lambda_i^{(n-1)} )  = 0 - w_i^2\prod_{\substack{i=1\\i\neq j}}^{n} (\lambda_i^{(n-1)} - z) \neq 0
+\]
+e quindi, in particolare, per ogni $i$ si ottiene $w_i \neq 0$.
+Siamo ora interessati a cercare le radici del polinomio, sfruttando le informazioni che supponiamo
+di avere sugli autovalori della matrice di ordine $n-1$. \\
+Consideriamo che $\forall j=1 \ldots n-1 \quad p(\lambda_j^{(n-1)}) \neq 0$, per quanto visto nell'~Osservazione~\ref{os:autovalpol},
+e quindi le radici del polinomio sono le radici della funzione
+\[
+ g(\xi) = \alpha_n - \xi-  \sum_{j=1}^{n} \frac{w_i^2}{\lambda_j^{(n-1)} - \xi}
+\]
+Questa equazione ($g(\xi) = 0$) è detta \emph{equazione secolare}. Le ragione del nome curioso non
+sono note, anche se esistono due teorie principali. Una sostiene che l'appellativo deriva dall'usanza
+diffusa nei primi del novecento di chiamare \emph{polinomio secolare} il polinomio caratteristico
+di una matrice, mentre l'altra sostiene che invece il nome sia dovuto ad una sua utilità
+in alcune teorie di descrizione del moto di pianeti (che tipicamente hanno tempi piuttosto lunghi). \\
+Ricordando che annullare $g$ è la stessa cosa che annullare $p_n$ possiamo tracciare un grafico
+qualitativo di $g$ (come si vede in Figura~\ref{fig:eqsecolare}) e notare che ad ogni asintoto verticale
+di $g$ corrisponde un autovalore di $A_{n-1}$ e che gli autovalori della matrice $A_n$ sono separati
+da quelli di $g$, in quanto la derivata di $g$ è sempre negativa (e quindi la funzione monotona).
+\begin{figure}[ht]
+  \begin{center}
+ \begin{tikzpicture}
+\fill[blue!8] (-6.5,-3.5) rectangle (5.5,2.5);
+  %% Disegnamo gli assi
+\begin{scope}[very thin]
+  \draw[->] (-6,0) -- (5,0) node[anchor=north] {$\xi$};
+  \draw[->] (-0.5,-3) -- (-0.5,2) node[anchor=east] {$g(\xi)$};
+\end{scope}
+  \begin{scope}[thick]
+  %% Prima curva
+  \draw (-6,2) .. controls (-5,1.75) and (-4.2,0.5) .. (-4,0);
+  \draw (-4,0) .. controls (-3.8,-0.5) and (-3.5,-2) .. (-3.5,-3);
+
+  %% Seconda curva
+  \draw (-3.2,2) .. controls (-3.2,1.5) and (-2,1) .. (-1,0);
+  \draw (-1,0) .. controls (0,-1) and (0.5,-2) .. (0.55,-3);
+
+  %% Terza curva
+  \draw (1,2) .. controls (1,1) and (1.5,0.5) .. (2,0);
+  \draw (2,0) .. controls (2.5,-0.5) and (4,-2) .. (5,-3);
+\end{scope}
+  %% Asintoti (che corrispondono agli autovalori)
+\begin{scope}[blue]
+  \draw (-3.4,-3) -- (-3.4,0) node[anchor=south west] {$\lambda_1$} -- (-3.4,2);
+  \draw (0.8,-3) -- (0.8,0) node[anchor=south east] {$\lambda_2$} -- (0.8,2);
+\end{scope}
+ \end{tikzpicture}
+\end{center}
+  \caption{Un grafico qualitativo di una possibile equazione secolare di una matrice con due autovalori}
+\label{fig:eqsecolare}
+\end{figure}
+
+Ovviamente queste considerazioni valgono in $\R$, e hanno senso dal momento che
+gli autovalori della matrice hermitiana devono essere reali. La stessa richiesta potrebbe addirittura
+non avere senso per una matrice in forma di Hessenberg che, a priori, potrebbe avere autovalori complessi.
+\subsection{Metodi di iterazione funzionale per il calcolo degli autovalori}
+Questa conoscenza di $g$ ci porterebbe a pensare di utilizzare metodi di iterazione funzionale
+per determinare gli autovalori della nostra matrice. \\
+Se consideriamo il caso Hermitiano, infatti, potremmo applicare il metodo di \emph{bisezione}.
+L'unica difficoltà in questo caso sta nel definire l'intervallo in cui sta una ed una sola radice
+per poter cominciare l'iterazione. Notiamo però che presi gli autovalori di $A_{n-1}$ in modo
+che $\lambda_i^{(n-1)} < \lambda_j^{(n-1)}
+\iff i < j$ si ha che ogni autovalore di $A$ sta fra $\lambda_i$ ed un $\lambda_{i+1}$, ad eccezione degli
+autovalori estremali. Anche in quel caso è facile trovare dei limiti su cui applicare la bisezione, considerando
+la diseguaglianza di Hirsch: $|\lambda| \leq ||A||$ (dalla definizione di norma matriciale).
+\begin{os}
+ Tutto questo procedimento ci fornirebbe un metodo per calcolare gli autovalori di $A$ a patto di conoscere
+ quelli di $A_{n-1}$, e quindi il problema non sembra (per ora) semplificato di molto. Prossimamente il teorema
+ di Sturm ci fornirà uno strumento per completare queste considerazioni, arrivando ad un risultato più pratico.
+\end{os}
+Infine si potrebbe pensare di applicare anche altri metodi di iterazione funzionale noti, come ad esempio
+il metodo delle tangenti; purtroppo quest'ultimo non ci può dare (in questo caso) nessuna garanzia di convergenza,
+e quindi non sembra adatto allo scopo. In realtà viene usato nella pratica per ``affinare'' stime di autovalori
+forniti con altri metodi. \\
+\subsection{Il polinomio caratteristico delle matrici di Hessenberg}
+Tutte le proprietà che siamo riusciti a trovare sulle matrici Hermitiane tridiagonali non valgono
+purtroppo per le matrici di Hessenberg. Nonostante questo possiamo però mostrare un metodo
+per valutare il polinomio caratteristico in un punto particolarmente vantaggioso dal punto
+di vista computazionale\footnote{Non quanto quello trovato per le matrici Hermitiane tridiagonali, purtroppo}.
+Cominciamo col fare alcune considerazioni; possiamo supporre che la nostra matrice sia nella forma
+\[
+ H = \left[ \begin{array}{cccc}
+         \times & \cdots & \cdots  & \times \\
+         \beta_{1}   & \ddots &   & \vdots \\
+                  & \ddots & \ddots & \vdots \\
+         & & \beta_{n-1} & \times
+        \end{array} \right]
+\]
+con $\beta_i \neq 0$ per ogni $i$ (altrimenti sarebbe riducibile, e quindi potremmo ridurci a risolvere
+dei sottoproblemi con delle Hessenberg irriducibili). \\
+Fissato $z$, consideriamo il sistema lineare $(H - zI)x = \alpha e_1$. Se consideriamo $x$ e $\alpha$
+come incognite e poniamo $x_n = 1$ ci accorgiamo che possiamo risolvere il sistema facilmente con
+una sostituzione all'indietro partendo dal fondo, e determinare $x$ e $\alpha$ con complessità $O(n^2)$. \\
+Applicando poi la regola di Cramer all'ultima componente di $x$ e chiamando $H'$ la matrice di Hessenberg
+a cui è stata sostituita l'ultima colonna con il vettore $x$ otteniamo
+\[
+ 1 = x_n = \frac{\deter{H'}}{\deter{H-zI}} = \frac{(-1)^{n+1}\alpha \prod_{i=1}^{n-1} \beta_i}{p(z)}
+\]
+e quindi $p(z) = (-1)^{n+1}\alpha \prod_{i=1}^{n-1} \beta_i$; osserviamo che in questa espressione
+$\alpha$ è in realtà funzione di $z$ e quindi sarebbe più corretto scrivere
+\[
+p(z) = (-1)^{n+1}\alpha(z) \prod_{i=1}^{n-1} \beta_i
+\]
+Considerando che $\alpha$ può venir calcolata partendo da $z$ con complessità $O(n^2)$ abbiamo determinato
+un metodo relativamente poco oneroso di calcolare il polinomio caratteristico di $H$ in un punto. \\
+Possiamo quindi considerare ora la possibilità di applicare dei metodi di iterazione funzionale.
+\begin{os}
+ Per applicare, ad esempio, il metodo delle tangenti, avremmo bisogno di calcolare la derivata di $p(z)$.
+ Possiamo fare anche questo con poco sforzo, a patto di calcolare la derivata di $a(z)$. \\
+ Osserviamo che derivando la relazione di partenza si ottiene
+ \[
+  (H - zI)x'(z) = \alpha'(z)e_1 + x(z)
+ \]
+da cui si può ottenere $\alpha'(z)$ differenziando tutte le operazioni aritmetiche che portano ad ottenere
+$x(z)$. Una volta effettuato questo si avrà
+\[
+ p'(z) = (-1)^{n+1}\alpha'(z) \prod_{i=1}^{n-1} \beta_i
+\]
+\end{os}
+
+Possiamo osservare che i metodi di iterazione funzionale non sono particolarmente convenienti per determinare
+gli autovalori, anche se si utilizzano di fatto per qualche richiesta ``specifica''.\\
+Nel caso, ad esempio, di una matrice hermitiana tridiagonale, si può osservare che nel calcolo degli autovalori
+estremali le condizioni di convergenza del metodo di Newton sono soddisfatte e quindi possiamo ottenere
+la soluzione con poche operazioni aritmetiche osservando che sia $p$ che $p'$ si possono calcolare
+con poco sforzo dalle loro relazioni ricorrenti a tre termini (viste nella Sezione~\ref{subsec:hermdiag}).
+
+\begin{os}
+ Consideriamo $p_n(x)$ polinomio caratteristico; possiamo osservare facilmente che se $x \to -\infty$ allora
+ $p_n(x) \to \infty$. In generale, infatti, la parte principale del polinomio è $(-1)^{n} z^n$, che va all'infinito
+ sia nel caso $n$ pari sia nel caso $n$ dispari.
+\end{os}
diff --git a/capitoli/capitolo2.tex b/capitoli/capitolo2.tex
new file mode 100644
index 0000000..7e88f99
--- /dev/null
+++ b/capitoli/capitolo2.tex
@@ -0,0 +1,656 @@
+\chapter{Il calcolo degli autovalori}
+
+In questo capitolo ci occuperemo di presentare i metodi principalmente usati nel calcolo
+effettivo degli autovalori di matrici Hermitiane tridiagonali e in forma di Hessenberg.
+
+\section{Il metodo di Sturm}
+Introdurremo ora un metodo efficiente per il calcolo di singoli autovalori di una matrice
+hermitiana in forma tridiagonale. Per tutta la sezione tratteremo il caso di una matrice
+reale per semplicità, ma il caso complesso è risolubile in modo analogo.
+
+Abbiamo visto nella Sezione~\ref{sec:eqsecolare} un metodo efficiente per valutare il polinomio
+caratteristico di una matrice di questo tipo con costo $O(n)$. Possiamo affinare la nostra osservazione
+notando che anche la valutazione di tutti i polinomi $p_k$ in un punto $x$ fissato continua
+ad avere un costo $O(n)$. \\
+Consideriamo, data una matrice $T_n$ in forma tridiagonale hermitiana, la seguente funzione
+\[
+\begin{array}{cccl}
+ f: & \R  & \longto & \{ 0 , \ldots , n \}  \\
+ & x & \longmapsto &  \sharp \{ \ \textrm{cambi di segno nel vettore} \ (p_0(x) , \ldots , p_n(x)) \ \}
+\end{array}
+\]
+Perché $f$ sia ben definita conveniamo che se $p_j(x) = 0$ allora il suo segno è lo stesso di $p_{j-1}(x)$.
+Questa è una buona definizione perché $p_0(x) = 1$ e quindi non è mai $0$.
+\begin{os}
+ Dalla definizione di $f$ si deduce che se il suo valore di cambia in un punto, allora in quel punto ci deve
+ essere uno zero di (almeno) uno dei polinomi $p_j(x)$.
+\end{os}
+Osserviamo cosa succede quando un polinomio ``interno'', ovvero un $p_j$ con $j \in 1 \ldots n-1$ ha uno
+zero in $\bar x$.
+Innanzitutto sappiamo da quanto visto nel capitolo precedente che $p_{j-1}(x) \neq 0 \neq p_{j+1}(x)$; è
+possibile però affinare questa affermazione osservando meglio la relazione ricorrente a tre termini:
+\[
+ p_{j+1}(x) = (\alpha_{j+1} - x) p_j(x) - \beta_j^2 p_{j-1}(x)
+\]
+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$.
+Ricordando le definizione di $f$ si osserva che il segno di $p_j(x)$ è quindi indifferente ai fini del numero
+di cambiamenti di segno. In particolare $f$ non cambia segno in $\bar x$.
+Evidentemente $p_0(x)$ non può cambiare segno, quindi ci rimane da verificare cosa succede quando cambia segno
+$p_n(x)$. \\
+Ricordiamo alcune particolarità dei polinomi $p_n$ viste precedentemente
+\begin{enumerate}[(i)]
+ \item Ogni $p_j$ ha limite a $-\infty$ uguale a $+\infty$;
+ \item Gli zeri di $p_{j-1}$ separano gli zeri di $p_j$, nel senso visto alla fine del precedente capitolo
+ (Sezione~\ref{sec:eqsecolare});
+ \item Tutti gli zeri di un polinomio di una matrice hermitiana tridiagonale sono semplici;
+\end{enumerate}
+Osserviamo quindi che per ogni radice di $p_n$ si ha che il segno della sua derivata e quello di $p_{n-1}$ sono
+opposti. La condizione di semplicità sugli zeri ci assicura che la derivata sarà infatti diversa da $0$ in
+$\bar x$ e quindi $p_n'(\bar x) p_{n-1}(\bar x) < 0$. In particolare la costanza locale del segno della derivata
+intorno allo $0$ ci assicura anche la costanza di quello di $p_{j-1}$ e quindi il \emph{cambio di valore di $f$}.
+In sintesi $f$ agisce come una sorta di ``contatore di zeri''. Dato infatti un qualsiasi intervallo $[a,b]$ si verifica,
+usando le considerazioni precedenti che
+\[
+ f(b) - f(a) = \sharp \{ \ \text{zeri del polinomio caratteristico in } [a,b) \  \}
+\]
+
+Possiamo dunque applicare questa considerazione per applicare il metodo di bisezione per calcolare
+uno specifico autovalore di $T_n$. Queste proprietà di $f$ ci permettono di calcolare infatti singolarmente
+l'$i$-esimo autovalore di $T_n$ (ordinati con l'ordinamento di $\R$) senza bisogno di calcolare tutti gli altri.
+Ricordando la diseguaglianza di Hirsch ($||\lambda|| \leq ||T_n||$) e supponendo di aver fissato $i$ possiamo
+applicare il seguente procedimento.
+
+Cominciamo col calcolare $f(0)$; il suo valore ci dirà quanti autovalori ci sono prima dello $0$, e quindi
+nell'intervallo $[-||T_n||, 0)$. Se il nostro autovalore sta lì (ovvero $i \leq f(0)$) allora calcoliamo
+$f(-\frac{||T_n||}{2})$ e ripetiamo il procedimento; in caso contrario procediamo analogamente con $f(\frac{||T_n||}{2})$. \\
+Iterando un numero sufficiente di volte questo procedimento otterremo alla fine il valore desiderato.
+
+Osserviamo che il procedimento può essere applicato a ad una qualsiasi matrice hermitiana, a patto
+di portarla in forma tridiagonale (che è sempre possibile tramite matrici unitarie).
+Ricordando le stime dei costi computazionali fatte in precedenza ci rendiamo conto che il costo principale è
+quello della riduzione ($O(n^3)$) rispetto a quello del calcolo dell'autovalore ($O(n^2)$).
+Se si volessero calcolare tutti gli autovalori il costo rimarrebbe ancora dell'ordine di $n^3$. Nonostante questo
+esistono metodi (che vedremo in seguito) che permettono di calcolare tutti gli autovalori con una complessità di
+$O(n^2)$ e che quindi saranno più interessanti per il calcolo dello spettro completo della matrice. \\
+Il metodo di Sturm, comunque, trova delle applicazioni anche in questo ultimo caso nell'ambito del calcolo parallelo,
+dove altri algoritmi non possono essere implementati. Si può osservare invece che, una volta ottenuta la fattorizzazione,
+non sia difficile implementare il metodo di Sturm dividendo fra i vari processori gli autovalori da calcolare.
+
+\section{Il metodo QR}
+In questa sezione esporremo il metodo QR per il calcolo degli autovalori, che è il metodo più utilizzato
+nelle moderne applicazioni del calcolo degli autovalori. Si basa sulla fattorizzazione QR già vista nel corso
+di Analisi Numerica per la risoluzione di sistemi lineari. Questa può venire realizzata tramite matrici
+di Householder. Cominceremo ricordando alcuni risultati riguardo la fattorizzazione, per poi esporre ed
+analizzare il metodo e le sue implementazioni.
+
+\subsection{La fattorizzazione QR}
+\'E noto che ogni matrice $A \in \mat{\C}{n}$ si può fattorizzare nel seguente modo
+\[
+  A = QR
+\]
+dove $Q$ è una matrice unitaria e $R$ è una matrice triangolare superiore.
+\begin{os}
+ La fattorizzazione non è unica. Se supponiamo $A = QR$ e $S$ una matrice di fase, ovvero diagonale tale che $|s_{ii}|=1$
+per ogni $i = 1 \ldots n$, allora $A = QS\herm{S}R$ è ancora un fattorizzazione. Se $S \neq I$ le fattorizzazioni sono
+diverse. Si può però mostrare che non ci sono altre matrici (non di fase) per cui questo è vero. Si dice che
+la fattorizzazione QR è \emph{essenzialmente unica}.
+\end{os}
+Il nostro scopo è costruire una successione di matrici tramite questo procedimento di fattorizzazione
+che ci porti a determinare gli autovalori.
+
+\subsection{Costruzione della successione}
+Data una matrice $A$ di cui vogliamo conoscere gli autovalori, consideriamo
+la successione definita nel seguente modo
+\[
+\left\{ \begin{array}{ll}
+ A_0 & = A \\
+ A_{k+1} & = R_k Q_k \quad \text{dove} \ Q_k R_k \ \text{è la fattorizzazione QR di} \ A_k
+\end{array} \right.
+\]
+\begin{os} \label{os:qr_simili_ak}
+ 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$.
+ Per ogni $k$ la matrice $A_k$ è simile a $A_{k+1}$ tramite trasformazione unitaria, che preserva
+ il condizionamento del problema di calcolo degli autovalori. Questa quindi è una ``buona'' successione
+ nel senso in cui ne avevamo parlato nella Sezione~\ref{sec:analisidelcondizionamento}.
+\end{os}
+
+Cominceremo ad analizzare il metodo QR facendo delle supposizioni piuttosto restrittive, che poi allenteremo
+in seguito. Cominciamo col supporre che gli autovalori della matrice $A$ siano tutti distinti e ordinabili
+per modulo in modo strettamente crescente, ovvero $|\lambda_1| < \ldots < |\lambda_n|$. Questo in
+particolare implica che la matrice $A$ è diagonalizzabile e quindi esiste una $X$ invertibile tale che
+$A = XDX^{-1}$. Supponiamo ora che $X^{-1}$ ammetta fattorizzazione $ X^{-1} = LU$\footnote{dove supponiamo
+che $L$ sia triangolare inferiore con gli elementi delle diagonale uguali a $1$ e $U$ triangolare superiore}.
+\begin{pr} \label{pr:metpot:ak}
+ Se si ha la successione di matrici $A_k$ come quella definita sopra, e per ogni $k$ si considera $Q_k R_k$
+ la\footnote{al solito, sarebbe corretto dire \textbf{una} fattorizzazione} fattorizzazione QR di $A_k$, allora
+ \[
+  A^k = Q_0 Q_1 \ldots Q_k R_k \ldots R_1 R_0
+ \]
+\end{pr}
+\begin{proof}
+ Proviamo la tesi per induzione su $k$. Se $k = 0$ si ha $A_0 = A = Q_0 R_0$ che è banalmente vero. Se considero
+ la tesi vera per $k$. Considerando le seguenti uguaglianze
+ \[ \begin{array}{ll}
+  \displaystyle
+  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 = \\
+  \displaystyle
+  = Q_0 (\prod_{i=1}^{k} Q_1 R_1) R_0 = Q_0 \prod_{i=1}^{k} Q_i \prod_{i=1}^{k} R_{k-i+1} R_0
+ \end{array}
+ \]
+ si ottiene esattamente la tesi. Per quanto oscure possano sembrare provare a fare il calcolo con $k = 3$ o $4$
+ potrebbe chiarire molto le idee.
+\end{proof}
+Ora vorremmo usare quanto scoperto sulle potenze di $A$ per studiare la convergenza del nostro metodo. Consideriamo
+che $A^k = X D^{k} X^{-1}$ e quindi ricordando che esiste la fattorizzazione $LU$ di $X^{-1}$ si ha
+\begin{equation}
+A^k = XD^{k}LU= X D^k LD^{-k}D^k U
+\end{equation}
+Osserviamo ora che la matrice $D^k L D^{-k}$ è triangolare inferiore ed ha la diagonale con soli $1$. Se chiamiamo
+$X = QR$ la fattorizzazione QR di $X$ possiamo scrivere
+\begin{equation} \label{eq:metpot:1}
+ 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
+\end{equation}
+A questo punto consideriamo anche che per ogni $k$ esiste la fattorizzazione QR di $[I + R\Gamma^{(k)}R^{-1}] = P_k T_k$
+ed in particolare possiamo scegliere $P_k$ a termini positivi. Osserviamo ora che i termini di $\Gamma^{(k)}$
+sono dati dalla seguente relazione
+\[
+\gamma_{ij} =
+ \left\{ \begin{array}{ll}
+          0 & \text{se} \ i \leq j \\
+          (\frac{\lambda_j}{\lambda_i})^{k} l_{ij} & \text{se} \ i > j
+         \end{array} \right.
+\]
+ed in particolare ricordando che se $j < i$ si ha che $\lambda_j < \lambda_i$ si ottiene che la matrice $\Gamma^{(k)}$
+tende ad una matrice diagonale per $k$ che tende all'infinito. Più precisamente, $\lim_{k \to \infty} \Gamma^{(k)} = I$.
+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
+QR è sempre definita a meno di una matrice di fase. Richiedere però che $P_k$ abbia elementi positivi ci permette
+sia di definire univocamente la scomposizione desiderata sia di avere l'esistenza del limite.}
+Confrontando l'equazione~\ref{eq:metpot:1} e la Proposizione~\ref{pr:metpot:ak} si ottengono due fattorizzazioni
+QR della matrice $A^k$.
+\[
+ A^k = QP_k T_k R D^k U = Q_0 \ldots Q_k R_k \ldots R_0
+\]
+Due fattorizzazioni QR della stessa matrice devono forzatamente differire per una matrice di fase e quindi
+si ottengono le due relazioni
+\[
+ \left\{ \begin{array}{l}
+          Q_0 \ldots Q_k = Q P_k S_k \\
+	  R_{k} \ldots R_0 = \herm{S_k}T_k R D^k U
+         \end{array} \right.
+\]
+Possiamo riscrivere ora $Q_k$ ed $R_k$ in modo da riuscire ad utilizzare queste relazioni\footnote{Si può
+osservare quanto i passaggi di questa dimostrazione siano la cosa meno intuitiva pensabile (o quasi). Presumibilmente
+questa è risultato di anni di affinamento e di ``pulizia'' }
+\[
+ \left\{ \begin{array}{l}
+         Q_k = \herm{(Q_0 \ldots Q_{k-1})}(Q_0 \ldots Q_k) = \herm{S_{k-1}}\herm{P_{k-1}}\herm{Q}Q P_k S_k =
+         \herm{S_{k-1}}\herm{P_{k-1}}P_k S_k\\
+         R_k = (R_k \ldots R_0)(R_{k-1} \ldots R_0)^{-1} = \herm{S_k}T_k R D^{k} U U^{-1} D^{-k+1} R^{-1} T_{k-1}^{-1} S_{k-1}
+        \end{array} \right.
+\]
+Dunque $Q_k R_k = A^{k} = \herm{S_{k-1}}\herm{P_{k-1}}P_k T_k R D R^{-1} T_{k-1}^{-1} S_{k-1}$ e ricordando che
+$T_k$ e $P_k$ al limite vanno all'identità se scriviamo la nostra uguaglianza per $k~\to~\infty$ otteniamo
+$S_{k-1} A^k \herm{S_{k-1}} = R D R^{-1}$. Possiamo quindi osservare che gli elementi sulla diagonale di $RDR^{-1}$
+sono gli stessi di $D$ (grazie al fatto che $R$ è triangolare superiore). In particolare gli elementi diagonali
+sono gli autovalori di $A$ e quindi abbiamo provato che il metodo converge.
+\begin{os}
+ In realtà non è rilevante conoscere esplicitamente $S_k$ perché siamo interessati solo a conoscere gli elementi
+ sulla diagonale di $RDR^{-1}$. Avendo che gli elementi di $S_k$ sono di modulo $1$ gli elementi diagonali vengono
+ moltiplicati per un numero complesso e per il suo coniugato, lasciandoli invariati.
+\end{os}
+
+\subsection{Il costo computazionale} \label{subsec:qr_costo}
+Vorremmo ora valutare il costo computazionale di questo metodo. Consideriamo dapprima il caso di una matrice
+generale. Sappiamo che il costo di una fattorizzazione $QR$ è $O(n^3)$ e sperimentalmente si ottiene che il
+numero di passi per avere convergenza cresce linearmente con la dimensione. Questo ci permette di concludere
+che in un caso totalmente generale il costo computazionale del metodo QR è $O(n^4)$.
+
+Facciamo ora qualche supposizione sulla matrice. Prendiamo ad esempio una matrice tridiagonale hermitiana.
+In questo caso ci ricordiamo che il costo del calcolo della fattorizzazione QR (almeno della prima) è $O(n)$.
+Possiamo osservare che la matrice ottenuta dopo il primo passo è ancora tridiagonale hermitiana, e quindi
+le considerazioni fatte sul primo passo valgono anche per i seguenti. In particolare il costo del metodo
+è $O(n^2)$.
+
+Analogamente per le matrici di Hessenberg (anche se non lo mostriamo ora) il costo è di $O(n^3)$ perché
+il calcolo della scomposizione QR è $O(n^2)$.
+
+\subsection{Migliorare la convergenza}
+Il metodo QR come esposto fino ad ora funziona ma ha il difetto di avere una convergenza di tipo
+lineare. In generale questo può essere un problema perché più gli autovalori della matrice sono
+vicini più, potenzialmente, potrebbe essere lenta (o addirittura assente) la convergenza.
+
+Possiamo osservare meglio questo con un esempio; consideriamo una matrice $2\times 2$ con un
+elemento ``piccolo'' in posizione $(2,1)$, ovvero sulla buona strada per essere triangolarizzata\footnote{%
+Ovviamente tutta questa frase è terribilmente imprecisa, ma il nostro scopo è, per ora, solo dare
+un'idea dei vantaggi che si potrebbero ottenere da un nuovo approccia e non formalizzarlo in
+alcun modo}.
+Proviamo a vedere cosa succede effettuando un passo generico dell'iterazione. Consideriamo la matrice $A_k$
+con un elemento piccolo $\eps$ sotto la diagonale e una sua scomposizione QR
+\[
+ A_k = \left[ \begin{array}{cc}
+                a & b \\
+                \eps & c \\
+               \end{array}\right]
+ = \left[ \begin{array}{cc}
+           \frac{a}{\sqrt{a^2 + \eps^2}} & \frac{-\eps}{\sqrt{a^2+\eps^2}} \\
+           \frac{\eps}{\sqrt{a^2+\eps^2}} & \frac{a}{\sqrt{a^2 + \eps^2}}
+          \end{array} \right]
+  \left[ \begin{array}{cc}
+          \sqrt{a^2 + \eps^2} & \frac{ab + \eps c}{\sqrt{a^2 + \eps^2}} \\
+	  0 & \frac{ac - \eps b}{\sqrt{a^2+\eps^2}}
+         \end{array} \right]  = Q_kR_k
+\]
+Si avrà che
+\[
+ A_{k+1} = R_kQ_k =   \left[ \begin{array}{cc}
+          \sqrt{a^2 + \eps^2} & \frac{ab + \eps c}{{a^2 + \eps^2}} \\
+	  0 & \frac{ac - \eps b}{{a^2+\eps^2}}
+         \end{array} \right]
+ \left[ \begin{array}{cc}
+           \frac{a}{\sqrt{a^2 + \eps^2}} & \frac{-\eps}{\sqrt{a^2+\eps^2}} \\
+           \frac{\eps}{\sqrt{a^2+\eps^2}} & \frac{a}{\sqrt{a^2 + \eps^2}}
+          \end{array} \right]
+= \left[ \begin{array}{cc}
+          \times & \times \\
+	  \frac{\eps(ac - \eps b)}{a^2 + \eps^2} & \times
+         \end{array} \right]
+\]
+Considerando che $ac -\eps b$ è il determinante delle matrice (e quindi
+il prodotto degli autovalori) e $a^2 + \eps^2$  una buona
+approssimazione del quadrato di un autovalore\footnote{questo perché il vettore $e_1$ va a finire in se stesso moltiplicato
+per $a$, a meno di epsilon che è piccolo}, $\eps$ è stato diminuito di un fattore dell'ordine
+di $\frac{\lambda_1}{\lambda_2}$, come ci si aspettava.
+
+Consideriamo ora cosa succede applicando una tecnica di \emph{shifting}. Calcoliamo la fattorizzazione QR della
+matrice $A-cI$, invertiamo l'ordine dei fattori e risommiamo $cI$.
+Abbiamo dunque
+\[
+  A_k - cI = \hat Q \hat R \quad \longrightarrow \quad A_{k+1} = \hat R \hat Q + cI
+\]
+\begin{os}
+ $A_k$ ed $A_{k+1}$ sono simili. Consideriamo infatti le seguenti uguaglianze
+ \[
+  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
+  = \herm{\hat Q} A_k \hat Q
+ \]
+ E quindi le due matrici sono simili per trasformazione hermitiana, il che preserva anche il condizionamento del
+ problema come visto nella Sezione~\ref{sec:analisidelcondizionamento}.
+\end{os}
+
+Possiamo osservare che risvolgendo i conti con il ``nuovo'' algoritmo si ottiene in posizione sottodiagonale
+un fattore dell'ordine di $\eps^2$. Sembra quindi che questo nuovo metodo abbia una convergenza molto più veloce
+del precedente!
+
+Anche se questo esempio ci fornisce solo delle osservazioni in un caso particolare e non una
+dimostrazioni formale delle proprietà di convergenza che si potrebbero ottenere in generale
+con uno shifting, possiamo in ogni caso discutere come applicarlo. Esistono teoremi che provano
+l'effettiva efficienza di questo approccio ma sono piuttosto tecnici e ``conterecci'' (cit.) e
+non li affronteremo in questo corso.
+\begin{figure}[hb]
+\[
+ A_k = \left[ \begin{array}{cccc}
+               \alpha_{11}^{(k)} & \times & \hdots & \times \\
+	       \beta_{1}^k & \ddots & & \vdots \\
+                           & \ddots & \ddots& \times \\
+                & & \beta_{n-1}^k & \alpha_{nn}^{(k)}
+              \end{array} \right]
+\]
+\caption{Struttura di una matrice in forma di Hessenberg superiore}
+\label{fig:hessenbergsup}
+\end{figure}
+Appurato che questo trucco funziona, ci chiediamo come applicarlo ad una matrice generale. L'idea
+è di togliere alla matrice $A_k$ un'altra matrice $\alpha_k I$, dove $\alpha_k = \alpha_{nn}^{(k)}$
+(si veda la Figura~\ref{fig:hessenbergsup}).
+Per semplicità osserviamo il caso delle matrici di Hessenberg, che poi sarà il caso implementato in pratica
+date le considerazioni sulla complessità fatte in precedenza.
+
+Il caso di una matrice complessa viene gestito esattamente con lo shifting di $-\alpha_{nn}^{(k)}I$ come descritto
+sopra, e si verifica che le cose funzionano bene. Più complesso, invece, è il caso di una matrice reale.
+In quella situazione infatti gli autovalori possono essere complessi coniugati e non si desidera passare da aritmetica
+reale ad aritmetica complessa. Questo porterebbe a problemi di complessità, ma il danno più grave sarebbe
+perdere la simmetria\footnote{Per simmetria intendiamo la certezza di ottenere autovalori complessi coniugati,
+cosa di cui non si potrebbe essere certi con una matrice complessa qualsiasi. } della matrice,
+e quindi in definitiva parecchia informazione sul problema.
+\begin{os}
+ Nel caso complesso Hessenberg risulta semplice determinare la qualità dell'approssimazione ottenuta
+ dell'autovalore. Possiamo assumere di fermare l'iterazione quando
+ \[
+  |\beta_n| \leq u( |\alpha_{nn}^{(k)}| + |\alpha_{n-1,n-1}^{(k)}|)
+ \]
+ dove $u$ è la precisione di macchina,
+ ed a quel punto assumere che $\alpha_{nn}^{(k)}$ è una buona approssimazione dell'autovalore
+ cercato e ridurci a ripetere il procedimento sul minore di nord ovest di ordine $n-1$, che è ancora in forma
+ di Hessenberg.
+\end{os}
+Per determinare come eseguire lo shifting nel caso reale conviene cambiare punto di vista su quanto effettuato fino
+ad ora. Possiamo osservare che se poniamo $p_k(z) = z - \alpha_k$ di fatto lo shifting è equivalente a considerare
+la matrice $\hat A_k = p(A_k)$. Dato che riteniamo che $\alpha_k$ sia una buona approssimazione dell'autovalore
+cercato della matrice per analogia nel caso reale possiamo utilizzare $p_k(x) = (x - \lambda)(x - \con{\lambda})$
+che è un polinomio reale. Si verifica (e, ancora una volta, noi non lo faremo) che tutto continua a funzionare
+bene ma sorgono dei problemi di complessità. \\
+Il polinomio $p_k$ è infatti adesso di II grado e non è per nulla banale, in generale, calcolare $A_k^2$.
+Inoltre $p_k(A_k)$ non è neppure una matrice in forma di Hessenberg, il che sembrerebbe farci perdere tutti
+i vantaggi computazionali che avevamo fino a questo momento. Per fortuna esiste una tecnica che, modificando
+l'iterazione, riesce a riolvere questo problema.
+
+\subsection{La tecnica del Bulge Chasing}
+Nell'applicazione della tecnica dello shifting vista nel paragrafo precedente, abbiamo supposto di
+calcolare $p_k(A_k)$ e dopo calcolare la fattorizzazione QR. Ci siamo però accorto che se $p_k$ è
+un polinomio di secondo grado vengono persi tutti i vantaggi computazionali dati dalla forma di Hessenberg.
+Vogliamo quindi ora modificare la fattorizzazione QR \textbf{mentre} calcoliamo $p_k(A_k)$ in modo da
+rendere la risultante matrice in forma di Hessenberg e diminuire la complessità del calcolo del polinomio.
+La fattorizzazione QR ottenuta sarà ``essenzialmente uguale''\footnote{ovvero sarà uguale a meno di una
+matrice di fase reale} a quella che avremmo ottenuto seguendo
+il procedimento precedente; questo modo di operare è detto \emph{Bulge Chasing}\footnote{bulge chasing in inglese significa inseguimento
+del bernoccolo, e s riesce ad apprezzare il senso del nome osservando come questa tecnica si traduce graficamente sugli elementi
+non zero della matrice. Questi si comportano infatti come un bernoccolo che scende sempre di più sulla
+sottodiagonale per poi sparire lasciando una matrice in forma di Hessenberg superiore.}.
+
+Possiamo cominciare a calcolare solo la prima colonna della matrice $p_k(A_k)$, ovvero $p_k(A_k)e_1$.
+Una volta calcolata questa possiamo calcolare anche una matrice di Householder $P_0$ tale che
+$P_0 p_k(A_K)e_1 = \alpha e_1$. \\
+Si costruiscono poi altre $n-1$ matrici di Householder tali che fissato
+\[
+ Z = P_0 \ldots P_{n-1}
+\]
+si abbia
+\[
+ A_{k+1} = \herm{Z} A_k Z
+\]
+ed è possibile dimostrare che questa iterazione produce una matrice simile a meno di una matrice di fase reale
+rispetto a quella presentata in precedenza.
+
+\section{Divide et Impera}
+\subsection{L'idea}
+Introdurremo ora un altro metodo, piuttosto recente, per il calcolo di tutti gli autovalori della matrice.
+Questo è stato introdotto nel 1980 da Cuppen. Il metodo permette il calcolo di autovalori solo per matrici
+tridiagonali hermitiane e l'osservazione che ne sta alla base è che una matrice tridiagonale è ``quasi''
+diagonale a blocchi, più precisamente se $H$ è la nostra matrice
+\[
+ H = \left[ \begin{array}{cc|cc}
+             \sblocko{T_1}{2} & &  \\
+            & & & \\ \hline
+             & & \sblocke{T_2}{2} \\
+            & & & \\
+            \end{array} \right]
++ \left[ \begin{array}{cc|cc}
+          & & & \\
+          & \beta_{n-1} & & \\ \hline
+          & & \beta_{n-1} & \\
+          & & &
+         \end{array} \right]
+\]
+Ovvero è una diagonale a blocchi più una correzione di rango 2. A ben vedere, però, si può fare anche di meglio.
+Se sostituiamo in $T_1$ il valore $\alpha_{\frac{n}{2}}$ con $\hat \alpha_{\frac{n}{2}} = \alpha_{\frac{n}{2}} - \beta_{n-1}$
+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
+una matrice a blocchi tridiagonali più un correzione di rango $1$:
+\[
+ H = \left[ \begin{array}{cc|cc}
+             \sblocko{\hat T_1}{2} & &  \\
+            & & & \\ \hline
+             & & \sblocke{\hat T_2}{2} \\
+            & & & \\
+            \end{array} \right]
++ \left[ \begin{array}{cc|cc}
+          & & & \\
+          & \beta_{n-1} & \beta_{n-1}& \\ \hline
+          & \beta_{n-1} & \beta_{n-1} & \\
+          & & &
+         \end{array} \right]
+\]
+Supponiamo ora di conoscere gli autovalori di $\hat T_1$ e di $\hat T_2$, ed in particolare le matrici
+unitarie $Q_1$ e $Q_2$ che ci permettono di diagonalizzarle, ovvero
+\[
+ T_1 = Q_1 D_1 \herm Q_1 \qquad
+ T_2 = Q_2 D_2 \herm Q_2
+\]
+con $D_1$ e $D_2$ le matrici con gli autovalori sulla diagonale e $0$ altrove.
+
+Tutto questo può funzionare se
+riusciamo a mostrare che siamo veramente in grado di calcolare facilmente gli autovalori della matrice a blocchi
+con la correzione.
+
+Se consideriamo ora la matrice $D$ così formata
+\[
+ \hat D = \left[ \begin{array}{cc|cc}
+                  \sblocko{D_1}{2} & & \\
+                  & & & \\ \hline
+                  & & \sblocke{D_2}{2} \\
+                  & & &
+                 \end{array} \right]
+\]
+e calcoliamo $B = \herm Q A Q$ otteniamo
+\[
+ B = \herm Q A Q = \hat D + \beta_{\frac{n}{2}}z\herm z
+\]
+con $z = \left[ \begin{array}{c} q_1 \\ q_2 \end{array}\right]$ dove $q_i$ è l'ultima colonna di $\herm Q_i$
+per $i = 1,2$.
+
+\subsection{La ricerca degli autovalori}
+Abbiamo quindi ricondotto il problema a calcolare gli autovalori di una matrice $D + w\herm w$ dove $D$
+è diagonale e $w$ è un vettore qualsiasi. Calcolando il polinomio caratteristico di $B$ ed assumendo
+che $\lambda \neq \hat d_i$  otteniamo
+\[
+  p(\lambda) = \deter{\lambda I - B} = \deter{ \lambda I - D }\cdot \deter{I + \theta(\lambda I - D)^{-1} z\herm z}
+\]
+Osserviamo che stiamo assumendo che $\lambda I - D$ sia invertibile, e quindi questa formula per il calcolo
+del polinomio caratteristico vale solo per $\lambda \in \C \setminus (\spe{D_1} \cup \spe{D_2})$. Sapendo che $p$
+è continuo possiamo però concludere che vale per tutto $\C$. \\
+Notiamo inoltre che $( I + \theta(\lambda I - D)^{-1}z\herm z)$ è una matrice elementare e quindi ha determinante\footnote{%
+Ricordiamo che in genearale una matrice elementare $I - \sigma u \herm v$ ha determinante $1 - \sigma \herm v u$}
+$1 - \theta (\lambda I - D)^{-1} \herm zz$; sviluppando ulteriormente si ottiene
+\begin{equation} \label{eqn:polmindivetimp}
+ p(\lambda) = \prod_{j=1}^{n} (\lambda - \hat d_j) ( 1 + \theta (\lambda I - D)^{-1} \herm zz )
+ = \prod_{j=1}^{n} (\lambda - \hat d_j) ( 1 + \theta \sum_{k=1}^{n} \frac{z_k^2}{\lambda - \hat d_k} )
+\end{equation}
+ed estendendo per continuità a tutto $\C$ si ottiene infine
+\[
+ 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)
+\]
+che è una sorta di equazione secolare come quella che si era ottenuta partendo dalle relazioni ricorrenti a tre
+termini nella Sezione~\ref{sec:eqsecolare}.
+
+Siamo ora costretti a fare delle assunzioni sulla struttura di $z$ e di $\hat D$. In realtà ci renderemo conto
+in seguito che queste non sono restrittive perché nei casi in cui non saranno verificate ci troveremo con un
+problema semplificato, che potremo riportare a questo caso qua\footnote{Penso, perché in realtà non mi è ancora
+molto chiaro come si dovrebbe fare}. \\
+Assumiamo dunque che
+\begin{itemize}
+ \item $z_j \neq 0$ per ogni $j = 1 \ldots n$;
+ \item $\hat d_k \neq \hat d_j$ per ogni $k \neq j$, ovvero che tutti gli autovalori siano distinti;
+\end{itemize}
+A questo punto dalla relazione~\ref{eqn:polmindivetimp} ricaviamo che
+\begin{equation} \label{eqn:eqsecdivetimp}
+ p(\lambda) = 0 \iff 1 + \theta \sum_{j=1}^n \frac{z_j^2}{\lambda - \hat d_j} = 0
+\end{equation}
+
+e quindi gli autovalori delle matrici di ordine $\frac{n}{2}$ separano quelli della matrice grande, e si
+può applicare (ad esempio) il metodo di bisezione, o in generale altri procedimenti di iterazione
+funzionale.
+
+\begin{os}
+ Notiamo che per applicare la bisezione nella (\ref{eqn:eqsecdivetimp}) abbiamo bisogno di conoscere, oltre
+ ai $\hat d_j$ anche gli $z_j$ e ricordando che $z$ è costruito a partire dalle matrici $Q_1$ e $Q_2$, è chiaro
+ che dobbiamo conoscere anche queste due. Queste erano le matrici che diagonalizzavano $T_1$ e $T_2$ e si
+ ottenevano quindi \textbf{conoscendo gli autovettori} di $T_1$ e $T_2$. Dobbiamo allora, per poter procedere
+ con il metodo, calcolarci tutti gli autovettori.
+\end{os}
+
+\subsection{Autovettori e problemi di stabilità}
+Il fatto di dover calcolare gli autovettori ha un lato positivo ed uno negativo, precisamente
+\begin{enumerate}[(a)]
+ \item Il calcolo effettivo risulta inaspettatamente semplice, tanto che, trovati gli autovalori saremo
+ capaci di trovare ogni autovettore con costo $O(n)$ e quindi di ottenerli tutti con costo $O(n^2)$;
+ \item Il problema del calcolo degli autovettori non è in generale ben condizionato e non si riescono a
+ dare condizioni perchè lo sia. Dato che influenzerà anche il calcolo degli autovalori nei passaggi successivi,
+ non possiamo garantire l'accuratezza del risultato finale;
+\end{enumerate}
+
+L'idea per trovare gli autovettori è cercare quelli di $\hat D + \beta_{\frac n 2}z\herm z$ e poi una
+volta ottenuta la matrice $U$ con questi, moltiplicarla per la matrice a blocchi con $Q_1$ e $Q_2$ sulla
+diagonale (che d'ora in poi chiameremo $\hat Q$) per trovare gli autovettori della matrice $T$. \\
+Osserviamo che se $v$ è autovettore per la matrice $D + \beta_{\frac n 2}z\herm z$ allora
+\[
+ (\hat D + \theta z \herm z - \lambda I)v = 0
+\]
+e quindi
+\[
+ (\hat D - \lambda I)v = -\theta z \herm z v
+\]
+Se fosse $\herm z v = 0$ avrei che $(\hat D - \lambda I)v = 0$ ma questo non è possibile perché $v$
+è non nullo e $\hat D - \lambda I$ è invertibile (come assunto precedentemente). Quindi deve essere
+$\herm z v \neq 0$ e quindi dato che $v$ è determinato a meno di uno scalare possiamo assumere
+$\herm z v = 1$. In definitiva si ottiene
+\[
+ v = - \theta z (\hat D - \lambda I)^{-1}
+\]
+che si può scrivere anche più esplicitamente come
+\begin{equation}  \label{eqn:calcoloautovettdivetimp}
+ v_j = \frac{- \theta z}{d_j - \lambda}
+\end{equation}
+Riassumendo, vogliamo trovare la matrice $U$ con i $v_j$ sulla diagonale e questo si può fare con
+la Formula~\ref{eqn:calcoloautovettdivetimp} con costo $O(n^2)$. Ottenuta la matrice $U$ avremo
+la matrice per diagonalizzare $T$ calcolando $\hat Q U$, e potremmo quindi procedere con il metodo.
+
+Sorgono però dei problemi computazionali non banali, più precisamente
+\begin{enumerate}[(i)]
+ \item La matrice $U$ deve essere ortogonale ma questo non è garantito dall'algoritmo. Se ad un passo
+ abbiamo perdita di ortogonalità questo poi causerà un accumulo di errore in tutti i passi successivi
+ portando ad una imprecisione del calcolo. Sembra che in una implementazione del 2006 si sia riusciti
+ a risolvere questo problema. %% TODO: inserire una citazione
+ \item Come già sottolineato prima il calcolo degli autovalori potrebbe essere mal condizionato dal principio
+ portando ad un accumulo di errore notevole ad ogni passo.
+ \item Apparentemente il costo computazionale del calcolo di $\hat Q U$ non è trascurabile in quanto
+ un prodotto matrice per matrice in generale costa $O(n^3)$. Fortunatamente $U$ non è una matrice qualsiasi:
+ matrici del tipo $u_{ij} = \frac{r_i s_j}{x_i - y_j}$ sono dette matrici \emph{Cauchy-like} ed esistono
+ algoritmi per calcolare il prodotto fra una Cauchy-like ed una matrice generica con costo $O(n^2\log{n})$
+\end{enumerate}
+
+Come ultima nota, ricordiamo che questo algoritmo è applicabile solo alle matrici tridiagonali hermitiante
+(e, previa tridagonalizzazione, a qualsiasi matrice hermitiana) ma non alle matrici in forma di Hessenberg
+che non presentano purtroppo alcuna proprietà di separazione\footnote{ovvero quella che ci permette di trovare
+i limite su cui applicare la bisezione o qualsiasi altra iterazione funzionale}. \\
+Sono stati fatti molti tentativi a questo proposito, ma non esiste attualmente nessuna implementazione
+robusta del metodo Divide et Impera sulle matrici di Hessenberg.
+
+\section{Il metodo delle potenze} \label{sec:metodopotenze}
+Per ultimo analizzeremo il metodo delle potenze che ci permette di trovare gli autovettori di una matrice
+conoscendo gli autovalori. In generale è particolarmente comodo per calcolare l'autovalore dominante.
+Consideriamo dunque questo caso per primo
+
+\subsection{Il metodo diretto}
+Supponiamo $A \in \mat{\C}{n}$ diagonalizzabile, per semplicità. Elimineremo questa ipotesi in seguito.
+Consideriamo gli autovalori ordinati in modo che
+\[
+ |\lambda_1| \geq |\lambda_2| \geq \ldots \geq |\lambda_n|
+\]
+e aggiungiamo l'ipotesi che $\lambda_1$ sia semplice e che sia in modulo strettamente maggiore degli altri.
+Il metodo si basa su questa semplice osservazione (la cui paternità viene, ancora una volta, attribuita a Gauss):
+Se prendiamo un vettore $y_0 \in \C^n$ e la nostra scelta non è incredibilmente sfortunata\footnote{%
+dove con incredibilmente sfortunata intendiamo che il prodotto scalare tra $y_0$ e l'autovettore relativo
+a $\lambda_1$ è esattamente uguale a $0$} possiamo considerare la successione
+\begin{equation}
+ \left\{ \begin{array}{ll}
+          y_0 & = y_0 \\
+          y_k & = Ay_{k-1}
+         \end{array} \right.
+\end{equation}
+Se scriviamo $y_0$ nella base di autovettori per $A$ abbiamo
+\begin{equation}
+ y_0 = \sum_{i=1}^{n} \alpha_i v_i
+\end{equation}
+e quindi osservando che $y_k = Ay_{k-1} = A^{k}y_0$ dopo $k$ iterazioni otteniamo
+\begin{equation} \label{eqn:metpotite}
+ y_k = A^ky_0 = \sum_{i=1}^n \alpha_i \lambda_i^k v_i =
+ \lambda_i^k \cdot \Big( \alpha_1 v_1 + \underbrace{\sum_{i=2}^n \alpha_i (\frac{\lambda_i}{\lambda_1})^k v_i}_{%
+\text{tende a}\ 0\ \text{se}\ k \to \infty} \Big)
+\end{equation}
+e ricordando l'ipotesi fatta precedentemente, ovvero che $|\lambda_1| > |\lambda_i|$ per ogni $i$ abbiamo
+che la seconda parte dell'uguaglianza va a $0$ per $k \to \infty$ e quindi la successione di vettori
+tende ad un multiplo di $v_1$, ovvero l'autovettore cercato.
+
+Purtroppo questa implementazione del metodo non è realistica, perché si incorrerebbe sicuramente nel caso di
+overflow o underflow in poche iterazioni, e probabilmente prima di avere una buona approssimazione dell'autovettore.
+Si ricorre quindi al semplice stratagemma di riscalare ad ogni iterazione il vettore ottenuto, ad esempio
+dividendolo per la sua norma infinito. In questo modo otteniamo una successione di vettori unitari che convergeranno
+all' autovettore unitario. \\
+Possiamo ora emprimere la successione in questo modo
+\[
+ \left\{ \begin{array}{ll}
+          y_0 & = y_0 \\
+	  y_k & = \displaystyle \frac{Ay_{k-1}}{||Ay_{k-1}||_\infty}
+         \end{array} \right.
+\]
+\begin{os}
+ Questo metodo mi permette anche di valutare e raffinare la stima dell'autovalore dominante. Se considero
+ infatti il rapporto fra le $j$-esime componenti di due vettori consecutivi, ovvero $\frac{y_k,j}{y_{k-1,j}}$
+ non è difficile verificare tramite la (\ref{eqn:metpotite}) che
+ converge all'autovalore cercato.
+\end{os}
+
+Esistono delle varianti del metodo delle potenze che sfruttano le idee qui esposte per risolvere problemi simili
+e migliorare le condizioni di convergenza.
+
+\subsection{Il metodo inverso con shift}
+Osserviamo come prima cosa che con pochi cambiamenti si potrebbe calcolare l'autovalore di modulo più piccolo
+considerando, invece che la matrice $A$, la matrice $A^{-1}$. \\
+Potremmo riscrivere l'iterazione in questo modo
+\begin{equation}
+ \left\{ \begin{array}{ll}
+          y_0 & = y_0 \\
+          y_k & = \beta_{k} \cdot A^{-1}y_{k-1}
+         \end{array} \right.
+\end{equation}
+dove $\beta_{k} = ||y_{k}||_\infty$\footnote{adotteremo questa notazione per tutta la sezione, d'ora in poi}.
+Questo procedimento ci imporrebbe però di calcolare l'inversa di $A$, un procedimento che in generale si tende ad
+evitare per problemi di instabilità. Possiamo quindi rileggere l'espressione precedente come risoluzione di
+un sistema lineare, ovvero
+\begin{equation}
+ \left\{ \begin{array}{lll}
+          y_0 &=& y_0 \\
+          Az_k &=& y_{k-1} \\
+          y_k &=& \beta_k \cdot z_k
+         \end{array} \right.
+\end{equation}
+A questo punto possiamo scegliere varie tecniche per risolvere il sistema lineare; sottolineamo che un metodo diretto
+che utilizza una fattorizzazione in questo caso è molto conveniente rispetto ad uno iterativo. Se calcoliamo
+la fattorizzazione di $A$, infatti, possiamo poi usarla per risolvere tutti i sistemi lineari della successione con
+un costo basso.
+
+In particolare, ricordiamo che per una tridiagonale hermitiana e per una matrice in forma di Hessenberg superiore
+il costo di una fattorizzazione QR sono rispettivamente $O(n)$ e $O(n^2)$, e sono anche il costo della risoluzione
+del sistema lineare. Si verifica sperimentalmente che, partendo da una buona approssimazione degli autovalori,
+il metodo converge in genere in 3-4 passi, indipendemente dalla dimensione di $A$. Si conclude quindi che il calcolo
+dell'autovettore dominante risulta essere $O(n)$ per le tridiagonali e $O(n^2)$ per le matrici in forma di
+Hessenberg.
+
+Ci poniamo ora il problema di come calcolare gli autovettori che stanno nella parte centrale dello spettro, ed è qui
+che interviene lo \emph{shifting}. Non è difficile osservare che gli autovalori della matrice $A - \gamma I$ sono gli
+stessi di $A$ ``shiftati'' di $\gamma$, ovvero sono
+\[
+ \spe{A - \gamma I} = \{ \lambda - \gamma \ | \ \lambda \in \spe{A} \ \}
+\]
+Supponiamo ora di avere una buona approssimazione $\hat \lambda_j$ dell'autovalore $\lambda_j$, dove con ``buona
+approssimazione'' intendiamo tale che
+\[
+ |\hat \lambda_j - \lambda_j| < |\hat \lambda_j - \lambda_k| \quad \forall k \in \spe{A}\setminus\{\lambda_j\}
+\]
+In questo caso $\hat \lambda_j - \lambda$ è l'autovalore di modulo più piccolo della matrice $A - \hat \lambda_j I$
+e il suo autovettore è quello relativo all'autovalore $\lambda_j$ della matrice $A$. Possiamo quindi applicare
+il metodo delle potenze inverso a $A - \lambda_j I$ e ottenere l'autovettore cercato. Questa operazione prende
+il nome di \emph{metodo delle potenze inverso con shift}.
+
+\begin{os}
+ In questo modo si può applicare un metodo qualsiasi per ottenere un'approssimazione degli autovalori (ad esempio
+ il metodo QR) e poi calcolare tutti gli autovettori della matrice con il metodo delle potenze inverso con shift.
+ Se la matrice è tridiagonale hermitiana si possono ottnere tutti con costo $O(n^2)$, mentre se è in forma di
+ Hessenberg superiore il costo diventa $O(n^3)$ per le considerazioni fatte in precedenza.
+\end{os}
+
+\begin{os}
+ Un'altra cosa che si può notare è che il metodo fornisce anche un possibile raffinamente per l'autovalore
+ $\lambda_j$ tramite il rapporto fra le componenti di $y_k$ e di $y_{k-1}$. Si potrebbe essere tentati
+ di sostituire questo eventuale raffinamento al posto dello shifting ma si verifica che questa non è necessariamente
+ una buona pratica. Esistono alcuni casi in cui può inficiare la convergenza del metodo.
+\end{os}
+
diff --git a/capitoli/capitolo3.tex b/capitoli/capitolo3.tex
new file mode 100644
index 0000000..b3da59c
--- /dev/null
+++ b/capitoli/capitolo3.tex
@@ -0,0 +1,412 @@
+\chapter{Decomposizione in valori singolari} \label{ch:svd}
+
+In questa sezione ci occuperemo di un tipo di fattorizzazione basato sulle proprietà spettrali, e quindi differente
+dalle fattorizzazioni viste fino ad ora (come la QR o la LU). Cominceremo esponendo un caso concreto in cui
+ci si trova nella necessità di utilizzarla.
+
+\section{Problemi lineari ai minimi quadrati}
+Consideriamo il seguente problema; sia $A$ una matrice $m \times n$ con $m \geq n$ e $b$ un vettore
+di $\R^m$. Vogliamo trovare $x$ tale che $Ax = b$. In generale questo problema è risolubile solo se
+$b \in \imm{A}$ vista come applicazione lineare, ma non è conveniente affrontare il problema risolvendo
+effettivamente il sistema lineare. Possiamo quindi riformulare la nostra richiesta in questo modo: cerchiamo
+$x$ tale che
+\[
+ x = \min_{x \in \R^n}( || Ax - b ||_2 )
+\]
+Se $x$ è effettivamente soluzione del sistema lineare avremo $||Ax - b||_2 = 0$, ed in caso contrario
+avremo un $x$ tale che $Ax$ sia una buona\footnote{dove buona significa che non si potrebbe trovare
+un altro $x'$ tale ceh $Ax'$ sia più vicino (nel senso della norma 2) a $b$ di quanto lo sia già $Ax$}
+approssimazione di $b$.
+
+Analizziamo alcune tecniche per la risoluzione di questo problema
+
+\subsection{Fattorizzazione QR}
+Consideriamo la fattorizzazione QR di $A = QR$. Osserviamo che in questo caso $Q \in \matr{\R}{n}{n}$ e
+$R \in \matr{\R}{m}{n}$. Osservando che minimizzare la norma 2 è la stessa cosa che minimizzarne il
+quadrato si ottiene
+\[
+ ||Ax - b||_2^2 = ||QRx - b||_2^2 = ||Q(Rx - \trasp Qb)||_2^2 = ||Rx - \trasp Qb||_2^2
+\]
+dove l'ultimo passaggio è giustificato dal fatto che $Q$ è unitaria.
+Consideriamo che la matrice $R$ e il vettore $\trasp Qb$ avranno una struttura di questo tipo:
+\[
+ R = \left[ \begin{array}{c}
+             \hat R \\
+             \trasp 0
+            \end{array} \right]
+\qquad \trasp Qb = \left[ \begin{array}{c}
+                            w_1 \\
+                            w_2
+                          \end{array} \right]
+\]
+dove $\hat R$ è una matrice quadrata $n \times n$, $w_1$ un vettore con $n$ componenti e $w_2$ un vettore
+di $\R^{m-n}$. Possiamo quindi riscrivere la relazione precedente in questo modo
+\[
+ ||Ax - b||_2^2 = ||\hat Rx - w_1||_2^2 + ||w_2||^2
+\]
+Abbiamo ricondotto il problema a minimizzare la norma di $\hat Rx - w_1$. Se $\hat R$ è invertibile allora
+la soluzione al problema è evidentemente unica ed è la soluzione del sistema lineare $\hat Rx = w_1$.
+Osserviamo che $\hat R$ è invertibile se e solo se lo è $\rk{A} = n$; per ora assumeremo che
+questo sia vero, riservandoci di analizzare il caso più generale in seguito.
+
+In conclusione la fattorizzazione QR ci ha permesso di ricondurre il problema alla risoluzione di un sistema
+lineare quadrato di ordine $n$. Analizziamo ora un diverso approccio.
+
+\subsection{Sistema delle equazioni normali}
+Questo sistema deriva dalla seguente osservazione. Supponiamo di avere $x$ soluzione del sistema $Ax = b$. Allora
+$x$ deve essere anche soluzione del sistema quadrato $\trasp AAx = \trasp Ab$, che si ottiene semplicemente moltiplicando
+a sinistra la precedente relazione per $\trasp A$.
+Osserviamo ancora una volta che scrivendo la fattorizzazione QR di $A$ e supponendo che $A$ abbia rango massimo si
+ottiene lo stesso risultato di prima:
+\[
+ A = QR \qquad \trasp AAx = b \iff \trasp RRx = \trasp R\trasp Qb \iff \trasp R\hat R = \trasp Rw_1 \iff
+ \hat Rx = w_1
+\]
+e quindi si ha l'unicità della soluzione e la risolubilità del sistema lineare. In generale però, il calcolo
+di $\trasp AA$ potrebbe essere oneroso e, soprattutto, nessuno ci garantisce in una situazione generale
+che il rango di $A$ sia massimo.
+
+\subsection{Teorema di decomposizione in valori singolari}
+Possiamo pensare di voler migliorare l'idea delle equazioni normali. In altre parole, vogliamo trovare il
+modo di evitare il calcolo di $\trasp AA$. Consideriamo dunque il seguente
+\begin{te}[Decomposizione in valori singolari]
+Siano $m \geq n$ e $A \in \matr{\R}{m}{n}$. Esistono $U \in \matr{\R}{m}{n}$ e $V \in \mat{\R}{n}$ ortogonali e
+$\Sigma \in \matr{\R}{m}{n}$ tali che
+\[
+ \Sigma = \left[ \begin{array}{cccc}
+              \sigma_1 & & & \\
+              & \sigma_2 & & \\
+              & & \ddots & \\
+              & & & \sigma_n \\ \hline
+              \multicolumn{4}{c}{\trasp 0} \\
+             \end{array} \right]; \qquad \textrm{dove} \: \sigma_i \geq \sigma_j \ \forall i < j \qquad \textrm{e} \qquad
+A = U\Sigma\trasp V
+\]
+\end{te}
+
+\begin{os}
+ Osservando che $\Sigma$ è quasi diagonale si capisce che in un certo senso questa è una decomposizione spettrale.
+ In particolare si può scrivere $\trasp AA$ come
+ \[
+  \trasp AA = \trasp V\Sigma\trasp U U \Sigma V = \trasp V \left[ \begin{array}{cccc}
+              \sigma_1^2 & & & \\
+              & \sigma_2^2 & & \\
+              & & \ddots & \\
+              & & & \sigma_n^2 \\ \hline
+              \multicolumn{4}{c}{\trasp 0} \\
+             \end{array} \right] V
+ \]
+e quindi se prendiamo $\lambda_i$ gli autovalori di $\trasp AA$ (che sono reali perché la matrice $\trasp AA$
+è simmetrica) ordinati in modo decrescente abbiamo che $\sigma_i = \sqrt{\lambda_i}$ per ogni $i = 1 \ldots n$.
+\end{os}
+Inoltre questa fattorizzazione mette in luce altre proprietà della matrice $A$. In particolare:
+\begin{os}
+ Se $A$ ha rango $k$, allora $\sigma_1 \ldots \sigma_k$ sono tutti diversi da $0$ mentre $\sigma_{k+1} \ldots
+\sigma_n$ sono $0$. Questo si nota dal fatto che $\trasp AA$ ha lo stesso rango di $A$ ed il suo rango
+ è pari al numero\footnote{inteso come numero moltiplicato per la molteplicità algebrica} di autovalori diversi da $0$.
+ L'ordinamento che abbiamo richiesto sui $\sigma_i$ ci permette di concludere.
+\end{os}
+
+Possiamo ora osservare come cambia il problema lineare ai minimi quadrati quando introduciamo questa
+nuova fattorizzazione.
+\[
+ ||Ax - b||_2^2 = ||U\Sigma\trasp Vx - b||_2^2 = ||\Sigma\trasp Vx - \trasp Ub||_2^2
+\]
+e ponendo $z = \trasp V x$ e $\trasp Ub = \left[ \begin{array}{c} w_1 \\ w_2 \end{array} \right] $ si ottiene
+\[
+ \Bigg|\Bigg|\Sigma z - \left[ \begin{array}{c} w_1 \\ w_2 \end{array} \right] \Bigg|\Bigg|_2^2 =
+ \Bigg|\Bigg|\left[ \begin{array}{ccc} \sigma_1 & & \\ & \ddots & \\ & & \sigma_n \end{array} \right] z - w_1\Bigg|\Bigg|_2^2 + ||w_2||_2^2
+\]
+Se il rango di $A$ è $n$ allora la matrice $\diag{\sigma_1 \ldots \sigma_n}$ è invertibile e quindi per
+minimizzare il primo fattore è sufficiente risolvere un sistema diagonale di ordine $n$.
+
+Se però $A$ è di ordine $k < n$ allora si può ripartizionare $\trasp Ub$ in una parte con $k$ componenti
+e una parte con le restanti $n-k$. Riscrivendo l'espressione si ottiene che si può minimizzare il primo fattore
+risolvendo un sistema di $k$ equazioni e scegliendo arbitrariamente le restanti $n-k$.
+\begin{os} Come regola generale si preferisce scegliere queste ultime componenti tutte nulle in modo
+ da minimizzare la norma della soluzione. \`E infatti generalmente preferibile ottenere una soluzione di norma piccola.
+\end{os}
+Dalle relazioni sopra possiamo anche ottenere una espressione esplicita della soluzione $z$. In particolare
+\[
+ z_j = \frac{w_{1,j}}{\sigma_j} = \frac{\trasp U_j b }{\sigma_j} \quad \text{dove} \ U_j \ \text{è la $j$-esima
+colonna di} \ U
+\]
+Ora possiamo ricordare che $x = Vz$ e quindi se $A$ è di rango massimo
+\[
+ x = Vz = \sum_{k=1}^{n} \frac{V_k\trasp U_kb}{\sigma_k} = \underbrace{\left( \sum_{k=1}^{n} \frac{V_k\trasp U_k}{\sigma_k} \right)}_{A^+} b
+\]
+e chiamiamo $A^+$ \emph{pseudo-inversa} di $A$. Più precisamente
+\[
+ A^+ = V \Sigma^{-1} \trasp U
+\]
+% TODO: Controllare che le uguaglianze scritte sull'inversa abbiano senso. Una è giusta di sicuro,
+% ma quale?
+Si verifica subito infatti che e $A^+A = I$. % \footnote{ma attenzione! Non è vero che $AA^+ = A^+A$ perchè
+% queste sono addirittura due matrici di ordine diverso. Il loro prodotto dà sempre l'identità, ma non dello stesso
+% spazio.}.
+Questa pseudo-inversa di chiama anche \emph{inversa di Moore-Penrose}.
+
+Se $A$ non è di rango massimo possiamo ugualmente definire la pseudo-inversa ``fermando'' la somma
+a $k$ dove $k$ è il rango di $A$. Abbiamo dunque
+\[
+ A^+ = \sum_{j=1}^{k} \frac{V_j\trasp U_j}{\sigma_j}
+\]
+e ancora una volta vale l'eguaglianza $x = A^+b$ dove $x$ è il vettore di rango minimo che risolve (nel senso
+che minimizza il valore della norma)
+ il problema lineare ai minimi quadrati.
+
+\subsection{Interpolazione polinomiale}
+Abbiamo visto nel corso di analisi numerica che dati $(x_i,y_i)$ con $i = 0 \ldots n$ è sempre possibile
+trovare un polinomio di grado al più $n$ tale che $p(x_i) = y_i$ per tutti gli $i$.
+
+Nelle applicazioni concrete si ha però a che fare con grandi moli di dati sperimentali e raramente
+il grado del polinomio che si vorrebbe usare per creare un modello matematico ha lo stesso ordine
+di grandezza. Ci chiediamo: ``\`E allora possibile trovare il polinomio di grado $m \ll n$ che meglio
+approssimi la distribuzione dei nostri dati sperimentali?''; la risposta è sì e si tratta di risolvere
+un problema lineare ai minimi quadrati con una matrice $m \times n$.
+Indagheremo in seguito questa tecnica per il calcolo del miglior polinomio approssimanete un insieme di dati
+sperimentali, perché dovremo superare anche il problema del condizionamente della matrice di Van der Monde
+che individua il problema\footnote{Questo era un problema anche nel caso standard con matrice quadrata, e rimarrà
+complesso anche nel caso della matrice rettangolare}.
+
+\subsection{Principali proprietà della SVD} \label{subsec:svdprop}
+Abbiamo introdotto la SVD parlando di sistemi lineari perché questo è il contesto in cui è stata originariamente
+concepita. Possiamo però osservare che essa ha anche delle interessanti proprietà in molti altri ambiti.
+
+Consideriamo la matrice $A \in \matr{\R}{m}{n}$ che individua univocamente un'applicazione lineare
+\[
+T_A : \R^n \longto \R^m
+\]
+La \svd\ ci permette di conoscere meglio questa applicazione. Sappiamo che se $A$ è di rango $k$ allora
+$A = U\Sigma\trasp V$ e i $\sigma_i$ della matrice $\Sigma$ sono nulli a partire dal ($k+1$)-esimo.
+\`E chiaro dunque che la scomposizione di permette di determinare il rango di $A$ e quindi di capire
+che l'immagine di $T_A$ avrà dimensione $k$ e il kernel dell'applicazione $n-k$. Ricordando però che
+\[
+ Ax = U\Sigma\trasp Vx = \sum_{i=1}^{k} \sigma_i U_i\trasp V_i x
+\]
+possiamo estrarre altre informazioni. Dato che per ogni $x$ $V_i x$ è uno scalare l'immagine di $T_A$
+deve essere contenuta nello $\Span{U_1 \ldots U_k}$. Dato che quest'ultimo ha dimensione $k$, che è la
+stessa di $\imm{T_A}$, devono coincidere e quindi le prime $k$ colonne di $U$ sono una base per l'immagine.
+Analogamente dall'ortogonalità delle colonne di $V$ si ha che se $x = V_j$ con $j > k$ allora $Ax = 0$
+e quindi lo $\Span{V_{k+1} \ldots V_{n}}$ è contenuto nel kernel di $T_A$. Ancora una volta per motivi
+dimensionali devono coincidere.
+
+In sintesi si ha che se $A = U\Sigma\trasp V$ è una matrice di rango $k$ allora
+\begin{itemize}
+ \item $\Ker{A} = \Span{V_{k+1} \ldots V_n}$;
+ \item $\imm{A} = \Span{U_1 \ldots U_k}$;
+\end{itemize}
+
+Introduciamo ora un'estensione del concetto di norma indotta visto nel corso di Analisi Numerica
+\begin{de}
+ Sia $A$ una matrice $m \times n$. Si dice \emph{norma di $A$ indotta dalla norma vettoriale $||\cdot||$}
+ la seguente funzione
+ \[
+  \begin{array}{rcl}
+||\cdot|| : \matr{\R}{m}{n} &\longto& \R \\
+ A & \longmapsto & \displaystyle  \max_{||x|| = 1} ||Ax||
+              \end{array}
+ \]
+\end{de}
+Questa è effettivamente una norma, ma la verifica viene qui omessa.
+%TODO: Magari si potrebbe anche fare, suvvia!
+
+\begin{os}
+ Osserviamo la seguente catena di uguaglianze
+ \[
+ ||Ax||_2 = ||U\Sigma \trasp V x||_2 = ||\Sigma \trasp V x||_2 = ||\Sigma z||_2
+\]
+Queste ci dicono che, data l'invertibilità e l'ortogonalità di $V$, $||A||_2 = ||\Sigma||_2 = \sigma_1$.
+\end{os}
+Date queste considerazioni possiamo introdurre anche una generalizzazione del condizionamento
+ridefinendole con la nuova norma e con la pseudo inversa. Nel caso della norma due si ottiene che
+\[
+ \cond{A} = ||A^+|| \cdot ||A||_2 = \frac{\sigma_1}{\sigma_k}
+\]
+dove $\sigma_k$ è il più piccolo $\sigma_i$ non nullo, ovvero, come al solito, $k$ è il rango di $A$.
+Un'analisi dell'errore effettuata sul problema lineare ai minimi quadrati mostrerebbe come effettivamente
+l'errore generato dal procedimento dipende proprio da questo coefficiente.
+
+\subsection{\tsvd, pulizia del rumore e compressione di immagini}
+Le considerazioni fatte nella Sezione~\ref{subsec:svdprop} ci permettono di introdurre delle tecniche
+per ridurre il condizionamento di alcuni problemi.
+
+Supponiamo di avere ad esempio un sistema lineare $Ax = b$ con $A$ una matrice con un condizionamento
+molto alto. Siamo consci di non avere speranza di risolvere in maniera esatta il sistema senza aumentare
+la precisione dei tipi che utilizziamo negli algoritmi.
+Se ad esempio il condizionamento è nell'ordine di $10^{12}$ e la precisione di macchina di $10^{16}$ sappiamo
+che probabilmente avremo circa $4$ cifre decimali corrette (nella migliore delle ipotesi). La soluzione di aumentare
+la precisione di macchina (ad esempio portarla a $10^{-32}$) potrebbe essere una soluzione ma appesantirebbe
+molto l'esecuzione dell'algoritmo.
+
+Consideriamo dunque la \svd\ di $A = U\Sigma\trasp V$.
+Possiamo supporre che $\sigma_n$ sia molto piccolo e che
+questo causi il cattivo condizionamento (ricordiamo che $\cond{A} = \frac{\sigma_1}{\sigma_n}$). Possiamo
+pensare di troncare la matrice $\Sigma$ sostituendola con una matrice $\hat \Sigma$ identica ad eslusione del posto
+$(n,n)$ dove rimpiazziamo $\sigma_n$ con $0$, e risolvere il problema $\hat Ax = U\hat \Sigma\trasp Vx = b$.
+Questo \textbf{è un altro problema}, ma potrebbe essere molto meglio condizionato del precedente (ad esempio
+se $\sigma_{n-1} \gg \sigma_n$) e talvolta è la scelta migliore.
+
+Questa pratica di ``troncamento'' viene chiamata \tsvd, ovvero \svd\ con troncamento. \`E tipicamente
+utile nella ricostruzione di immagini (che vedremo più avanti) perché non ci interessa la soluzione esatta
+del problema, ma la soluzione esatta di un problema ``semplice'' che si avvicini ai nostri dati.
+Questo procedimento viene anche detto di soglia, o di filtro, perché è possbile decidere una soglia minima
+sotto la quale i $\sigma_i$ non possono scendere, pena essere messi a $0$. In questo modo, fissata la
+soglia $s$, avremo che il condizionamento sarà maggiorato da $\sigma_1s^{-1}$.
+
+In generale non è un problema banale scegliere il livello di soglia $s$. Nei casi più semplici si ha
+un salto dei valori singolari, che passano da un ordine di grandezza ad uno (o a più) inferiori, dividendo
+in due zone ben distinte quelli prossimi a $0$ e quelli $\gg 0$.
+
+Osservaiamo che in generale non abbiamo alcuna garanzia che i risultati ottenuti tramite
+questa tecnica abbiano un riscontro con il problema che aveva generato i dati di partenza, e va quindi
+usata con molta attenzione.
+
+Un altro esempio pratico di utilizzo della \tsvd\ è quello della compressione delle immagini. Supponiamo di avere
+un'immagine rappresentata come una matrice di pixel $A$\footnote{non esiste un motivo per cui la matrice dovrebbe
+essere quadrata, è solo per rendere più chiaro l'esempio} di dimensione $n \times n$. Possiamo scrivere
+$A = U\Sigma\trasp V$ e pensare di limitarci ad una matrice di rango $k$ e quindi tronvare tutti i $\sigma_i$
+con $i > k$. In questo modo potremo rappresentare l'immagine considerando solo le prime $k$ colonne di $U$, le
+prime $k$ righe di $V$ e i $\sigma_1 \ldots \sigma_k$.
+Per fare un esempio pratico supponiamo $n = 1024$, ovvero un'immagine da 1 Megapixel. Questa occuperebbe in memoria
+(supponendo che sia in bianco e nero a 256 colori) $1 MB$. Decidendo di comprimerla con una matrice di rango $15$
+avremmo invece una dimensione di $15 KB$! Ovviamente l'immagine risultante darebbe solamente un'idea di quella originale,
+ma si potrebbe pensare di trovare un punto d'incontro fra dimensione e qualità\footnote{e magari di raffinare anche
+il metodo di compressione, ma questo lo vedremo in seguito} (si veda ad esempio la Figura~\ref{fig:camosci}).
+
+\begin{figure}[ht!]
+\begin{center}
+  \includegraphics[scale=0.2]{camosci/camoscio_100.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_50.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_25.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_15.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_8.png}
+ \caption{Una successione di camosci di 300 pixel di lato e di rango rispettivamente $100$, $50$, $25$, $15$ e $8$; le
+ immagini sono state ridimensionate per stare nella pagina, e sono state realizzate con un programma
+ identico a quello realizzato in laboratorio durante il corso.} \label{fig:camosci}
+\end{center}
+\end{figure}
+
+
+\section{Calcolo della decomposizione in valori singolari}
+In questa sezione introdurremo dei metodi per il calcolo della \svd\ e faremo qualche altra considerazione
+sui suoi possibili utilizzi.
+
+\subsection{Approssimazione di rango fissato}
+Supponiamo di avere una matrice $A \in \mat{\R}{n}$ e di volerne trovare una approssimazione efficiente.
+Un'idea può essere quella di rappresentarla con una matrice di rango fissato $k < n$ che le assomigli il
+più possibile. \\
+Consideriamo la procedura seguita anche alla fine della sezione precedente
+\begin{enumerate}
+ \item Calcoliamo la fattorizzazione \svd\ di $A = U \Sigma V$;
+ \item Tronchiamo la $\Sigma$ ponendo $\sigma_{k+1} \ldots \sigma{n} = 0$ e chiamiamo $\tilde \Sigma$
+ la nuova matrice;
+ \item Approssimiamo $A$ con $U \tilde \Sigma V = \sum_{i=1}^{k} \sigma_j U_j \trasp{V_j}$;
+\end{enumerate}
+\begin{os}
+ Questa approssimazione di $A$ è molto pratica nel caso non si abbia sufficiente spazio per
+ salvare $A$ nella memoria di un calcolatore. Suggerisce infatti un metodo immediato per ridurre
+ (circa) di un fattore $\frac{n}{k}$ lo spazio occupato. \`E infatti sufficiente salvare le prime $k$
+ colonne di $U$, le prime $k$ righe di $A$ e i primi $k$ valori sulla diagonale di $\Sigma$.
+\end{os}
+Una domanda naturale a questo punto è: ``Quanto differiscono le due matrici?''. Osserviamo che
+\[
+ ||A - B||_2 = ||U\Sigma \trasp V - U \tilde \Sigma \trasp V||_2 = ||U[\Sigma - \tilde \Sigma] \trasp V||_2
+ = \sigma_{k+1}
+\]
+Se $\sigma_{k+1}$ è sufficientemente piccolo abbiamo quindi un piccolo errore. Questo, di fatto, si
+verifica in molte applicazioni pratiche dove i $\sigma_i$ piccoli possono rappresentare i disturbi
+all'informazione che si intendeva analizzare (come nel caso della trasmissione di segnali).
+
+In realtà possiamo dire di più. Sia $B$ una matrice di rango $k$. Sappiamo che
+\[
+ \Dim{\Ker{B}} + \Dim{\imm{B}} = n \qquad \Dim{\Ker{B}} \geq n - k
+\]
+Considero il sottospazio $S = \Span{V_1,\ldots,V_{k+1}} \subseteq \R^n$. Per una questione di dimensioni
+deve esistere un vettore non nullo $z \in S \cap \Ker{B}$, e possiamo supporre $||z||_2 = 1$.
+Osserviamo che
+\[
+|| (A - B)z ||_2 = ||Az||_2 = ||\sum_{i=0}^{k+1} \sigma_i U_i \trasp V_i z||_2 \geq
+ || \sigma_{k+1} U_i \trasp V_i z ||_2 = \sigma_{k+1}
+\]
+In particolare abbiamo mostrato che la nostra approssimazione era la migliore possibile, nel senso che
+per ogni altra approssimazione ha una distanza maggiore o uguale da $A$ (secondo la norma 2).
+
+\subsection{Metodi di calcolo, errori e costo computazionale}
+Abbiamo visto che la \svd\ è una sorta di decomposizione spettrale della matrice $A$. Più precisamente
+i $\sigma_i$ che si trovano sulla diagonale di $\Sigma$ sono le radici degli autovalori di $\trasp AA$
+(che è semidefinita positiva). \\
+Un primo modo per affrontare il calcolo della fattorizzazione potrebbe quindi essere
+\begin{enumerate}[(a)]
+ \item Calcolare $\trasp AA$;
+ \item Determinare la decomposizione spettrale di $\trasp AA = V D \trasp V$;
+ \item Calcolare la fattorizzazione $QR$ di $AV = UR$;
+\end{enumerate}
+Osserviamo ora che $\trasp R\trasp U U R = \trasp RR = \trasp V \trasp AA V = D$; $\trasp RR$ è quindi
+la fattorizzazione di Cholesky di $D$. Si può mostrare che la diagonalità di $D$ implica che anche $R$ sia
+diagonale e quindi $A = UR\trasp V$ è quasi la \svd\ di $A$. In effetti non abbiamo ancora considerato
+il problema dell'ordine (vorremmo $\sigma_i \geq \sigma_j$ se $i \geq j$).
+Questo problema sarebbe risolto nel momento in cui la colonna di $AV$ di norma maggiore fosse in prima posizione
+(e conseguentemente le altre in ordine di norma discendente).
+Possiamo quindi introdurre una opportuna matrice di permutazione $P$ e riscrivere la relazione
+nel seguente modo
+\[
+ AVP = U\Sigma
+\]
+In questo modo la prima colonna di $AVP$ è quella di norma maggiore e quindi i $\sigma_i$ saranno
+in ordine decrescente.
+
+\begin{os}
+ Per eseguire il procedimento sopra descritto abbiamo bisogno di conoscere la matrice $\trasp AA$, che tipicamente
+ può essere grande (ad esempio se $m \gg n$). Calcolare la sua decomposizione spettrale potrebbe introdurre
+ molti problemi di stabilità, e occupare molto spazio in memoria. Sarebbe quindi interessante trovare un
+ metodo per avere una decomposizione spettrale di $\trasp AA$ senza doverla effettivamente calcolare.
+\end{os}
+
+Supponiamo ora di avere $U,V$ matrici ortogonali e $B$ matrice bidiagonale tali che
+\[
+ A = UB\trasp V
+\]
+allora si ha che
+\[
+ \trasp AA = \trasp V \trasp B B V
+\]
+e $\trasp B B$ è una matrice tridiagonale; avere la decomposizione spettrale di $\trasp B B$ è quindi equivalente
+ad avere la decomposizione spettrale di $\trasp A A$!
+
+Sappiamo inoltre che calcolare la decomposizione spettrale di una matrice tridiagonale simmetrica è particolarmente
+semplice.
+
+L'unico pezzo che manca è mostrare come è possibile calcolare le matrici $U$ e $V$ che bidiagonalizzano $A$.
+Possiamo usare le matrici di Householder in questo modo:
+\begin{enumerate}[(a)]
+ \item Calcoliamo $P_1$ tale che $P_1 Ae_1 = \alpha e_1$, e quindi $P_1A$ abbia la prima colonna
+ nulla ad eccezione dell'elemento in posizione $(1,1)$;
+ \item Calcoliamo $Q_1$ tale che $P_1 A Q_1$ abbia la prima riga nulla ad esclusione dei primi
+ due elementi (in posizione $(1,1)$ e $(1,2)$);
+ \item Iteriamo il procedimento sopra lavorando sulla seconda colonna e sulla seconda riga, e poi di seguito
+ per tutte le righe e colonne;
+\end{enumerate}
+Si verifica che il procedimento sopra porta effettivamente ad una matrice bidiagonale e che $\trasp BB$
+è tridiagonale simmetrica.
+
+Analizziamo ora il costo computazionale di questo procedimento. Il primo passo consiste nel calcolo delle
+due matrici ortogonali che bidiagonalizzano $A$. Il costo di ogni passo del procedimento è il calcolo
+di due matrici di Householder e quindi $O(n)$. Viene ripetuto $n$ volte fino ado ottenere un
+costo complessivo di $O(n^2)$. Diventa poi $O(mn^2)$ perchè bisogna effettuare le moltiplicazioni.
+
+Analogamente il costo del calcolo degli autovalori con il metodo \qr\ è $O(n^2)$; il metodo richiederebbe
+però di calcolare la matrice $\trasp BB$ che potrebbe essere piuttosto grande. In realtà esiste un metodo
+(che qui non esponiamo) per applicare il metodo \qr\ a $\trasp BB$ senza calcolarla esplicitamente ma
+conoscendo solamente $B$, lasciando il costo totale a $O(mn^2)$.
+
+Un problema da affrontare, infine, è quello dell'errore. Il teorema di Bauer-Fike (Teorema~\ref{te:BauerFike}) ci
+assicura infatti che il problema del calcolo degli autovalori di una matrice simmetrica è ben condizionato,
+ma assicurandoci solo una maggiorazione dell'errore assoluto, e non una dell'errore relativo. Sfortunatamente
+nelle applicazioni si è spesso interessati a calcolare con precisione i valori singolari piccoli e questo
+potrebbe essere un problema. Negli ultimi anni sono state sviluppate tecniche per il calcolo della \svd\ che
+hanno tenuto conto di questo problema ma non sono ancora state implementate in programmi come \matlab\ o librerie
+come \lapack.
+
+
+
diff --git a/capitoli/capitolo4.tex b/capitoli/capitolo4.tex
new file mode 100644
index 0000000..6a68e56
--- /dev/null
+++ b/capitoli/capitolo4.tex
@@ -0,0 +1,346 @@
+\chapter{Risoluzione di sistemi lineari}
+
+In questo capitolo affronteremo il tema della risoluzione dei sistemi lineari introducendo dei metodi
+iterativi specifici per alcune classi di matrici particolarmente interessanti; queste individueranno
+solitamente sistemi troppo grandi per essere risolti tramite metodi diretti e in cui la convergenza
+dei metodo classici (Jacobi e Gauss Seidel) è quasi assente.
+
+\section{Sitemi lineari con matrici definite positive}
+
+\subsection{Metodo del gradiente}
+Supponiamo di avere una matrice $A \in \mat{\R}{n}$ definita positiva ed un sistema lineare
+\[
+ Ax = b
+\]
+In molti casi pratici (come ad esempio nello studio delle Vibrazioni, vedi Sezione~\ref{sec:vibsistcont})
+ci si trova a risolvere sistemi lineari con matrici definite positive sparse o strutturate\footnote{in
+cui in generale il costo del prodotto matrice vettore è basso} e in cui è conveniente usare un metodo
+iterativo.
+
+Consideriamo la seguente funzione
+\begin{equation}
+ \Phi(x) = \frac{1}{2} \trasp x A x - \trasp x b
+\end{equation}
+Osserviamo che il suo gradiente è dato dalla seguente espressione
+\begin{equation}
+ \nabla \Phi(x) = Ax - b
+\end{equation}
+e quindi vale $0$ solo se $x$ è una soluzione del sistema lineare. Possiamo quindi riformulare la ricerca
+della soluzione del sistema lineare come ricerca dei punti stazionari della funzione $\Phi$.
+Possiamo osservare che se $\bar x$ è un punto stazionario per $\Phi$ allora calcolando la matrice
+delle derivate seconde si ottiene esattamente $A$; ricordando che $A$ è definita positiva si può concludere
+che $\bar x$ è un punto di minimo per $\Phi$ e quindi
+\[
+ A\bar x = b \iff \bar x = \min_{x \in \R^n} ( \Phi(x) )
+\]
+In sintesi abbiamo ricondotto il problema della risoluzione del sistema lineare ad un problema di minimizzazione.
+Ricordando che siamo alla ricerca di un metodo iterativo vorremmo affrontare il problema nel modo seguente
+\begin{enumerate}[(a)]
+ \item Scegliamo un punto $x_0$ a caso;
+ \item Cerchiamo di determinare in che direzione si trova il minimo;
+ \item Ci spostiamo ponendo $x_1 = x_0 + \alpha_0v_0$ dove $v_0$ è la \emph{direzione di decrescita}
+ appena determinata e $\alpha_0$ un opportuno scalare;
+\end{enumerate}
+
+I \emph{metodi del gradiente}, ovvero quei metodi basati sulle considerazioni appena fatte, assumono
+nomi diversi a seconda della tecnica scelta per determinare la direzione di decrescita.
+
+\subsection{Il metodo del gradiente ottimo}
+Una prima scelta piuttosto naturale per la direzione di decrescita nel punto $x_k$ potrebbe essere $-\nabla \Phi(x_k)$.
+Ricordiamo infatti dall'analisi che il gradiente indica la direzione in cui la funzione ``cresce'' di più.
+Questa scelta si dice del \emph{gradiente ottimo} ed è stata, storicamente, la prima ad essere implementata
+e studiata. \\
+Una volta scelta la direzione dobbiamo determinare $\alpha_k$. Per fare questo studiamo la seguente funzione di
+$\alpha$ che valuta $\Phi$ sulla retta\footnote{nel senso di retta affine} $x_k + \Span{v_k}$:
+\[
+ g(\alpha) = \Phi(x_k + \alpha v_k)
+\]
+Ricordando che vogliamo trovare il minimo di $\Phi$ e osservando che $g$ è convessa cerchiamo anche qui un punto
+stazionario di $g$; questo sarà l'$\alpha_k$ che ci permette di ottenere il valore minimo di $\Phi$ sulla direzione
+determinata da $v_k$. \\
+Otteniamo
+\[
+ g'(\alpha) = \alpha \trasp v_k A v_k + \trasp v_k (A x_k - b) = 0
+\]
+e quindi ponendo $r_k = v - Av_k$ si ottiene
+\[
+ \alpha_k = \frac{\trasp v_k (-Ax_k + b)}{\trasp v_k A v_k} = \frac{\trasp v_k r_k}{\trasp v_k A v_k}
+\]
+Osserviamo in particolare che tenere traccia del valore di $r_k$ è utile per decidere quando
+fermare il metodo. $||r_k|| = ||Ax_k - b||$ è indice di quanto siamo ``distanti'' dalla soluzione.
+
+Si è verificato che questo metodo è convergente per ogni scelta di $x_0$ però ci si è accorti che
+non è la scelta migliore della direzione di decrescita.
+
+\subsection{Il metodo del gradiente coniugato}
+Dopo l'introduzione del metodo del gradiente ottimo si è studiata un altro metodo di scelta, a cui
+dobbiamo però premettere alcune definizioni.
+
+\begin{de} Data una matrice $A \in \mat{\R}{n}$ una $n$-upla di vettori $(p_1 \ldots p_n)$ di $\R^n$
+ si dicono \emph{$A$-coniugati} se
+ \[
+  \left[ \begin{array}{ccc}
+          \quad \trasp p_1 \quad \\
+          \quad \vdots \quad \\
+          \quad \trasp p_n \quad \\
+         \end{array} \right]
+ A
+ \left[ \begin{array}{ccc}
+	\multirow{3}{*}{$p_1$} & \multirow{3}{*}{$\ldots$} & \multirow{3}{*}{$p_n$} \\
+        & & \\
+        & &
+        \end{array} \right]
+ = D
+ \]
+ dove $D$ è una matrice diagonale.
+\end{de}
+
+\begin{os} \label{os:coniugli}
+ Se abbiamo una $n$-upla di vettore $A$-coniugati possiamo facilmente dire che sono linearmente
+indipendenti.
+\end{os}
+
+Vorremmo ora impostare l'iterazione in modo che i vettori $v_0, v_1, \ldots$ che definiscono le
+direzioni di descrescita siano $A$-coniugati. Osserviamo in particolare che la condizione di
+lineare indipendenza ci permette di dire che non possiamo fare più di $n$ iterazioni dove $n$ è
+la dimensione della matrice $A$. Scopriremo, per fortuna, che questo è solo apparentemente un
+problema.
+
+Dobbiamo ora trovare un metodo dati $v_1, \ldots, v_{k-1}$ vettori $A$-coniugati per determinare
+$v_k$ tale che sia $A$-coniugato con tutti gli altri. Poniamo $v_k = r_k + \beta_k v_{k-1}$;
+per avere la condizione di ortogonalità\footnote{secondo il prodotto scalare definito da $A$}
+dovremo avere
+\[
+ (\trasp r_k + \beta_k\trasp v_{k-1}) A v_{k-1} = 0
+\]
+e quindi
+\[
+ \beta_k = \frac{\trasp r_k A v_{k-1}}{\trasp v_{k-1} A v_{k-1}}
+\]
+Si può verificare che questa condizione non è solo necessaria ma anche sufficiente. Un successione di vettori
+scelti in questo modo è infatti forzatamente $A$-coniugata\footnote{questo risultato non verrà dimostrato qui.}
+
+Avendo risolto il problema del trovare effettivamente la successione, ci chiediamo come affrontare
+il limite al numero di iterazioni che ci è indicato Osservazione~\ref{os:coniugli}. Ci aiuta il
+seguente
+\begin{te}
+ Se ho $\{x_k\}_{k=1,\ldots,n}$ una successione di vettori che rispetti le condizioni osservate precedentemente con $x_0 = 0$
+ allora per ogni $k$ si ha che
+ \[
+  \Phi(x_k) = \min_{x \in \Span{v_0, \ldots, v_k-1}}(\Phi(x))
+ \]
+ ed in particolare dopo $n$ iterazioni $\Phi(x_n)$ è il minimo assoluto di $\Phi(x)$.
+\end{te}
+Questo teorema ci dice, in particolare, che questo metodo iterativo è in realtà un metodo diretto, ovvero
+è convergente in un numero finito di passi per ogni scelta di punto iniziale.
+
+Poniamo ora $e_k = x_k - x$ l'errore al passo $k-esimo$. Il teorema sopra ci dice che $e_n = 0$ ma ci chiediamo
+come si comporta $e_k$ mentre $k$ si avvicina $n$. Non dobbiamo infatti dimenticare che questo è un metodo
+iterativo e quindi in molti casi pratici saremo interessati a fermarci prima di avere la convergenza totale.
+Esiste un altro teorema che ci dà un risultato piuttosto preciso sulla velocità di convergenza
+\begin{te}
+ Sia $||\cdot||_A$ la norma indotta dalla matrice $A$\footnote{ricordiamo che questa è definita nel seguente modo
+ $||x||_A := \sqrt{\trasp x A x}$}
+ ; allora per ogni $k$ e per ogni scelta iniziale di $x_0$ si
+ ha
+ \[
+  ||e_k||_A \leq \left( \frac{2\sqrt{\cond{A}}}{\sqrt{\cond{A}} - 1} \right)^{k} ||e_0||_A
+ \]
+\end{te}
+Ancora una volta la velocità di convergenza dipende dal condizionamento della matrice del problema. Per
+matrici con un piccolo condizionamento questa è molto veloce, mentre per matrici con condizionamento
+più grande potrebbe diventare lenta.
+
+\subsection{Precondizionamento}
+Supponiamo di avere una matrice $A$ definita positiva che individua un problema mal condizionato, in cui la velocità
+di convergenza del metodo del gradiente coniugato è molto lenta.
+
+Sappiamo dai risultati di Analisi Numerica che non possiamo riuscire a risolvere con precisione
+un sistema mal condizionato; ci chiediamo però se sia possibile perlomeno risolverlo velocemente,
+pur con la consapevolezza che i risultati saranno molto imprecisi.
+
+La risposta è sì e l'idea è usare un \emph{precondizionamento}, ovvero analizzare un altro problema
+che si ottiene dal primo moltiplicandolo a destra e/o a sinistra per delle altre matrici rendendolo
+ben condizionato. Ovviamente i risultati finali risentiranno del cattivo condizionamento del problema
+iniziale, ma la velocità di convergenza sarà elevata.
+
+Dato il sistema $Ax = b$ consideriamo il seguente
+\[
+ LA\trasp L {\trasp L}^{-1} x = L b
+\]
+che è equivalente. Osserviamo poi che $LA\trasp L$ è simile a $L^{-1}( L A \trasp L) L$ e quindi
+a $A\trasp L L$. Ricordiamo ora che il condizionamento della matrice è dato da $\frac{\lambda_{max}}{\lambda_{min}}$
+e cerchiamo quindi una matrice $M = \trasp L L $ tale che gli autovalori di $A \trasp LL $ siano molto vicini
+\footnote{e quindi il loro rapporto sia molto vicino ad $1$, che è il valore minimo in cui possiamo sperare
+per il condizionamento di una matrice}.
+
+Osserviamo che se fosse possibile, ad esempio, scegliere $M = A^{-1}$ allora avremmo la situazione migliore possibile.
+Evidentemente però questa non è un opzione, perché se fossimo a conoscenza di $A^{-1}$ avremmo già
+completamente risolto il nostro problema. In ogni caso, però, un buon precondizionamento si ottiene cercando
+di approssimare un'inversa di $A$.
+
+Non ci occuperemo in questo corso di tecniche di precondizionamento che sono varie e a volte complesse.
+Sottolineamo solo alcune problematiche che potrebbero nascere usando questo approccio
+\begin{enumerate}[(a)]
+ \item Per come abbiamo definito le matrici in gioco, $M$ dovrebbe essere definita positiva; in realtà
+ esiste un modo per ovviare a questo problema, ma non verrà esposto qui;
+ \item Una volta trovata $M$ (che potrebbe essere un'operazione complicata) dovremmo trovare anche
+ $L$ e quindi fare una fattorizzazione; ancora una volta, esiste un modo per ignorare il fatto che esista
+ la matrice $L$ ed usare solo $M$;
+ \item Se $A$ è una matrice strutturata, saremo probabilmente interessati a mantenerne la struttura. Questo si può
+ fare accontentandosi di approssimazioni dell'inversa piuttosto vaghe, ma poco invasive (come ad esempio una matrice diagonale);
+\end{enumerate}
+
+\section{Matrici strutturate}
+Uno dei punti cardine nell'applicazione dei metodi per la soluzione dei sistemi lineari sarà riuscire a
+sfruttare la struttura delle matrici con cui dovremo operare.
+
+\subsection{Le matrici di Toeplitz} \label{subsec:toeplitz}
+Molte delle matrici con cui avremo a che fare risolvendo sistemi lineari in pratica sono matrici di Toeplitz.
+\begin{de}
+ Sia $A$ una matrice $n \times n$; $A$ si dice di \emph{Toeplitz} se le sue diagonali sono costanti, ovvero se per
+ ogni $i,j$ e per ogni $k \in \Z$ per cui ha senso
+ \[
+  a_{ij} = a_{i+k,j+k}
+ \]
+\end{de}
+Queste matrici hanno una struttura molto particolare, ed esiste un modo piuttosto comodo di effettuare il
+prodotto matrice per vettore. Consideriamo il caso seguente con una matrice di Toeplitz triangolare inferiore
+\[
+ \left[ \begin{array}{cccc}
+         t_0 &  &  &  \\
+         t_1 & \ddots &  &  \\
+          \vdots & \ddots & \ddots &  \\
+          t_n & \cdots & t_1 & t_0 \\
+        \end{array} \right]
+ \left[ \begin{array}{c}
+         p_0 \\
+         p_1 \\
+         \vdots  \\
+         p_n
+        \end{array} \right]
+= \left[ \begin{array}{l}
+          t_0p_0 \\
+          t_1p_0 + t_0p_1 \\
+          \vdots\\
+          t_np_0 + t_{n-1}p_1 + \ldots + t_0p_n
+         \end{array} \right]
+\]
+Si osserva che il vettore che si ottiene ha i coefficienti che sono quelli del prodotto di questi due polinomi
+\[
+ \left\{ \begin{array}{lll}
+          t(x) &=& t_0 + t_1 z + \ldots + t_n z^n \\
+          p(x) &=& p_0 + p_1 z + \ldots + p_n z^n
+         \end{array} \right.
+\]
+Possiamo quindi calcolare il prodotto matrice vettore nello stesso modo in cui calcoleremmo i coefficienti del
+polinomio prodotto, ovvero con la trasformata discreta di Fourier.
+
+Avremo quindi un costo delle moltiplicazione $O(n\log(n))$\footnote{utilizzando la \fft.} e quindi
+un costo complessivo del metodo del gradiente coniugato di $O(n^2\log(n))$.
+
+% TODO: Inserire gli esempi delle applicazioni del metodo del gradiente a qualche caso particolare
+% di matrici, come ad esempio le matrici elementari e le matrici con nugoli di autovalori appiccicati.
+
+
+\subsection{Matrici di Toeplitz tridiagonali simmetriche}
+Vorremmo ora mostrare un'analisi di un caso paricolare, ovvero dei sistemi lineari con
+una matrice di Toeplitz simmetrica tridiagonale. \\
+Questo è ad esempio il caso che discretizza il problema differenziale $\triangle u = f$ nel caso di
+$u$ in una variabile reale. Le conclusione che otteremo su questo caso particolare ci permetteranno poi
+di analizzare anche i casi in più variabili.
+
+Supponiamo ora di avere una qualsiasi matrice $T$ tridiagonale simmetrica di Toeplitz di dimensione $n$; chiamiamo $a$ gli
+elementi sulla diagonale e $b$ quelli sulla sotto e sopradiagonale\footnote{in effetti queste due scelte
+individuano completamente la matrice di cui stiamo parlando.}. \\
+Siamo interessati a studiare le proprietà spettrali di questa matrice per poter dare una stima
+del suo condizionamento in norma 2, che come abbiamo visto influenza la convergenza del metodo del
+gradiente coniugato.
+
+Osserviamo ceh se $\lambda$ è un autovalore per $T$ allora la matrice $T - \lambda I$ deve essere singolare
+e in particolare deve esistere una soluzione non banale del sistema lineare
+\[
+ (T - \lambda I)x = 0  \iff  \left[ \begin{array}{ccccc}
+         a - \lambda & b &  & & \\
+         b & a -\lambda & b &  & \\
+         & \ddots & \ddots & \ddots & \\
+         & & b & a - \lambda & b \\
+         & & & b & a
+        \end{array} \right]
+ \left[ \begin{array}{c}
+         x_1 \\
+         x_2 \\
+         \vdots \\
+         x_{n-1} \\
+         x_n
+        \end{array} \right] =
+\left[ \begin{array}{c}
+        0 \\
+        0 \\
+        \vdots \\
+        0 \\
+        0
+       \end{array} \right]
+\]
+Preso un qualsiasi $j$ compreso fra $2$ e $n-1$ possiamo scrivere la relazione sopra come
+\[
+ bx_{j-1} + (a- \lambda)x_j + bx_{j+1} = 0
+\]
+Ponendo $x_0 = x_{n+1} = 0$ la relazione vale anche per $j = 1$ e $j=n$. Apparentemente non abbiamo
+chiarito molto e trovare una soluzione esplicita sembra complicato. Possiamo però provare a porre
+$x_j = x^{j}$, e vedere se riusciamo a trovare una soluzione particolare di questo tipo. Sostituendo
+nelle relazioni sopra (per $j$ fra $2$ e $n-1$) si ottiene
+\[
+ bx^{j-1} + (a- \lambda)x^j + bx^{j+1} = 0
+\]
+e ricordando che l'autovettore non può essere nullo e quindi $x^j \neq 0$ per ogni $j$, questa è soddisfatta
+se e solo se
+\[
+ b + (a-\lambda)x + bx^2 = 0 \iff 1 + \frac{a - \lambda}{b} + x^2 = 0
+\]
+Passiamo ora ad analizzare il caso che ci interessa, ovvero $a = 2$ e $b = 1$\footnote{ovvero la matrice che discretizza
+il problema differenziale di Laplace.}; per il terzo teorema di Gerschgorin sappiamo che $|\lambda - 2| < 2$ e
+quindi
+\[
+ \left| \frac{a - \lambda}{b} \right|< 2
+\]
+Possiamo allora porre $\frac{a - \lambda}{b} = -2 \cos\theta$ per $\theta \in (0,\pi)$ e otteniamo l'equazione
+\[
+ 1 - 2x\cdot\cos \theta + x^2 = 0
+\]
+Risolvendola otteniamo
+\[
+  x_{1,2} = \cos \theta \pm \sqrt{\cos^2\theta - 1} = \cos \theta \pm i \cdot \sin \theta = e^{\pm i \theta}
+\]
+Abbiamo quindi ottenuto due soluzioni che andrebbe bene per tutte le $j = 2, \ldots, n-1$ ma nessuna delle due
+soddisfa le condizione per $j = 0$ e $j = n$. Osserviamo però che una qualsiasi combinazione lineare
+$\alpha x_1 + \beta x_2$ soddisfa le condizione interne, e cerchiamo quindi di determinare $\alpha$ e $\beta$
+in modo che anche le condizioni al contorno siano soddisfatte. Si ottiene
+\[
+ x_0 = 0 = \alpha + \beta
+\]
+e quindi $\beta = -\alpha$; ponendo poi $j = n+1$ si ottiene
+\[
+ x_{n+1} = 0 = \alpha e^{i\cdot(n+1) \theta} - \alpha e^{-i \cdot (n+1) \theta} = \alpha( 2 i \sin ((n+1)\theta) )
+\]
+e quindi $\theta_k = \frac{k\pi}{n+1}$ con $k = 1, \ldots, n$. Abbiamo trovato quindi $n$ autovettori distinti
+e siamo in grado di calcolare i relativi autovalori ricordando che
+\[
+ \frac{a - \lambda_k}{b} = -2 \cos \theta_k = -2 \cos (\frac{k\pi}{n+1}) \Rightarrow \lambda_k = a + 2b\cos \theta_k
+\]
+Se costruiamo la matrice degli autovettori
+\[
+ U = \left[ \begin{array}{c|c|c|c}
+             \multirow{3}{*}{$x_1$} & \multirow{3}{*}{$x_2$} & \multirow{3}{*}{$\ldots$} & \multirow{3}{*}{$x_n$} \\
+             & & & \\
+             & & &
+            \end{array} \right]
+\]
+possiamo osservare che $\trasp UU = D$ con $D = \gamma I$. Abbiamo quindi che $U$ è quasi unitaria, in particolare
+$\frac{1}{\gamma} U$ lo è. Inoltre possiamo osservare che gli elementi di $U$ non dipendono da $a$ e da $b$ e che
+$u_{ij} = \sin(\frac{ij\pi}{n+1}) = u_{ji}$ e quindi $U$ è simmetrica. In altre parole abbiamo una decomposizione
+spettrale $T = UDU$ dove tutta l'informazione sulla matrice è contenuta nella parte diagonale.
+
+Osserviamo infine che $D = \diag{a + 2b\cos(\theta_1) , \ldots, a + 2b \cos(\theta_n)}$ e quindi l'autovalore più
+piccolo è $a + 2b\cos(\theta_1)$.
+
diff --git a/capitoli/capitolo5.tex b/capitoli/capitolo5.tex
new file mode 100644
index 0000000..2f3a9ec
--- /dev/null
+++ b/capitoli/capitolo5.tex
@@ -0,0 +1,267 @@
+\chapter{Calcolo degli autovalori di matrici strutturate}
+
+Abbiamo visto nell'analisi dei sistemi lineari vari metodi per utilizzare la struttura
+delle matrici per ottimizzare il procedimento e diminuire il costo computazionale. \\
+Questo in generale è più difficile nel calcolo degli autovalori. L'unica struttura che siamo finora
+riusciti a sfruttare per abbassare il costo è stata la tridiagonalità.
+
+\section{Strutture note}
+In generale si parla di matrice strutturata quando una matrice è individuata da un numero di
+parametri dell'ordine minore di $n^2$. \\
+Ricapitoliamo le strutture principali viste fino ad ora e i relativi vantaggi nella risoluzione
+di sistemi lineari.
+\begin{description}
+ \item[Matrici sparse] Parliamo di matrici sparse quando ci sono pochi elementi non nulli, ovvero un numero
+ con un ordine di grandezza strettamente inferiore a $n^2$. In questo caso riusciamo spesso ad ottimizzare
+ i metodi di moltiplicazione matrice per vettore e quindi possiamo trarre vantaggio dall'applicazione
+ di metodi iterativi;
+
+ \item[Van der Monde] Non abbiamo analizzato in dettaglio\footnote{ad eccezione delle matrici di Fourier per il calcolo
+ della \dft, dove si riesce a scendere ad un costo $O(n\log n)$.} queste matrici ma esiste un metodo (tramite un'opportuna
+ rappresentazione dell'inversa) per risolvere un sistema lineare con un costo $O(n^2)$.
+
+ \item[Toeplitz o H\"ankel] Abbiamo visto queste matrici nella Sezione~\ref{subsec:toeplitz} e tramite la
+ trasformata discreta di Fourier abbiamo mostrato che il costo del prodotto matrice vettore è molto basso.
+ Possiamo quindi ipotizzare di applicare dei metodi iterativi per risolvere il sistema.
+
+ \item[Diagonali con correzione di rango 1] Queste martici sono piuttosto interessanti e sono le prime di
+ cui ci occuperemo. Sono appunto composte dalla somma di una matrice diagonale $D$ con una matrice di rango $1$
+ $u\trasp u$;
+\end{description}
+
+\section{Il metodo di Lanczos}
+\subsection{Un'alternativa al metodo di Householder}
+Introduciamo ora un metodo alternativo a quello di Householder per la tridiagonalizzazione di una
+matrice simmetrica. \\
+Osserviamo che se $A$ è una matrice simmetrica in $\mat{\R}{n}$, allora esiste una matrice $T \in \mat{\R}{n}$
+tridiagonale simmetrica e una matrice unitaria $Q$ tali che
+\[
+ A = QT\trasp Q
+\]
+e quindi anche
+\[
+ AQ = QT
+\]
+Osserviamo ora solo la prima colonna di quest'uguaglianza, ovvero $AQe_1 = Aq_1 = QTe_1$. Se scriviamo
+\[
+ T = \left[ \begin{array}{cccc}
+             \alpha_1 & \beta_1 & & \\
+             \beta_1  & \ddots  & \ddots & \\
+              & \ddots & \ddots & \beta_{n-1} \\
+              & & \beta_{n-1} & \alpha_n \\
+            \end{array} \right]
+\]
+Possiamo riscrivere la relazione come $Aq_1 = \alpha_1 q_1 + \beta_1 q_2$ e, una volta scelto $q_1$ vettore
+di norma $1$,
+si ha che $\trasp q_1 A q_1 = \alpha_1 \trasp q_1 q_1 + \beta_1 \trasp q_1 q_2 = \alpha_1$; possiamo quindi
+calcolare $\alpha_1$ da cui possiamo poi ricavare $\beta_1$ considerando che $\beta q_2 = Aq_1 - \alpha_1 q_1$
+e quindi
+\[
+\beta_1 = ||Aq_1 - \alpha_1 q_1||_2 \qquad \text{e} \qquad q_2 = \frac{Aq_1 - \alpha_1 q_1}{\beta_1}
+\]
+Ripetendo il procedimento con la seconda colonna (ora che conosciamo $q_2$) e poi continuando ancora si ottiene
+la regola generale
+\[
+ \alpha_i = \trasp q_i A q_i \qquad \beta_i = ||Aq_i - \alpha_i q_i||_2 \qquad q_{i+1} = \frac{Aq_i - \alpha_i q_i}{\beta_i}
+\]
+e si può quindi ricostruire tutta la matrice $Q$ e la matrice $T$.
+
+Il costo computazionale dominante nello svolgimento di queste operazioni è dato dai prodotti matrice vettore
+che costano generalmente $O(n^2)$ e portano quindi ad un costo complessivo del metodo di $O(n^3)$ (lo stesso
+costo del metodo di Householder). \\
+Questo metodo non viene però generalemente utilizzato per calcolare la tridiagonalizzazione. Il motivo è che
+non è numericamente stabile, ed in generale la matrice $Q$ ottenuta non è ortogonale.
+
+\begin{os}
+ A questo punto è naturale chiedersi che rapporto esiste fra la matrice calcolata con il metodo di Householder
+ e quella calcolata con il metodo di Lanczos, al variare del primo vettore $q_1$ scelto all'inizio. La risposta
+ che è possibile verificare è che scegliendo $q_1 = e_1$ le matrici differiscono per una matrice di fase.
+\end{os}
+
+Nonostante in generale il metodo non venga usato per la sua poca precisione esiste un particolare caso in cui
+risulta essere utile, ed è precisamente il seguente
+
+\subsection{Il quoziente di Rayleigh}
+Cominciamo con una definizione
+\begin{de}
+ Si dice \emph{quoziente di Rayleigh di $A$ e $x$} e si indica con $\ray{A}{x}$ lo scalare
+ \[
+  \ray{A}{x} = \frac{\trasp x A x}{\trasp xx}
+ \]
+\end{de}
+Si può osservare che il minimo del quoziente di Rayleigh su tutto $\R^n$ corrisponde al modulo dell'autovalore minimo
+e il massimo al modulo dell'autovalore massimo. \\
+Osserviamo poi che preso un generico sottospazio $k$-dimensionale $S \subseteq \R^n$ abbiamo che se
+\[
+ \lambda = \min_{x \in S} \ray{A}{x}
+\]
+allora $\lambda$ è l'autovalore di modulo minimo su un sottospazio di $\R^n$. Se $S$ è sufficientemente grande
+possiamo pensare di usare $\lambda$ come approssimazione di $\lambda_{min}$. \\
+Consideriamo $\{ q_1 , \ldots, q_k \}$ base del sottospazio $S$ e la matrice $Q$ con i vettori $q_i$ come colonne.
+Se prendiamo $x \in S$ allora
+\[
+x = \sum_{i=1}^{k} \alpha_i q_i
+\]
+e quindi se $\alpha = (\alpha_1, \ldots, \alpha_k)$ si ha $x = Q\alpha$.
+\[
+\frac{\trasp x A x}{\trasp xx} = \frac{\trasp \alpha \trasp Q A Q \alpha}{\trasp \alpha \trasp Q Q \alpha} =
+ \frac{\trasp \alpha \trasp Q A Q \alpha}{\trasp \alpha \alpha}
+\]
+In conclusione è sufficiente minimizzare $\ray{\trasp Q A Q}{x}$ su $\R^k$, ed essendo $\trasp Q A Q$ una matrice
+$k \times k$ questo procedimento può risultare sensibilmente più economico rispetto all'idea originale. \\
+\begin{de}
+ Data una matrice $A$ a coefficienti reali\footnote{definiamo il procedimento sui numeri reali solo per non appesantire
+ la notazione, ma non c'è nessuna restrizione ad usarlo sui complessi.} e $x$ un vettore di $\R^n$.
+ Si dice \emph{sottospazio di Krylov} di $A$ e $v$ di ordine $j$ e si indica con $\kryl{A}{v}{j}$ il sottospazio
+ \[
+  S = \Span{v, Av, \ldots, A^{j-1}v}
+ \]
+\end{de}
+Osserviamo che in generale $\dim{S} \leq j$. \\
+Siamo ora interessati ad utilizzare un sottospazio di Krylov come sottospazio $S$ con cui approssimare il nostro autovalore.
+Per farlo però dobbiamo trovare una base ortonormale di $S$; possiamo procedere calcolando la scomposizione \qr\ della
+matrice dei vettori che generano:
+\[
+ \left[ \begin{array}{c|c|c|c}
+         \multirow{4}{*}{$v$} & \multirow{4}{*}{$Av$} & \multirow{4}{*}{$\ldots$} & \multirow{4}{*}{$A^{j-1}v$} \\
+  & & & \\
+  & & &  \\
+  & & & \\
+        \end{array} \right] = QR
+\]
+Si può mostrare che le prime $j$ colonne di $Q$ sono una base dello spazio $S$. Per farlo è sufficiente osservare
+che essendo $R$ triangolare superiore e $n \times j$ con $j < n$ deve avere le ultime $n - j$ righe nulle. \\
+Calcolando ora $\trasp Q A Q = (b_{ij})$ si ottiene un matrice $k\times k$ simmetrica. Osserviamo in particolare
+che se $i < j+1$ allora $b_{ij} = \trasp q_i A q_j$ e $Aq_j \in \Span{v, Av, \ldots , A^{j-1}v}$ per costruzione.
+In particolare $Aq_j$ è ortogonale a $q_i$ e quindi $b_{ij} = 0$. La simmetria della matrice ci permette
+di concludere che $B$ è tridiagonale, e si può verificare che è la matrice $k\times k$ generata dal metodo
+di Lanczos dopo $k-1$ iterazioni. \\
+A questo punto si può supporre di avere una buona approssimazione dell'autovalore di modulo massimo (anche se
+non c'è nessuna garanzia di averla davvero). Questa è di fatto l'unica applicazione del metodo di Lanczos,
+data la sua instabilità numerica.
+
+\section{Matrici con struttura di rango}\label{sec:struttura_di_rango}
+\subsection{Qualche esperimento con il metodo \qr}
+Abbiamo spesso incontrato durante il corso matrici diagonali con correzioni di rango 1,
+ovvero della forma $D + u\trasp u$. Queste
+sono molto interessanti perché si ritrovano in molti problemi computazionali e perché sono inverse
+di matrici tridiagonali. \\
+Ci domandiamo ora se esiste un metodo efficiente per applicare il Metodo~\qr\ a queste matrici.
+Sappiamo di poterle tridiagonalizzare con matrici di Householder con un costo computazionale $O(n^2)$, ma
+vogliamo provare ad applicare il \qr\ alla matrice piena senza dover necessariamente passare
+per il procedimento di tridiagonalizzazione\footnote{Abbiamo fatto notare nella Sezione~\ref{subsec:qr_costo} che
+in generale non è conveniente applicare il metodo ad una matrice piena; cercheremo però di trovare
+qualche via più breve per questa particolare classe di matrici.}. \\
+Possiamo osservare sperimentalmente che facendo qualche passo del metodo \qr\ (anche utilizzando lo shift)
+la struttura non viene completamente persa.
+
+Indichiamo con $\alpha_k$ il rango massimo delle sottomatrici quadrate strettamente contenute nella parte
+inferiore della matrice della $k$-esima iterazione del \qr, e con $\beta_k$, analogamente, il rango massimo
+di quelle superiori.
+
+\textbf{Esperimento 1}: Supponiamo di scegliere una matrice qualsiasi (complessa) e di applicare
+il metodo. Osserveremo che $\alpha_0 = \alpha_1 = \ldots = \alpha_k = 1$
+mentre $\beta_k$ cresce.
+
+\textbf{Esperimento 2}: Supponiamo ora di restringere la scelta ad una matrice con $D$ reale, ovvero
+$A = D + u\trasp u$ dove $D = \diag{\gamma_1, \ldots, \gamma_n}$ e i $\gamma_i$ sono tutti reali. Allora
+otterremo sperimentalmente $\alpha_i = 1$ e $\beta_i = 3$ per ogni $i \geq 2$.
+
+\textbf{Esperimento 3}: Analogamente a prima scegliamo $D$ complessa ma con elementi di modulo $1$\footnote{ovvero
+quella che abbiamo chiamato \emph{matrice di fase}.}. Otterremo ancora una volta $\alpha_i = 1$ e $\beta_i = 3 \:
+\forall i \geq 2$.
+
+Come mai i $\beta_k$ in questi ultimi due casi non crescono più di $3$? Cerchiamo di rispondere analizzando separatamente
+i vari casi.
+
+\subsection{Conservazione del rango nella parte triangolare inferiore}
+Ricordiamo dall'Osservazione~\ref{os:qr_simili_ak} che le matrici $A_k$ generate dal metodo \qr\ sono
+simili per trasformazione ortogonale. Se assumiamo che $R_k$ sia invertibile possiamo anche mostrare
+qualcosa di più
+\[
+ A_{k+1} = R_k Q_k + \alpha_k I = R_k Q_k R_k R_k^{-1} + \alpha_k R_k R_k^{-1} = R_k A_k R_k^{-1}
+\]
+e quindi $A_{k+1}$ è simile ad $A_k$ tramite una trasformazione con una matrice triangolare superiore
+$R_k$. Questo ci assicura che nella parte inferiore della matrice $A_{k+1}$ il rango venga conservato
+(nel senso degli $\alpha_k = 1$).
+
+%% TODO: Spiegare perché il rango si conserva, da fare quando anche io lo avrò capito.
+
+\subsection{Limitazione del rango nella parte triangolare superiore}
+Ci occuperemo ora di spiegare perché il rango di tutte le sottomatrici strettamente contenute nella
+parte triangolare superiore è limitato superiormente da $3$, sia nel caso in cui $D$ sia una matrice
+reale, sia in quello in cui sia una matrice di fase. Consideriamo il primo e osserviamo cosa succede
+al primo passo del metodo. Poniamo $A_0 = D + u\trasp v$; si ha che:
+\[
+ A_1 = \herm{Q_1} A_0 Q_1 = \herm{Q_1}(D+ u\trasp v)Q_1 = \herm{Q_1} DQ_1 + u_1\trasp{v_1}
+\]
+Ricordando che $D$ è reale si può concludere che $\herm{Q_1}DQ_1$ è hermitiana e diagonale;
+possiamo quindi scrivere il $k$-esimo passo del metodo in questo modo
+\[
+ A_{k+1} = H_{k+1} + u_{k+1}\trasp v_{k+1}
+\]
+dove $H_{k+1}$ è una matrice hermitiana. In particolare si ha $H_{k+1} = A_{k+1} - u_{k+1}\trasp v_{k+1}$.
+Da quanto visto prima sappiamo che il rango nella parte inferiore di $H_{k}$ non può superare $2$.
+Ricordando che $H_k$ è hermitiana si può concludere che il rango è al massimo $2$ nella parte superiore.
+Osservando nuovamente che $A_k = H_k + u_k\trasp v_k$ si ottiene che il rango di $A_k$ nella parte superiore
+non può superare $3$ e si ha quindi la tesi.
+
+La stessa cosa si può mostrare che quando la matrice diagonale $D$ è una matrice di fase. Ci sono due
+procedure possibile per effettuare la dimostrazione; una è scrivere $D = QR$ ed osservare che data
+l'hermitianità di $D$ si ottiene che $R$ deve forzatamente essere una matrice di fase. Questa via
+richiede però tediosi passaggi molto contosi che quindi non svolgeremo. Un'alternativa più elegante
+è utilizzare il \emph{Nullity theorem}, dimostrato attorno al 1960. Questo però non fa parte del
+programma del corso e quindi non seguiremo neanche questa via.
+
+\subsection{Metodo \qr\ per il calcolo delle radici dei polinomi}
+Il motivo principale (e storicamente il primo) per cui ci si è interessati a queste matrici
+è stato la ricerca delle radici dei polinomi tramite l'uso delle matrici Companion. \\
+Le matrici Companion hanno una struttura come la seguente:
+\[
+F = \left[ \begin{array}{cccc}
+            0 & \cdots & \cdots & \times \\
+            1 & \ddots & & \vdots \\
+	       &\ddots & 0 & \times \\
+              & & 1 & \times
+           \end{array} \right]
+\]
+La matrice $F$ si può scrivere come una matrice unitaria più una correzione di rango $1$ nel seguente modo
+\[
+F = Q + u\trasp e_n = \left[ \begin{array}{cccc}
+                              0 & & & 1 \\
+                              1 & \ddots & & \\
+                               & \ddots & \ddots & \\
+                               & & 1 & 0 \\
+                             \end{array} \right]
++ \left[ \begin{array}{cccc}
+                               \: &\:  &\:  & v_1 \\
+                               &  & & \vdots \\
+                               &  &  & \vdots \\
+                               & &  &  v_n \\
+                             \end{array} \right]
+\]
+e quindi sarebbe conveniente poter applicare delle ottimizzazioni al \qr\ sfruttando le osservazioni fatte
+sul rango delle matrici contenute nella parte inferiore e superiore della matrice che viene iterata.
+
+Supponendo di voler determinare le radici del polinomio $p(x) = p_0 + p_1x + \ldots + p_nx^n$ si ottiene
+la matrice
+\[
+F = \left[ \begin{array}{cccc}
+            0 & \cdots & \cdots & \frac{-p_0}{p_n}\\
+            1 & \ddots & & \vdots \\
+	       &\ddots & 0 & \vdots \\
+              & & 1 & \frac{p_{n-1}}{p_n}
+           \end{array} \right]
+\]
+In generale, affrontando il problema della ricerca degli autovalori, usiamo il teorema di Bauer-Fike (Teorema~\ref{te:BauerFike})
+per assicurarci di ottenere il risultato con una buona approssimazione. Questo però non è sempre sufficiente
+se $p_n$ è piccolo, perché la norma della matrice può crescere arbitrariamente. Come affrontare questo problema?
+
+Una soluzione può essere evitare di ricondursi ad un problema agli autovalori analizzando il seguente \emph{problema
+generalizzato agli autovalori}\footnote{In generale si dice \emph{problema generalizzato agli autovalori} un problema
+del tipo $\deter{A - \lambda B} = 0$. Se $B$ è invertibile questo può sempre essere ricondotto a trovare gli
+autovalori di $B^{-1}A$, ma non sempre è conveniente. }:
+\[
+ \deter{F - \lambda I} = 0 \iff \deter{p_n F - \lambda( I + p_n e_n\trasp e_n)} = 0
+\]
+Parleremo dei possibili metodi per analizzare questo problema nel Capitolo~\ref{cap:autovalori_generalizzato}.
\ No newline at end of file
diff --git a/capitoli/capitolo6.tex b/capitoli/capitolo6.tex
new file mode 100644
index 0000000..fa796d7
--- /dev/null
+++ b/capitoli/capitolo6.tex
@@ -0,0 +1,32 @@
+\chapter{Problema generalizzato agli autovalori} \label{cap:autovalori_generalizzato}
+Vorremmo in questo capitolo analizzare\footnote{in realtà ci accontenteremo di dare uno sguardo
+al problema, perché non avremo tempo per approfondirlo veramente.} il problema generalizzato
+agli autovalori. In altre parole, date due matrici $A$ e $B$ vogliamo trovare i possibili
+$\lambda$ tali che
+\[
+ \deter{ A - \lambda B} = 0
+\]
+
+\section{Il caso delle matrici Companion}
+Ispirati dal problema visto alla fine della Sezione~\ref{sec:struttura_di_rango} analizziamo
+il problema nel caso con $A$ in forma di Hessenberg e $B$ triangolare superiore. \\
+Per cercare di non peggiorare il condizionamento del problema sarebbe preferibile lavorare
+unicamente con trasformazioni unitarie. Cerchiamo di generare una sequenza di matrici
+$A_k$ e $B_k$ tali che
+\[
+ \deter{A - \lambda B} = 0 \iff \deter{A_k - \lambda B_k} = 0 \quad \forall k \in \N
+\]
+Nel nostro caso vogliamo anche mantenere le proprietà di struttura della matrice, ovvero
+vorremmo che $A_k$ sia sempre in forma di Hessenberg e che $B_k$ sia sempre in forma
+triangolare superiore. Cerchiamo delle matrici unitarie $U_k$ e $Q_k$ in modo da definire
+la seguente successione
+\[
+ \left\{\begin{array}{lcl}
+         A_{k+1} &=& U_kA_kQ_k \\
+         B_{k+1} &=& U_kB_kQ_k
+        \end{array} \right.
+\]
+e scegliendo opportunamente le matrici in modo che $A_k$ e $B_k$ siano rispettivamente
+Hessenberg e triangolare superiore. \\
+Se queste condizioni sono soddisfatte allora $A_k - \lambda B_k$ è singolare solo se
+$a_{jj}^{(k)} - \lambda b_{jj}^{(k)} = 0$ per qualche $j$, ovvero solo se $\lambda = \frac{a_{jj}^{(k)}}{b_{jj}^{(k)}}$
diff --git a/capitolo1.tex b/capitolo1.tex
deleted file mode 100644
index 55c8be3..0000000
--- a/capitolo1.tex
+++ /dev/null
@@ -1,687 +0,0 @@
-\chapter{Il polinomio caratteristico}
-In questo capitolo ci occuperemo di descrivere le forme normali tipicamente usate per
-calcolare agevolmente gli autovalori di una matrice. Descriveremo dei metodi efficienti
-per valutare in un punto il polinomio caratteristico, che potranno essere usati
-nei capitolo seguenti per implementare gli algoritmi di calcolo effettivo. \\
-Premetteremo a questo una breve esposizione degli utilizzi pratici più comuni dei
-metodi che verranno in seguito esposti.
-
-\section{Esempi pratici di utilizzo}
-Prima di cominciare ad analizzare in dettaglio l'argomento presentiamo due applicazioni pratiche
-(che poi verranno analizzate in maggior dettaglio) che richiederanno la determinazione mediante
-metodi numerici degli autovalori di una matrice associata al problema.
-
-\subsection{Risoluzione di equazioni algebriche}
-\label{subsec:esempi:eqalgebriche}
-Un problema comune è, data un'equazione algebrica della forma
-\[
- p(z) = p_0 + p_{1}z + \ldots + p_{n}z^{n} = 0
-\]
-trovare la $n$ radici $z_1 , \ldots , z_n$ tali che $p(z_i) = 0 \ \forall i = 1\ldots n$.
-
-Risolvere questo problema tramite algoritmi di iterazione funzionale, come vedremo, potrebbe non essere
-conveniente, e quindi ci si riconduce spesso (quasi sempre) ad un problema di calcolo di autovalori tramite
-il seguente procedimento. \\
-Consideriamo la matrice
-\[
- F = \begin{bmatrix}
-      0 & 0    & \ldots & -\frac{p_0}{p_n} \\
-      1 & 0     &        & -\frac{p_1}{p_n} \\
-      0 & \ddots & \ddots & \vdots           \\
-      0 &  \hdots & 1      & -\frac{p_{n-1}}{p_n} \\
-     \end{bmatrix}
-\]
-detta matrice di \emph{Frobenius}\index{Frobenius, matrice di} o matrice \emph{Companion} \index{Companion, matrice}. Questa
-ha come polinomio caratteristico esattamente $p(z)$ e quindi i suoi autovalori sono esattamente le radici dello stesso. \\
-Osserveremo inoltre che sarà possibile mostrare la stabilità all'indietro del procedimento per calcolare
-gli autovalori, ovvero potremo essere sicuri che gli autovalori calcolati mediante l'aritmetica approssimata
-di macchina saranno le radici di un polinomio i cui coefficienti ``disteranno poco'' da quelli originali di $p(z)$.
-Questo in generale non ci assicura di avere un risultato con una buona approssimazione; più precisamente questo sarà
-garantito solo nel caso in cui il problema sia ben condizionato\footnote{Ricordiamo che un problema è ben condizionato
-quando a piccole variazioni dei dati iniziali corrispondono piccole variazioni dei dati finali.}.
-
-\subsection{Equazioni differenziali}
-Un altro caso in cui il calcolo di autovalori ci permetterà di risolvere un problema comune sarà quello delle
-equazioni differenziali. Non abbiamo ancora gli strumenti per approfondire questo argomento, ma possiamo anticipare
-che i metodi per il calcolo di autovalori ci permetteranno sia di arrivare alla soluzione (in qualche caso) che
-di stimare l'effetto di una perturbazione dei dati iniziali (in altri casi).
-
-\section{Analisi del condizionamento} \label{sec:analisidelcondizionamento}
-In questa sezione vorremmo analizzare il condizionamento del nostro problema. Il calcolo degli autovalori non
-è sempre un problema ben condizionato, come possiamo mostrare con questo esempio: \\
-Sia $F$ la matrice di Frobenius associata al polinomio $z^n$, ovvero la matrice con soli zeri ad eccezione della
-sottodiagonale, composta da soli $1$. \\
-I suoi autovalori sono tutti $0$ ed hanno moleplicità algebrica $n$ e molteplicità geometrica $1$\footnote{il che si
-capisce facilmente notando che la matrice $F$ è in forma di Jordan}. \\
-Se noi perturbiamo la matrice sottraendole la matrice $\eps e_1 \trasp{e_n}$ otteniamo la matrice di Frobenius
-associata al polinoio $z^n + \eps$. Da quanto abbiamo osservato nella Sezione~\ref{subsec:esempi:eqalgebriche} sappiamo che
-gli autovalori di quest'ultima sono le radici $n$-esime dell'unità moltiplicate per $||\eps||^{\frac{1}{n}}$;
-possiamo osservare che al crescere di $n$ anche se $\eps$ è piccolo questo numero può diventare piuttosto grande, e
-portare quindi ad errori non trascurabili.
-\subsection{Il caso di una matrice diagonalizzabile}
-Cominciamo ad analizzare un caso relativamente semplice, ovvero quello dove $A$ è una matrice diagonalizzabile,
-per cui dimostreremo un risultato detto
-\begin{te}[di Bauer - Fike] \label{te:BauerFike}
- Se $A \in \mat{\R}{n}$ è una matrice diagonalizzabile tramite il cambio di base $V^{-1}$ ed $\eta$ è
- un autovalore della matrice perturbata $A + \delta A$ allora esiste un autovalore $\lambda$ di $A$ tale che
- \[
-  ||\lambda - \eta|| \leq ||\delta A || \cdot \cond{V}
- \]
-\end{te}
-\begin{proof}
-Sappiamo che esiste $V$ base di autovettori tali che
-\[
- A = VDV^{-1} \; \textrm{con} \ D \ \textrm{diagonale}
-\]
-Supponiamo ora di aver calcolato $\eta$ autovettore di una matrice $A + \delta A$ e verifichiamo
-quanto dista $\eta$ dagli autovettori di $A$.\\
-Osserviamo che questo equivale a
-\[
- (A + \delta A) y = \eta y \ \iff \ (A - \eta y) = \delta A y
-\]
-Possiamo distinguere due casi:
-\begin{description}
- \item[$(A-\eta I)$ è singolare] Questo è il caso migliore in cui possiamo sperare, in quanto questo significa
- che $\eta$ è un autovalore di $A$ e quindi la distanza è $0$.
-  \item[$(A-\eta I)$ non è singolare] ed allora ammette un'inversa. Abbiamo quindi che
-  \[
-   y = -(A - \eta I)^{-1}( \delta A y )
-  \]
-  Consideriamo dunque una norma matriciale indotta tale che data una matrice $D$ diagonale si abbia
-  $||D|| = \max_{i = 1 \ldots n}\{|d_{ii}|\}$\footnote{la norma $1$, $2$ e $\infty$ soddisfano questo
-  requisito,  ad esempio; questo tipo di norma è detta \emph{assoluta}.} ed effettuiamo le seguenti maggiorazioni
-  \[
-   ||y|| \leq ||(A -\eta I)^{-1}|| \cdot || \delta A || \cdot ||y||
-  \]
-  che si verifica solo se (ricordando che essendo $y$ un autovettore
-  $y \neq 0$ e quindi $||y|| \neq 0$)
-  \[
-   1 \leq ||V|| \cdot ||( D -\eta I)^{-1}|| \cdot ||V^{-1}|| \cdot || \delta A ||
-   \leq \frac{\cond{V} \cdot ||\delta A ||}{\min_{i = 1 \ldots n}\{ \lambda_i - \eta\}}
-  \]
-  da cui si ottiene che esiste un $j \in 1 \ldots n$ tale che
-  \[
-   ||\lambda_j - \eta|| \leq ||\delta A || \cdot \cond{V}
-  \]
-\end{description}
- \`E evidente quindi che in entrambi i casi è valida la diseguaglianza della tesi (nel primo caso si ha addirittura
- che $||\lambda - \eta|| = 0$), e quindi il teorema è provato.
-\end{proof}
-
-\begin{os}
- Dobbiamo fare attenzione al fatto che questa maggiorazione ottenuta dal precedente teorema è in valore
- assoluto, e quindi non ci dice nulla sull'errore relativo. Saremo certi di ottenere un buon
- condizionamento solo nel caso in cui gli autovalori trovati non siano troppo ``piccoli''.
-\end{os}
-
-Data questa maggiorazione dell'errore ci possiamo chiedere come fare a minimizzare l'unico fattore
-su cui possiamo avere un ``controllo'', ovvero $\cond{V}$. Dalle proprietà delle norme matriciali
-indotte sappiamo che $\forall V \ \cond{V} \geq 1$. \\
-Inoltre possiamo osservare che se $V$ è una matrice unitaria allora $\cond{V}$ vale esattamente $1$. \\
-Sembra quindi opportuno, quando possibile, cercare di rendere diagonale la matrice $A$ tramite un cambio
-di base unitario. Quando è possibile farlo? \\
-Grazie alla forma normale di Schur possiamo dare una caratterizzazione completa delle matrici per cui questo
-è possibile. Si può infatti provare che data $A \in \mat{\C}{n}$ questa è diagonalizzabile mediante
-matrici unitarie se e solo se $A$ è normale, ovvero $A\herm{A} = \herm{A}A$.
-
-\begin{os}
- Ci ricordiamo che per risolvere i sistemi lineari abbiamo individuato due classi di metodi:
- \begin{description}
-  \item[I metodi diretti] i quali forniscono una soluzione ``esatta'' del problema in un numero
-  finito di passi, a meno dell'errore di macchina e algoritmico.
-  \item[I metodi iterativi] i quali invece forniscono una soluzione approssimata del sistema,
-  iterando un numero finito di passi di una successione che converge solamente dopo un numero
-  infinito.
- \end{description}
-Nel caso della ricerca degli autovalori la prima classe di metodi non può essere applicata, in quanto
-il problema è equivalente a trovare le radici del polinomio caratteristico, problema che \emph{non può
-essere risolto tramite una formula}.
-\end{os}
-
-Siamo quindi consci che la nostra unica opportunità per arrivare alla soluzione sarà eseguire una
-successione di cambi di base (che sono degli invarianti del problema) che porti la matrice in una forma
-in cui gli autovalori siano facilmente determinabili. \\
-Il condizionamento del problema sarà quindi maggiorabile con il prodotto dei condizionamenti di tutti i
-cambi di base (si può infatti mostrare che prese due matrici $V$, $S$ si ha $\cond{VS}\leq\cond{V}\cdot\cond{S}$)
-e quindi dovremo
-cercare dei cambi di base con un piccolo condizionamento (come, ad esempio, quelli unitari).
-
-Il teorema di Bauer--Fike ci permette di dare una maggiorazione globale sul condizionamento degli autovalori,
-ma in alcuni casi è possibile dare anche una maggiorazione del condizionamento per un autovalore singolo. \\
-Consideriamo ad esempio il caso di un autovalore con molteplicità algebrica e geometrica $1$.
-
-\begin{pr}
- Data una matrice $A \in \mat{\C}{n}$, una matrice di perturbazione $\eps F$, un autovalore
- $\lambda \in \spe{A}$ ed $\eta$ un autovalore della matrice perturbata $A + \eps F$ si ha che,
- dati $y, w$ autovettori destro e sinistro di modulo $1$ relativi a $\lambda$
- \[
-  ||\eta - \lambda|| \leq \frac{1}{\herm{w}y} \cdot ||\eps F||
- \]
-\end{pr}
-\begin{proof}
- Sappiamo che $\eta$ e il suo autovettore relativo\footnote{che evidentemente non è unico, ma possiamo supporre
- di sceglierlo in modo continuo} $y$ sono funzioni analitiche di $\eps$ e quindi
- possiamo scrivere
- \[ \left\{\begin{array}{l}
-  \eta(\eps) = \lambda  + \eps \cdot \xi + O(\eps^2) \\
-  y(\eps)   = y + \eps \cdot w + O(\eps^2) \\
-  \end{array}\right.
- \]
-Effettuando un'analisi al I ordine otteniamo
-\begin{align*}
- (A + \eps F) ( y + \eps w) & = (\lambda + \eps \xi)(y + \eps w) \\
- Ay + \eps A w + \eps Fy & = \lambda y + \lambda \eps w + \eps \xi y   \\
-\end{align*}
-considerando che $Ay = \lambda y$ e dividendo tutto per $\eps$ si ottiene
-\[
- Aw + Fy = \lambda w + \xi y
-\]
-Sappiamo inoltre che deve esistere $u$ autovettore sinistro unitario di $A$ relativo all'autovalore
-$\lambda$ e quindi, moltiplicando tutto per $u$
-\begin{align*}
- \herm{u}Aw + Fy & = \lambda \herm{u} w + \xi \herm{w} y \\
- Fy & = \xi \herm{u} y
-\end{align*}
-Ricordando infine che, a meno di termini di ordine maggiore di $1$, $||\eps \xi|| = ||\lambda - \eta||$ e
-che $||u|| = ||y|| = 1$ si ottiene
-\[
- ||\lambda - \eta|| = ||\eps \xi|| \leq || \eps F|| \cdot \frac{1}{\herm{u}y}
-\]
-che è la tesi.
-\end{proof}
-
-%% 1 ottobre 2009
-\section{Operazioni preliminari}
-In questa sezione vorremmo introdurre delle operazioni preliminari da compiere prima di applicare
-un qualsiasi metodo per il calcolo effettivo degli autovalori. \\
-\subsection{Matrici di Householder}
-I metodi che solitamente vengono usati accettano infatti in input solo matrici particolari, più
-precisamente
-\begin{description}
- \item[Matrici hermitiane tridiagonali] Ovvero delle matrici hermitiane tali che $a_{ij} = 0$ se
-  $| i -j | \geq 2$ e tale che $a_{ij} = \con{a_{ji}} \ \forall i,j \in 1 \ldots n$.
-  \item[Matrici in forma di Hessenberg superiore] Ovvero le matrici tali che $a_{ij} = 0$ se $i > j +1$.
-\end{description}
-
-\begin{figure}[h]
-\begin{center}
- \subfigure{
-$ T =
-   \begin{bmatrix}
-    \alpha_1 & \con{\beta_1} & 0      & 0 \\
-    \beta_1  & \ddots        & \ddots & 0  \\
-    0        & \ddots        & \ddots & \con{\beta_{n-1}} \\
-    0        & 0             & \beta_{n-1} & \alpha_n \\
-   \end{bmatrix}$
-}
-\subfigure{
-$ H =
-\begin{bmatrix}
- \times & \hdots & \hdots & \times \\
- \times & \ddots &     & \vdots \\
- 0  & \ddots & \ddots & \vdots \\
- 0 & 0       & \times   & \times \\
-\end{bmatrix}$
-}
-\end{center}
- \caption{Struttura delle matrici tridiagonali e di Hessenberg superiore}
-\end{figure}
-
-Abbiamo quindi la necessità di trovare un algoritmo efficiente e stabile per trasformare
-una generica matrice $A$ in una matrice $T$ o $H$ rispettivamente tridiagonale o in forma
-di Hessenberg superiore. \\
-Per quanto osservato nella Sezione~\ref{sec:analisidelcondizionamento} cercheremo una $Q$ unitaria
-tale che
-\[
- QA\herm{Q} = T \qquad \textrm{oppure} \qquad QA\herm{Q} = H
-\]
-Si osserva subito che sia $Q$ che $T$ sono unitarie e quindi una condizione necessaria per il verificarsi
-della prima eventualità è che anche $A$ sia hermitiana\footnote{in quanto la stiamo trasformando per congruenza,
-che conserva l'hermitianità}
-
-\begin{de}[Matrici di Householder]
- Una matrice $P$ si dice \emph{matrice elementare di Householder} se esistono $\sigma \in \R \setminus \{0\}$
- e $u \in \R^n$ tali che $P = I - \sigma u \herm{u}$ e $\sigma = \frac{2}{||u||_2}$.
-\end{de}
-
-Sia $P$ una matrice di Householder. Allora valgono le seguenti:
-\begin{description}
- \item[$P$ è Hermitiana] Se abbiamo $P = I -\sigma u \herm{u}$ allora $p_{ij} = u_i\con{u_j}$, e quindi
-  $\con{p_{ji}} = \con{u_j\con{u_i}} = u_i\con{u_j} = p_{ij}$.
- \item[$P$ è unitaria] Se consideriamo che $P$ è hermitiana abbiamo che $P\herm{P} = P^2 =
-  (I - \sigma u \herm{u})^2 = I -2\sigma u \herm u + \sigma^2 \herm u u u \herm u = I$.
- \item[$\deter{P} = -1$] Consideriamo una base dello spazio ottenuta imponendo come primo
-  vettore $u$ e costruendo gli altri ortogonali a lui. Si osserva facilmente che la matrice
-  associata a $P$ diventa come la matrice identità ad eccezione del posto $(1,1)$ dove si trova
-  un $-1$ (infatti $Pu = -u$) e quindi $\det{P} = -1$.
-\end{description}
-
-Consideriamo ora una generica matrice $A$ e mostriamo che esiste una matrice unitaria $P$ tale che
-$PA\herm{P}$ ha tutti gli elementi delle prima colonna con indice maggiore di $1$ uguali a $0$.
-Questo sarà il passaggio che poi ci permetterà di mostrare per induzione che si può portare una
-qualsiasi matrice in forma di Hessenberg superiore. \\
-Data la seguente matrice generica $A$
-\[
- A = \left[ \begin{array}{c|cc}
-      a_{11} & \multicolumn{2}{|c}{\herm{w}} \\
-  \hline
-      \multirow{2}{*}{$v$}    & \sblocke{\; \hat{A}\;}{2}  \\
-        & &
-     \end{array} \right]
-\]
-So che esiste una matrice $\hat P$ di Householder tale che $\hat{P}v = \beta e_1$ da cui si ottiene che
-\[
- P = \left[ \begin{array}{c|cc}
-  1 & \multicolumn{2}{c}{\herm{0}} \\
-  \hline
-  \multirow{2}{*}{$0$} & \sblocke{ \quad \hat P \quad}{2} \\
-  & &
-      \end{array} \right]
-\qquad
- PA\herm{P} = \left[ \begin{array}{c|cc}
-                      a_{11} & \multicolumn{2}{|c}{\herm{w} \herm{\hat{P}}} \\
-\hline
-		      \multirow{2}{*}{$\hat Pv$} & \sblocke{\hat P \hat A \herm{\hat{P}}}{2} \\
-                      & &
-                     \end{array} \right]
-\]
-Ricordando che $\hat{P}v = \beta e_1$ si ottiene che in $n-2$ passi la matrice di partenza si può ridurre
-in forma di Hessenberg superiore. \\
-Si può osservare che se la matrice di partenza era hermitiana anche la matrice ridotta lo sarà,
-dato che la trasformazione per matrici di Householder è unitaria, e quindi la matrice ottenuta
-sarà tridiagonale.
-
-\subsection{Valutazione del costo computazionale}
-Il costo computazionale di ogni passo del procedimento sopra descritto è dato da
-\begin{enumerate}
- \item Calcolo di $\hat P$;
- \item Calcolo di $\herm{w} \hat{P}$ (qualora sia necessario, cioè quando $A$ non è
-  hermitiana);
- \item Calcolo di $\hat{P}\hat{A}\herm{\hat{P}}$;
-\end{enumerate}
-I primi due sono $O(n)$ mentre il terzo è il più grande, $O(n^2)$. Il procedimento completo
-risulta quindi con un costo computazionale di $O(n^3)$.
-
-\subsection{I vantaggi della riducibilità}
-Data la matrice in forma tridiagonale o in forma di Hessenberg superiore è facile verificare che
-la condizione di riducibilità è verificata solo se $\exists i \: \beta_i = 0$ dove i $\beta_i$ sono
-gli elementi della sottodiagonale. Non è però vero il contrario, ovvero se i $\beta_i$ sono tutti
-diversi da $0$ non è certo che la matrice sia irriducibile\footnote{questa implicazione vale solo
-nel caso hermitiano tridiagonale}. D'ora in poi diremo che la matrice è \emph{non riducibile}
-se tutti i $\beta_i$ non sono $0$, mentre useremo il termine \emph{irriducibile} per
-indicare la condizione usuale di irriducibilità. \\
-La riducibilità porta notevoli vantaggi computazionali alla risoluzione del problema in quanto
-si ottiene una matrice del tipo
-\[
- M = \left[ \begin{array}{c|c}
-             A & B \\
-  \hline
-             0 & C \\
-            \end{array} \right]
-\]
-e quindi è immediato verificare che gli autovalori di $M$ sono quelli di $A$ uniti a quelli di $C$.
-
-\begin{pr}
- Sia $A$ una matrice tridiagonale hermitiana irriducibile. Allora tutti i suoi autovalori hanno molteplicità $1$.
-\end{pr}
-\begin{proof}
- Sia $\lambda$ un autovalore di $A$. Sappiamo che $A - \lambda I$ non è un isomorfismo, e che la molteplicità
- geometrica di $\lambda$ è pari al rango di $A - \lambda I$.
- Se consideriamo il minore di sud-ovest $J$ possiamo osservare che:
- \begin{itemize}
-  \item $J$ è triangolare superiore
-  \item la diagonale $J$ è composta dagli elementi $\beta_1 \ldots \beta_n$ della sottodiagonale di $A$
- \end{itemize}
-Queste due osservazioni ci permettono di concludere che $\deter{A - \lambda I} = \prod_{i=0}^{n}~\beta_i$ che
-è diverso da $0$, e quindi la molteplicità geometrica di $\lambda$ è $1$. Sapendo che la matrice è
-hermitiana possiamo anche essere sicuri che sia diagonalizzabile, e quindi che per ogni autovalore
-la molteplicità geometrica coincida con quella algebrica. In particolare l'autovalore $\lambda$ ha
-molteplicità $1$.
-\end{proof}
-
-Osserviamo che se la matrice invece che essere tridiagonale hermitiana è in forma di Hessenberg superiore,
-possiamo solo affermare che ogni autovalore ha molteplicità gemetrica $1$. Non possiamo però controllare
-la molteplicità algebrica e quindi non possiamo essere certi della diagonalizzabilità della matrice.
-
-\section{Il polinomio caratteristico}
-Il primo metodo che si può pensare di applicare cercando gli autovalori di una data matrice $A$ è
-quello di cercare gli zeri del polinomio caratteristico. Nonostante questo sia raramente applicabile,
-alcune analisi sulla ``struttura'' del polinomio potranno fornirci dei risultati teorici che ci saranno
-utili in seguito.
-
-\subsection{Il caso delle matrici Hermitiane tridiagonali} \label{subsec:hermdiag}
-Consideriamo una matrice $A \in \mat{\C}{n}$ in forma tridiagonale hermitiana.
-In tutta la sezione indicheremo con
-\begin{description}
- \item[$A_k$: ] Il minore di nord-ovest di ordine $k$ della matrice $A$. Osserviamo in particolare
- che si tratta ancora di una matrice hermitiana tridiagonale per ogni $k$.
- \item[$p_k(z)$: ] Il polinomio caratteristico delle matrice $A_k$, ed in particolare $p_n = p$;
- \item[$\lambda_i^{(k)}$: ] L'$i$-esimo autovalore della matrice $A_{k}$. L'ordinamento non ha importanza
- dove non è espressamente specificato;
-\end{description}
-Se proviamo a calcolare il polinomio caratteristico di $A_k$ sviluppando sull'ultima riga (o, analogamente,
-sull'ultima colonna) otteniamo la seguente relazione ricorrente e tre termini:
-\[
-p_k(z) = \deter{A - zI} = (\alpha_k - z) p_{k-1}(z) - |\beta_{k-1}|^2 p_{k-2}(z)
-\]
-Questa relazione ha senso anche nel caso $k = 1, 2$ a patto di porre $p_{0}(z) = 1$ e $p_{-1}(z) = 0$.
-Una volta nota questa relazione valutare il polinomio caratteristico di $A = A_n$ in un punto diventa molto
-meno oneroso (computazionalmente) rispetto al calcolare tutti i coefficienti. \\
-Si può infatti stimare la complessità del calcolo $p_k(z)$ a partire da $p_{k-1}(z)$ e $p_{k-2}(z)$
-con circa $5$ operazioni aritmetiche, e quindi
-la valutazione del polinomio in un qualsiasi punto $z$ risulta costare $O(n)$.
-\begin{os} \label{os:autovalpol}
- Dalla formula possiamo dedurre che se $\xi$ è un autovalore della matrice $A_k$ allora non può essere
- anche autovalore della matrice $A_{k-1}$.
-\end{os}
-Supponiamo per assurdo che $p_{k-1}(\xi) = 0 = p_k(\xi)$. Dunque si avrebbe
-$p_k(\xi) = 0 = (\alpha_k - \xi) p_{k-1}(\xi) - |\beta_{k-1}|^2 p_{k-2}(\xi) = |\beta_{k-1}|^2 p_{k-2}(\xi)$
-e quindi anche $p_{k-2}(\xi)$ deve essere nullo. Ripetendo questa considerazione si ottiene che anche $p_0(\xi)$
-deve essere nullo, ma $p_0(\xi) = 1$ (il polinomio costante) che è assurdo.
-In definitiva per ogni $k \neq j$ si ha che $\spe{A_k} \cap \spe{A_j} = \emptyset$.
-
-\subsection{L'equazione secolare} \label{sec:eqsecolare}
-Una domanda che sorge spontanea dopo queste considerazioni è: ``Che relazione possiamo trovare
-fra gli autovalori di due minori $A_k$ e $A_{k-1}$ di una matrice $A$?''. \\
-Il polinomio come scritto nella sezione precedente ci permette solamente di notare che
-gli autovalori sono distinti. Possiamo però estrapolare delle informazioni più dettagliate rappresentandolo
-in una opportuna base (di polinomi).
-Per questo paragrafo possiamo limitarci, per semplicità di notazione, al caso di una matrice simmetrica
-in $\mat{\R}{n}$, anche se il caso complesso si tratta con gli stessi passaggi.
-Dividiamo la matrice $A$ in blocchi nel modo seguente
-\[
- A= \left[ \begin{array}{cc|c}
-          \sblocko{A_{n-1}}{2} & \\
-           & & \beta_{n-1} \\ \hline
-           &  \beta_{n-1} & \alpha
-        \end{array}
- \right]
-\]
-Dato che la matrice $A_{n-1}$ è simmetrica esiste una matrice ortogonale $Q_{n-1}$ tale che
-$D_{n-1} = Q_{n-1}A\trasp{Q_{n-1}}$ dove $D$ è la matrice con gli autovalori di $A$ sulla
-diagonale. \\
-Consideriamo dunque la matrice $\hat Q$ così composta:
-\[
- \hat Q = \left[
-\begin{array}{cc|c}
- \sblocko{Q_{n-1}}{2} & \\
-  & & \\ \hline
-  & & 1
-\end{array} \right]
-\]
-$\hat Q$ è sempre ortogonale e si verifica che
-\[
- \left[ \begin{array}{cc|c}
-  \sblocko{Q_{n-1}}{2} & \\
-  & & \\ \hline
-  & & 1
- \end{array} \right]
- \left[ \begin{array}{cc|c}
-         \sblocko{A_{n-1}}{2} & \\
-         & &  \beta_{n-1}\\ \hline
-         & \beta_{n-1} & \alpha_{n} \\
-        \end{array} \right]
- \left[ \begin{array}{cc|c}
-         \sblocko{\trasp{Q_{n-1}}}{2} & \\
-         & & \\ \hline
-         & & 1
-        \end{array} \right]
-=
-\left[ \begin{array}{cc|c}
-        \sblocko{D_{n-1}}{2} & \multirow{2}{*}{$w$} \\
-        & & \\ \hline
-        \multicolumn{2}{c|}{\trasp{w}} & 1
-       \end{array} \right] = B_n
-\]
-Una matrice come $B_n$, ovvero una diagonale ``orlata'' sull'ultima riga e sull'ultima
-colonna si dice \emph{matrice a freccia}\footnote{Penso che il motivo sia piuttosto
-evidente guardando la forma degli elementi non nulli}.
-Dato che questa trasformazione viene realizzata tramite matrici ortogonali anche il
-polinomio caratteristico rimane invariato e quindi si ha che
-\[
- p_n(z) = \deter{B_n - zI}
-\]
-Ricordiamo ora un risultato di Analisi Numerica
-\begin{pr}
- Sia $M$ una matrice a blocchi come la seguente
- \[
-  M = \left[ \begin{array}{c|c}
-              A & B \\ \hline
-              C & D \\
-             \end{array} \right]
- \]
-dove $A$ e $D$ sono matrici quadrate. Allora Esiste una matrice $\Gamma$ delle stesse dimensioni di $D$
-tale che
-\[
- M = \left[ \begin{array}{c|c}
-      I & 0 \\ \hline
-      \times & I
-     \end{array} \right]
- \left[ \begin{array}{c|c}
-         A & 0 \\ \hline
-         0 & \Gamma
-        \end{array} \right]
-\left[ \begin{array}{c|c}
-        I & \times \\ \hline
-        0 & I
-       \end{array} \right]
-\]
-ed in particolare $\Gamma = D - C A^{-1} B$ è detta \emph{complemento di Schur di $A$ in $M$}.
-\end{pr}
-\begin{proof}
- Provando a scrivere la relazione più esplicitamente otteniamo
-\[
- \begin{bmatrix}
-  I & 0 \\
-  \trasp{\alpha} & I
- \end{bmatrix}
- \begin{bmatrix}
-  A & 0 \\
-  0 & \Gamma
- \end{bmatrix}
- \begin{bmatrix}
-  I & \beta \\
-  0 & I
- \end{bmatrix} =
- \begin{bmatrix}
-   A & B \\
-   C & D
- \end{bmatrix}
-\]
-dove $\trasp \alpha$, $\beta$ e $\Gamma$ sono le incognite. Sviluppando si ottengono le seguenti equazioni
-\[
- \left\{
- \begin{array}{l}
-  A \beta = B \\
-  \trasp \alpha A = C \\
-  \trasp \alpha A \beta + \Gamma = D
- \end{array} \right.
-\]
-Ricordando che $\deter{A} \neq 0$ e considerando le prime due equazioni come degli insiemi di
-sistemi lineari si ottiene che esistono e sono unici $\alpha$ e $\beta$ che soddisfano le richieste, ed
-in particolare sono
-\[
-\left\{ \begin{array}{l}
- \trasp \alpha = C A^{-1} \\
- \beta = A^{-1} B
-\end{array} \right.
-\]
-In conclusione $\Gamma = D - \trasp \alpha A \beta = D - C A^{-1} A A^{-1} B = D - C A^{-1} B$
-e quindi la tesi è provata.
-\end{proof}
-\begin{os}
- Questa proposizione ci è utile perché ci permette di calcolare il determinante di una matrice di questo
-tipo calcolando semplicemente il prodotto del determinante di $A$ per quello di $\Gamma$.
-\end{os}
-Osserviamo prima di tutto che la matrice $B_n - zI$, per $z$ fissato, è in questa forma. Possiamo
-scrivere
-\[
- B_n - zI = \left[ \begin{array}{ccc|c}
-                    \lambda_1^{(n-1)} - z & & & \multirow{3}{*}{$w$} \\
-		    & \ddots & &  \\
-		    & & \lambda_{n-1}^{(n-1)} -z& \\ \hline
-		    \multicolumn{3}{c|}{\trasp{w}} & \alpha_n -z
-                   \end{array} \right] =
-\left[ \begin{array}{cc|c}
-        \sblocko{E_{n-1}}{2} & \multirow{2}{*}{$w$} \\
-        & &  \\ \hline
-        \multicolumn{2}{c|}{\trasp{w}} & \alpha_n -z
-       \end{array} \right]
-\]
-dove $E_{n-1}$ ed $[ \alpha_n -z ]$ sono quadrate\footnote{la seconda in particolare è
-semplicemente uno scalare}.
-Calcoliamo dunque il polinomio caratteristico della matrice (in tutti i punti dove $E_{n-1}$ è
-invertibile, ovvero in tutti gli $z$ che sono diversi dagli autovalori di $A_{n-1}$)
-$B_n$
-\[
-p_n(z)=\deter{B_n - zI}=\deter{A} (\alpha_n - z - \trasp{w}E_{n-1}^{-1}w)
-\]
-E quindi possiamo scrivere
-\[
- p_n(z) = \Bigg[ \prod_{j=1}^{n-1} (\lambda_j^{(n-1)} - z) \Bigg] \cdot
- \Bigg[ \alpha_n - z  - \sum_{i=1}^{n} \frac{w_i^2}{\lambda_i^{(n-1)} - z}\Bigg]
-\]
-e per continuità possiamo estenderlo a tutto $\C$, ottenendo
-\[
- p_n(z) = (\alpha_n - z)\cdot \prod_{j=1}^{n-1} (\lambda_j^{(n-1)} - z) - \sum_{i=1}^{n}w_i^2\prod_{\substack{i=1\\j\neq i}}^{n}(\lambda_i^{(n-1)}-z)
-\]
-\begin{os}
- Nel definire il polinomio siamo stati costretti ad escludere una quantità finita di punti (precisamente
- gli autovalori di $A_{n-1}$), ma è evidente che
- due funzioni polinomiali su $\C$ o su $\R$ che sono uguali a meno di una quantità finita di punti devono coincidere.
-\end{os}
-Questa forma del polinomio ci permette di valutarlo negli autovalori $\lambda_i^{(n-1)}$ della matrice
-$A_{n-1}$. Otteniamo la seguente
-\[
- p_n( \lambda_i^{(n-1)} )  = 0 - w_i^2\prod_{\substack{i=1\\i\neq j}}^{n} (\lambda_i^{(n-1)} - z) \neq 0
-\]
-e quindi, in particolare, per ogni $i$ si ottiene $w_i \neq 0$.
-Siamo ora interessati a cercare le radici del polinomio, sfruttando le informazioni che supponiamo
-di avere sugli autovalori della matrice di ordine $n-1$. \\
-Consideriamo che $\forall j=1 \ldots n-1 \quad p(\lambda_j^{(n-1)}) \neq 0$, per quanto visto nell'~Osservazione~\ref{os:autovalpol},
-e quindi le radici del polinomio sono le radici della funzione
-\[
- g(\xi) = \alpha_n - \xi-  \sum_{j=1}^{n} \frac{w_i^2}{\lambda_j^{(n-1)} - \xi}
-\]
-Questa equazione ($g(\xi) = 0$) è detta \emph{equazione secolare}. Le ragione del nome curioso non
-sono note, anche se esistono due teorie principali. Una sostiene che l'appellativo deriva dall'usanza
-diffusa nei primi del novecento di chiamare \emph{polinomio secolare} il polinomio caratteristico
-di una matrice, mentre l'altra sostiene che invece il nome sia dovuto ad una sua utilità
-in alcune teorie di descrizione del moto di pianeti (che tipicamente hanno tempi piuttosto lunghi). \\
-Ricordando che annullare $g$ è la stessa cosa che annullare $p_n$ possiamo tracciare un grafico
-qualitativo di $g$ (come si vede in Figura~\ref{fig:eqsecolare}) e notare che ad ogni asintoto verticale
-di $g$ corrisponde un autovalore di $A_{n-1}$ e che gli autovalori della matrice $A_n$ sono separati
-da quelli di $g$, in quanto la derivata di $g$ è sempre negativa (e quindi la funzione monotona).
-\begin{figure}[ht]
-  \begin{center}
- \begin{tikzpicture}
-\fill[blue!8] (-6.5,-3.5) rectangle (5.5,2.5);
-  %% Disegnamo gli assi
-\begin{scope}[very thin]
-  \draw[->] (-6,0) -- (5,0) node[anchor=north] {$\xi$};
-  \draw[->] (-0.5,-3) -- (-0.5,2) node[anchor=east] {$g(\xi)$};
-\end{scope}
-  \begin{scope}[thick]
-  %% Prima curva
-  \draw (-6,2) .. controls (-5,1.75) and (-4.2,0.5) .. (-4,0);
-  \draw (-4,0) .. controls (-3.8,-0.5) and (-3.5,-2) .. (-3.5,-3);
-
-  %% Seconda curva
-  \draw (-3.2,2) .. controls (-3.2,1.5) and (-2,1) .. (-1,0);
-  \draw (-1,0) .. controls (0,-1) and (0.5,-2) .. (0.55,-3);
-
-  %% Terza curva
-  \draw (1,2) .. controls (1,1) and (1.5,0.5) .. (2,0);
-  \draw (2,0) .. controls (2.5,-0.5) and (4,-2) .. (5,-3);
-\end{scope}
-  %% Asintoti (che corrispondono agli autovalori)
-\begin{scope}[blue]
-  \draw (-3.4,-3) -- (-3.4,0) node[anchor=south west] {$\lambda_1$} -- (-3.4,2);
-  \draw (0.8,-3) -- (0.8,0) node[anchor=south east] {$\lambda_2$} -- (0.8,2);
-\end{scope}
- \end{tikzpicture}
-\end{center}
-  \caption{Un grafico qualitativo di una possibile equazione secolare di una matrice con due autovalori}
-\label{fig:eqsecolare}
-\end{figure}
-
-Ovviamente queste considerazioni valgono in $\R$, e hanno senso dal momento che
-gli autovalori della matrice hermitiana devono essere reali. La stessa richiesta potrebbe addirittura
-non avere senso per una matrice in forma di Hessenberg che, a priori, potrebbe avere autovalori complessi.
-\subsection{Metodi di iterazione funzionale per il calcolo degli autovalori}
-Questa conoscenza di $g$ ci porterebbe a pensare di utilizzare metodi di iterazione funzionale
-per determinare gli autovalori della nostra matrice. \\
-Se consideriamo il caso Hermitiano, infatti, potremmo applicare il metodo di \emph{bisezione}.
-L'unica difficoltà in questo caso sta nel definire l'intervallo in cui sta una ed una sola radice
-per poter cominciare l'iterazione. Notiamo però che presi gli autovalori di $A_{n-1}$ in modo
-che $\lambda_i^{(n-1)} < \lambda_j^{(n-1)}
-\iff i < j$ si ha che ogni autovalore di $A$ sta fra $\lambda_i$ ed un $\lambda_{i+1}$, ad eccezione degli
-autovalori estremali. Anche in quel caso è facile trovare dei limiti su cui applicare la bisezione, considerando
-la diseguaglianza di Hirsch: $|\lambda| \leq ||A||$ (dalla definizione di norma matriciale).
-\begin{os}
- Tutto questo procedimento ci fornirebbe un metodo per calcolare gli autovalori di $A$ a patto di conoscere
- quelli di $A_{n-1}$, e quindi il problema non sembra (per ora) semplificato di molto. Prossimamente il teorema
- di Sturm ci fornirà uno strumento per completare queste considerazioni, arrivando ad un risultato più pratico.
-\end{os}
-Infine si potrebbe pensare di applicare anche altri metodi di iterazione funzionale noti, come ad esempio
-il metodo delle tangenti; purtroppo quest'ultimo non ci può dare (in questo caso) nessuna garanzia di convergenza,
-e quindi non sembra adatto allo scopo. In realtà viene usato nella pratica per ``affinare'' stime di autovalori
-forniti con altri metodi. \\
-\subsection{Il polinomio caratteristico delle matrici di Hessenberg}
-Tutte le proprietà che siamo riusciti a trovare sulle matrici Hermitiane tridiagonali non valgono
-purtroppo per le matrici di Hessenberg. Nonostante questo possiamo però mostrare un metodo
-per valutare il polinomio caratteristico in un punto particolarmente vantaggioso dal punto
-di vista computazionale\footnote{Non quanto quello trovato per le matrici Hermitiane tridiagonali, purtroppo}.
-Cominciamo col fare alcune considerazioni; possiamo supporre che la nostra matrice sia nella forma
-\[
- H = \left[ \begin{array}{cccc}
-         \times & \cdots & \cdots  & \times \\
-         \beta_{1}   & \ddots &   & \vdots \\
-                  & \ddots & \ddots & \vdots \\
-         & & \beta_{n-1} & \times
-        \end{array} \right]
-\]
-con $\beta_i \neq 0$ per ogni $i$ (altrimenti sarebbe riducibile, e quindi potremmo ridurci a risolvere
-dei sottoproblemi con delle Hessenberg irriducibili). \\
-Fissato $z$, consideriamo il sistema lineare $(H - zI)x = \alpha e_1$. Se consideriamo $x$ e $\alpha$
-come incognite e poniamo $x_n = 1$ ci accorgiamo che possiamo risolvere il sistema facilmente con
-una sostituzione all'indietro partendo dal fondo, e determinare $x$ e $\alpha$ con complessità $O(n^2)$. \\
-Applicando poi la regola di Cramer all'ultima componente di $x$ e chiamando $H'$ la matrice di Hessenberg
-a cui è stata sostituita l'ultima colonna con il vettore $x$ otteniamo
-\[
- 1 = x_n = \frac{\deter{H'}}{\deter{H-zI}} = \frac{(-1)^{n+1}\alpha \prod_{i=1}^{n-1} \beta_i}{p(z)}
-\]
-e quindi $p(z) = (-1)^{n+1}\alpha \prod_{i=1}^{n-1} \beta_i$; osserviamo che in questa espressione
-$\alpha$ è in realtà funzione di $z$ e quindi sarebbe più corretto scrivere
-\[
-p(z) = (-1)^{n+1}\alpha(z) \prod_{i=1}^{n-1} \beta_i
-\]
-Considerando che $\alpha$ può venir calcolata partendo da $z$ con complessità $O(n^2)$ abbiamo determinato
-un metodo relativamente poco oneroso di calcolare il polinomio caratteristico di $H$ in un punto. \\
-Possiamo quindi considerare ora la possibilità di applicare dei metodi di iterazione funzionale.
-\begin{os}
- Per applicare, ad esempio, il metodo delle tangenti, avremmo bisogno di calcolare la derivata di $p(z)$.
- Possiamo fare anche questo con poco sforzo, a patto di calcolare la derivata di $a(z)$. \\
- Osserviamo che derivando la relazione di partenza si ottiene
- \[
-  (H - zI)x'(z) = \alpha'(z)e_1 + x(z)
- \]
-da cui si può ottenere $\alpha'(z)$ differenziando tutte le operazioni aritmetiche che portano ad ottenere
-$x(z)$. Una volta effettuato questo si avrà
-\[
- p'(z) = (-1)^{n+1}\alpha'(z) \prod_{i=1}^{n-1} \beta_i
-\]
-\end{os}
-
-Possiamo osservare che i metodi di iterazione funzionale non sono particolarmente convenienti per determinare
-gli autovalori, anche se si utilizzano di fatto per qualche richiesta ``specifica''.\\
-Nel caso, ad esempio, di una matrice hermitiana tridiagonale, si può osservare che nel calcolo degli autovalori
-estremali le condizioni di convergenza del metodo di Newton sono soddisfatte e quindi possiamo ottenere
-la soluzione con poche operazioni aritmetiche osservando che sia $p$ che $p'$ si possono calcolare
-con poco sforzo dalle loro relazioni ricorrenti a tre termini (viste nella Sezione~\ref{subsec:hermdiag}).
-
-\begin{os}
- Consideriamo $p_n(x)$ polinomio caratteristico; possiamo osservare facilmente che se $x \to -\infty$ allora
- $p_n(x) \to \infty$. In generale, infatti, la parte principale del polinomio è $(-1)^{n} z^n$, che va all'infinito
- sia nel caso $n$ pari sia nel caso $n$ dispari.
-\end{os}
diff --git a/capitolo2.tex b/capitolo2.tex
deleted file mode 100644
index 7e88f99..0000000
--- a/capitolo2.tex
+++ /dev/null
@@ -1,656 +0,0 @@
-\chapter{Il calcolo degli autovalori}
-
-In questo capitolo ci occuperemo di presentare i metodi principalmente usati nel calcolo
-effettivo degli autovalori di matrici Hermitiane tridiagonali e in forma di Hessenberg.
-
-\section{Il metodo di Sturm}
-Introdurremo ora un metodo efficiente per il calcolo di singoli autovalori di una matrice
-hermitiana in forma tridiagonale. Per tutta la sezione tratteremo il caso di una matrice
-reale per semplicità, ma il caso complesso è risolubile in modo analogo.
-
-Abbiamo visto nella Sezione~\ref{sec:eqsecolare} un metodo efficiente per valutare il polinomio
-caratteristico di una matrice di questo tipo con costo $O(n)$. Possiamo affinare la nostra osservazione
-notando che anche la valutazione di tutti i polinomi $p_k$ in un punto $x$ fissato continua
-ad avere un costo $O(n)$. \\
-Consideriamo, data una matrice $T_n$ in forma tridiagonale hermitiana, la seguente funzione
-\[
-\begin{array}{cccl}
- f: & \R  & \longto & \{ 0 , \ldots , n \}  \\
- & x & \longmapsto &  \sharp \{ \ \textrm{cambi di segno nel vettore} \ (p_0(x) , \ldots , p_n(x)) \ \}
-\end{array}
-\]
-Perché $f$ sia ben definita conveniamo che se $p_j(x) = 0$ allora il suo segno è lo stesso di $p_{j-1}(x)$.
-Questa è una buona definizione perché $p_0(x) = 1$ e quindi non è mai $0$.
-\begin{os}
- Dalla definizione di $f$ si deduce che se il suo valore di cambia in un punto, allora in quel punto ci deve
- essere uno zero di (almeno) uno dei polinomi $p_j(x)$.
-\end{os}
-Osserviamo cosa succede quando un polinomio ``interno'', ovvero un $p_j$ con $j \in 1 \ldots n-1$ ha uno
-zero in $\bar x$.
-Innanzitutto sappiamo da quanto visto nel capitolo precedente che $p_{j-1}(x) \neq 0 \neq p_{j+1}(x)$; è
-possibile però affinare questa affermazione osservando meglio la relazione ricorrente a tre termini:
-\[
- p_{j+1}(x) = (\alpha_{j+1} - x) p_j(x) - \beta_j^2 p_{j-1}(x)
-\]
-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$.
-Ricordando le definizione di $f$ si osserva che il segno di $p_j(x)$ è quindi indifferente ai fini del numero
-di cambiamenti di segno. In particolare $f$ non cambia segno in $\bar x$.
-Evidentemente $p_0(x)$ non può cambiare segno, quindi ci rimane da verificare cosa succede quando cambia segno
-$p_n(x)$. \\
-Ricordiamo alcune particolarità dei polinomi $p_n$ viste precedentemente
-\begin{enumerate}[(i)]
- \item Ogni $p_j$ ha limite a $-\infty$ uguale a $+\infty$;
- \item Gli zeri di $p_{j-1}$ separano gli zeri di $p_j$, nel senso visto alla fine del precedente capitolo
- (Sezione~\ref{sec:eqsecolare});
- \item Tutti gli zeri di un polinomio di una matrice hermitiana tridiagonale sono semplici;
-\end{enumerate}
-Osserviamo quindi che per ogni radice di $p_n$ si ha che il segno della sua derivata e quello di $p_{n-1}$ sono
-opposti. La condizione di semplicità sugli zeri ci assicura che la derivata sarà infatti diversa da $0$ in
-$\bar x$ e quindi $p_n'(\bar x) p_{n-1}(\bar x) < 0$. In particolare la costanza locale del segno della derivata
-intorno allo $0$ ci assicura anche la costanza di quello di $p_{j-1}$ e quindi il \emph{cambio di valore di $f$}.
-In sintesi $f$ agisce come una sorta di ``contatore di zeri''. Dato infatti un qualsiasi intervallo $[a,b]$ si verifica,
-usando le considerazioni precedenti che
-\[
- f(b) - f(a) = \sharp \{ \ \text{zeri del polinomio caratteristico in } [a,b) \  \}
-\]
-
-Possiamo dunque applicare questa considerazione per applicare il metodo di bisezione per calcolare
-uno specifico autovalore di $T_n$. Queste proprietà di $f$ ci permettono di calcolare infatti singolarmente
-l'$i$-esimo autovalore di $T_n$ (ordinati con l'ordinamento di $\R$) senza bisogno di calcolare tutti gli altri.
-Ricordando la diseguaglianza di Hirsch ($||\lambda|| \leq ||T_n||$) e supponendo di aver fissato $i$ possiamo
-applicare il seguente procedimento.
-
-Cominciamo col calcolare $f(0)$; il suo valore ci dirà quanti autovalori ci sono prima dello $0$, e quindi
-nell'intervallo $[-||T_n||, 0)$. Se il nostro autovalore sta lì (ovvero $i \leq f(0)$) allora calcoliamo
-$f(-\frac{||T_n||}{2})$ e ripetiamo il procedimento; in caso contrario procediamo analogamente con $f(\frac{||T_n||}{2})$. \\
-Iterando un numero sufficiente di volte questo procedimento otterremo alla fine il valore desiderato.
-
-Osserviamo che il procedimento può essere applicato a ad una qualsiasi matrice hermitiana, a patto
-di portarla in forma tridiagonale (che è sempre possibile tramite matrici unitarie).
-Ricordando le stime dei costi computazionali fatte in precedenza ci rendiamo conto che il costo principale è
-quello della riduzione ($O(n^3)$) rispetto a quello del calcolo dell'autovalore ($O(n^2)$).
-Se si volessero calcolare tutti gli autovalori il costo rimarrebbe ancora dell'ordine di $n^3$. Nonostante questo
-esistono metodi (che vedremo in seguito) che permettono di calcolare tutti gli autovalori con una complessità di
-$O(n^2)$ e che quindi saranno più interessanti per il calcolo dello spettro completo della matrice. \\
-Il metodo di Sturm, comunque, trova delle applicazioni anche in questo ultimo caso nell'ambito del calcolo parallelo,
-dove altri algoritmi non possono essere implementati. Si può osservare invece che, una volta ottenuta la fattorizzazione,
-non sia difficile implementare il metodo di Sturm dividendo fra i vari processori gli autovalori da calcolare.
-
-\section{Il metodo QR}
-In questa sezione esporremo il metodo QR per il calcolo degli autovalori, che è il metodo più utilizzato
-nelle moderne applicazioni del calcolo degli autovalori. Si basa sulla fattorizzazione QR già vista nel corso
-di Analisi Numerica per la risoluzione di sistemi lineari. Questa può venire realizzata tramite matrici
-di Householder. Cominceremo ricordando alcuni risultati riguardo la fattorizzazione, per poi esporre ed
-analizzare il metodo e le sue implementazioni.
-
-\subsection{La fattorizzazione QR}
-\'E noto che ogni matrice $A \in \mat{\C}{n}$ si può fattorizzare nel seguente modo
-\[
-  A = QR
-\]
-dove $Q$ è una matrice unitaria e $R$ è una matrice triangolare superiore.
-\begin{os}
- La fattorizzazione non è unica. Se supponiamo $A = QR$ e $S$ una matrice di fase, ovvero diagonale tale che $|s_{ii}|=1$
-per ogni $i = 1 \ldots n$, allora $A = QS\herm{S}R$ è ancora un fattorizzazione. Se $S \neq I$ le fattorizzazioni sono
-diverse. Si può però mostrare che non ci sono altre matrici (non di fase) per cui questo è vero. Si dice che
-la fattorizzazione QR è \emph{essenzialmente unica}.
-\end{os}
-Il nostro scopo è costruire una successione di matrici tramite questo procedimento di fattorizzazione
-che ci porti a determinare gli autovalori.
-
-\subsection{Costruzione della successione}
-Data una matrice $A$ di cui vogliamo conoscere gli autovalori, consideriamo
-la successione definita nel seguente modo
-\[
-\left\{ \begin{array}{ll}
- A_0 & = A \\
- A_{k+1} & = R_k Q_k \quad \text{dove} \ Q_k R_k \ \text{è la fattorizzazione QR di} \ A_k
-\end{array} \right.
-\]
-\begin{os} \label{os:qr_simili_ak}
- 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$.
- Per ogni $k$ la matrice $A_k$ è simile a $A_{k+1}$ tramite trasformazione unitaria, che preserva
- il condizionamento del problema di calcolo degli autovalori. Questa quindi è una ``buona'' successione
- nel senso in cui ne avevamo parlato nella Sezione~\ref{sec:analisidelcondizionamento}.
-\end{os}
-
-Cominceremo ad analizzare il metodo QR facendo delle supposizioni piuttosto restrittive, che poi allenteremo
-in seguito. Cominciamo col supporre che gli autovalori della matrice $A$ siano tutti distinti e ordinabili
-per modulo in modo strettamente crescente, ovvero $|\lambda_1| < \ldots < |\lambda_n|$. Questo in
-particolare implica che la matrice $A$ è diagonalizzabile e quindi esiste una $X$ invertibile tale che
-$A = XDX^{-1}$. Supponiamo ora che $X^{-1}$ ammetta fattorizzazione $ X^{-1} = LU$\footnote{dove supponiamo
-che $L$ sia triangolare inferiore con gli elementi delle diagonale uguali a $1$ e $U$ triangolare superiore}.
-\begin{pr} \label{pr:metpot:ak}
- Se si ha la successione di matrici $A_k$ come quella definita sopra, e per ogni $k$ si considera $Q_k R_k$
- la\footnote{al solito, sarebbe corretto dire \textbf{una} fattorizzazione} fattorizzazione QR di $A_k$, allora
- \[
-  A^k = Q_0 Q_1 \ldots Q_k R_k \ldots R_1 R_0
- \]
-\end{pr}
-\begin{proof}
- Proviamo la tesi per induzione su $k$. Se $k = 0$ si ha $A_0 = A = Q_0 R_0$ che è banalmente vero. Se considero
- la tesi vera per $k$. Considerando le seguenti uguaglianze
- \[ \begin{array}{ll}
-  \displaystyle
-  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 = \\
-  \displaystyle
-  = Q_0 (\prod_{i=1}^{k} Q_1 R_1) R_0 = Q_0 \prod_{i=1}^{k} Q_i \prod_{i=1}^{k} R_{k-i+1} R_0
- \end{array}
- \]
- si ottiene esattamente la tesi. Per quanto oscure possano sembrare provare a fare il calcolo con $k = 3$ o $4$
- potrebbe chiarire molto le idee.
-\end{proof}
-Ora vorremmo usare quanto scoperto sulle potenze di $A$ per studiare la convergenza del nostro metodo. Consideriamo
-che $A^k = X D^{k} X^{-1}$ e quindi ricordando che esiste la fattorizzazione $LU$ di $X^{-1}$ si ha
-\begin{equation}
-A^k = XD^{k}LU= X D^k LD^{-k}D^k U
-\end{equation}
-Osserviamo ora che la matrice $D^k L D^{-k}$ è triangolare inferiore ed ha la diagonale con soli $1$. Se chiamiamo
-$X = QR$ la fattorizzazione QR di $X$ possiamo scrivere
-\begin{equation} \label{eq:metpot:1}
- 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
-\end{equation}
-A questo punto consideriamo anche che per ogni $k$ esiste la fattorizzazione QR di $[I + R\Gamma^{(k)}R^{-1}] = P_k T_k$
-ed in particolare possiamo scegliere $P_k$ a termini positivi. Osserviamo ora che i termini di $\Gamma^{(k)}$
-sono dati dalla seguente relazione
-\[
-\gamma_{ij} =
- \left\{ \begin{array}{ll}
-          0 & \text{se} \ i \leq j \\
-          (\frac{\lambda_j}{\lambda_i})^{k} l_{ij} & \text{se} \ i > j
-         \end{array} \right.
-\]
-ed in particolare ricordando che se $j < i$ si ha che $\lambda_j < \lambda_i$ si ottiene che la matrice $\Gamma^{(k)}$
-tende ad una matrice diagonale per $k$ che tende all'infinito. Più precisamente, $\lim_{k \to \infty} \Gamma^{(k)} = I$.
-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
-QR è sempre definita a meno di una matrice di fase. Richiedere però che $P_k$ abbia elementi positivi ci permette
-sia di definire univocamente la scomposizione desiderata sia di avere l'esistenza del limite.}
-Confrontando l'equazione~\ref{eq:metpot:1} e la Proposizione~\ref{pr:metpot:ak} si ottengono due fattorizzazioni
-QR della matrice $A^k$.
-\[
- A^k = QP_k T_k R D^k U = Q_0 \ldots Q_k R_k \ldots R_0
-\]
-Due fattorizzazioni QR della stessa matrice devono forzatamente differire per una matrice di fase e quindi
-si ottengono le due relazioni
-\[
- \left\{ \begin{array}{l}
-          Q_0 \ldots Q_k = Q P_k S_k \\
-	  R_{k} \ldots R_0 = \herm{S_k}T_k R D^k U
-         \end{array} \right.
-\]
-Possiamo riscrivere ora $Q_k$ ed $R_k$ in modo da riuscire ad utilizzare queste relazioni\footnote{Si può
-osservare quanto i passaggi di questa dimostrazione siano la cosa meno intuitiva pensabile (o quasi). Presumibilmente
-questa è risultato di anni di affinamento e di ``pulizia'' }
-\[
- \left\{ \begin{array}{l}
-         Q_k = \herm{(Q_0 \ldots Q_{k-1})}(Q_0 \ldots Q_k) = \herm{S_{k-1}}\herm{P_{k-1}}\herm{Q}Q P_k S_k =
-         \herm{S_{k-1}}\herm{P_{k-1}}P_k S_k\\
-         R_k = (R_k \ldots R_0)(R_{k-1} \ldots R_0)^{-1} = \herm{S_k}T_k R D^{k} U U^{-1} D^{-k+1} R^{-1} T_{k-1}^{-1} S_{k-1}
-        \end{array} \right.
-\]
-Dunque $Q_k R_k = A^{k} = \herm{S_{k-1}}\herm{P_{k-1}}P_k T_k R D R^{-1} T_{k-1}^{-1} S_{k-1}$ e ricordando che
-$T_k$ e $P_k$ al limite vanno all'identità se scriviamo la nostra uguaglianza per $k~\to~\infty$ otteniamo
-$S_{k-1} A^k \herm{S_{k-1}} = R D R^{-1}$. Possiamo quindi osservare che gli elementi sulla diagonale di $RDR^{-1}$
-sono gli stessi di $D$ (grazie al fatto che $R$ è triangolare superiore). In particolare gli elementi diagonali
-sono gli autovalori di $A$ e quindi abbiamo provato che il metodo converge.
-\begin{os}
- In realtà non è rilevante conoscere esplicitamente $S_k$ perché siamo interessati solo a conoscere gli elementi
- sulla diagonale di $RDR^{-1}$. Avendo che gli elementi di $S_k$ sono di modulo $1$ gli elementi diagonali vengono
- moltiplicati per un numero complesso e per il suo coniugato, lasciandoli invariati.
-\end{os}
-
-\subsection{Il costo computazionale} \label{subsec:qr_costo}
-Vorremmo ora valutare il costo computazionale di questo metodo. Consideriamo dapprima il caso di una matrice
-generale. Sappiamo che il costo di una fattorizzazione $QR$ è $O(n^3)$ e sperimentalmente si ottiene che il
-numero di passi per avere convergenza cresce linearmente con la dimensione. Questo ci permette di concludere
-che in un caso totalmente generale il costo computazionale del metodo QR è $O(n^4)$.
-
-Facciamo ora qualche supposizione sulla matrice. Prendiamo ad esempio una matrice tridiagonale hermitiana.
-In questo caso ci ricordiamo che il costo del calcolo della fattorizzazione QR (almeno della prima) è $O(n)$.
-Possiamo osservare che la matrice ottenuta dopo il primo passo è ancora tridiagonale hermitiana, e quindi
-le considerazioni fatte sul primo passo valgono anche per i seguenti. In particolare il costo del metodo
-è $O(n^2)$.
-
-Analogamente per le matrici di Hessenberg (anche se non lo mostriamo ora) il costo è di $O(n^3)$ perché
-il calcolo della scomposizione QR è $O(n^2)$.
-
-\subsection{Migliorare la convergenza}
-Il metodo QR come esposto fino ad ora funziona ma ha il difetto di avere una convergenza di tipo
-lineare. In generale questo può essere un problema perché più gli autovalori della matrice sono
-vicini più, potenzialmente, potrebbe essere lenta (o addirittura assente) la convergenza.
-
-Possiamo osservare meglio questo con un esempio; consideriamo una matrice $2\times 2$ con un
-elemento ``piccolo'' in posizione $(2,1)$, ovvero sulla buona strada per essere triangolarizzata\footnote{%
-Ovviamente tutta questa frase è terribilmente imprecisa, ma il nostro scopo è, per ora, solo dare
-un'idea dei vantaggi che si potrebbero ottenere da un nuovo approccia e non formalizzarlo in
-alcun modo}.
-Proviamo a vedere cosa succede effettuando un passo generico dell'iterazione. Consideriamo la matrice $A_k$
-con un elemento piccolo $\eps$ sotto la diagonale e una sua scomposizione QR
-\[
- A_k = \left[ \begin{array}{cc}
-                a & b \\
-                \eps & c \\
-               \end{array}\right]
- = \left[ \begin{array}{cc}
-           \frac{a}{\sqrt{a^2 + \eps^2}} & \frac{-\eps}{\sqrt{a^2+\eps^2}} \\
-           \frac{\eps}{\sqrt{a^2+\eps^2}} & \frac{a}{\sqrt{a^2 + \eps^2}}
-          \end{array} \right]
-  \left[ \begin{array}{cc}
-          \sqrt{a^2 + \eps^2} & \frac{ab + \eps c}{\sqrt{a^2 + \eps^2}} \\
-	  0 & \frac{ac - \eps b}{\sqrt{a^2+\eps^2}}
-         \end{array} \right]  = Q_kR_k
-\]
-Si avrà che
-\[
- A_{k+1} = R_kQ_k =   \left[ \begin{array}{cc}
-          \sqrt{a^2 + \eps^2} & \frac{ab + \eps c}{{a^2 + \eps^2}} \\
-	  0 & \frac{ac - \eps b}{{a^2+\eps^2}}
-         \end{array} \right]
- \left[ \begin{array}{cc}
-           \frac{a}{\sqrt{a^2 + \eps^2}} & \frac{-\eps}{\sqrt{a^2+\eps^2}} \\
-           \frac{\eps}{\sqrt{a^2+\eps^2}} & \frac{a}{\sqrt{a^2 + \eps^2}}
-          \end{array} \right]
-= \left[ \begin{array}{cc}
-          \times & \times \\
-	  \frac{\eps(ac - \eps b)}{a^2 + \eps^2} & \times
-         \end{array} \right]
-\]
-Considerando che $ac -\eps b$ è il determinante delle matrice (e quindi
-il prodotto degli autovalori) e $a^2 + \eps^2$  una buona
-approssimazione del quadrato di un autovalore\footnote{questo perché il vettore $e_1$ va a finire in se stesso moltiplicato
-per $a$, a meno di epsilon che è piccolo}, $\eps$ è stato diminuito di un fattore dell'ordine
-di $\frac{\lambda_1}{\lambda_2}$, come ci si aspettava.
-
-Consideriamo ora cosa succede applicando una tecnica di \emph{shifting}. Calcoliamo la fattorizzazione QR della
-matrice $A-cI$, invertiamo l'ordine dei fattori e risommiamo $cI$.
-Abbiamo dunque
-\[
-  A_k - cI = \hat Q \hat R \quad \longrightarrow \quad A_{k+1} = \hat R \hat Q + cI
-\]
-\begin{os}
- $A_k$ ed $A_{k+1}$ sono simili. Consideriamo infatti le seguenti uguaglianze
- \[
-  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
-  = \herm{\hat Q} A_k \hat Q
- \]
- E quindi le due matrici sono simili per trasformazione hermitiana, il che preserva anche il condizionamento del
- problema come visto nella Sezione~\ref{sec:analisidelcondizionamento}.
-\end{os}
-
-Possiamo osservare che risvolgendo i conti con il ``nuovo'' algoritmo si ottiene in posizione sottodiagonale
-un fattore dell'ordine di $\eps^2$. Sembra quindi che questo nuovo metodo abbia una convergenza molto più veloce
-del precedente!
-
-Anche se questo esempio ci fornisce solo delle osservazioni in un caso particolare e non una
-dimostrazioni formale delle proprietà di convergenza che si potrebbero ottenere in generale
-con uno shifting, possiamo in ogni caso discutere come applicarlo. Esistono teoremi che provano
-l'effettiva efficienza di questo approccio ma sono piuttosto tecnici e ``conterecci'' (cit.) e
-non li affronteremo in questo corso.
-\begin{figure}[hb]
-\[
- A_k = \left[ \begin{array}{cccc}
-               \alpha_{11}^{(k)} & \times & \hdots & \times \\
-	       \beta_{1}^k & \ddots & & \vdots \\
-                           & \ddots & \ddots& \times \\
-                & & \beta_{n-1}^k & \alpha_{nn}^{(k)}
-              \end{array} \right]
-\]
-\caption{Struttura di una matrice in forma di Hessenberg superiore}
-\label{fig:hessenbergsup}
-\end{figure}
-Appurato che questo trucco funziona, ci chiediamo come applicarlo ad una matrice generale. L'idea
-è di togliere alla matrice $A_k$ un'altra matrice $\alpha_k I$, dove $\alpha_k = \alpha_{nn}^{(k)}$
-(si veda la Figura~\ref{fig:hessenbergsup}).
-Per semplicità osserviamo il caso delle matrici di Hessenberg, che poi sarà il caso implementato in pratica
-date le considerazioni sulla complessità fatte in precedenza.
-
-Il caso di una matrice complessa viene gestito esattamente con lo shifting di $-\alpha_{nn}^{(k)}I$ come descritto
-sopra, e si verifica che le cose funzionano bene. Più complesso, invece, è il caso di una matrice reale.
-In quella situazione infatti gli autovalori possono essere complessi coniugati e non si desidera passare da aritmetica
-reale ad aritmetica complessa. Questo porterebbe a problemi di complessità, ma il danno più grave sarebbe
-perdere la simmetria\footnote{Per simmetria intendiamo la certezza di ottenere autovalori complessi coniugati,
-cosa di cui non si potrebbe essere certi con una matrice complessa qualsiasi. } della matrice,
-e quindi in definitiva parecchia informazione sul problema.
-\begin{os}
- Nel caso complesso Hessenberg risulta semplice determinare la qualità dell'approssimazione ottenuta
- dell'autovalore. Possiamo assumere di fermare l'iterazione quando
- \[
-  |\beta_n| \leq u( |\alpha_{nn}^{(k)}| + |\alpha_{n-1,n-1}^{(k)}|)
- \]
- dove $u$ è la precisione di macchina,
- ed a quel punto assumere che $\alpha_{nn}^{(k)}$ è una buona approssimazione dell'autovalore
- cercato e ridurci a ripetere il procedimento sul minore di nord ovest di ordine $n-1$, che è ancora in forma
- di Hessenberg.
-\end{os}
-Per determinare come eseguire lo shifting nel caso reale conviene cambiare punto di vista su quanto effettuato fino
-ad ora. Possiamo osservare che se poniamo $p_k(z) = z - \alpha_k$ di fatto lo shifting è equivalente a considerare
-la matrice $\hat A_k = p(A_k)$. Dato che riteniamo che $\alpha_k$ sia una buona approssimazione dell'autovalore
-cercato della matrice per analogia nel caso reale possiamo utilizzare $p_k(x) = (x - \lambda)(x - \con{\lambda})$
-che è un polinomio reale. Si verifica (e, ancora una volta, noi non lo faremo) che tutto continua a funzionare
-bene ma sorgono dei problemi di complessità. \\
-Il polinomio $p_k$ è infatti adesso di II grado e non è per nulla banale, in generale, calcolare $A_k^2$.
-Inoltre $p_k(A_k)$ non è neppure una matrice in forma di Hessenberg, il che sembrerebbe farci perdere tutti
-i vantaggi computazionali che avevamo fino a questo momento. Per fortuna esiste una tecnica che, modificando
-l'iterazione, riesce a riolvere questo problema.
-
-\subsection{La tecnica del Bulge Chasing}
-Nell'applicazione della tecnica dello shifting vista nel paragrafo precedente, abbiamo supposto di
-calcolare $p_k(A_k)$ e dopo calcolare la fattorizzazione QR. Ci siamo però accorto che se $p_k$ è
-un polinomio di secondo grado vengono persi tutti i vantaggi computazionali dati dalla forma di Hessenberg.
-Vogliamo quindi ora modificare la fattorizzazione QR \textbf{mentre} calcoliamo $p_k(A_k)$ in modo da
-rendere la risultante matrice in forma di Hessenberg e diminuire la complessità del calcolo del polinomio.
-La fattorizzazione QR ottenuta sarà ``essenzialmente uguale''\footnote{ovvero sarà uguale a meno di una
-matrice di fase reale} a quella che avremmo ottenuto seguendo
-il procedimento precedente; questo modo di operare è detto \emph{Bulge Chasing}\footnote{bulge chasing in inglese significa inseguimento
-del bernoccolo, e s riesce ad apprezzare il senso del nome osservando come questa tecnica si traduce graficamente sugli elementi
-non zero della matrice. Questi si comportano infatti come un bernoccolo che scende sempre di più sulla
-sottodiagonale per poi sparire lasciando una matrice in forma di Hessenberg superiore.}.
-
-Possiamo cominciare a calcolare solo la prima colonna della matrice $p_k(A_k)$, ovvero $p_k(A_k)e_1$.
-Una volta calcolata questa possiamo calcolare anche una matrice di Householder $P_0$ tale che
-$P_0 p_k(A_K)e_1 = \alpha e_1$. \\
-Si costruiscono poi altre $n-1$ matrici di Householder tali che fissato
-\[
- Z = P_0 \ldots P_{n-1}
-\]
-si abbia
-\[
- A_{k+1} = \herm{Z} A_k Z
-\]
-ed è possibile dimostrare che questa iterazione produce una matrice simile a meno di una matrice di fase reale
-rispetto a quella presentata in precedenza.
-
-\section{Divide et Impera}
-\subsection{L'idea}
-Introdurremo ora un altro metodo, piuttosto recente, per il calcolo di tutti gli autovalori della matrice.
-Questo è stato introdotto nel 1980 da Cuppen. Il metodo permette il calcolo di autovalori solo per matrici
-tridiagonali hermitiane e l'osservazione che ne sta alla base è che una matrice tridiagonale è ``quasi''
-diagonale a blocchi, più precisamente se $H$ è la nostra matrice
-\[
- H = \left[ \begin{array}{cc|cc}
-             \sblocko{T_1}{2} & &  \\
-            & & & \\ \hline
-             & & \sblocke{T_2}{2} \\
-            & & & \\
-            \end{array} \right]
-+ \left[ \begin{array}{cc|cc}
-          & & & \\
-          & \beta_{n-1} & & \\ \hline
-          & & \beta_{n-1} & \\
-          & & &
-         \end{array} \right]
-\]
-Ovvero è una diagonale a blocchi più una correzione di rango 2. A ben vedere, però, si può fare anche di meglio.
-Se sostituiamo in $T_1$ il valore $\alpha_{\frac{n}{2}}$ con $\hat \alpha_{\frac{n}{2}} = \alpha_{\frac{n}{2}} - \beta_{n-1}$
-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
-una matrice a blocchi tridiagonali più un correzione di rango $1$:
-\[
- H = \left[ \begin{array}{cc|cc}
-             \sblocko{\hat T_1}{2} & &  \\
-            & & & \\ \hline
-             & & \sblocke{\hat T_2}{2} \\
-            & & & \\
-            \end{array} \right]
-+ \left[ \begin{array}{cc|cc}
-          & & & \\
-          & \beta_{n-1} & \beta_{n-1}& \\ \hline
-          & \beta_{n-1} & \beta_{n-1} & \\
-          & & &
-         \end{array} \right]
-\]
-Supponiamo ora di conoscere gli autovalori di $\hat T_1$ e di $\hat T_2$, ed in particolare le matrici
-unitarie $Q_1$ e $Q_2$ che ci permettono di diagonalizzarle, ovvero
-\[
- T_1 = Q_1 D_1 \herm Q_1 \qquad
- T_2 = Q_2 D_2 \herm Q_2
-\]
-con $D_1$ e $D_2$ le matrici con gli autovalori sulla diagonale e $0$ altrove.
-
-Tutto questo può funzionare se
-riusciamo a mostrare che siamo veramente in grado di calcolare facilmente gli autovalori della matrice a blocchi
-con la correzione.
-
-Se consideriamo ora la matrice $D$ così formata
-\[
- \hat D = \left[ \begin{array}{cc|cc}
-                  \sblocko{D_1}{2} & & \\
-                  & & & \\ \hline
-                  & & \sblocke{D_2}{2} \\
-                  & & &
-                 \end{array} \right]
-\]
-e calcoliamo $B = \herm Q A Q$ otteniamo
-\[
- B = \herm Q A Q = \hat D + \beta_{\frac{n}{2}}z\herm z
-\]
-con $z = \left[ \begin{array}{c} q_1 \\ q_2 \end{array}\right]$ dove $q_i$ è l'ultima colonna di $\herm Q_i$
-per $i = 1,2$.
-
-\subsection{La ricerca degli autovalori}
-Abbiamo quindi ricondotto il problema a calcolare gli autovalori di una matrice $D + w\herm w$ dove $D$
-è diagonale e $w$ è un vettore qualsiasi. Calcolando il polinomio caratteristico di $B$ ed assumendo
-che $\lambda \neq \hat d_i$  otteniamo
-\[
-  p(\lambda) = \deter{\lambda I - B} = \deter{ \lambda I - D }\cdot \deter{I + \theta(\lambda I - D)^{-1} z\herm z}
-\]
-Osserviamo che stiamo assumendo che $\lambda I - D$ sia invertibile, e quindi questa formula per il calcolo
-del polinomio caratteristico vale solo per $\lambda \in \C \setminus (\spe{D_1} \cup \spe{D_2})$. Sapendo che $p$
-è continuo possiamo però concludere che vale per tutto $\C$. \\
-Notiamo inoltre che $( I + \theta(\lambda I - D)^{-1}z\herm z)$ è una matrice elementare e quindi ha determinante\footnote{%
-Ricordiamo che in genearale una matrice elementare $I - \sigma u \herm v$ ha determinante $1 - \sigma \herm v u$}
-$1 - \theta (\lambda I - D)^{-1} \herm zz$; sviluppando ulteriormente si ottiene
-\begin{equation} \label{eqn:polmindivetimp}
- p(\lambda) = \prod_{j=1}^{n} (\lambda - \hat d_j) ( 1 + \theta (\lambda I - D)^{-1} \herm zz )
- = \prod_{j=1}^{n} (\lambda - \hat d_j) ( 1 + \theta \sum_{k=1}^{n} \frac{z_k^2}{\lambda - \hat d_k} )
-\end{equation}
-ed estendendo per continuità a tutto $\C$ si ottiene infine
-\[
- 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)
-\]
-che è una sorta di equazione secolare come quella che si era ottenuta partendo dalle relazioni ricorrenti a tre
-termini nella Sezione~\ref{sec:eqsecolare}.
-
-Siamo ora costretti a fare delle assunzioni sulla struttura di $z$ e di $\hat D$. In realtà ci renderemo conto
-in seguito che queste non sono restrittive perché nei casi in cui non saranno verificate ci troveremo con un
-problema semplificato, che potremo riportare a questo caso qua\footnote{Penso, perché in realtà non mi è ancora
-molto chiaro come si dovrebbe fare}. \\
-Assumiamo dunque che
-\begin{itemize}
- \item $z_j \neq 0$ per ogni $j = 1 \ldots n$;
- \item $\hat d_k \neq \hat d_j$ per ogni $k \neq j$, ovvero che tutti gli autovalori siano distinti;
-\end{itemize}
-A questo punto dalla relazione~\ref{eqn:polmindivetimp} ricaviamo che
-\begin{equation} \label{eqn:eqsecdivetimp}
- p(\lambda) = 0 \iff 1 + \theta \sum_{j=1}^n \frac{z_j^2}{\lambda - \hat d_j} = 0
-\end{equation}
-
-e quindi gli autovalori delle matrici di ordine $\frac{n}{2}$ separano quelli della matrice grande, e si
-può applicare (ad esempio) il metodo di bisezione, o in generale altri procedimenti di iterazione
-funzionale.
-
-\begin{os}
- Notiamo che per applicare la bisezione nella (\ref{eqn:eqsecdivetimp}) abbiamo bisogno di conoscere, oltre
- ai $\hat d_j$ anche gli $z_j$ e ricordando che $z$ è costruito a partire dalle matrici $Q_1$ e $Q_2$, è chiaro
- che dobbiamo conoscere anche queste due. Queste erano le matrici che diagonalizzavano $T_1$ e $T_2$ e si
- ottenevano quindi \textbf{conoscendo gli autovettori} di $T_1$ e $T_2$. Dobbiamo allora, per poter procedere
- con il metodo, calcolarci tutti gli autovettori.
-\end{os}
-
-\subsection{Autovettori e problemi di stabilità}
-Il fatto di dover calcolare gli autovettori ha un lato positivo ed uno negativo, precisamente
-\begin{enumerate}[(a)]
- \item Il calcolo effettivo risulta inaspettatamente semplice, tanto che, trovati gli autovalori saremo
- capaci di trovare ogni autovettore con costo $O(n)$ e quindi di ottenerli tutti con costo $O(n^2)$;
- \item Il problema del calcolo degli autovettori non è in generale ben condizionato e non si riescono a
- dare condizioni perchè lo sia. Dato che influenzerà anche il calcolo degli autovalori nei passaggi successivi,
- non possiamo garantire l'accuratezza del risultato finale;
-\end{enumerate}
-
-L'idea per trovare gli autovettori è cercare quelli di $\hat D + \beta_{\frac n 2}z\herm z$ e poi una
-volta ottenuta la matrice $U$ con questi, moltiplicarla per la matrice a blocchi con $Q_1$ e $Q_2$ sulla
-diagonale (che d'ora in poi chiameremo $\hat Q$) per trovare gli autovettori della matrice $T$. \\
-Osserviamo che se $v$ è autovettore per la matrice $D + \beta_{\frac n 2}z\herm z$ allora
-\[
- (\hat D + \theta z \herm z - \lambda I)v = 0
-\]
-e quindi
-\[
- (\hat D - \lambda I)v = -\theta z \herm z v
-\]
-Se fosse $\herm z v = 0$ avrei che $(\hat D - \lambda I)v = 0$ ma questo non è possibile perché $v$
-è non nullo e $\hat D - \lambda I$ è invertibile (come assunto precedentemente). Quindi deve essere
-$\herm z v \neq 0$ e quindi dato che $v$ è determinato a meno di uno scalare possiamo assumere
-$\herm z v = 1$. In definitiva si ottiene
-\[
- v = - \theta z (\hat D - \lambda I)^{-1}
-\]
-che si può scrivere anche più esplicitamente come
-\begin{equation}  \label{eqn:calcoloautovettdivetimp}
- v_j = \frac{- \theta z}{d_j - \lambda}
-\end{equation}
-Riassumendo, vogliamo trovare la matrice $U$ con i $v_j$ sulla diagonale e questo si può fare con
-la Formula~\ref{eqn:calcoloautovettdivetimp} con costo $O(n^2)$. Ottenuta la matrice $U$ avremo
-la matrice per diagonalizzare $T$ calcolando $\hat Q U$, e potremmo quindi procedere con il metodo.
-
-Sorgono però dei problemi computazionali non banali, più precisamente
-\begin{enumerate}[(i)]
- \item La matrice $U$ deve essere ortogonale ma questo non è garantito dall'algoritmo. Se ad un passo
- abbiamo perdita di ortogonalità questo poi causerà un accumulo di errore in tutti i passi successivi
- portando ad una imprecisione del calcolo. Sembra che in una implementazione del 2006 si sia riusciti
- a risolvere questo problema. %% TODO: inserire una citazione
- \item Come già sottolineato prima il calcolo degli autovalori potrebbe essere mal condizionato dal principio
- portando ad un accumulo di errore notevole ad ogni passo.
- \item Apparentemente il costo computazionale del calcolo di $\hat Q U$ non è trascurabile in quanto
- un prodotto matrice per matrice in generale costa $O(n^3)$. Fortunatamente $U$ non è una matrice qualsiasi:
- matrici del tipo $u_{ij} = \frac{r_i s_j}{x_i - y_j}$ sono dette matrici \emph{Cauchy-like} ed esistono
- algoritmi per calcolare il prodotto fra una Cauchy-like ed una matrice generica con costo $O(n^2\log{n})$
-\end{enumerate}
-
-Come ultima nota, ricordiamo che questo algoritmo è applicabile solo alle matrici tridiagonali hermitiante
-(e, previa tridagonalizzazione, a qualsiasi matrice hermitiana) ma non alle matrici in forma di Hessenberg
-che non presentano purtroppo alcuna proprietà di separazione\footnote{ovvero quella che ci permette di trovare
-i limite su cui applicare la bisezione o qualsiasi altra iterazione funzionale}. \\
-Sono stati fatti molti tentativi a questo proposito, ma non esiste attualmente nessuna implementazione
-robusta del metodo Divide et Impera sulle matrici di Hessenberg.
-
-\section{Il metodo delle potenze} \label{sec:metodopotenze}
-Per ultimo analizzeremo il metodo delle potenze che ci permette di trovare gli autovettori di una matrice
-conoscendo gli autovalori. In generale è particolarmente comodo per calcolare l'autovalore dominante.
-Consideriamo dunque questo caso per primo
-
-\subsection{Il metodo diretto}
-Supponiamo $A \in \mat{\C}{n}$ diagonalizzabile, per semplicità. Elimineremo questa ipotesi in seguito.
-Consideriamo gli autovalori ordinati in modo che
-\[
- |\lambda_1| \geq |\lambda_2| \geq \ldots \geq |\lambda_n|
-\]
-e aggiungiamo l'ipotesi che $\lambda_1$ sia semplice e che sia in modulo strettamente maggiore degli altri.
-Il metodo si basa su questa semplice osservazione (la cui paternità viene, ancora una volta, attribuita a Gauss):
-Se prendiamo un vettore $y_0 \in \C^n$ e la nostra scelta non è incredibilmente sfortunata\footnote{%
-dove con incredibilmente sfortunata intendiamo che il prodotto scalare tra $y_0$ e l'autovettore relativo
-a $\lambda_1$ è esattamente uguale a $0$} possiamo considerare la successione
-\begin{equation}
- \left\{ \begin{array}{ll}
-          y_0 & = y_0 \\
-          y_k & = Ay_{k-1}
-         \end{array} \right.
-\end{equation}
-Se scriviamo $y_0$ nella base di autovettori per $A$ abbiamo
-\begin{equation}
- y_0 = \sum_{i=1}^{n} \alpha_i v_i
-\end{equation}
-e quindi osservando che $y_k = Ay_{k-1} = A^{k}y_0$ dopo $k$ iterazioni otteniamo
-\begin{equation} \label{eqn:metpotite}
- y_k = A^ky_0 = \sum_{i=1}^n \alpha_i \lambda_i^k v_i =
- \lambda_i^k \cdot \Big( \alpha_1 v_1 + \underbrace{\sum_{i=2}^n \alpha_i (\frac{\lambda_i}{\lambda_1})^k v_i}_{%
-\text{tende a}\ 0\ \text{se}\ k \to \infty} \Big)
-\end{equation}
-e ricordando l'ipotesi fatta precedentemente, ovvero che $|\lambda_1| > |\lambda_i|$ per ogni $i$ abbiamo
-che la seconda parte dell'uguaglianza va a $0$ per $k \to \infty$ e quindi la successione di vettori
-tende ad un multiplo di $v_1$, ovvero l'autovettore cercato.
-
-Purtroppo questa implementazione del metodo non è realistica, perché si incorrerebbe sicuramente nel caso di
-overflow o underflow in poche iterazioni, e probabilmente prima di avere una buona approssimazione dell'autovettore.
-Si ricorre quindi al semplice stratagemma di riscalare ad ogni iterazione il vettore ottenuto, ad esempio
-dividendolo per la sua norma infinito. In questo modo otteniamo una successione di vettori unitari che convergeranno
-all' autovettore unitario. \\
-Possiamo ora emprimere la successione in questo modo
-\[
- \left\{ \begin{array}{ll}
-          y_0 & = y_0 \\
-	  y_k & = \displaystyle \frac{Ay_{k-1}}{||Ay_{k-1}||_\infty}
-         \end{array} \right.
-\]
-\begin{os}
- Questo metodo mi permette anche di valutare e raffinare la stima dell'autovalore dominante. Se considero
- infatti il rapporto fra le $j$-esime componenti di due vettori consecutivi, ovvero $\frac{y_k,j}{y_{k-1,j}}$
- non è difficile verificare tramite la (\ref{eqn:metpotite}) che
- converge all'autovalore cercato.
-\end{os}
-
-Esistono delle varianti del metodo delle potenze che sfruttano le idee qui esposte per risolvere problemi simili
-e migliorare le condizioni di convergenza.
-
-\subsection{Il metodo inverso con shift}
-Osserviamo come prima cosa che con pochi cambiamenti si potrebbe calcolare l'autovalore di modulo più piccolo
-considerando, invece che la matrice $A$, la matrice $A^{-1}$. \\
-Potremmo riscrivere l'iterazione in questo modo
-\begin{equation}
- \left\{ \begin{array}{ll}
-          y_0 & = y_0 \\
-          y_k & = \beta_{k} \cdot A^{-1}y_{k-1}
-         \end{array} \right.
-\end{equation}
-dove $\beta_{k} = ||y_{k}||_\infty$\footnote{adotteremo questa notazione per tutta la sezione, d'ora in poi}.
-Questo procedimento ci imporrebbe però di calcolare l'inversa di $A$, un procedimento che in generale si tende ad
-evitare per problemi di instabilità. Possiamo quindi rileggere l'espressione precedente come risoluzione di
-un sistema lineare, ovvero
-\begin{equation}
- \left\{ \begin{array}{lll}
-          y_0 &=& y_0 \\
-          Az_k &=& y_{k-1} \\
-          y_k &=& \beta_k \cdot z_k
-         \end{array} \right.
-\end{equation}
-A questo punto possiamo scegliere varie tecniche per risolvere il sistema lineare; sottolineamo che un metodo diretto
-che utilizza una fattorizzazione in questo caso è molto conveniente rispetto ad uno iterativo. Se calcoliamo
-la fattorizzazione di $A$, infatti, possiamo poi usarla per risolvere tutti i sistemi lineari della successione con
-un costo basso.
-
-In particolare, ricordiamo che per una tridiagonale hermitiana e per una matrice in forma di Hessenberg superiore
-il costo di una fattorizzazione QR sono rispettivamente $O(n)$ e $O(n^2)$, e sono anche il costo della risoluzione
-del sistema lineare. Si verifica sperimentalmente che, partendo da una buona approssimazione degli autovalori,
-il metodo converge in genere in 3-4 passi, indipendemente dalla dimensione di $A$. Si conclude quindi che il calcolo
-dell'autovettore dominante risulta essere $O(n)$ per le tridiagonali e $O(n^2)$ per le matrici in forma di
-Hessenberg.
-
-Ci poniamo ora il problema di come calcolare gli autovettori che stanno nella parte centrale dello spettro, ed è qui
-che interviene lo \emph{shifting}. Non è difficile osservare che gli autovalori della matrice $A - \gamma I$ sono gli
-stessi di $A$ ``shiftati'' di $\gamma$, ovvero sono
-\[
- \spe{A - \gamma I} = \{ \lambda - \gamma \ | \ \lambda \in \spe{A} \ \}
-\]
-Supponiamo ora di avere una buona approssimazione $\hat \lambda_j$ dell'autovalore $\lambda_j$, dove con ``buona
-approssimazione'' intendiamo tale che
-\[
- |\hat \lambda_j - \lambda_j| < |\hat \lambda_j - \lambda_k| \quad \forall k \in \spe{A}\setminus\{\lambda_j\}
-\]
-In questo caso $\hat \lambda_j - \lambda$ è l'autovalore di modulo più piccolo della matrice $A - \hat \lambda_j I$
-e il suo autovettore è quello relativo all'autovalore $\lambda_j$ della matrice $A$. Possiamo quindi applicare
-il metodo delle potenze inverso a $A - \lambda_j I$ e ottenere l'autovettore cercato. Questa operazione prende
-il nome di \emph{metodo delle potenze inverso con shift}.
-
-\begin{os}
- In questo modo si può applicare un metodo qualsiasi per ottenere un'approssimazione degli autovalori (ad esempio
- il metodo QR) e poi calcolare tutti gli autovettori della matrice con il metodo delle potenze inverso con shift.
- Se la matrice è tridiagonale hermitiana si possono ottnere tutti con costo $O(n^2)$, mentre se è in forma di
- Hessenberg superiore il costo diventa $O(n^3)$ per le considerazioni fatte in precedenza.
-\end{os}
-
-\begin{os}
- Un'altra cosa che si può notare è che il metodo fornisce anche un possibile raffinamente per l'autovalore
- $\lambda_j$ tramite il rapporto fra le componenti di $y_k$ e di $y_{k-1}$. Si potrebbe essere tentati
- di sostituire questo eventuale raffinamento al posto dello shifting ma si verifica che questa non è necessariamente
- una buona pratica. Esistono alcuni casi in cui può inficiare la convergenza del metodo.
-\end{os}
-
diff --git a/capitolo3.tex b/capitolo3.tex
deleted file mode 100644
index b3da59c..0000000
--- a/capitolo3.tex
+++ /dev/null
@@ -1,412 +0,0 @@
-\chapter{Decomposizione in valori singolari} \label{ch:svd}
-
-In questa sezione ci occuperemo di un tipo di fattorizzazione basato sulle proprietà spettrali, e quindi differente
-dalle fattorizzazioni viste fino ad ora (come la QR o la LU). Cominceremo esponendo un caso concreto in cui
-ci si trova nella necessità di utilizzarla.
-
-\section{Problemi lineari ai minimi quadrati}
-Consideriamo il seguente problema; sia $A$ una matrice $m \times n$ con $m \geq n$ e $b$ un vettore
-di $\R^m$. Vogliamo trovare $x$ tale che $Ax = b$. In generale questo problema è risolubile solo se
-$b \in \imm{A}$ vista come applicazione lineare, ma non è conveniente affrontare il problema risolvendo
-effettivamente il sistema lineare. Possiamo quindi riformulare la nostra richiesta in questo modo: cerchiamo
-$x$ tale che
-\[
- x = \min_{x \in \R^n}( || Ax - b ||_2 )
-\]
-Se $x$ è effettivamente soluzione del sistema lineare avremo $||Ax - b||_2 = 0$, ed in caso contrario
-avremo un $x$ tale che $Ax$ sia una buona\footnote{dove buona significa che non si potrebbe trovare
-un altro $x'$ tale ceh $Ax'$ sia più vicino (nel senso della norma 2) a $b$ di quanto lo sia già $Ax$}
-approssimazione di $b$.
-
-Analizziamo alcune tecniche per la risoluzione di questo problema
-
-\subsection{Fattorizzazione QR}
-Consideriamo la fattorizzazione QR di $A = QR$. Osserviamo che in questo caso $Q \in \matr{\R}{n}{n}$ e
-$R \in \matr{\R}{m}{n}$. Osservando che minimizzare la norma 2 è la stessa cosa che minimizzarne il
-quadrato si ottiene
-\[
- ||Ax - b||_2^2 = ||QRx - b||_2^2 = ||Q(Rx - \trasp Qb)||_2^2 = ||Rx - \trasp Qb||_2^2
-\]
-dove l'ultimo passaggio è giustificato dal fatto che $Q$ è unitaria.
-Consideriamo che la matrice $R$ e il vettore $\trasp Qb$ avranno una struttura di questo tipo:
-\[
- R = \left[ \begin{array}{c}
-             \hat R \\
-             \trasp 0
-            \end{array} \right]
-\qquad \trasp Qb = \left[ \begin{array}{c}
-                            w_1 \\
-                            w_2
-                          \end{array} \right]
-\]
-dove $\hat R$ è una matrice quadrata $n \times n$, $w_1$ un vettore con $n$ componenti e $w_2$ un vettore
-di $\R^{m-n}$. Possiamo quindi riscrivere la relazione precedente in questo modo
-\[
- ||Ax - b||_2^2 = ||\hat Rx - w_1||_2^2 + ||w_2||^2
-\]
-Abbiamo ricondotto il problema a minimizzare la norma di $\hat Rx - w_1$. Se $\hat R$ è invertibile allora
-la soluzione al problema è evidentemente unica ed è la soluzione del sistema lineare $\hat Rx = w_1$.
-Osserviamo che $\hat R$ è invertibile se e solo se lo è $\rk{A} = n$; per ora assumeremo che
-questo sia vero, riservandoci di analizzare il caso più generale in seguito.
-
-In conclusione la fattorizzazione QR ci ha permesso di ricondurre il problema alla risoluzione di un sistema
-lineare quadrato di ordine $n$. Analizziamo ora un diverso approccio.
-
-\subsection{Sistema delle equazioni normali}
-Questo sistema deriva dalla seguente osservazione. Supponiamo di avere $x$ soluzione del sistema $Ax = b$. Allora
-$x$ deve essere anche soluzione del sistema quadrato $\trasp AAx = \trasp Ab$, che si ottiene semplicemente moltiplicando
-a sinistra la precedente relazione per $\trasp A$.
-Osserviamo ancora una volta che scrivendo la fattorizzazione QR di $A$ e supponendo che $A$ abbia rango massimo si
-ottiene lo stesso risultato di prima:
-\[
- A = QR \qquad \trasp AAx = b \iff \trasp RRx = \trasp R\trasp Qb \iff \trasp R\hat R = \trasp Rw_1 \iff
- \hat Rx = w_1
-\]
-e quindi si ha l'unicità della soluzione e la risolubilità del sistema lineare. In generale però, il calcolo
-di $\trasp AA$ potrebbe essere oneroso e, soprattutto, nessuno ci garantisce in una situazione generale
-che il rango di $A$ sia massimo.
-
-\subsection{Teorema di decomposizione in valori singolari}
-Possiamo pensare di voler migliorare l'idea delle equazioni normali. In altre parole, vogliamo trovare il
-modo di evitare il calcolo di $\trasp AA$. Consideriamo dunque il seguente
-\begin{te}[Decomposizione in valori singolari]
-Siano $m \geq n$ e $A \in \matr{\R}{m}{n}$. Esistono $U \in \matr{\R}{m}{n}$ e $V \in \mat{\R}{n}$ ortogonali e
-$\Sigma \in \matr{\R}{m}{n}$ tali che
-\[
- \Sigma = \left[ \begin{array}{cccc}
-              \sigma_1 & & & \\
-              & \sigma_2 & & \\
-              & & \ddots & \\
-              & & & \sigma_n \\ \hline
-              \multicolumn{4}{c}{\trasp 0} \\
-             \end{array} \right]; \qquad \textrm{dove} \: \sigma_i \geq \sigma_j \ \forall i < j \qquad \textrm{e} \qquad
-A = U\Sigma\trasp V
-\]
-\end{te}
-
-\begin{os}
- Osservando che $\Sigma$ è quasi diagonale si capisce che in un certo senso questa è una decomposizione spettrale.
- In particolare si può scrivere $\trasp AA$ come
- \[
-  \trasp AA = \trasp V\Sigma\trasp U U \Sigma V = \trasp V \left[ \begin{array}{cccc}
-              \sigma_1^2 & & & \\
-              & \sigma_2^2 & & \\
-              & & \ddots & \\
-              & & & \sigma_n^2 \\ \hline
-              \multicolumn{4}{c}{\trasp 0} \\
-             \end{array} \right] V
- \]
-e quindi se prendiamo $\lambda_i$ gli autovalori di $\trasp AA$ (che sono reali perché la matrice $\trasp AA$
-è simmetrica) ordinati in modo decrescente abbiamo che $\sigma_i = \sqrt{\lambda_i}$ per ogni $i = 1 \ldots n$.
-\end{os}
-Inoltre questa fattorizzazione mette in luce altre proprietà della matrice $A$. In particolare:
-\begin{os}
- Se $A$ ha rango $k$, allora $\sigma_1 \ldots \sigma_k$ sono tutti diversi da $0$ mentre $\sigma_{k+1} \ldots
-\sigma_n$ sono $0$. Questo si nota dal fatto che $\trasp AA$ ha lo stesso rango di $A$ ed il suo rango
- è pari al numero\footnote{inteso come numero moltiplicato per la molteplicità algebrica} di autovalori diversi da $0$.
- L'ordinamento che abbiamo richiesto sui $\sigma_i$ ci permette di concludere.
-\end{os}
-
-Possiamo ora osservare come cambia il problema lineare ai minimi quadrati quando introduciamo questa
-nuova fattorizzazione.
-\[
- ||Ax - b||_2^2 = ||U\Sigma\trasp Vx - b||_2^2 = ||\Sigma\trasp Vx - \trasp Ub||_2^2
-\]
-e ponendo $z = \trasp V x$ e $\trasp Ub = \left[ \begin{array}{c} w_1 \\ w_2 \end{array} \right] $ si ottiene
-\[
- \Bigg|\Bigg|\Sigma z - \left[ \begin{array}{c} w_1 \\ w_2 \end{array} \right] \Bigg|\Bigg|_2^2 =
- \Bigg|\Bigg|\left[ \begin{array}{ccc} \sigma_1 & & \\ & \ddots & \\ & & \sigma_n \end{array} \right] z - w_1\Bigg|\Bigg|_2^2 + ||w_2||_2^2
-\]
-Se il rango di $A$ è $n$ allora la matrice $\diag{\sigma_1 \ldots \sigma_n}$ è invertibile e quindi per
-minimizzare il primo fattore è sufficiente risolvere un sistema diagonale di ordine $n$.
-
-Se però $A$ è di ordine $k < n$ allora si può ripartizionare $\trasp Ub$ in una parte con $k$ componenti
-e una parte con le restanti $n-k$. Riscrivendo l'espressione si ottiene che si può minimizzare il primo fattore
-risolvendo un sistema di $k$ equazioni e scegliendo arbitrariamente le restanti $n-k$.
-\begin{os} Come regola generale si preferisce scegliere queste ultime componenti tutte nulle in modo
- da minimizzare la norma della soluzione. \`E infatti generalmente preferibile ottenere una soluzione di norma piccola.
-\end{os}
-Dalle relazioni sopra possiamo anche ottenere una espressione esplicita della soluzione $z$. In particolare
-\[
- z_j = \frac{w_{1,j}}{\sigma_j} = \frac{\trasp U_j b }{\sigma_j} \quad \text{dove} \ U_j \ \text{è la $j$-esima
-colonna di} \ U
-\]
-Ora possiamo ricordare che $x = Vz$ e quindi se $A$ è di rango massimo
-\[
- x = Vz = \sum_{k=1}^{n} \frac{V_k\trasp U_kb}{\sigma_k} = \underbrace{\left( \sum_{k=1}^{n} \frac{V_k\trasp U_k}{\sigma_k} \right)}_{A^+} b
-\]
-e chiamiamo $A^+$ \emph{pseudo-inversa} di $A$. Più precisamente
-\[
- A^+ = V \Sigma^{-1} \trasp U
-\]
-% TODO: Controllare che le uguaglianze scritte sull'inversa abbiano senso. Una è giusta di sicuro,
-% ma quale?
-Si verifica subito infatti che e $A^+A = I$. % \footnote{ma attenzione! Non è vero che $AA^+ = A^+A$ perchè
-% queste sono addirittura due matrici di ordine diverso. Il loro prodotto dà sempre l'identità, ma non dello stesso
-% spazio.}.
-Questa pseudo-inversa di chiama anche \emph{inversa di Moore-Penrose}.
-
-Se $A$ non è di rango massimo possiamo ugualmente definire la pseudo-inversa ``fermando'' la somma
-a $k$ dove $k$ è il rango di $A$. Abbiamo dunque
-\[
- A^+ = \sum_{j=1}^{k} \frac{V_j\trasp U_j}{\sigma_j}
-\]
-e ancora una volta vale l'eguaglianza $x = A^+b$ dove $x$ è il vettore di rango minimo che risolve (nel senso
-che minimizza il valore della norma)
- il problema lineare ai minimi quadrati.
-
-\subsection{Interpolazione polinomiale}
-Abbiamo visto nel corso di analisi numerica che dati $(x_i,y_i)$ con $i = 0 \ldots n$ è sempre possibile
-trovare un polinomio di grado al più $n$ tale che $p(x_i) = y_i$ per tutti gli $i$.
-
-Nelle applicazioni concrete si ha però a che fare con grandi moli di dati sperimentali e raramente
-il grado del polinomio che si vorrebbe usare per creare un modello matematico ha lo stesso ordine
-di grandezza. Ci chiediamo: ``\`E allora possibile trovare il polinomio di grado $m \ll n$ che meglio
-approssimi la distribuzione dei nostri dati sperimentali?''; la risposta è sì e si tratta di risolvere
-un problema lineare ai minimi quadrati con una matrice $m \times n$.
-Indagheremo in seguito questa tecnica per il calcolo del miglior polinomio approssimanete un insieme di dati
-sperimentali, perché dovremo superare anche il problema del condizionamente della matrice di Van der Monde
-che individua il problema\footnote{Questo era un problema anche nel caso standard con matrice quadrata, e rimarrà
-complesso anche nel caso della matrice rettangolare}.
-
-\subsection{Principali proprietà della SVD} \label{subsec:svdprop}
-Abbiamo introdotto la SVD parlando di sistemi lineari perché questo è il contesto in cui è stata originariamente
-concepita. Possiamo però osservare che essa ha anche delle interessanti proprietà in molti altri ambiti.
-
-Consideriamo la matrice $A \in \matr{\R}{m}{n}$ che individua univocamente un'applicazione lineare
-\[
-T_A : \R^n \longto \R^m
-\]
-La \svd\ ci permette di conoscere meglio questa applicazione. Sappiamo che se $A$ è di rango $k$ allora
-$A = U\Sigma\trasp V$ e i $\sigma_i$ della matrice $\Sigma$ sono nulli a partire dal ($k+1$)-esimo.
-\`E chiaro dunque che la scomposizione di permette di determinare il rango di $A$ e quindi di capire
-che l'immagine di $T_A$ avrà dimensione $k$ e il kernel dell'applicazione $n-k$. Ricordando però che
-\[
- Ax = U\Sigma\trasp Vx = \sum_{i=1}^{k} \sigma_i U_i\trasp V_i x
-\]
-possiamo estrarre altre informazioni. Dato che per ogni $x$ $V_i x$ è uno scalare l'immagine di $T_A$
-deve essere contenuta nello $\Span{U_1 \ldots U_k}$. Dato che quest'ultimo ha dimensione $k$, che è la
-stessa di $\imm{T_A}$, devono coincidere e quindi le prime $k$ colonne di $U$ sono una base per l'immagine.
-Analogamente dall'ortogonalità delle colonne di $V$ si ha che se $x = V_j$ con $j > k$ allora $Ax = 0$
-e quindi lo $\Span{V_{k+1} \ldots V_{n}}$ è contenuto nel kernel di $T_A$. Ancora una volta per motivi
-dimensionali devono coincidere.
-
-In sintesi si ha che se $A = U\Sigma\trasp V$ è una matrice di rango $k$ allora
-\begin{itemize}
- \item $\Ker{A} = \Span{V_{k+1} \ldots V_n}$;
- \item $\imm{A} = \Span{U_1 \ldots U_k}$;
-\end{itemize}
-
-Introduciamo ora un'estensione del concetto di norma indotta visto nel corso di Analisi Numerica
-\begin{de}
- Sia $A$ una matrice $m \times n$. Si dice \emph{norma di $A$ indotta dalla norma vettoriale $||\cdot||$}
- la seguente funzione
- \[
-  \begin{array}{rcl}
-||\cdot|| : \matr{\R}{m}{n} &\longto& \R \\
- A & \longmapsto & \displaystyle  \max_{||x|| = 1} ||Ax||
-              \end{array}
- \]
-\end{de}
-Questa è effettivamente una norma, ma la verifica viene qui omessa.
-%TODO: Magari si potrebbe anche fare, suvvia!
-
-\begin{os}
- Osserviamo la seguente catena di uguaglianze
- \[
- ||Ax||_2 = ||U\Sigma \trasp V x||_2 = ||\Sigma \trasp V x||_2 = ||\Sigma z||_2
-\]
-Queste ci dicono che, data l'invertibilità e l'ortogonalità di $V$, $||A||_2 = ||\Sigma||_2 = \sigma_1$.
-\end{os}
-Date queste considerazioni possiamo introdurre anche una generalizzazione del condizionamento
-ridefinendole con la nuova norma e con la pseudo inversa. Nel caso della norma due si ottiene che
-\[
- \cond{A} = ||A^+|| \cdot ||A||_2 = \frac{\sigma_1}{\sigma_k}
-\]
-dove $\sigma_k$ è il più piccolo $\sigma_i$ non nullo, ovvero, come al solito, $k$ è il rango di $A$.
-Un'analisi dell'errore effettuata sul problema lineare ai minimi quadrati mostrerebbe come effettivamente
-l'errore generato dal procedimento dipende proprio da questo coefficiente.
-
-\subsection{\tsvd, pulizia del rumore e compressione di immagini}
-Le considerazioni fatte nella Sezione~\ref{subsec:svdprop} ci permettono di introdurre delle tecniche
-per ridurre il condizionamento di alcuni problemi.
-
-Supponiamo di avere ad esempio un sistema lineare $Ax = b$ con $A$ una matrice con un condizionamento
-molto alto. Siamo consci di non avere speranza di risolvere in maniera esatta il sistema senza aumentare
-la precisione dei tipi che utilizziamo negli algoritmi.
-Se ad esempio il condizionamento è nell'ordine di $10^{12}$ e la precisione di macchina di $10^{16}$ sappiamo
-che probabilmente avremo circa $4$ cifre decimali corrette (nella migliore delle ipotesi). La soluzione di aumentare
-la precisione di macchina (ad esempio portarla a $10^{-32}$) potrebbe essere una soluzione ma appesantirebbe
-molto l'esecuzione dell'algoritmo.
-
-Consideriamo dunque la \svd\ di $A = U\Sigma\trasp V$.
-Possiamo supporre che $\sigma_n$ sia molto piccolo e che
-questo causi il cattivo condizionamento (ricordiamo che $\cond{A} = \frac{\sigma_1}{\sigma_n}$). Possiamo
-pensare di troncare la matrice $\Sigma$ sostituendola con una matrice $\hat \Sigma$ identica ad eslusione del posto
-$(n,n)$ dove rimpiazziamo $\sigma_n$ con $0$, e risolvere il problema $\hat Ax = U\hat \Sigma\trasp Vx = b$.
-Questo \textbf{è un altro problema}, ma potrebbe essere molto meglio condizionato del precedente (ad esempio
-se $\sigma_{n-1} \gg \sigma_n$) e talvolta è la scelta migliore.
-
-Questa pratica di ``troncamento'' viene chiamata \tsvd, ovvero \svd\ con troncamento. \`E tipicamente
-utile nella ricostruzione di immagini (che vedremo più avanti) perché non ci interessa la soluzione esatta
-del problema, ma la soluzione esatta di un problema ``semplice'' che si avvicini ai nostri dati.
-Questo procedimento viene anche detto di soglia, o di filtro, perché è possbile decidere una soglia minima
-sotto la quale i $\sigma_i$ non possono scendere, pena essere messi a $0$. In questo modo, fissata la
-soglia $s$, avremo che il condizionamento sarà maggiorato da $\sigma_1s^{-1}$.
-
-In generale non è un problema banale scegliere il livello di soglia $s$. Nei casi più semplici si ha
-un salto dei valori singolari, che passano da un ordine di grandezza ad uno (o a più) inferiori, dividendo
-in due zone ben distinte quelli prossimi a $0$ e quelli $\gg 0$.
-
-Osservaiamo che in generale non abbiamo alcuna garanzia che i risultati ottenuti tramite
-questa tecnica abbiano un riscontro con il problema che aveva generato i dati di partenza, e va quindi
-usata con molta attenzione.
-
-Un altro esempio pratico di utilizzo della \tsvd\ è quello della compressione delle immagini. Supponiamo di avere
-un'immagine rappresentata come una matrice di pixel $A$\footnote{non esiste un motivo per cui la matrice dovrebbe
-essere quadrata, è solo per rendere più chiaro l'esempio} di dimensione $n \times n$. Possiamo scrivere
-$A = U\Sigma\trasp V$ e pensare di limitarci ad una matrice di rango $k$ e quindi tronvare tutti i $\sigma_i$
-con $i > k$. In questo modo potremo rappresentare l'immagine considerando solo le prime $k$ colonne di $U$, le
-prime $k$ righe di $V$ e i $\sigma_1 \ldots \sigma_k$.
-Per fare un esempio pratico supponiamo $n = 1024$, ovvero un'immagine da 1 Megapixel. Questa occuperebbe in memoria
-(supponendo che sia in bianco e nero a 256 colori) $1 MB$. Decidendo di comprimerla con una matrice di rango $15$
-avremmo invece una dimensione di $15 KB$! Ovviamente l'immagine risultante darebbe solamente un'idea di quella originale,
-ma si potrebbe pensare di trovare un punto d'incontro fra dimensione e qualità\footnote{e magari di raffinare anche
-il metodo di compressione, ma questo lo vedremo in seguito} (si veda ad esempio la Figura~\ref{fig:camosci}).
-
-\begin{figure}[ht!]
-\begin{center}
-  \includegraphics[scale=0.2]{camosci/camoscio_100.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_50.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_25.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_15.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_8.png}
- \caption{Una successione di camosci di 300 pixel di lato e di rango rispettivamente $100$, $50$, $25$, $15$ e $8$; le
- immagini sono state ridimensionate per stare nella pagina, e sono state realizzate con un programma
- identico a quello realizzato in laboratorio durante il corso.} \label{fig:camosci}
-\end{center}
-\end{figure}
-
-
-\section{Calcolo della decomposizione in valori singolari}
-In questa sezione introdurremo dei metodi per il calcolo della \svd\ e faremo qualche altra considerazione
-sui suoi possibili utilizzi.
-
-\subsection{Approssimazione di rango fissato}
-Supponiamo di avere una matrice $A \in \mat{\R}{n}$ e di volerne trovare una approssimazione efficiente.
-Un'idea può essere quella di rappresentarla con una matrice di rango fissato $k < n$ che le assomigli il
-più possibile. \\
-Consideriamo la procedura seguita anche alla fine della sezione precedente
-\begin{enumerate}
- \item Calcoliamo la fattorizzazione \svd\ di $A = U \Sigma V$;
- \item Tronchiamo la $\Sigma$ ponendo $\sigma_{k+1} \ldots \sigma{n} = 0$ e chiamiamo $\tilde \Sigma$
- la nuova matrice;
- \item Approssimiamo $A$ con $U \tilde \Sigma V = \sum_{i=1}^{k} \sigma_j U_j \trasp{V_j}$;
-\end{enumerate}
-\begin{os}
- Questa approssimazione di $A$ è molto pratica nel caso non si abbia sufficiente spazio per
- salvare $A$ nella memoria di un calcolatore. Suggerisce infatti un metodo immediato per ridurre
- (circa) di un fattore $\frac{n}{k}$ lo spazio occupato. \`E infatti sufficiente salvare le prime $k$
- colonne di $U$, le prime $k$ righe di $A$ e i primi $k$ valori sulla diagonale di $\Sigma$.
-\end{os}
-Una domanda naturale a questo punto è: ``Quanto differiscono le due matrici?''. Osserviamo che
-\[
- ||A - B||_2 = ||U\Sigma \trasp V - U \tilde \Sigma \trasp V||_2 = ||U[\Sigma - \tilde \Sigma] \trasp V||_2
- = \sigma_{k+1}
-\]
-Se $\sigma_{k+1}$ è sufficientemente piccolo abbiamo quindi un piccolo errore. Questo, di fatto, si
-verifica in molte applicazioni pratiche dove i $\sigma_i$ piccoli possono rappresentare i disturbi
-all'informazione che si intendeva analizzare (come nel caso della trasmissione di segnali).
-
-In realtà possiamo dire di più. Sia $B$ una matrice di rango $k$. Sappiamo che
-\[
- \Dim{\Ker{B}} + \Dim{\imm{B}} = n \qquad \Dim{\Ker{B}} \geq n - k
-\]
-Considero il sottospazio $S = \Span{V_1,\ldots,V_{k+1}} \subseteq \R^n$. Per una questione di dimensioni
-deve esistere un vettore non nullo $z \in S \cap \Ker{B}$, e possiamo supporre $||z||_2 = 1$.
-Osserviamo che
-\[
-|| (A - B)z ||_2 = ||Az||_2 = ||\sum_{i=0}^{k+1} \sigma_i U_i \trasp V_i z||_2 \geq
- || \sigma_{k+1} U_i \trasp V_i z ||_2 = \sigma_{k+1}
-\]
-In particolare abbiamo mostrato che la nostra approssimazione era la migliore possibile, nel senso che
-per ogni altra approssimazione ha una distanza maggiore o uguale da $A$ (secondo la norma 2).
-
-\subsection{Metodi di calcolo, errori e costo computazionale}
-Abbiamo visto che la \svd\ è una sorta di decomposizione spettrale della matrice $A$. Più precisamente
-i $\sigma_i$ che si trovano sulla diagonale di $\Sigma$ sono le radici degli autovalori di $\trasp AA$
-(che è semidefinita positiva). \\
-Un primo modo per affrontare il calcolo della fattorizzazione potrebbe quindi essere
-\begin{enumerate}[(a)]
- \item Calcolare $\trasp AA$;
- \item Determinare la decomposizione spettrale di $\trasp AA = V D \trasp V$;
- \item Calcolare la fattorizzazione $QR$ di $AV = UR$;
-\end{enumerate}
-Osserviamo ora che $\trasp R\trasp U U R = \trasp RR = \trasp V \trasp AA V = D$; $\trasp RR$ è quindi
-la fattorizzazione di Cholesky di $D$. Si può mostrare che la diagonalità di $D$ implica che anche $R$ sia
-diagonale e quindi $A = UR\trasp V$ è quasi la \svd\ di $A$. In effetti non abbiamo ancora considerato
-il problema dell'ordine (vorremmo $\sigma_i \geq \sigma_j$ se $i \geq j$).
-Questo problema sarebbe risolto nel momento in cui la colonna di $AV$ di norma maggiore fosse in prima posizione
-(e conseguentemente le altre in ordine di norma discendente).
-Possiamo quindi introdurre una opportuna matrice di permutazione $P$ e riscrivere la relazione
-nel seguente modo
-\[
- AVP = U\Sigma
-\]
-In questo modo la prima colonna di $AVP$ è quella di norma maggiore e quindi i $\sigma_i$ saranno
-in ordine decrescente.
-
-\begin{os}
- Per eseguire il procedimento sopra descritto abbiamo bisogno di conoscere la matrice $\trasp AA$, che tipicamente
- può essere grande (ad esempio se $m \gg n$). Calcolare la sua decomposizione spettrale potrebbe introdurre
- molti problemi di stabilità, e occupare molto spazio in memoria. Sarebbe quindi interessante trovare un
- metodo per avere una decomposizione spettrale di $\trasp AA$ senza doverla effettivamente calcolare.
-\end{os}
-
-Supponiamo ora di avere $U,V$ matrici ortogonali e $B$ matrice bidiagonale tali che
-\[
- A = UB\trasp V
-\]
-allora si ha che
-\[
- \trasp AA = \trasp V \trasp B B V
-\]
-e $\trasp B B$ è una matrice tridiagonale; avere la decomposizione spettrale di $\trasp B B$ è quindi equivalente
-ad avere la decomposizione spettrale di $\trasp A A$!
-
-Sappiamo inoltre che calcolare la decomposizione spettrale di una matrice tridiagonale simmetrica è particolarmente
-semplice.
-
-L'unico pezzo che manca è mostrare come è possibile calcolare le matrici $U$ e $V$ che bidiagonalizzano $A$.
-Possiamo usare le matrici di Householder in questo modo:
-\begin{enumerate}[(a)]
- \item Calcoliamo $P_1$ tale che $P_1 Ae_1 = \alpha e_1$, e quindi $P_1A$ abbia la prima colonna
- nulla ad eccezione dell'elemento in posizione $(1,1)$;
- \item Calcoliamo $Q_1$ tale che $P_1 A Q_1$ abbia la prima riga nulla ad esclusione dei primi
- due elementi (in posizione $(1,1)$ e $(1,2)$);
- \item Iteriamo il procedimento sopra lavorando sulla seconda colonna e sulla seconda riga, e poi di seguito
- per tutte le righe e colonne;
-\end{enumerate}
-Si verifica che il procedimento sopra porta effettivamente ad una matrice bidiagonale e che $\trasp BB$
-è tridiagonale simmetrica.
-
-Analizziamo ora il costo computazionale di questo procedimento. Il primo passo consiste nel calcolo delle
-due matrici ortogonali che bidiagonalizzano $A$. Il costo di ogni passo del procedimento è il calcolo
-di due matrici di Householder e quindi $O(n)$. Viene ripetuto $n$ volte fino ado ottenere un
-costo complessivo di $O(n^2)$. Diventa poi $O(mn^2)$ perchè bisogna effettuare le moltiplicazioni.
-
-Analogamente il costo del calcolo degli autovalori con il metodo \qr\ è $O(n^2)$; il metodo richiederebbe
-però di calcolare la matrice $\trasp BB$ che potrebbe essere piuttosto grande. In realtà esiste un metodo
-(che qui non esponiamo) per applicare il metodo \qr\ a $\trasp BB$ senza calcolarla esplicitamente ma
-conoscendo solamente $B$, lasciando il costo totale a $O(mn^2)$.
-
-Un problema da affrontare, infine, è quello dell'errore. Il teorema di Bauer-Fike (Teorema~\ref{te:BauerFike}) ci
-assicura infatti che il problema del calcolo degli autovalori di una matrice simmetrica è ben condizionato,
-ma assicurandoci solo una maggiorazione dell'errore assoluto, e non una dell'errore relativo. Sfortunatamente
-nelle applicazioni si è spesso interessati a calcolare con precisione i valori singolari piccoli e questo
-potrebbe essere un problema. Negli ultimi anni sono state sviluppate tecniche per il calcolo della \svd\ che
-hanno tenuto conto di questo problema ma non sono ancora state implementate in programmi come \matlab\ o librerie
-come \lapack.
-
-
-
diff --git a/capitolo4.tex b/capitolo4.tex
deleted file mode 100644
index 6a68e56..0000000
--- a/capitolo4.tex
+++ /dev/null
@@ -1,346 +0,0 @@
-\chapter{Risoluzione di sistemi lineari}
-
-In questo capitolo affronteremo il tema della risoluzione dei sistemi lineari introducendo dei metodi
-iterativi specifici per alcune classi di matrici particolarmente interessanti; queste individueranno
-solitamente sistemi troppo grandi per essere risolti tramite metodi diretti e in cui la convergenza
-dei metodo classici (Jacobi e Gauss Seidel) è quasi assente.
-
-\section{Sitemi lineari con matrici definite positive}
-
-\subsection{Metodo del gradiente}
-Supponiamo di avere una matrice $A \in \mat{\R}{n}$ definita positiva ed un sistema lineare
-\[
- Ax = b
-\]
-In molti casi pratici (come ad esempio nello studio delle Vibrazioni, vedi Sezione~\ref{sec:vibsistcont})
-ci si trova a risolvere sistemi lineari con matrici definite positive sparse o strutturate\footnote{in
-cui in generale il costo del prodotto matrice vettore è basso} e in cui è conveniente usare un metodo
-iterativo.
-
-Consideriamo la seguente funzione
-\begin{equation}
- \Phi(x) = \frac{1}{2} \trasp x A x - \trasp x b
-\end{equation}
-Osserviamo che il suo gradiente è dato dalla seguente espressione
-\begin{equation}
- \nabla \Phi(x) = Ax - b
-\end{equation}
-e quindi vale $0$ solo se $x$ è una soluzione del sistema lineare. Possiamo quindi riformulare la ricerca
-della soluzione del sistema lineare come ricerca dei punti stazionari della funzione $\Phi$.
-Possiamo osservare che se $\bar x$ è un punto stazionario per $\Phi$ allora calcolando la matrice
-delle derivate seconde si ottiene esattamente $A$; ricordando che $A$ è definita positiva si può concludere
-che $\bar x$ è un punto di minimo per $\Phi$ e quindi
-\[
- A\bar x = b \iff \bar x = \min_{x \in \R^n} ( \Phi(x) )
-\]
-In sintesi abbiamo ricondotto il problema della risoluzione del sistema lineare ad un problema di minimizzazione.
-Ricordando che siamo alla ricerca di un metodo iterativo vorremmo affrontare il problema nel modo seguente
-\begin{enumerate}[(a)]
- \item Scegliamo un punto $x_0$ a caso;
- \item Cerchiamo di determinare in che direzione si trova il minimo;
- \item Ci spostiamo ponendo $x_1 = x_0 + \alpha_0v_0$ dove $v_0$ è la \emph{direzione di decrescita}
- appena determinata e $\alpha_0$ un opportuno scalare;
-\end{enumerate}
-
-I \emph{metodi del gradiente}, ovvero quei metodi basati sulle considerazioni appena fatte, assumono
-nomi diversi a seconda della tecnica scelta per determinare la direzione di decrescita.
-
-\subsection{Il metodo del gradiente ottimo}
-Una prima scelta piuttosto naturale per la direzione di decrescita nel punto $x_k$ potrebbe essere $-\nabla \Phi(x_k)$.
-Ricordiamo infatti dall'analisi che il gradiente indica la direzione in cui la funzione ``cresce'' di più.
-Questa scelta si dice del \emph{gradiente ottimo} ed è stata, storicamente, la prima ad essere implementata
-e studiata. \\
-Una volta scelta la direzione dobbiamo determinare $\alpha_k$. Per fare questo studiamo la seguente funzione di
-$\alpha$ che valuta $\Phi$ sulla retta\footnote{nel senso di retta affine} $x_k + \Span{v_k}$:
-\[
- g(\alpha) = \Phi(x_k + \alpha v_k)
-\]
-Ricordando che vogliamo trovare il minimo di $\Phi$ e osservando che $g$ è convessa cerchiamo anche qui un punto
-stazionario di $g$; questo sarà l'$\alpha_k$ che ci permette di ottenere il valore minimo di $\Phi$ sulla direzione
-determinata da $v_k$. \\
-Otteniamo
-\[
- g'(\alpha) = \alpha \trasp v_k A v_k + \trasp v_k (A x_k - b) = 0
-\]
-e quindi ponendo $r_k = v - Av_k$ si ottiene
-\[
- \alpha_k = \frac{\trasp v_k (-Ax_k + b)}{\trasp v_k A v_k} = \frac{\trasp v_k r_k}{\trasp v_k A v_k}
-\]
-Osserviamo in particolare che tenere traccia del valore di $r_k$ è utile per decidere quando
-fermare il metodo. $||r_k|| = ||Ax_k - b||$ è indice di quanto siamo ``distanti'' dalla soluzione.
-
-Si è verificato che questo metodo è convergente per ogni scelta di $x_0$ però ci si è accorti che
-non è la scelta migliore della direzione di decrescita.
-
-\subsection{Il metodo del gradiente coniugato}
-Dopo l'introduzione del metodo del gradiente ottimo si è studiata un altro metodo di scelta, a cui
-dobbiamo però premettere alcune definizioni.
-
-\begin{de} Data una matrice $A \in \mat{\R}{n}$ una $n$-upla di vettori $(p_1 \ldots p_n)$ di $\R^n$
- si dicono \emph{$A$-coniugati} se
- \[
-  \left[ \begin{array}{ccc}
-          \quad \trasp p_1 \quad \\
-          \quad \vdots \quad \\
-          \quad \trasp p_n \quad \\
-         \end{array} \right]
- A
- \left[ \begin{array}{ccc}
-	\multirow{3}{*}{$p_1$} & \multirow{3}{*}{$\ldots$} & \multirow{3}{*}{$p_n$} \\
-        & & \\
-        & &
-        \end{array} \right]
- = D
- \]
- dove $D$ è una matrice diagonale.
-\end{de}
-
-\begin{os} \label{os:coniugli}
- Se abbiamo una $n$-upla di vettore $A$-coniugati possiamo facilmente dire che sono linearmente
-indipendenti.
-\end{os}
-
-Vorremmo ora impostare l'iterazione in modo che i vettori $v_0, v_1, \ldots$ che definiscono le
-direzioni di descrescita siano $A$-coniugati. Osserviamo in particolare che la condizione di
-lineare indipendenza ci permette di dire che non possiamo fare più di $n$ iterazioni dove $n$ è
-la dimensione della matrice $A$. Scopriremo, per fortuna, che questo è solo apparentemente un
-problema.
-
-Dobbiamo ora trovare un metodo dati $v_1, \ldots, v_{k-1}$ vettori $A$-coniugati per determinare
-$v_k$ tale che sia $A$-coniugato con tutti gli altri. Poniamo $v_k = r_k + \beta_k v_{k-1}$;
-per avere la condizione di ortogonalità\footnote{secondo il prodotto scalare definito da $A$}
-dovremo avere
-\[
- (\trasp r_k + \beta_k\trasp v_{k-1}) A v_{k-1} = 0
-\]
-e quindi
-\[
- \beta_k = \frac{\trasp r_k A v_{k-1}}{\trasp v_{k-1} A v_{k-1}}
-\]
-Si può verificare che questa condizione non è solo necessaria ma anche sufficiente. Un successione di vettori
-scelti in questo modo è infatti forzatamente $A$-coniugata\footnote{questo risultato non verrà dimostrato qui.}
-
-Avendo risolto il problema del trovare effettivamente la successione, ci chiediamo come affrontare
-il limite al numero di iterazioni che ci è indicato Osservazione~\ref{os:coniugli}. Ci aiuta il
-seguente
-\begin{te}
- Se ho $\{x_k\}_{k=1,\ldots,n}$ una successione di vettori che rispetti le condizioni osservate precedentemente con $x_0 = 0$
- allora per ogni $k$ si ha che
- \[
-  \Phi(x_k) = \min_{x \in \Span{v_0, \ldots, v_k-1}}(\Phi(x))
- \]
- ed in particolare dopo $n$ iterazioni $\Phi(x_n)$ è il minimo assoluto di $\Phi(x)$.
-\end{te}
-Questo teorema ci dice, in particolare, che questo metodo iterativo è in realtà un metodo diretto, ovvero
-è convergente in un numero finito di passi per ogni scelta di punto iniziale.
-
-Poniamo ora $e_k = x_k - x$ l'errore al passo $k-esimo$. Il teorema sopra ci dice che $e_n = 0$ ma ci chiediamo
-come si comporta $e_k$ mentre $k$ si avvicina $n$. Non dobbiamo infatti dimenticare che questo è un metodo
-iterativo e quindi in molti casi pratici saremo interessati a fermarci prima di avere la convergenza totale.
-Esiste un altro teorema che ci dà un risultato piuttosto preciso sulla velocità di convergenza
-\begin{te}
- Sia $||\cdot||_A$ la norma indotta dalla matrice $A$\footnote{ricordiamo che questa è definita nel seguente modo
- $||x||_A := \sqrt{\trasp x A x}$}
- ; allora per ogni $k$ e per ogni scelta iniziale di $x_0$ si
- ha
- \[
-  ||e_k||_A \leq \left( \frac{2\sqrt{\cond{A}}}{\sqrt{\cond{A}} - 1} \right)^{k} ||e_0||_A
- \]
-\end{te}
-Ancora una volta la velocità di convergenza dipende dal condizionamento della matrice del problema. Per
-matrici con un piccolo condizionamento questa è molto veloce, mentre per matrici con condizionamento
-più grande potrebbe diventare lenta.
-
-\subsection{Precondizionamento}
-Supponiamo di avere una matrice $A$ definita positiva che individua un problema mal condizionato, in cui la velocità
-di convergenza del metodo del gradiente coniugato è molto lenta.
-
-Sappiamo dai risultati di Analisi Numerica che non possiamo riuscire a risolvere con precisione
-un sistema mal condizionato; ci chiediamo però se sia possibile perlomeno risolverlo velocemente,
-pur con la consapevolezza che i risultati saranno molto imprecisi.
-
-La risposta è sì e l'idea è usare un \emph{precondizionamento}, ovvero analizzare un altro problema
-che si ottiene dal primo moltiplicandolo a destra e/o a sinistra per delle altre matrici rendendolo
-ben condizionato. Ovviamente i risultati finali risentiranno del cattivo condizionamento del problema
-iniziale, ma la velocità di convergenza sarà elevata.
-
-Dato il sistema $Ax = b$ consideriamo il seguente
-\[
- LA\trasp L {\trasp L}^{-1} x = L b
-\]
-che è equivalente. Osserviamo poi che $LA\trasp L$ è simile a $L^{-1}( L A \trasp L) L$ e quindi
-a $A\trasp L L$. Ricordiamo ora che il condizionamento della matrice è dato da $\frac{\lambda_{max}}{\lambda_{min}}$
-e cerchiamo quindi una matrice $M = \trasp L L $ tale che gli autovalori di $A \trasp LL $ siano molto vicini
-\footnote{e quindi il loro rapporto sia molto vicino ad $1$, che è il valore minimo in cui possiamo sperare
-per il condizionamento di una matrice}.
-
-Osserviamo che se fosse possibile, ad esempio, scegliere $M = A^{-1}$ allora avremmo la situazione migliore possibile.
-Evidentemente però questa non è un opzione, perché se fossimo a conoscenza di $A^{-1}$ avremmo già
-completamente risolto il nostro problema. In ogni caso, però, un buon precondizionamento si ottiene cercando
-di approssimare un'inversa di $A$.
-
-Non ci occuperemo in questo corso di tecniche di precondizionamento che sono varie e a volte complesse.
-Sottolineamo solo alcune problematiche che potrebbero nascere usando questo approccio
-\begin{enumerate}[(a)]
- \item Per come abbiamo definito le matrici in gioco, $M$ dovrebbe essere definita positiva; in realtà
- esiste un modo per ovviare a questo problema, ma non verrà esposto qui;
- \item Una volta trovata $M$ (che potrebbe essere un'operazione complicata) dovremmo trovare anche
- $L$ e quindi fare una fattorizzazione; ancora una volta, esiste un modo per ignorare il fatto che esista
- la matrice $L$ ed usare solo $M$;
- \item Se $A$ è una matrice strutturata, saremo probabilmente interessati a mantenerne la struttura. Questo si può
- fare accontentandosi di approssimazioni dell'inversa piuttosto vaghe, ma poco invasive (come ad esempio una matrice diagonale);
-\end{enumerate}
-
-\section{Matrici strutturate}
-Uno dei punti cardine nell'applicazione dei metodi per la soluzione dei sistemi lineari sarà riuscire a
-sfruttare la struttura delle matrici con cui dovremo operare.
-
-\subsection{Le matrici di Toeplitz} \label{subsec:toeplitz}
-Molte delle matrici con cui avremo a che fare risolvendo sistemi lineari in pratica sono matrici di Toeplitz.
-\begin{de}
- Sia $A$ una matrice $n \times n$; $A$ si dice di \emph{Toeplitz} se le sue diagonali sono costanti, ovvero se per
- ogni $i,j$ e per ogni $k \in \Z$ per cui ha senso
- \[
-  a_{ij} = a_{i+k,j+k}
- \]
-\end{de}
-Queste matrici hanno una struttura molto particolare, ed esiste un modo piuttosto comodo di effettuare il
-prodotto matrice per vettore. Consideriamo il caso seguente con una matrice di Toeplitz triangolare inferiore
-\[
- \left[ \begin{array}{cccc}
-         t_0 &  &  &  \\
-         t_1 & \ddots &  &  \\
-          \vdots & \ddots & \ddots &  \\
-          t_n & \cdots & t_1 & t_0 \\
-        \end{array} \right]
- \left[ \begin{array}{c}
-         p_0 \\
-         p_1 \\
-         \vdots  \\
-         p_n
-        \end{array} \right]
-= \left[ \begin{array}{l}
-          t_0p_0 \\
-          t_1p_0 + t_0p_1 \\
-          \vdots\\
-          t_np_0 + t_{n-1}p_1 + \ldots + t_0p_n
-         \end{array} \right]
-\]
-Si osserva che il vettore che si ottiene ha i coefficienti che sono quelli del prodotto di questi due polinomi
-\[
- \left\{ \begin{array}{lll}
-          t(x) &=& t_0 + t_1 z + \ldots + t_n z^n \\
-          p(x) &=& p_0 + p_1 z + \ldots + p_n z^n
-         \end{array} \right.
-\]
-Possiamo quindi calcolare il prodotto matrice vettore nello stesso modo in cui calcoleremmo i coefficienti del
-polinomio prodotto, ovvero con la trasformata discreta di Fourier.
-
-Avremo quindi un costo delle moltiplicazione $O(n\log(n))$\footnote{utilizzando la \fft.} e quindi
-un costo complessivo del metodo del gradiente coniugato di $O(n^2\log(n))$.
-
-% TODO: Inserire gli esempi delle applicazioni del metodo del gradiente a qualche caso particolare
-% di matrici, come ad esempio le matrici elementari e le matrici con nugoli di autovalori appiccicati.
-
-
-\subsection{Matrici di Toeplitz tridiagonali simmetriche}
-Vorremmo ora mostrare un'analisi di un caso paricolare, ovvero dei sistemi lineari con
-una matrice di Toeplitz simmetrica tridiagonale. \\
-Questo è ad esempio il caso che discretizza il problema differenziale $\triangle u = f$ nel caso di
-$u$ in una variabile reale. Le conclusione che otteremo su questo caso particolare ci permetteranno poi
-di analizzare anche i casi in più variabili.
-
-Supponiamo ora di avere una qualsiasi matrice $T$ tridiagonale simmetrica di Toeplitz di dimensione $n$; chiamiamo $a$ gli
-elementi sulla diagonale e $b$ quelli sulla sotto e sopradiagonale\footnote{in effetti queste due scelte
-individuano completamente la matrice di cui stiamo parlando.}. \\
-Siamo interessati a studiare le proprietà spettrali di questa matrice per poter dare una stima
-del suo condizionamento in norma 2, che come abbiamo visto influenza la convergenza del metodo del
-gradiente coniugato.
-
-Osserviamo ceh se $\lambda$ è un autovalore per $T$ allora la matrice $T - \lambda I$ deve essere singolare
-e in particolare deve esistere una soluzione non banale del sistema lineare
-\[
- (T - \lambda I)x = 0  \iff  \left[ \begin{array}{ccccc}
-         a - \lambda & b &  & & \\
-         b & a -\lambda & b &  & \\
-         & \ddots & \ddots & \ddots & \\
-         & & b & a - \lambda & b \\
-         & & & b & a
-        \end{array} \right]
- \left[ \begin{array}{c}
-         x_1 \\
-         x_2 \\
-         \vdots \\
-         x_{n-1} \\
-         x_n
-        \end{array} \right] =
-\left[ \begin{array}{c}
-        0 \\
-        0 \\
-        \vdots \\
-        0 \\
-        0
-       \end{array} \right]
-\]
-Preso un qualsiasi $j$ compreso fra $2$ e $n-1$ possiamo scrivere la relazione sopra come
-\[
- bx_{j-1} + (a- \lambda)x_j + bx_{j+1} = 0
-\]
-Ponendo $x_0 = x_{n+1} = 0$ la relazione vale anche per $j = 1$ e $j=n$. Apparentemente non abbiamo
-chiarito molto e trovare una soluzione esplicita sembra complicato. Possiamo però provare a porre
-$x_j = x^{j}$, e vedere se riusciamo a trovare una soluzione particolare di questo tipo. Sostituendo
-nelle relazioni sopra (per $j$ fra $2$ e $n-1$) si ottiene
-\[
- bx^{j-1} + (a- \lambda)x^j + bx^{j+1} = 0
-\]
-e ricordando che l'autovettore non può essere nullo e quindi $x^j \neq 0$ per ogni $j$, questa è soddisfatta
-se e solo se
-\[
- b + (a-\lambda)x + bx^2 = 0 \iff 1 + \frac{a - \lambda}{b} + x^2 = 0
-\]
-Passiamo ora ad analizzare il caso che ci interessa, ovvero $a = 2$ e $b = 1$\footnote{ovvero la matrice che discretizza
-il problema differenziale di Laplace.}; per il terzo teorema di Gerschgorin sappiamo che $|\lambda - 2| < 2$ e
-quindi
-\[
- \left| \frac{a - \lambda}{b} \right|< 2
-\]
-Possiamo allora porre $\frac{a - \lambda}{b} = -2 \cos\theta$ per $\theta \in (0,\pi)$ e otteniamo l'equazione
-\[
- 1 - 2x\cdot\cos \theta + x^2 = 0
-\]
-Risolvendola otteniamo
-\[
-  x_{1,2} = \cos \theta \pm \sqrt{\cos^2\theta - 1} = \cos \theta \pm i \cdot \sin \theta = e^{\pm i \theta}
-\]
-Abbiamo quindi ottenuto due soluzioni che andrebbe bene per tutte le $j = 2, \ldots, n-1$ ma nessuna delle due
-soddisfa le condizione per $j = 0$ e $j = n$. Osserviamo però che una qualsiasi combinazione lineare
-$\alpha x_1 + \beta x_2$ soddisfa le condizione interne, e cerchiamo quindi di determinare $\alpha$ e $\beta$
-in modo che anche le condizioni al contorno siano soddisfatte. Si ottiene
-\[
- x_0 = 0 = \alpha + \beta
-\]
-e quindi $\beta = -\alpha$; ponendo poi $j = n+1$ si ottiene
-\[
- x_{n+1} = 0 = \alpha e^{i\cdot(n+1) \theta} - \alpha e^{-i \cdot (n+1) \theta} = \alpha( 2 i \sin ((n+1)\theta) )
-\]
-e quindi $\theta_k = \frac{k\pi}{n+1}$ con $k = 1, \ldots, n$. Abbiamo trovato quindi $n$ autovettori distinti
-e siamo in grado di calcolare i relativi autovalori ricordando che
-\[
- \frac{a - \lambda_k}{b} = -2 \cos \theta_k = -2 \cos (\frac{k\pi}{n+1}) \Rightarrow \lambda_k = a + 2b\cos \theta_k
-\]
-Se costruiamo la matrice degli autovettori
-\[
- U = \left[ \begin{array}{c|c|c|c}
-             \multirow{3}{*}{$x_1$} & \multirow{3}{*}{$x_2$} & \multirow{3}{*}{$\ldots$} & \multirow{3}{*}{$x_n$} \\
-             & & & \\
-             & & &
-            \end{array} \right]
-\]
-possiamo osservare che $\trasp UU = D$ con $D = \gamma I$. Abbiamo quindi che $U$ è quasi unitaria, in particolare
-$\frac{1}{\gamma} U$ lo è. Inoltre possiamo osservare che gli elementi di $U$ non dipendono da $a$ e da $b$ e che
-$u_{ij} = \sin(\frac{ij\pi}{n+1}) = u_{ji}$ e quindi $U$ è simmetrica. In altre parole abbiamo una decomposizione
-spettrale $T = UDU$ dove tutta l'informazione sulla matrice è contenuta nella parte diagonale.
-
-Osserviamo infine che $D = \diag{a + 2b\cos(\theta_1) , \ldots, a + 2b \cos(\theta_n)}$ e quindi l'autovalore più
-piccolo è $a + 2b\cos(\theta_1)$.
-
diff --git a/capitolo5.tex b/capitolo5.tex
deleted file mode 100644
index 2f3a9ec..0000000
--- a/capitolo5.tex
+++ /dev/null
@@ -1,267 +0,0 @@
-\chapter{Calcolo degli autovalori di matrici strutturate}
-
-Abbiamo visto nell'analisi dei sistemi lineari vari metodi per utilizzare la struttura
-delle matrici per ottimizzare il procedimento e diminuire il costo computazionale. \\
-Questo in generale è più difficile nel calcolo degli autovalori. L'unica struttura che siamo finora
-riusciti a sfruttare per abbassare il costo è stata la tridiagonalità.
-
-\section{Strutture note}
-In generale si parla di matrice strutturata quando una matrice è individuata da un numero di
-parametri dell'ordine minore di $n^2$. \\
-Ricapitoliamo le strutture principali viste fino ad ora e i relativi vantaggi nella risoluzione
-di sistemi lineari.
-\begin{description}
- \item[Matrici sparse] Parliamo di matrici sparse quando ci sono pochi elementi non nulli, ovvero un numero
- con un ordine di grandezza strettamente inferiore a $n^2$. In questo caso riusciamo spesso ad ottimizzare
- i metodi di moltiplicazione matrice per vettore e quindi possiamo trarre vantaggio dall'applicazione
- di metodi iterativi;
-
- \item[Van der Monde] Non abbiamo analizzato in dettaglio\footnote{ad eccezione delle matrici di Fourier per il calcolo
- della \dft, dove si riesce a scendere ad un costo $O(n\log n)$.} queste matrici ma esiste un metodo (tramite un'opportuna
- rappresentazione dell'inversa) per risolvere un sistema lineare con un costo $O(n^2)$.
-
- \item[Toeplitz o H\"ankel] Abbiamo visto queste matrici nella Sezione~\ref{subsec:toeplitz} e tramite la
- trasformata discreta di Fourier abbiamo mostrato che il costo del prodotto matrice vettore è molto basso.
- Possiamo quindi ipotizzare di applicare dei metodi iterativi per risolvere il sistema.
-
- \item[Diagonali con correzione di rango 1] Queste martici sono piuttosto interessanti e sono le prime di
- cui ci occuperemo. Sono appunto composte dalla somma di una matrice diagonale $D$ con una matrice di rango $1$
- $u\trasp u$;
-\end{description}
-
-\section{Il metodo di Lanczos}
-\subsection{Un'alternativa al metodo di Householder}
-Introduciamo ora un metodo alternativo a quello di Householder per la tridiagonalizzazione di una
-matrice simmetrica. \\
-Osserviamo che se $A$ è una matrice simmetrica in $\mat{\R}{n}$, allora esiste una matrice $T \in \mat{\R}{n}$
-tridiagonale simmetrica e una matrice unitaria $Q$ tali che
-\[
- A = QT\trasp Q
-\]
-e quindi anche
-\[
- AQ = QT
-\]
-Osserviamo ora solo la prima colonna di quest'uguaglianza, ovvero $AQe_1 = Aq_1 = QTe_1$. Se scriviamo
-\[
- T = \left[ \begin{array}{cccc}
-             \alpha_1 & \beta_1 & & \\
-             \beta_1  & \ddots  & \ddots & \\
-              & \ddots & \ddots & \beta_{n-1} \\
-              & & \beta_{n-1} & \alpha_n \\
-            \end{array} \right]
-\]
-Possiamo riscrivere la relazione come $Aq_1 = \alpha_1 q_1 + \beta_1 q_2$ e, una volta scelto $q_1$ vettore
-di norma $1$,
-si ha che $\trasp q_1 A q_1 = \alpha_1 \trasp q_1 q_1 + \beta_1 \trasp q_1 q_2 = \alpha_1$; possiamo quindi
-calcolare $\alpha_1$ da cui possiamo poi ricavare $\beta_1$ considerando che $\beta q_2 = Aq_1 - \alpha_1 q_1$
-e quindi
-\[
-\beta_1 = ||Aq_1 - \alpha_1 q_1||_2 \qquad \text{e} \qquad q_2 = \frac{Aq_1 - \alpha_1 q_1}{\beta_1}
-\]
-Ripetendo il procedimento con la seconda colonna (ora che conosciamo $q_2$) e poi continuando ancora si ottiene
-la regola generale
-\[
- \alpha_i = \trasp q_i A q_i \qquad \beta_i = ||Aq_i - \alpha_i q_i||_2 \qquad q_{i+1} = \frac{Aq_i - \alpha_i q_i}{\beta_i}
-\]
-e si può quindi ricostruire tutta la matrice $Q$ e la matrice $T$.
-
-Il costo computazionale dominante nello svolgimento di queste operazioni è dato dai prodotti matrice vettore
-che costano generalmente $O(n^2)$ e portano quindi ad un costo complessivo del metodo di $O(n^3)$ (lo stesso
-costo del metodo di Householder). \\
-Questo metodo non viene però generalemente utilizzato per calcolare la tridiagonalizzazione. Il motivo è che
-non è numericamente stabile, ed in generale la matrice $Q$ ottenuta non è ortogonale.
-
-\begin{os}
- A questo punto è naturale chiedersi che rapporto esiste fra la matrice calcolata con il metodo di Householder
- e quella calcolata con il metodo di Lanczos, al variare del primo vettore $q_1$ scelto all'inizio. La risposta
- che è possibile verificare è che scegliendo $q_1 = e_1$ le matrici differiscono per una matrice di fase.
-\end{os}
-
-Nonostante in generale il metodo non venga usato per la sua poca precisione esiste un particolare caso in cui
-risulta essere utile, ed è precisamente il seguente
-
-\subsection{Il quoziente di Rayleigh}
-Cominciamo con una definizione
-\begin{de}
- Si dice \emph{quoziente di Rayleigh di $A$ e $x$} e si indica con $\ray{A}{x}$ lo scalare
- \[
-  \ray{A}{x} = \frac{\trasp x A x}{\trasp xx}
- \]
-\end{de}
-Si può osservare che il minimo del quoziente di Rayleigh su tutto $\R^n$ corrisponde al modulo dell'autovalore minimo
-e il massimo al modulo dell'autovalore massimo. \\
-Osserviamo poi che preso un generico sottospazio $k$-dimensionale $S \subseteq \R^n$ abbiamo che se
-\[
- \lambda = \min_{x \in S} \ray{A}{x}
-\]
-allora $\lambda$ è l'autovalore di modulo minimo su un sottospazio di $\R^n$. Se $S$ è sufficientemente grande
-possiamo pensare di usare $\lambda$ come approssimazione di $\lambda_{min}$. \\
-Consideriamo $\{ q_1 , \ldots, q_k \}$ base del sottospazio $S$ e la matrice $Q$ con i vettori $q_i$ come colonne.
-Se prendiamo $x \in S$ allora
-\[
-x = \sum_{i=1}^{k} \alpha_i q_i
-\]
-e quindi se $\alpha = (\alpha_1, \ldots, \alpha_k)$ si ha $x = Q\alpha$.
-\[
-\frac{\trasp x A x}{\trasp xx} = \frac{\trasp \alpha \trasp Q A Q \alpha}{\trasp \alpha \trasp Q Q \alpha} =
- \frac{\trasp \alpha \trasp Q A Q \alpha}{\trasp \alpha \alpha}
-\]
-In conclusione è sufficiente minimizzare $\ray{\trasp Q A Q}{x}$ su $\R^k$, ed essendo $\trasp Q A Q$ una matrice
-$k \times k$ questo procedimento può risultare sensibilmente più economico rispetto all'idea originale. \\
-\begin{de}
- Data una matrice $A$ a coefficienti reali\footnote{definiamo il procedimento sui numeri reali solo per non appesantire
- la notazione, ma non c'è nessuna restrizione ad usarlo sui complessi.} e $x$ un vettore di $\R^n$.
- Si dice \emph{sottospazio di Krylov} di $A$ e $v$ di ordine $j$ e si indica con $\kryl{A}{v}{j}$ il sottospazio
- \[
-  S = \Span{v, Av, \ldots, A^{j-1}v}
- \]
-\end{de}
-Osserviamo che in generale $\dim{S} \leq j$. \\
-Siamo ora interessati ad utilizzare un sottospazio di Krylov come sottospazio $S$ con cui approssimare il nostro autovalore.
-Per farlo però dobbiamo trovare una base ortonormale di $S$; possiamo procedere calcolando la scomposizione \qr\ della
-matrice dei vettori che generano:
-\[
- \left[ \begin{array}{c|c|c|c}
-         \multirow{4}{*}{$v$} & \multirow{4}{*}{$Av$} & \multirow{4}{*}{$\ldots$} & \multirow{4}{*}{$A^{j-1}v$} \\
-  & & & \\
-  & & &  \\
-  & & & \\
-        \end{array} \right] = QR
-\]
-Si può mostrare che le prime $j$ colonne di $Q$ sono una base dello spazio $S$. Per farlo è sufficiente osservare
-che essendo $R$ triangolare superiore e $n \times j$ con $j < n$ deve avere le ultime $n - j$ righe nulle. \\
-Calcolando ora $\trasp Q A Q = (b_{ij})$ si ottiene un matrice $k\times k$ simmetrica. Osserviamo in particolare
-che se $i < j+1$ allora $b_{ij} = \trasp q_i A q_j$ e $Aq_j \in \Span{v, Av, \ldots , A^{j-1}v}$ per costruzione.
-In particolare $Aq_j$ è ortogonale a $q_i$ e quindi $b_{ij} = 0$. La simmetria della matrice ci permette
-di concludere che $B$ è tridiagonale, e si può verificare che è la matrice $k\times k$ generata dal metodo
-di Lanczos dopo $k-1$ iterazioni. \\
-A questo punto si può supporre di avere una buona approssimazione dell'autovalore di modulo massimo (anche se
-non c'è nessuna garanzia di averla davvero). Questa è di fatto l'unica applicazione del metodo di Lanczos,
-data la sua instabilità numerica.
-
-\section{Matrici con struttura di rango}\label{sec:struttura_di_rango}
-\subsection{Qualche esperimento con il metodo \qr}
-Abbiamo spesso incontrato durante il corso matrici diagonali con correzioni di rango 1,
-ovvero della forma $D + u\trasp u$. Queste
-sono molto interessanti perché si ritrovano in molti problemi computazionali e perché sono inverse
-di matrici tridiagonali. \\
-Ci domandiamo ora se esiste un metodo efficiente per applicare il Metodo~\qr\ a queste matrici.
-Sappiamo di poterle tridiagonalizzare con matrici di Householder con un costo computazionale $O(n^2)$, ma
-vogliamo provare ad applicare il \qr\ alla matrice piena senza dover necessariamente passare
-per il procedimento di tridiagonalizzazione\footnote{Abbiamo fatto notare nella Sezione~\ref{subsec:qr_costo} che
-in generale non è conveniente applicare il metodo ad una matrice piena; cercheremo però di trovare
-qualche via più breve per questa particolare classe di matrici.}. \\
-Possiamo osservare sperimentalmente che facendo qualche passo del metodo \qr\ (anche utilizzando lo shift)
-la struttura non viene completamente persa.
-
-Indichiamo con $\alpha_k$ il rango massimo delle sottomatrici quadrate strettamente contenute nella parte
-inferiore della matrice della $k$-esima iterazione del \qr, e con $\beta_k$, analogamente, il rango massimo
-di quelle superiori.
-
-\textbf{Esperimento 1}: Supponiamo di scegliere una matrice qualsiasi (complessa) e di applicare
-il metodo. Osserveremo che $\alpha_0 = \alpha_1 = \ldots = \alpha_k = 1$
-mentre $\beta_k$ cresce.
-
-\textbf{Esperimento 2}: Supponiamo ora di restringere la scelta ad una matrice con $D$ reale, ovvero
-$A = D + u\trasp u$ dove $D = \diag{\gamma_1, \ldots, \gamma_n}$ e i $\gamma_i$ sono tutti reali. Allora
-otterremo sperimentalmente $\alpha_i = 1$ e $\beta_i = 3$ per ogni $i \geq 2$.
-
-\textbf{Esperimento 3}: Analogamente a prima scegliamo $D$ complessa ma con elementi di modulo $1$\footnote{ovvero
-quella che abbiamo chiamato \emph{matrice di fase}.}. Otterremo ancora una volta $\alpha_i = 1$ e $\beta_i = 3 \:
-\forall i \geq 2$.
-
-Come mai i $\beta_k$ in questi ultimi due casi non crescono più di $3$? Cerchiamo di rispondere analizzando separatamente
-i vari casi.
-
-\subsection{Conservazione del rango nella parte triangolare inferiore}
-Ricordiamo dall'Osservazione~\ref{os:qr_simili_ak} che le matrici $A_k$ generate dal metodo \qr\ sono
-simili per trasformazione ortogonale. Se assumiamo che $R_k$ sia invertibile possiamo anche mostrare
-qualcosa di più
-\[
- A_{k+1} = R_k Q_k + \alpha_k I = R_k Q_k R_k R_k^{-1} + \alpha_k R_k R_k^{-1} = R_k A_k R_k^{-1}
-\]
-e quindi $A_{k+1}$ è simile ad $A_k$ tramite una trasformazione con una matrice triangolare superiore
-$R_k$. Questo ci assicura che nella parte inferiore della matrice $A_{k+1}$ il rango venga conservato
-(nel senso degli $\alpha_k = 1$).
-
-%% TODO: Spiegare perché il rango si conserva, da fare quando anche io lo avrò capito.
-
-\subsection{Limitazione del rango nella parte triangolare superiore}
-Ci occuperemo ora di spiegare perché il rango di tutte le sottomatrici strettamente contenute nella
-parte triangolare superiore è limitato superiormente da $3$, sia nel caso in cui $D$ sia una matrice
-reale, sia in quello in cui sia una matrice di fase. Consideriamo il primo e osserviamo cosa succede
-al primo passo del metodo. Poniamo $A_0 = D + u\trasp v$; si ha che:
-\[
- A_1 = \herm{Q_1} A_0 Q_1 = \herm{Q_1}(D+ u\trasp v)Q_1 = \herm{Q_1} DQ_1 + u_1\trasp{v_1}
-\]
-Ricordando che $D$ è reale si può concludere che $\herm{Q_1}DQ_1$ è hermitiana e diagonale;
-possiamo quindi scrivere il $k$-esimo passo del metodo in questo modo
-\[
- A_{k+1} = H_{k+1} + u_{k+1}\trasp v_{k+1}
-\]
-dove $H_{k+1}$ è una matrice hermitiana. In particolare si ha $H_{k+1} = A_{k+1} - u_{k+1}\trasp v_{k+1}$.
-Da quanto visto prima sappiamo che il rango nella parte inferiore di $H_{k}$ non può superare $2$.
-Ricordando che $H_k$ è hermitiana si può concludere che il rango è al massimo $2$ nella parte superiore.
-Osservando nuovamente che $A_k = H_k + u_k\trasp v_k$ si ottiene che il rango di $A_k$ nella parte superiore
-non può superare $3$ e si ha quindi la tesi.
-
-La stessa cosa si può mostrare che quando la matrice diagonale $D$ è una matrice di fase. Ci sono due
-procedure possibile per effettuare la dimostrazione; una è scrivere $D = QR$ ed osservare che data
-l'hermitianità di $D$ si ottiene che $R$ deve forzatamente essere una matrice di fase. Questa via
-richiede però tediosi passaggi molto contosi che quindi non svolgeremo. Un'alternativa più elegante
-è utilizzare il \emph{Nullity theorem}, dimostrato attorno al 1960. Questo però non fa parte del
-programma del corso e quindi non seguiremo neanche questa via.
-
-\subsection{Metodo \qr\ per il calcolo delle radici dei polinomi}
-Il motivo principale (e storicamente il primo) per cui ci si è interessati a queste matrici
-è stato la ricerca delle radici dei polinomi tramite l'uso delle matrici Companion. \\
-Le matrici Companion hanno una struttura come la seguente:
-\[
-F = \left[ \begin{array}{cccc}
-            0 & \cdots & \cdots & \times \\
-            1 & \ddots & & \vdots \\
-	       &\ddots & 0 & \times \\
-              & & 1 & \times
-           \end{array} \right]
-\]
-La matrice $F$ si può scrivere come una matrice unitaria più una correzione di rango $1$ nel seguente modo
-\[
-F = Q + u\trasp e_n = \left[ \begin{array}{cccc}
-                              0 & & & 1 \\
-                              1 & \ddots & & \\
-                               & \ddots & \ddots & \\
-                               & & 1 & 0 \\
-                             \end{array} \right]
-+ \left[ \begin{array}{cccc}
-                               \: &\:  &\:  & v_1 \\
-                               &  & & \vdots \\
-                               &  &  & \vdots \\
-                               & &  &  v_n \\
-                             \end{array} \right]
-\]
-e quindi sarebbe conveniente poter applicare delle ottimizzazioni al \qr\ sfruttando le osservazioni fatte
-sul rango delle matrici contenute nella parte inferiore e superiore della matrice che viene iterata.
-
-Supponendo di voler determinare le radici del polinomio $p(x) = p_0 + p_1x + \ldots + p_nx^n$ si ottiene
-la matrice
-\[
-F = \left[ \begin{array}{cccc}
-            0 & \cdots & \cdots & \frac{-p_0}{p_n}\\
-            1 & \ddots & & \vdots \\
-	       &\ddots & 0 & \vdots \\
-              & & 1 & \frac{p_{n-1}}{p_n}
-           \end{array} \right]
-\]
-In generale, affrontando il problema della ricerca degli autovalori, usiamo il teorema di Bauer-Fike (Teorema~\ref{te:BauerFike})
-per assicurarci di ottenere il risultato con una buona approssimazione. Questo però non è sempre sufficiente
-se $p_n$ è piccolo, perché la norma della matrice può crescere arbitrariamente. Come affrontare questo problema?
-
-Una soluzione può essere evitare di ricondursi ad un problema agli autovalori analizzando il seguente \emph{problema
-generalizzato agli autovalori}\footnote{In generale si dice \emph{problema generalizzato agli autovalori} un problema
-del tipo $\deter{A - \lambda B} = 0$. Se $B$ è invertibile questo può sempre essere ricondotto a trovare gli
-autovalori di $B^{-1}A$, ma non sempre è conveniente. }:
-\[
- \deter{F - \lambda I} = 0 \iff \deter{p_n F - \lambda( I + p_n e_n\trasp e_n)} = 0
-\]
-Parleremo dei possibili metodi per analizzare questo problema nel Capitolo~\ref{cap:autovalori_generalizzato}.
\ No newline at end of file
diff --git a/capitolo6.tex b/capitolo6.tex
deleted file mode 100644
index fa796d7..0000000
--- a/capitolo6.tex
+++ /dev/null
@@ -1,32 +0,0 @@
-\chapter{Problema generalizzato agli autovalori} \label{cap:autovalori_generalizzato}
-Vorremmo in questo capitolo analizzare\footnote{in realtà ci accontenteremo di dare uno sguardo
-al problema, perché non avremo tempo per approfondirlo veramente.} il problema generalizzato
-agli autovalori. In altre parole, date due matrici $A$ e $B$ vogliamo trovare i possibili
-$\lambda$ tali che
-\[
- \deter{ A - \lambda B} = 0
-\]
-
-\section{Il caso delle matrici Companion}
-Ispirati dal problema visto alla fine della Sezione~\ref{sec:struttura_di_rango} analizziamo
-il problema nel caso con $A$ in forma di Hessenberg e $B$ triangolare superiore. \\
-Per cercare di non peggiorare il condizionamento del problema sarebbe preferibile lavorare
-unicamente con trasformazioni unitarie. Cerchiamo di generare una sequenza di matrici
-$A_k$ e $B_k$ tali che
-\[
- \deter{A - \lambda B} = 0 \iff \deter{A_k - \lambda B_k} = 0 \quad \forall k \in \N
-\]
-Nel nostro caso vogliamo anche mantenere le proprietà di struttura della matrice, ovvero
-vorremmo che $A_k$ sia sempre in forma di Hessenberg e che $B_k$ sia sempre in forma
-triangolare superiore. Cerchiamo delle matrici unitarie $U_k$ e $Q_k$ in modo da definire
-la seguente successione
-\[
- \left\{\begin{array}{lcl}
-         A_{k+1} &=& U_kA_kQ_k \\
-         B_{k+1} &=& U_kB_kQ_k
-        \end{array} \right.
-\]
-e scegliendo opportunamente le matrici in modo che $A_k$ e $B_k$ siano rispettivamente
-Hessenberg e triangolare superiore. \\
-Se queste condizioni sono soddisfatte allora $A_k - \lambda B_k$ è singolare solo se
-$a_{jj}^{(k)} - \lambda b_{jj}^{(k)} = 0$ per qualche $j$, ovvero solo se $\lambda = \frac{a_{jj}^{(k)}}{b_{jj}^{(k)}}$
diff --git a/introduzione.tex b/introduzione.tex
deleted file mode 100644
index 5c40723..0000000
--- a/introduzione.tex
+++ /dev/null
@@ -1,64 +0,0 @@
-\chapter{Note per il lettore}
-
-\section{Introduzione}
-Questi appunti sono stati scritti durante il primo semestre dell'Anno Accademico 2009-2010,
-mentre seguivo le lezioni di \emph{Calcolo Scientifico} tenute dal prof.~Gemignani e le relative
-esercitazione tenute dal prof.~Bini. \\
-Ho scritto gli appunti in \LaTeXe\ durante il corso in modo da poterlo fare con calma, ma con
-una carenza (probabilmente) della visione ``globale'' che avrei avuto scrivendoli a posteriori.
-In ogni caso spero che possano essere utili a chi nei prossimi anni seguirà lo stesso corso, e sono
-disponibile ad integrare correzioni ed estensioni di chi avesse voglia di scriverle e spedirmele.
-La versione più aggiornata di questi appunti si può trovare sul repository Git che mantengo su Poisson
-(il server degli studenti presos l'Università di Pisa). Potete trovare le istruzioni per ottenere il
-sorgente \LaTeX\ sulla mia pagina Web (\href{http://poisson.phc.unipi.it/~robol/}{http://poisson.phc.unipi.it/\textasciitilde robol/}) e siete
-liberi di spedirmi qualsiasi patch e/o qualsiasi critica e commento all'indirizzo email
-\verb-leo@robol.it- oppure \verb-robol@poisson.phc.unipi.it-.
-
-\section{Struttura del documento}
-Questi appunti si dividono in due parti
-\begin{description}
- \item[Parte I -- Teoria] In questa parte sono riportate le lezioni del prof.~Gemignani che espongono
-  i concetti teorici principali del corso. Saranno generalmente (abbastanza) rigorose e precise;
- \item[Parte II -- Esercitazione] In questa seconda parte sono riportate le lezioni del prof.~Bini, divise
- per argomento. In queste lezioni abbiamo affrontato alcuni problemi che ci hanno portato ad implementare
- algoritmi ottenuti nella parte di teoria. Per ogni problema affrontato sono stati proposti vari modelli
- ed è stata fatta una trattazione sufficiementemente completa. Sono riportate in questa sezione sia
- la considerazioni sui modelli, che qualche teorema, che le implementazioni effettive degli algoritmi.
- Durante il corso del prof. Bini abbiamo usato il linguaggio Fortrano 95 e quindi gli esempi saranno
- esposti con quel linguaggio. Sto comunque valutando l'opportunità di esporre anche qualche algoritmo in
- qualche linguaggio diverso.
- \item[Parte III -- Appendice] Tutte le cose che in realtà non fanno strettamente parte del corso ma
- che potrebbero essere utili per comprendere meglio quello che si trova scritto in questi appunti. Ci
- si trova ad esempio, una breve introduzione al linguaggio Fortran che è usato nella parte II per
- implementare gli algoritmi.
-\end{description}
-
-\section{Notazione}
-Questa è una tabella riassuntiva dei simboli che sono dati per scontato nel testo, oppure che vengono
-spiegati e poi usati in seguito. Per la maggior parte sono ovvi, ma \ldots giusto per fissare la notazione!\\
-\begin{tabular}[t]{|l|p{12cm}|}
- \hline \hline
- $\dom{f}$ & Dominio della funzione $f$ \\
- $\imm{f}$ & Immagine della funzione $f$ \\
- $A \in \matr{\C}{m}{n}$ & $A$ è una matrice a coefficienti complessi di dimensione $m \times n$; la stessa
- notazione verrà usata al variare del campo \\
- $A = (a_{ii})$ & $A$ è una matrice i cui elementi valgono $a_{ii}$ al variare di $i$ da $1 \ldots n$ dove
- $n$ è la dimensione della matrice\\
- $\rk{A}$ & Il rango della matrice $A$ \\
- $\diag{a_1 \ldots a_n}$ & La matrice diagonale con gli elementi $a_1 \ldots a_n$ sulla diagonale. \\
- $\spe{A}$ & Lo spettro di $A$, ovvero $\{ \lambda \in \C \ | \ det(A - \lambda I) = 0 \}$ \\
- $\trasp A$ & La matrice $A$ trasposta , ovvero $\trasp A = (a_{ji})$ \\
- $\herm U$ & La matrice $U$ trasposata e coniugata \\
- $A^{+}$ & La pseudo inversa di $A$. Verrà definita esplicitamente nel Capitolo~\ref{ch:svd} \\
- $\cond{A}$ & Il condizionamento di $A$, solitamente inteso in norma 2, ovvero se $A$ è invertibile
- $||A||_2 \cdot ||A^{-1}||_2$. Dopo
- il Capitolo~\ref{ch:svd} intenderemo il condizionamento generailzzato, ovvero $||A||_2 \cdot ||A^{+}||_2$ \\
- \hline \hline
-\end{tabular} \\[15pt]
-In generale chiameremo $D$ le matrici diagonali, $Q$ ed $U$\footnote{Anche se talvolta anche le matrici triangolari
-superiori prenderanno il nome $U$.} le matrici unitarie, $R$ le matrici triangolari
-superiori, $L$ quelle traiangolari inferiori, $H$ quelle in forma di Hessenberg superiore e $T$ le matrici
-tridiagonali hermitiante. Questo varrà in generale, anche se non sono certo che riuscirò a mantenere sempre
-questo impegno. \\
-Ci sono probabilmente altri simboli che ho usato, non sono ovvi, eppure mi sono dimenticato di elencare qui.
-Potete segnalarmelo a \verb-robol@poisson.phc.unipi.it-.
diff --git a/title.tex b/title.tex
deleted file mode 100644
index 2770825..0000000
--- a/title.tex
+++ /dev/null
@@ -1,43 +0,0 @@
-\begin{titlepage}
-
-%%
-%% Chi sono io, e qualche correzione di posizione
-%% in modo da avere una prima pagina decente. In realtà
-%% ancora non mi soddisfa, ora si vedrà che fare.
-%%
-\rule{0pt}{40pt} %% Un po' di spazio dalla cima del foglio
- \flushright{\Large Appunti del corso di \\[3pt] \Huge \textbf{Calcolo Scientifico} } \\
- \raisebox{7pt}{\rule{\linewidth}{3pt}} %% E tiriamo un po' in su la linea in modo
-
-%% Un po' di spazio fa sempre bene
-\vspace{1cm}
-
-%% Qui dovrei mettere chi sono
-\begin{flushright}
- \textsc{Leonardo Robol} \\
- \texttt{<robol@poisson.phc.unipi.it>}  \\
- Pisa, \today
-\end{flushright}
-
-\vspace{3cm}
-
-%\begin{figure}[hb]
-%\begin{center}\includegraphics[]{julia.jpeg}\end{center}
-%\caption{Un insieme di Julia}
-%\end{figure}
-
-
-\begin{figure}[b]
-\begin{center}
-  \includegraphics[scale=0.2]{camosci/camoscio_100.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_50.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_25.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_15.png}
-  \includegraphics[scale=0.2]{camosci/camoscio_8.png}
- \caption{Una successione di camosci di 300 pixel di lato e di rango rispettivamente $100$, $50$, $25$, $15$ e $8$; le
- immagini sono state ridimensionate per stare nella pagina, e sono state realizzate con un programma
- identico a quello realizzato in laboratorio durante il corso.}
-\end{center}
-\end{figure}
-
-\end{titlepage}
diff --git a/varie/Bibliografia.tex b/varie/Bibliografia.tex
new file mode 100644
index 0000000..eca1a00
--- /dev/null
+++ b/varie/Bibliografia.tex
@@ -0,0 +1,32 @@
+\begin{thebibliography}{}
+ \bibitem{metnumalglin}{%
+  Dario Bini, Milvio Capovani, Ornella Menchi,
+  \emph{Metodi numerici per l'algebra lineare},
+   Zanichelli}
+
+ \bibitem{watkins}{%
+ David S. Watkins,
+ \emph{The Matrix Eigenvalue problem -- GR and Krylov Subspace Methods},
+ SIAM}
+
+ \bibitem{demmel}{%
+  James W. Demmel,
+  \emph{Applied Numeric Linear Algebra},
+  SIAM
+ }
+
+ \bibitem{lshort}{%
+  Tobias Oetiker, Hubert Partl, Irene Hyna and Elisabeth Schlegl,
+  \emph{The not so short introduction to \LaTeXe, or \LaTeXe in 139 minutes},
+  Scaricabile gratuitamente da Internet.
+ }
+
+ \bibitem{pgfmanual}{%
+  Till Tantau,
+ \emph{Tikz and PDF, Manual for version 1.10},
+ Institut f\"ur Theoretische Informatik
+ Universit\"at zu L\"ubeck,
+ October 26, 2006, \verb-http://sourceforge.net/projects/pgf-
+ }
+\end{thebibliography}
+
diff --git a/varie/introduzione.tex b/varie/introduzione.tex
new file mode 100644
index 0000000..5c40723
--- /dev/null
+++ b/varie/introduzione.tex
@@ -0,0 +1,64 @@
+\chapter{Note per il lettore}
+
+\section{Introduzione}
+Questi appunti sono stati scritti durante il primo semestre dell'Anno Accademico 2009-2010,
+mentre seguivo le lezioni di \emph{Calcolo Scientifico} tenute dal prof.~Gemignani e le relative
+esercitazione tenute dal prof.~Bini. \\
+Ho scritto gli appunti in \LaTeXe\ durante il corso in modo da poterlo fare con calma, ma con
+una carenza (probabilmente) della visione ``globale'' che avrei avuto scrivendoli a posteriori.
+In ogni caso spero che possano essere utili a chi nei prossimi anni seguirà lo stesso corso, e sono
+disponibile ad integrare correzioni ed estensioni di chi avesse voglia di scriverle e spedirmele.
+La versione più aggiornata di questi appunti si può trovare sul repository Git che mantengo su Poisson
+(il server degli studenti presos l'Università di Pisa). Potete trovare le istruzioni per ottenere il
+sorgente \LaTeX\ sulla mia pagina Web (\href{http://poisson.phc.unipi.it/~robol/}{http://poisson.phc.unipi.it/\textasciitilde robol/}) e siete
+liberi di spedirmi qualsiasi patch e/o qualsiasi critica e commento all'indirizzo email
+\verb-leo@robol.it- oppure \verb-robol@poisson.phc.unipi.it-.
+
+\section{Struttura del documento}
+Questi appunti si dividono in due parti
+\begin{description}
+ \item[Parte I -- Teoria] In questa parte sono riportate le lezioni del prof.~Gemignani che espongono
+  i concetti teorici principali del corso. Saranno generalmente (abbastanza) rigorose e precise;
+ \item[Parte II -- Esercitazione] In questa seconda parte sono riportate le lezioni del prof.~Bini, divise
+ per argomento. In queste lezioni abbiamo affrontato alcuni problemi che ci hanno portato ad implementare
+ algoritmi ottenuti nella parte di teoria. Per ogni problema affrontato sono stati proposti vari modelli
+ ed è stata fatta una trattazione sufficiementemente completa. Sono riportate in questa sezione sia
+ la considerazioni sui modelli, che qualche teorema, che le implementazioni effettive degli algoritmi.
+ Durante il corso del prof. Bini abbiamo usato il linguaggio Fortrano 95 e quindi gli esempi saranno
+ esposti con quel linguaggio. Sto comunque valutando l'opportunità di esporre anche qualche algoritmo in
+ qualche linguaggio diverso.
+ \item[Parte III -- Appendice] Tutte le cose che in realtà non fanno strettamente parte del corso ma
+ che potrebbero essere utili per comprendere meglio quello che si trova scritto in questi appunti. Ci
+ si trova ad esempio, una breve introduzione al linguaggio Fortran che è usato nella parte II per
+ implementare gli algoritmi.
+\end{description}
+
+\section{Notazione}
+Questa è una tabella riassuntiva dei simboli che sono dati per scontato nel testo, oppure che vengono
+spiegati e poi usati in seguito. Per la maggior parte sono ovvi, ma \ldots giusto per fissare la notazione!\\
+\begin{tabular}[t]{|l|p{12cm}|}
+ \hline \hline
+ $\dom{f}$ & Dominio della funzione $f$ \\
+ $\imm{f}$ & Immagine della funzione $f$ \\
+ $A \in \matr{\C}{m}{n}$ & $A$ è una matrice a coefficienti complessi di dimensione $m \times n$; la stessa
+ notazione verrà usata al variare del campo \\
+ $A = (a_{ii})$ & $A$ è una matrice i cui elementi valgono $a_{ii}$ al variare di $i$ da $1 \ldots n$ dove
+ $n$ è la dimensione della matrice\\
+ $\rk{A}$ & Il rango della matrice $A$ \\
+ $\diag{a_1 \ldots a_n}$ & La matrice diagonale con gli elementi $a_1 \ldots a_n$ sulla diagonale. \\
+ $\spe{A}$ & Lo spettro di $A$, ovvero $\{ \lambda \in \C \ | \ det(A - \lambda I) = 0 \}$ \\
+ $\trasp A$ & La matrice $A$ trasposta , ovvero $\trasp A = (a_{ji})$ \\
+ $\herm U$ & La matrice $U$ trasposata e coniugata \\
+ $A^{+}$ & La pseudo inversa di $A$. Verrà definita esplicitamente nel Capitolo~\ref{ch:svd} \\
+ $\cond{A}$ & Il condizionamento di $A$, solitamente inteso in norma 2, ovvero se $A$ è invertibile
+ $||A||_2 \cdot ||A^{-1}||_2$. Dopo
+ il Capitolo~\ref{ch:svd} intenderemo il condizionamento generailzzato, ovvero $||A||_2 \cdot ||A^{+}||_2$ \\
+ \hline \hline
+\end{tabular} \\[15pt]
+In generale chiameremo $D$ le matrici diagonali, $Q$ ed $U$\footnote{Anche se talvolta anche le matrici triangolari
+superiori prenderanno il nome $U$.} le matrici unitarie, $R$ le matrici triangolari
+superiori, $L$ quelle traiangolari inferiori, $H$ quelle in forma di Hessenberg superiore e $T$ le matrici
+tridiagonali hermitiante. Questo varrà in generale, anche se non sono certo che riuscirò a mantenere sempre
+questo impegno. \\
+Ci sono probabilmente altri simboli che ho usato, non sono ovvi, eppure mi sono dimenticato di elencare qui.
+Potete segnalarmelo a \verb-robol@poisson.phc.unipi.it-.
diff --git a/varie/title.tex b/varie/title.tex
new file mode 100644
index 0000000..2770825
--- /dev/null
+++ b/varie/title.tex
@@ -0,0 +1,43 @@
+\begin{titlepage}
+
+%%
+%% Chi sono io, e qualche correzione di posizione
+%% in modo da avere una prima pagina decente. In realtà
+%% ancora non mi soddisfa, ora si vedrà che fare.
+%%
+\rule{0pt}{40pt} %% Un po' di spazio dalla cima del foglio
+ \flushright{\Large Appunti del corso di \\[3pt] \Huge \textbf{Calcolo Scientifico} } \\
+ \raisebox{7pt}{\rule{\linewidth}{3pt}} %% E tiriamo un po' in su la linea in modo
+
+%% Un po' di spazio fa sempre bene
+\vspace{1cm}
+
+%% Qui dovrei mettere chi sono
+\begin{flushright}
+ \textsc{Leonardo Robol} \\
+ \texttt{<robol@poisson.phc.unipi.it>}  \\
+ Pisa, \today
+\end{flushright}
+
+\vspace{3cm}
+
+%\begin{figure}[hb]
+%\begin{center}\includegraphics[]{julia.jpeg}\end{center}
+%\caption{Un insieme di Julia}
+%\end{figure}
+
+
+\begin{figure}[b]
+\begin{center}
+  \includegraphics[scale=0.2]{camosci/camoscio_100.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_50.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_25.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_15.png}
+  \includegraphics[scale=0.2]{camosci/camoscio_8.png}
+ \caption{Una successione di camosci di 300 pixel di lato e di rango rispettivamente $100$, $50$, $25$, $15$ e $8$; le
+ immagini sono state ridimensionate per stare nella pagina, e sono state realizzate con un programma
+ identico a quello realizzato in laboratorio durante il corso.}
+\end{center}
+\end{figure}
+
+\end{titlepage}
ViewGit