LUISS Corso di Metodi matematici per economia e finanza. Prof. F. Gozzi Lezione del 9/11/2009 Elementi di MATLAB- Prof.ssa G. Rotundo 1 Testi di riferimento MATLAB – manuale di riferimento I. Capuzzo Dolcetta, M. Falcone, L’analisi al calcolatore, Zanichelli, ISBN 88 – 08 – 03904 - 8 J. Stoer, Introduzione all’analisi numerica, Zanichelli ed., 1974 2 Matlab 3 Che cos'è Matlab? Matlab è un linguaggio software per il calcolo scientifico che integra funzioni di calcolo matematico, visualizzazione grafica e programmazione. Esso è implementato in un potente ambiente di lavoro ad interfaccia grafica, avente una struttura modulare che ne rende notevolmente espandibili le funzionalità. Help: accesso All’avvio si apre una interfaccia utente: al manuale di istruzioni La linea che inizia con >> si chiama linea di comando. Dare un comando a MATLAB significa scrivere istruzioni appropriate su questa linea e premere il tasto invio. 4 Come scrivere ‘istruzioni appropriate’ sulla linea di comando di MATLAB? In generale: 1. Un insieme di ‘istruzioni appropriate’, scritte in un apposito linguaggio, costituisce un comando MATLAB. 2. Il linguaggio è un insieme di regole formali che consente di scrivere i comandi 3. Si possono scrivere più istruzioni nella stessa riga separandole con ; 4. Le istruzioni sono dette “esecutive” perché indicano a MATLAB le operazioni da eseguire e sono “interpretate”, cioè tradotte in codice macchina ed eseguite immediatamente. Vediamo come utilizzare MATLAB come calcolatrice avanzata 5 Matlab come calcolatrice … E’la modalità di impiego più semplice per valutare espressioni numeriche, ad esempio per calcolare 4 + √ 2 - sin(0.2 π)2 + e2 è sufficiente digitare in Command window: 4+sqrt(2) – sin(0.2*pi)^2 + exp(2) e inviare. Il risultato viene scritto nella variabile ans (abbreviazione di answer). Esempio: Istruzioni digitate dall’utente Risultato stampato da MATLAB. ‘ans=‘ è l’abbreviazione di ‘answer’. 6 Problema: come utilizzare valori già calcolati? • MATLAB non permette di modificare comandi già eseguiti; • Possono essere richiamati sulla riga di comando premendo ‘freccia su’ più volte, oppure cliccando sul relativo comando nella finestra ‘Command history’ (se appare’); • Oppure si possono salvare i valori calcolati nelle variabili: •Una variabile è rappresentata da un nome e può cambiare il valore ad essa associato. •Per assegnare il valore ad una variabile bisogna usare una espressione del tipo variabile= espressione •L’espressione viene calcolata ed il risultato viene immesso nella variabile. 7 Definizione di variabili E’ possibile definire variabili (ed anche espressioni non numeriche più complesse) ed ultilizzarle per ulteriori calcoli. Esempio: assegnare un valore alla variabile a, uno alla variabile b ed utilizzarli per calcolare il prodotto: Istruzioni digitate dall’utente Risultato stampato da MATLAB. ‘ans=‘ è l’abbreviazione di ‘answer’. N.B.: se il comando è seguito da ; il calcolo è effettuato, ma non viene stampato nulla 8 Esercizio Scrivere le istruzioni per calcolare la somma dei numeri 100, 10, 2 e dividerla per tre. Possibile svolgimento: a=100+10+2; b=a/3; 9 Il Workspace Ogni variabile definita in questo modo viene conservata in memoria, nel Workspace. Per vedere una lista delle variabili definite, digitare whos, oppure selezionare workspace. Per cancellare una variabile, ad esempio a, digitare clear a. 10 Come salvare il risultato dei calcoli? Lettura e scrittura su file. Mediante i comandi load e save è possibile salvare su file le variabili del workspace. • load nomefile variabile1 variabile2…. Carica dal file nomefile.mat le variabili elencate. • save nomefile variabile1 variabile2…. Scrive nel file nomefile.mat le variabili elencate. • load nomefile carica tutte le variabili in nomefile. • save nomefile salva tutto il workspace in nomefile.mat. 11 I numeri MATLAB fa differenza tra 1. Costanti intere ( i numeri interi nel senso usuale della matematica): 1, 2, 3,… 2. Costanti reali (numeri con cifre decimali) che sono rappresentati mediante A. notazione in virgola mobile per vedere a schermo 16 cifre digitare format long per vedere a schermo 5 cifre digitare format short B. notazione esponenziale: digitare format long e oppure format short e 12 Esercizio Digitare pi format long pi format short pi format long e pi format short e pi 13 I file script • Invece di digitare ogni volta tutti i comandi sulla linea di comando, MATLAB permette di memorizzarli in un file. • Si può ottenere l’esecuzione di tutti i comandi del file digitandone il nome sulla riga di comando. • Il file deve avere estensione .m ed essere salvato nella directory ‘MATLAB’ (versione R2007) oppure “work” (versioni precedenti). • Il file può essere scritto mediante l’editor di MATLAB. Per richiamarlo basta dare il comando ‘edit nomefile’. • Nel file si possono inserire commenti: basta far iniziare la 14 riga che contiene il commento con il simbolo % Ordine di esecuzione delle operazioni L’elevamento a potenza (simbolo ^) viene eseguito per primo Moltiplicazione e divisione sono eseguite subito dopo Addizione e sottrazione sono eseguite per ultime. Esercizio: determinare il risultato di >>5*2^3-1 e di >>(5*2)^(3-1) 15 Vettori e Matrici La struttura matematica su cui si fonda Matlab è la matrice: in Matlab anche uno scalare è una matrice… di dimensioni 1x1. La struttura dati astratta matrice è in pratica in Matlab il tipo fondamentale. Non a caso Matlab è l’acronimo di MATrix LABoratory. Digitando ad esempio x = 2.45, abbiamo dichiarato la variabile x e le abbiamo assegnato il valore 2.45. L’omissione del punto e virgola fa si che a schermo venga visionato il contenuto della variabile x. Matlab manipola solo matrici, ed infatti un’ispezione al Workspace ci dice che x è una matrice di dimensioni 1x1. 16 Vettori riga (di lunghezza qualsiasi) Inizia con una parentesi quadra aperta. Finisce con una parentesi quadra chiusa. Gli elementi all’interno si separano o con spazi o con vigole. Esempio >>[ 1 2 3 4]; >>[1,2,3,4]; Sono lo stesso vettore riga. Per memorizzarlo nella variabile v digitare >> v=[1 2 3 4]; L’istruzione length(v) restituisce la lunghezza del vettore. 17 Vettori colonna Inizia con una parentesi quadra aperta Finisce con una parentesi quadra chiusa Gli elementi all’interno si separano o con “a capo” o con punto e vigola. Esempio >>[ 1 2 L’incolonnamento non è 3 importante 4]; >>[1;2;3;4]; Sono lo stesso vettore colonna. Per memorizzarlo nella variabile v digitare >> v=[1 ;2; 3; 4]; Anche in questo caso l’istruzione length(v) restituisce la lunghezza del vettore 18 Matrici Una matrice è una tabella con n righe e m colonne Esempio: A matrice 3x3 >> A=[ 1 2 3 456 Questo viene digitato dall’utente a11 a 21 A a31 a n1 a12 a 22 a32 an2 a1m a2m a3m a nm 7 8 9 ]; A= 123 456 789 Questo viene stampato da matlab 19 Altri modi di assegnare una matrice >>A=[1 2 3; 4 5 6; 7 8 9] >>A=[1, 2, 3; 4, 5 , 6; 7 , 8, 9] >> A=[1, 2, 3 4, 5, 6 7, 8, 9] Si ottiene sempre lo stesso risultato: A= 1 4 7 2 5 8 3 6 9 20 ISTRUZIONI ULTERIORI matrice identica di ordine n eye(n) Esempio: ATTENZIONE: >>A= eye(3) MATLAB DISTINGUE A= MAIUSCOLE E MINUSCOLE 100 010 001 21 ISTRUZIONI ULTERIORI Sotto matrice della matrice identica eye(n,m) Esempio: >>A= eye(2,3) A= 100 010 22 ISTRUZIONI ULTERIORI matrice zero • zeros(n) Esempio: >>A= zeros(3) A= 0 0 0 0 0 0 0 0 0 Vettore colonna zero zeros(n,1) >>v=zeros(3,1) v= 0 0 0 23 ISTRUZIONI ULTERIORI Costruire una matrice zero ovunque e con il vettore v sulla diagonale: • A=diag(v) Oppure Esempio: >>v=[1 2 3]; A=diag([1 2 3]); A= diag(v) A= 100 020 003 24 Definizione di vettori. In Matlab, è possibile definire vettori di punti equispaziati con dimensione arbitrariamente grande. E’ possibile utilizzare l’istruzione: x = [inizio : passo : fine] che definisce un vettore riga di punti equispaziati da passo tra inizio e fine. Ad esempio x = [0 : 0.1 : 1]. In alternativa si può utilizzare l’istruzione linspace(inizio , fine , N) che definisce N elementi equispaziati tra inizio e fine. Ad esempio y = linspace(0,1,10) è equivalente a x=[0:0.1:1] 25 Ulteriori operazioni con vettori e matrici norm(v) calcola la norma del vettore v norm(v,1) calcola la norma del vettore v mean(v) calcola la media dei valori contenuti in v std(v) calcola la deviazione standard A’ calcola la matrice trasposta A*B calcola il prodotto delle matrici A e B A*v calcola il prodotto della matrice A per il vettore v inv(A) calcola l’inversa di A eig(A) calcola gli autovalori di A [V,D] = eig(A) calcola gli autovalori (in D) e gli autovettori (in V) tali che A*V = V*D 26 Esercizio Scrivere un m-file (script file) che Memorizza nel vettore v i voti degli esami sostenuti Ne calcola la media La divide per 30 La moltiplica per 110 (Suggerimento: l’istruzione mean(v) calcola la media degli elementi contenuti nel vettore v) 27 Esercizio Scrivere in un m-file la matrice A= [1 3 4; 5 6 7; 6 7 8]; Scrivere anche il vettore v=[1; 2; 3]; Calcolare il prodotto A*v Calcolare v’*(A*v) Il risultato è un numero, un vettore oppure una matrice? 28 Esempi ed esercizi vettori e matrici • • • • • • • • • • • • Scrivere una matrice A=[1 2 3;4 5 6;7 8 9]; Scrivere un vettore riga, colonna v=[1;2;3]; eyes(n,m): sottomatrice della matrice identica zeros(n,m): matrice nulla zeros(n,1): vettore colonna norm(v) : norma 2 del vettore v norm(v,1) : norma 1 del vettore v A’ calcola la matrice trasposta A*B calcola il prodotto delle matrici A e B A*v calcola il prodotto della matrice A per il vettore v inv(A) calcola l’inversa di A eig(A) calcola gli autovalori di A 29 ATTENZIONE L’istruzione inv(A) esegue l’inversa generalizzata, cioè fornisce un risultato anche quando il det(A)=0, ma questo non è il risultato cercato! Esempio: digitare A=[1 2 3; 4 5 6; 7 8 9]; det(A) inv(A) e commentare i risultati 30 Risoluzione di sistemi lineari Ax=b 1. Caso in cui valgono teorema e regola di Cramer: Ipotesi: matrice quadrata, determinante non nullo MATLAB calcola esplicitamente la soluzione X=inv(A)*b Esempio: Data A=[1 0; 1 1]; b=[-2;3]; Calcolo det(A), controllo che non sia zero, poi eseguo x=inv(A)*b ed ottengo il risultato Serve quindi l’istruzione di scelta condizionata 31 L’istruzione if if condizione1 istruzione 1 else istruzione 2 end Eseguita se condizione 1 è verificata Eseguita se condizione 1 NON è verificata 32 A=[1 2 3; 4 5 6; 7 8 9]; v=[1 2 3]; if det(A) ~ =0 x=inv(A)*b; else disp(‘Errore’); end disp(x) 33 funzioni 34 Una funzione y=f(x) y è il risultato xè l’argomento della funzione 35 In matlab si definiscono funzioni y=f(x) function [output1, output2, … ] =funzione (input1, input2,…) Output: risultati Input: argomenti della funzione 36 Le funzioni matlab si scrivono in un m-file function [output1, output2, … ] =funzione(input1, input2,…) Qui vanno scritte le istruzioni che permettono di calcolare output1, output2, ecc utilizzando input1, input2, ecc. Esempio: Salvare l’m-file quadrato.m function f=quadrato(x) %calcola il quadrato di x f=x^2; Digitare sulla riga di comando di MATLAB >>x=2; >> y=quadrato(x) y= 4 37 Utilizzo delle funzioni nei calcoli Le funzioni di matlab possono essere utilizzate direttamente nei calcoli. Per esempio l’espressione >> 3 *quadrato(x)+1 Restituisce ans = 13 38 Esempio – funzione con più output Scrivere un m-file che calcola la funzione f(x)=x2 e la sua derivata function [f,df]=quadrato(x) %calcola il quadrato di x f=x^2; df=2*x; 39 Esercizio: scrivere un m-file che calcola la funzione e ne disegna il grafico function disegno %funzione senza input x=[-2:0.1:2]; f=quadrato(x); plot(x,f) function [f,df]=quadrato(x) %calcola il quadrato di x N.B.: quadrato di f=x.^2; ciascuna componente df=2*x; 40 Calcolo simbolico della derivata >> syms x >> diff(x^2) ans = 2*x >> f='x^2' f= x^2 function [f,df]=quadrato(x) %calcola il quadrato di x f=x^2; df=diff(x^2); >> diff(f) ans = 2*x 41 Retta tangente y( x) f '( x0 )( x x0 ) f ( x0 ) 42 Esercizio: scrivere un m-file che calcola la funzione e ne disegna il grafico e la tangente in x0=1 function disegno %funzione senza input x=[-2:0.1:2]; [f,df]=quadrato(x); y=df(31)*(x-x(31))+f(31) plot(x,f,x,y) function [f,df]=quadrato(x) %calcola il quadrato di x f=x.^2; N.B.: quadrato di df=2*x; 4 3 2 1 0 -1 -2 -3 -4 -5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 ciascuna componente 43