Appunti di Laboratorio di Calcolo Numerico con Matlab Ing. Luca Paulon (paulon@dmmm.uniroma1.it ) 1
Riferimenti [1] Matlab help [2] MathWork web site [3] Manualetto di Matlab, [4] Calcolo Scientifico (Quarteroni, 4a edizione, Springer) [5] http://www.dmmm.uniroma1.it/~paulon/matlab.pdf [6] http://www.dmmm.uniroma1.it/~paulon/matlab.zip [7] http://www.dmmm.uniroma1.it/~paulon/esercizi.pdf [8] Esercizi di Calcolo Numerico (Gori, Lo Cascio, Pitolli) Edizioni Kappa 2
Sommario Day1 Introduzione a Matlab: riferimenti; ambiente di sviluppo (IDE) di script. Tipi di variabili. Variabili predefinite. Variabili complesse. Esempi. Day2 Operatori puntuali e funzioni vettoriali. Istruzione linspace. Realizzazione di una function. Esempi. Day3 Realizzazione di una function. Output su schermo (disp). Istruzioni condizionali (if-else-end). Operatori relazionali e operatori logici. Cicli enumerativi (do-end). Ciclo while. Esempi. 3
Day4 Matrici Day5 Sistemi Lineari, metodi iterativi di Jacobi e Gauss-Seidel Day6 Compito in classe Day7 Correzione compiti e illustrazione di alcune domande di esame. 4
Day8 Applicazioni Matlab: demo e toolbox. Day9 Integrazione numerica (approssimazione di integrali) Day10 Differenziazione numerica (approssimazione di derivate) Day11 Correzione compiti e illustrazione di alcune domande di esame. 5
Appendice 0 Concetti fondamentali di Calcolo Numerico Appendice 1 Esempio di applicazione in matlab Appendice 2 Gpu Computing 6
Day1: IDE di Matlab 7
Day1: IDE Workspace 8
Day1: Variables Types 9
Day1: variabili predefinite 10
Day1: variabili complesse Esempio 11
Day2-Day3: figure con grafici di funzioni N=50; x=linspace(0,1,n); func1=randn(n,1); func2=randn(n,1); subplot(2,1,1); title('funzione1'); Xlabel('Tempo'); Ylabel('Ampiezza '); plot(x, func1); subplot(2,1,2); title('funzione2'); Xlabel('Tempo'); Ylabel('Ampiezza '); plot(x, func2); 12
Day2 - Day3 13
Day2 - Day3 14
Day2 - Day3 (versione di matlab 2008 o superiore) ESECUZIONE DELLO SCRIPT OPZIONE2 (dall editor di matlab) 1: richiamare il seguente menu a discesa dalla toolbar dell editor di matlab 2: clicca su Edit Run config. 3: inserisci il codice per il test dello script 1 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6 4: esegui lo script -0.8-1 0 100 200 300 400 500 600 700 800 900 1000 15
Day2-Day3 ESECUZIONE DELLO SCRIPT OPZIONE1(dalla command window di matlab) Dalla CommandWindow 16
Day3 Esempio. Il metodo di bisezione [4] Algoritmo Ripeti il seguente ragionamento fino a che le condizioni di arresto non sono soddisfatte: 17
Day3 Esempio. Il metodo di bisezione [4]. L errore (di troncamento) 18
Day3 Implementazione de el metodo di bisezione [4] 19
Day3 Implementazione de el metodo di bisezione [4] 20
Day3 Implementazione del metodo di bisezione [4] 21
Day3 Esempio. Il metodo di bisezione [4]. Applicazione ad un caso specifico 22
Day3 Esempio. Il metodo di bisezione [4]. Applicazione ad un caso specifico 23
Day3 Esercizio per casa. Eseguire il debug dell implementazione del metodo di bisezione per correggere errori o apportare modifiche. Infine realizzare il profiling temporale del metodo di bisezione usando i comandi tic e toc. Esempio di uso di tic e toc Dal prompt dei comandi: >> tic; surf(peaks(40)); toc 24
Day4 Verifica dell Esercizio per casa relativo all implementazione del metodo di bisezione. Esercizio: scrivere uno script per il test della funzione bisection per il caso specifico f(x) in figura 2.2 tale da graficare in uscita gli andamenti dell errore relativo e assoluto per tolleranze diverse. 25
Day4 - Matrici Definizione di matrici 1. manuale 2. attraverso i comandi zeros, ones, diag Salvataggio/caricamento matrice di dati Definizione di matrici in singola precisione 26
Day4 % Esempio: clear; n=10; B = 2*diag(ones(1,n)); C =diag(ones(1,n-1),1); D = diag(ones(1,n-1),-1); A = B C D 27
Day4 % Calcolo del determinante det (A) % Calcolo della norma 1, 2, infinito nrm1 = norm (A,1) nrm2 = norm (A,2) nrminf = norm (A,inf) 28
Day4 % Calcolo dei numeri di condizionamento 1,2, infinito C1 = cond (A,1) C2 = cond (A,2) Cinf = cond (A,inf) % Calcolo degli autovalori e degli autovettori [ V, W ] = eig(a); % Calcolo del raggio spettrale 29 rho = max (abs(w))
Day4 % Calcolo del terzo autovalore e del corrispondente autovettore lambda3 = W(3,3) v3 = V(:,3) % Verifica che la matrice degli autovettori diagonalizza A Vinv = inv(v); e = W Vinv *A*V normerr = norm ( e, 2) 30 % Verifica che la matrice degli autovettori diagonalizza A ordineerr = normerr / eps
Day5 Sistemi Lineari Il metodo di Jacobi (vedi script jacobi.m) Esercizio: test del metodo di jacobi (vedi jacobi_test.m) Esercizio: realizzare un test più articolato 31
Day5 Sistemi Lineari il metodo di Gauss-Seidel (vedi script gaussseidel.m) Esercizio: realizzare un test semplice del metodo di Gauss Seidel Esercizio: confrontare i due metodi 32
Day6 Compito in classe sui sistemi lineari Tradurre in linguaggio matlab le soluzioni degli esercizi 2.20 e 2.30 riportate nel file esercizi.pdf. Scrivere ogni soluzione in script diversi. NB: la teoria è fondamentale, ad esempio sapere per i metodi iterativi di Jacobi e Gauss-Seidel: 33
Day 7 Correzione compiti e illustrazione delle domande di esame http://www.dmmm.uniroma1.it/~paulon/matlabesame.pdf 34
Day8 Applicazioni Matlab CommandWindow GUI = Graphics User Interface SCRIPT Dettaglio per una applicazione Matlab Modello a strati (layers) di un sistema composto da utente, hardware e software 35
Day8 Applicazioni Matlab - Demo Esempio: Discrete Time Fourier transform. Nella command window digitare sigdemo1 36
Day8 Applicazioni Matlab - Demo Esempio: Discrete Time Fourier transform. 37
Day8 Applicazioni Matlab - Toolbox Esempio: Signal Processing (SP) Toolbox. Digitare SPtool nella command line 38 MainWindow (finestra principale) della GUI del toolbox SPtool
Day8 Applicazioni Matlab - Toolbox Esempio di elaborazione di un segnale con il toolbox SPTool INPUT ELABORAZIONE (FILTRAGGIO) OUTPUT Filtro passa basso 39
Day8 - Applicazioni Matlab - Toolbox Esempio2: il toolbox symbolic Polinomio di Taylor 40
Day 9 Integrazione numerica 41
Day 9 Integrazione numerica Esempio 1: distribuzione di probabilità normale (o gaussiana) L area rappresenta la probabilità che il numero S (per esempio si pensi ad S come l altezza in metri di una persona) sia compreso nell intervallo [1.8, 1.9]. Problema: calcolare la suddetta probabilità (risolvendo numericamente l integrale definito) 42
Day 9 Integrazione numerica Il metodo dei trapezi (semplice e composito) cioè 43
Day 9 Integrazione numerica Il metodo dei trapezi (semplice e composito) Implementazione in matlab (vedi [4]) del metodo dei trapezi 44
Day 9 Integrazione numerica Il metodo del punto medio o rettangoli (semplice e composito) cioè 45
Day 9 Integrazione numerica Implementazione in matlab (vedi [4]) del metodo composito del punto medio (rettangoli) 46
Day 9 Integrazione numerica Il metodo di Simpson (semplice e composito) 47
Day 9 Integrazione numerica Implementazione in matlab del metodo di Simpson ( vedi [4] ) 48
Day 9 Integrazione numerica 49
Day 10 Differenziazione numerica (approssimazione delle derivate) In generale, e quindi anche nel caso della differenziazione numerica, ci possono essere diversi metodi che si possono usare per i calcoli, ciascuno con le proprie ipotesi di applicabilità e i propri vantaggi e svantaggi, che occorre conoscere bene. Sperimentalmente (cioè attraverso le implementazioni, per esempio in matlab) si procede, fissata una applicazione da sviluppare, nel confronto di essi considerando tempi di esecuzione, errore di approssimazione, etc. Infine si decide il migliore, se ne esiste uno, da utilizzare. 50
Day 10 Differenziazione numerica (approssimazione delle derivate) Esempio 1 51
Day 10 Differenziazione numerica Il metodo della differenza finita in avanti. Implementazione in matlab (realizzare uno script per esercizio) 52
Day 10 Differenziazione numerica Il metodo della differenza finita all indietro. Implementazione in matlab (realizzare uno script per esercizio) 53
Day 10 Differenziazione numerica Il metodo della differenza finita intermedia. Implementazione in matlab (realizzare uno script per esercizio) 54
Day 10 Differenziazione numerica (approssimazione delle derivate) Esempio 2 55
Day 10 Differenziazione numerica (approssimazione delle derivate) Svolgimento (usare gli script realizzati) 56
Day 11 Correzione compiti e illustrazione delle domande di esame http://www.dmmm.uniroma1.it/~paulon/matlabesame.pdf 57
Appendice 0 [vedi 4] 58
Appendice 0 [vedi 4] 59
Appendice 0 [vedi 4] 60
Appendice 0 61
Appendice 0 62
Appendice 0 63
Appendice 0 64
Appendice 0 65
Appendice 0 66
Appendice 1: un semplice esperimento con Matlab Realizzazione di uno script per la simulazione di una tensione sinusoidale disturbata dalla presenza di due o più spike 15 spike1 spike2 Matlab 10 5 0-5 -10-15 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 67
Appendice 2: GPU computing 68
Appendice 3 69
Ringraziamenti % Il dipartimento Me.Mo.Mat., il Laboratorio di Informatica ed in particolare la Prof.ssa F. Pitolli % Tutti gli studenti del corso ( per la pazienza e la dedizione dimostrate durante le lezioni in laboratorio ) 70