Esercitazione: Zeri di funzione e sistemi lineari#
Warning
Lo svolgimento di questa esercitazione è obbligatoria per sostenere l’esame. L’esercitazione può essere consegnata in qualiasi momento e NON è richiesto di consegnarla entro una specifica data. L’unico vincolo è che dovrà essere consegnata su Virtuale prima del proprio esame scritto, poiché i risultati di tale esercitazione saranno discussi durante l’esame orale.
L’esercitazione dovrà essere svolta eseguendo tutte le prove richieste, e i risultati dovranno essere collezionati e brevemente commentati tramite una delle due seguenti modalità:
Un documento PDF (o Word) contenente uno screenshot dello snippet di codice, i risultati associati a tale snippet, e un commento a tali risultati.
Un Notebook di Python come quelli utilizzati a lezione, con celle di codice contenenti le soluzioni agli esercizi, alternate ad un breve commento degli esercizi stessi. Tuttavia, i codici NON devono essere lanciati durante l’esame, ma lo studente deve presentarsi all’esame con il programma già eseguito e con l’output delle celle ancora visibile.
Presentarsi all’esame con codice completo ma ancora da eseguire o senza una versione PDF con risultati già presenti, può compromettere la riuscita dell’esame orale.
Zeri di funzione#
Utilizzare il metodo di bisezione, il metodo delle iterazioni di punto fisso e il metodo di Newton per il calcolo dello zero della una funzione \(f(x) = e^x - x^2 \), la cui soluzione è \(x^* = -0.7034674\). Per il metodo delle iterazioni di punto fisso considerare come funzione \(g(x)\):
\(g(x)=x-f(x)e^{x/2}\)
\(g(x)=x-f(x)e^{-x/2}\)
Per analizzare i risultati utilizzare strumenti grafici e tabelle. In particolare:
Disegnare il grafico della funzione \(f(x)\) nell’intervallo \(I = [-1, 1]\) e verificare che \(x^*\) sia lo zero di \(f(x)\) in \([-1, 1]\).
Confrontare l’accuratezza delle soluzioni trovate e il numero di iterazioni effettuate dai solutori.
Graficare per ogni metodo l’errore assoluto \(|x_k - x^*|\) ad ogni iterazione k.
Risoluzione di sistemi lineari#
Creato un problema test di dimensione variabile \(n\) la cui soluzione esatta sia un vettore \(x\) generato a piacere e \(y\) il termine noto ottenuto moltiplicando la matrice \(A\) per la soluzione \(x\):
Calcolare il numero di condizione tramite opportuna funzione Python
Risolvere il sistema lineare \(Ax = y\) con la fattorizzazione LU o Cholesky.
Calcolare l’ errore relativo rispetto alla soluzione esatta. Variare la dimensione \(n\) del sistema e fare un grafico dell’errore al variare di \(n\) e uno del numero di condizione al variare di \(n\).
Problemi test da utilizzare:
Una matrice di numeri casuali \(A\) generata con la funzione
np.random.randn
.Una matrice di Hilbert di dimensione \(n\) (con \(n\) variabile fra 2 e 15) utilizzando la funzione
scipy.linalg.hilb
.
Minimi quadrati#
Assegnata una matrice \(A\) di numeri casuali (funzione np.random.normal
) di dimensione \(m \times n\), \(m>n\) fissati, scegliere un vettore \(\alpha\) (per esempio con elementi costanti) come soluzione esatta per creare un problema test e calcolare il termine noto \(y=A \alpha + e\), dove \(e\) è un vettore di numeri casuali generato con la funzione precedente (utilizzare una varianza in \([0.01,0.1]\)). Quindi risolvere il problema di minimi quadrati:
sia utilizzando le equazioni normali che la SVD di A. Inoltre:
Confrontare le due soluzioni.
Calcolare la norma due del vettore dei residui in entrambi i casi.