appunti di laboratorio di calcolo numerico con matlabluca.paulon/matlab.pdf · infine realizzare il...
TRANSCRIPT
Ing. Luca Paulon ([email protected] )
Appunti di Laboratorio di Calcolo Numerico
con Matlab
Ing. Luca Paulon ([email protected] )
1 Ing. Luca Paulon - Laboratorio di Calcolo Numerico
RiferimentiRiferimentiRiferimentiRiferimenti
� [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
Ing. Luca Paulon - Laboratorio di Calcolo Numerico2
� [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
SommarioSommarioSommarioSommario� Day1Introduzione a Matlab: riferimenti; ambiente di sviluppo (IDE) di script. Tipi di variabili. Variabili predefinite. Variabili complesse.
Esempi.
� Day2Operatori puntuali e funzioni vettoriali. Istruzione linspace. Realizzazione di una function.
Ing. Luca Paulon - Laboratorio di Calcolo Numerico3
una function.Esempi.
� Day3Realizzazione di una function. Output su schermo (disp). Istruzioni condizionali (if-else-end). Operatori relazionali e operatori logici. Cicli enumerativi (do-end). Ciclo while.
Esempi.
� Day4Matrici
� Day5Sistemi Lineari, metodi iterativi di Jacobi e Gauss-Seidel
� Day6
Ing. Luca Paulon - Laboratorio di Calcolo Numerico4
� Day6Compito in classe
� Day7Correzione compiti e illustrazione di alcune domande di esame.
� Day8Applicazioni Matlab: demo e toolbox.
� Day9Integrazione numerica (approssimazione di integrali)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico5
� Day10Differenziazione numerica (approssimazione di derivate)
� Day11Correzione compiti e illustrazione di alcune domande di esame.
� Appendice 0
Concetti fondamentali di Calcolo Numerico
� Appendice 1
Esempio di applicazione in matlab
Ing. Luca Paulon - Laboratorio di Calcolo Numerico6
� Appendice 2
Gpu Computing
Day1: IDE di Day1: IDE di Day1: IDE di Day1: IDE di MatlabMatlabMatlabMatlab
Ing. Luca Paulon - Laboratorio di Calcolo Numerico7
Day1: IDE Day1: IDE Day1: IDE Day1: IDE ���� WorkspaceWorkspaceWorkspaceWorkspace
Ing. Luca Paulon - Laboratorio di Calcolo Numerico8
Day1: Variables Types
Ing. Luca Paulon - Laboratorio di Calcolo Numerico9
Day1: variabili predefinite
Ing. Luca Paulon - Laboratorio di Calcolo Numerico10
Day1: variabili complesse
Esempio
Ing. Luca Paulon - Laboratorio di Calcolo Numerico11
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');
Ing. Luca Paulon - Laboratorio di Calcolo Numerico12
Xlabel('Tempo');Ylabel('Ampiezza ');plot(x, func1);
subplot(2,1,2);title('funzione2');Xlabel('Tempo');Ylabel('Ampiezza ');plot(x, func2);
Day2 - Day3
Ing. Luca Paulon - Laboratorio di Calcolo Numerico13
Day2 - Day3
Ing. Luca Paulon - Laboratorio di Calcolo Numerico14
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….’
Ing. Luca Paulon - Laboratorio di Calcolo Numerico15
0 100 200 300 400 500 600 700 800 900 1000-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
3: inserisci il codice per il test dello script
4: esegui lo script
Day2-Day3
Dalla CommandWindow…
ESECUZIONE DELLO SCRIPT – OPZIONE1(dalla command window di matlab)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico16
Day3
Esempio. Il metodo di bisezione [4]
Algoritmo
Ripeti il seguente ragionamento fino a che le condizioni di arresto non sono
soddisfatte:
Ing. Luca Paulon - Laboratorio di Calcolo Numerico17
Day3
Esempio. Il metodo di bisezione [4]. L’errore (di troncamento)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico18
Day3
del metodo di bisezione [4]
Ing. Luca Paulon - Laboratorio di Calcolo Numerico19
Implementazionedel metodo di bisezione [4]
Day3
del metodo di bisezione [4]
Ing. Luca Paulon - Laboratorio di Calcolo Numerico20
Implementazionedel metodo di bisezione [4]
Day3
Implementazione del metodo di bisezione [4]
Ing. Luca Paulon - Laboratorio di Calcolo Numerico21
Day3 Esempio. Il metodo di bisezione [4]. Applicazione ad un caso specifico
Ing. Luca Paulon - Laboratorio di Calcolo Numerico22
Day3 Esempio. Il metodo di bisezione [4]. Applicazione ad un caso specifico
Ing. Luca Paulon - Laboratorio di Calcolo Numerico23
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
Ing. Luca Paulon - Laboratorio di Calcolo Numerico24
Esempio di uso di tic e toc
Dal prompt dei comandi:
>> tic; surf(peaks(40)); toc
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
Ing. Luca Paulon - Laboratorio di Calcolo Numerico25
caso specifico f(x) in figura 2.2 tale da graficare in uscita gli andamenti dell’ errore relativo e assoluto per tolleranze diverse.
Day4 - Matrici
Definizione di matrici1. ‘manuale’2. attraverso i comandi zeros, ones, diag
Salvataggio/caricamento matrice di dati
Ing. Luca Paulon - Laboratorio di Calcolo Numerico26
Definizione di matrici in singola precisione
Day4
% Esempio:
clear;n=10;B = 2*diag(ones(1,n));
Ing. Luca Paulon - Laboratorio di Calcolo Numerico27
B = 2*diag(ones(1,n));C =diag(ones(1,n-1),1);D = diag(ones(1,n-1),-1);
A = B – C – D
Day4
% Calcolo del determinante
det (A)
% Calcolo della norma 1, 2, infinito
Ing. Luca Paulon - Laboratorio di Calcolo Numerico28
nrm1 = norm (A,1)nrm2 = norm (A,2)nrmInf = norm (A,inf)
Day4 % Calcolo dei numeri di condizionamento 1,2, infinito
C1 = cond (A,1)C2 = cond (A,2)Cinf = cond (A,inf)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico29
% Calcolo degli autovalori e degli autovettori
[ V, W ] = eig(A);
% Calcolo del raggio spettrale
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
Ing. Luca Paulon - Laboratorio di Calcolo Numerico30
% Verifica che la matrice degli autovettori diagonalizza A
Vinv = inv(V);e = W–Vinv *A*VnormErr = norm ( e, 2)
% 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)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico31
Esercizio: realizzare un test più articolato
Day5 – Sistemi Lineari
il metodo di Gauss-Seidel (vedi script gaussseidel.m)
Esercizio: realizzare un test semplice del metodo di Gauss Seidel
Ing. Luca Paulon - Laboratorio di Calcolo Numerico32
Esercizio: confrontare i due metodi
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:
Ing. Luca Paulon - Laboratorio di Calcolo Numerico33
Day 7 – Correzione compiti e
illustrazione delle domande di esame
� http://www.dmmm.uniroma1.it/~paulon/matlabesame.pdf
Ing. Luca Paulon - Laboratorio di Calcolo Numerico34
GUI = Graphics UserInterface
Day8 – Applicazioni Matlab
SCRIPT
CommandWindow
35
SCRIPT
Dettaglio per una applicazione Matlab
Modello a “strati” (layers) di un sistema composto da utente, hardware e software
Day8 – Applicazioni Matlab - DemoEsempio: Discrete Time Fourier transform. Nella command window digitare sigdemo1
36
Day8 – Applicazioni Matlab - DemoEsempio: 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 - ToolboxEsempio di elaborazione di un segnale con il toolbox SPTool
INPUTELABORAZIONE (FILTRAGGIO) OUTPUT
39
Filtro “passa basso”
Day8 - Applicazioni Matlab - ToolboxEsempio2: il toolbox symbolic
Ing. Luca Paulon - Laboratorio di Calcolo Numerico40
Polinomio di Taylor
Day 9 – Integrazione numerica
Ing. Luca Paulon - Laboratorio di Calcolo Numerico41
Day 9 – Integrazione numericaEsempio 1: distribuzione di probabilità normale (o gaussiana)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico42
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)
Day 9 – Integrazione numerica Il metodo dei trapezi Il metodo dei trapezi Il metodo dei trapezi Il metodo dei trapezi (semplice e composito)
cioè
Ing. Luca Paulon - Laboratorio di Calcolo Numerico43
Day 9 – Integrazione numerica Il metodo dei trapezi Il metodo dei trapezi Il metodo dei trapezi Il metodo dei trapezi (semplice e composito)
Implementazione in matlab (vedi [4]) del metodo dei trapezi
Ing. Luca Paulon - Laboratorio di Calcolo Numerico44
Day 9 – Integrazione numerica Il metodo del punto medio o rettangoli Il metodo del punto medio o rettangoli Il metodo del punto medio o rettangoli Il metodo del punto medio o rettangoli (semplice e composito)
cioè
Ing. Luca Paulon - Laboratorio di Calcolo Numerico45
Day 9 – Integrazione numerica
Implementazione in matlab (vedi [4]) del metodo composito del punto medio (rettangoli)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico46
Day 9 – Integrazione numerica Il metodo diIl metodo diIl metodo diIl metodo di Simpson Simpson Simpson Simpson (semplice e composito)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico47
Day 9 – Integrazione numerica
Implementazione in matlab del metodo di Simpson ( vedi [4] )
Ing. Luca Paulon - Laboratorio di Calcolo Numerico48
Day 9 – Integrazione numerica
Ing. Luca Paulon - Laboratorio di Calcolo Numerico49
Day 10 – Differenziazione numerica(approssimazione delle derivate)
Ing. Luca Paulon - Laboratorio di Calcolo Numerico50
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.
Day 10 – Differenziazione numerica(approssimazione delle derivate)
Esempio 1
Ing. Luca Paulon - Laboratorio di Calcolo Numerico51
Day 10 – Differenziazione numericaIl metodo della differenza finita in avanti.Il metodo della differenza finita in avanti.Il metodo della differenza finita in avanti.Il metodo della differenza finita in avanti.
Ing. Luca Paulon - Laboratorio di Calcolo Numerico52
Implementazione in matlab (realizzare uno script per esercizio)
…
Day 10 – Differenziazione numericaIl metodo della differenza finita all’indietro.Il metodo della differenza finita all’indietro.Il metodo della differenza finita all’indietro.Il metodo della differenza finita all’indietro.
Ing. Luca Paulon - Laboratorio di Calcolo Numerico53
Implementazione in matlab (realizzare uno script per esercizio)
…
Day 10 – Differenziazione numericaIl metodo della differenza finita Il metodo della differenza finita Il metodo della differenza finita Il metodo della differenza finita intermedia.intermedia.intermedia.intermedia.
Ing. Luca Paulon - Laboratorio di Calcolo Numerico54
Implementazione in matlab (realizzare uno script per esercizio)
…
Day 10 – Differenziazione numerica(approssimazione delle derivate)
Esempio 2
Ing. Luca Paulon - Laboratorio di Calcolo Numerico55
Day 10 – Differenziazione numerica(approssimazione delle derivate)
Svolgimento
Ing. Luca Paulon - Laboratorio di Calcolo Numerico56
(usare gli script realizzati)
Day 11 – Correzione compiti e
illustrazione delle domande di esame
� http://www.dmmm.uniroma1.it/~paulon/matlabesame.pdf
Ing. Luca Paulon - Laboratorio di Calcolo Numerico57
Appendice 0 [vedi 4]
Ing. Luca Paulon - Laboratorio di Calcolo Numerico58
Appendice 0 [vedi 4]
Ing. Luca Paulon - Laboratorio di Calcolo Numerico59
Appendice 0 [vedi 4]
Ing. Luca Paulon - Laboratorio di Calcolo Numerico60
Appendice 0
Ing. Luca Paulon - Laboratorio di Calcolo Numerico61
Appendice 0
Ing. Luca Paulon - Laboratorio di Calcolo Numerico62
Appendice 0
Ing. Luca Paulon - Laboratorio di Calcolo Numerico63
Appendice 0
Ing. Luca Paulon - Laboratorio di Calcolo Numerico64
Appendice 0
Ing. Luca Paulon - Laboratorio di Calcolo Numerico65
Appendice 0
Ing. Luca Paulon - Laboratorio di Calcolo Numerico66
Appendice 1: un semplice esperimento con Matlab
spike1
Realizzazione di uno script per la simulazione di una tensione sinusoidale disturbata dalla presenza di due o più “spike”
spike2
5
10
15
Matlab
Ing. Luca Paulon - Laboratorio di Calcolo Numerico67
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-15
-10
-5
0
Appendice 2: GPU computing
Ing. Luca Paulon - Laboratorio di Calcolo Numerico68
Appendice 3
Ing. Luca Paulon - Laboratorio di Calcolo Numerico69
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 )
Ing. Luca Paulon - Laboratorio di Calcolo Numerico70
durante le lezioni in laboratorio )