Complementi di Matematica e Calcolo Numerico A.A. 2013-2014 Laboratorio 1 - Introduzione a MATLAB MATLAB =MAT(rix)-LAB(oratory) è un ambiente integrato per il calcolo scientifico utilizzabile sia in maniera interattiva che come linguaggio di programmazione. In Matlab ogni quantità (variabile) viene trattata come matrice. Un numero reale è una matrice 1 1. Sono predefinite numerose funzioni di uso generale(built-in functions), e raccolte di funzioni dedicate ad uno specifico argomento (toolboxes). Per informazioni su Matlab: www.mathworks.com Matlab è un software a pagamento. Octave è un software gratuito che ne riproduce buona parte delle funzioni fondamentali. Per info vedere www.octave.org.
Matlab in modalità interattiva All avvio di Matlab si accede ad una finestra di lavoro caratterizzata dal prompt >> Tutto quanto inserito dopo il prompt verrà eseguito dopo aver premuto il tasto enter. Se Matlab riconosce il comando digitato produrrà un output in caso contrario segnalerà un errore. In ogni caso il sistema ripropone al termine il prompt in attesa di un nuovo comando. Matlab si chiude con il comando quit 2
La prima cosa da fare: >> cd z: Altri comandi del sistema operativo importanti da conoscere: >> pwd Z:\ >> mkdir CalcNum >> ls. CalcNum.. >> cd CalcNum 3
Alcuni comandi Matlab importanti da conoscere: >> help >> doc permettono di ottenere informazioni dettagliate su qualsiasi comando. Il comando doc mostra anche quali pacchetti (toolboxes) siano installati nella versione in uso. Ad esempio: >> help sqrt >> doc sin Per cercare il nome esatto di un comando: >> lookfor cosine cerca i comandi nella cui descrizione appare la parola cosine (ATT.NE la documentazione di Matlab è in inglese!) 4
Scalari in Matlab Matlab valuta espressioni e le associa a variabili. Assegnazione della variabile z: >> z=6 z = 6 >> 6 6 se non specificato il valore 6 viene assegnato alla variabile ans che contiene sempre l ultimo valore non esplicitamente assegnato ad una variabile. >> a=3+2; >> a a = 5 Il ; alla fine dell istruzione sopprime la visualizzazione a schermo del risultato (ma non l esecuzione dell operazione!). Sono definite le operazioni elementari: +,,, /, (elevamento a potenza). >> a=3+2, b=5-3, d=3*4, e=3/2, f=2^3 5
Attenzione alle precedenze: >> 3+2*4 ans= 11 >> 3*2^4 ans= 48 Per alterare l ordine delle operazioni si utilizzano le parentesi tonde. >> (3+2)*4 ans= 20 >> (3*2)^4 ans= 1296 >> (who) whos (elenca le variabili attualmente attive in memoria) e dà alcune informazioni importanti sulle loro caratteristiche (tipo di oggetto, dimensioni...) >> clear all cancella il valore di tutte le variabili attive in memoria. 6
Esercizio 1 Posto a = 3,b = 2, calcolare 3 a+b, a+b 2,a+b 2a, 1, 8 1 3 Se x = 10,y = 5,z = 2, calcolare 3x 2y 5z 2 (= 1) Se a = 1 3,b = 1 5, calcolare a 3 (= 8.3) (1 b+3a) 2 4 64 7
Variabili predefinite: pi (pigreco), i,j (unità immaginaria), Ogni variabile può essere sovrascritta. Per tornare indietro: clear. >>pi 3.1416 >>pi=5; >> clear pi >> pi 3.1416 Numeri Complessi: Oltre ai numeri reali in Matlab sono definiti i numeri complessi, ovvero del tipo: z = Re(z)+iIm(z). Se la variabile i non è stata ridefinita, un tale numero può essere scritto in Matlab nei modi seguenti >> z=5+3i z = 5.0000 + 3.0000i >> y=2.5-2*i y = 2.5000-2.0000i 8
Funzioni matematiche predefinite: abs(x) x sqrt(x) x exp(x) e x, exp(1) = e = Costante di Nepero 2,7182818284... log(x) ln(x) sin(x) sen(x) cos(x) cos(x) tan(x) tan(x) asin(x) arcsen(x)... Per vedere l elenco: >> help elfun Attenzione: Se z=a+bi è un numero complesso per definizione si ha z = a 2 +b 2 >> z=2+3i >> abs(z) 3.6056 Attenzione: Sezèunnumeronegativoocomplessolog(z)non da errore ma restituisce il logaritmo complesso; >> log(-1) 0 + 3.1416i 9
Esercizio 2 Calcolare: y = 2sin(x)cos(x) cos(2x) con x = π/2, (R = 1) y = esin(x2) +cos(x) 2 x+5ln(x) con x = 10, (R = 0.0133) 10
Rappresentazione dei numeri reali: È impossibile rappresentare su un calcolatore l infinità dei numeri reali. Si lavora con un sottoinsieme di dimensione finita: l insieme dei numeri floating-point (virgola mobile) o numeri macchina. Matlab utilizza la rappresentazione in doppia precisione, con la quale è possibile rappresentare ogni numero reale x che si trova approssimativamente negli intervalli: 1.88 10 308 x 2.23 10 308 2.23 10 308 x 1.80 10 308 Le variabili predefinte realmax, realmin di Matlab contengono il più grande ed il più piccolo numero macchina positivo rappresentabile in doppia precisione >> realmax ans= 1.7977e+308 >> realmin 2.2251e-308 Att.ne! Nell espressione 1.7977e+308, la e indica l esponente nella potenza di 10 per cui si intende moltiplicato il numero 1.7977 e non ha nullaachevedereconilnumerodineperoe = 2,7182818284590...! 1.7977e+308 = 1.7977 10 308 11
Ad un numero maggiore di realmax Matlab associa il valore Inf o infinito. Quindi ad esempio: >> 2*realmax Inf Se la valutazione di una espressione risulta in una divisione per zero il risultato della divisione sarà Inf e Matlab continuerà i calcoli. Nota: Matlab riesce a rappresentare numeri più piccoli di realmin cambiando la rappresentazione ed utilizzando parte dei bit normalmente utilizzati per la mantissa per l esponente. Questo comporta una predita di cifre significative rispetto agli altri numeri macchina se tale perdita supera una certo livello allora Matlab restituisce semplicemente 0. >> realmin/10 2.2251e-3090 >> realmin/1e+16 0 12
Numeri reali come 1/3 = 0.3 1/e = 0.367879441171442... vengono quindi approssimati con numeri macchina che hanno un numero finito di cifre significative, digitando >> 1/3 0.3333 >> 1/ exp(1) 0.3679 ne vediamo una rappresentazione. Usare solo 4 cifre decimali per rappresentare i numeri sarebbe molto grossolano, infatti questo è solo un possibile formato del sistema per visualizzare un numero reale che non coincide con la sua rappresentazione interna. Quest ultima è data appunto dal numero floating point che più si avvicina ad numero reale. Ciò si evidenzia cambiando il formato di visualizzazione. Altri possibili formati sono: >> format long >> 1/3 ans= 0.3333333333333 >> 1/exp(1) 0.367879441171442 13
>> format short e >> 1/3 3.3333e-01 >> 1/exp(1) 3.6788e-01 >> format long e >> 1/3 3.333333333333333e-01 >> 1/exp(1) 3.678794411714423e-01 Esercizio 3 (Esistenza di un realmax e di un realmin.) Partendo da 1 moltiplicare o dividere per 1e50 14
Vettori in Matlab Assegnazione di un vettore riga: >> w=[1 2 3] w = 1 2 3 Assegnazione di un vettore colonna: >> v=[1; 2; 3] w = 1 2 3 Altri modi di generare vettori riga: >> v=[1:8] v = 1 2 3 4 5 6 7 8 >> v=[1:.5:3] v = 1.0000 1.5000 2.0000 2.5000 3.0000 La sintassi generale è v=[valore iniz:passo:valore finale]. Il passo può essere anche negativo, ad es. v=[10:-.5:1]; 15
Il comando linspace(valore iniziale, valore finale, N) genera N valori equispaziati fra valore iniziale e valore finale (estremi compresi). Ad esempio >> v=linspace(0,1,5) 0 0.2500 0.5000 0.7500 1.0000 Il comando zeros(n,1)( zeros(1,n)) produce un vettore colonna (riga) di lunghezza n con elementi tutti nulli. Il comando ones(n,1) (ones(1,n)) genera un vettore colonna (riga) con tutte le componenti pari a 1. Per accedere alla componente di un vettore: >> v(3) 0.5 Attenzione: in Matlab l indicizzazione inizia da 1 e non da 0! 16
Matlab produce un messaggio di errore quando si cerchi di accedere ad una componente non definita, ad esempio: >> z=v(0)??? Subscript indices must either be real positive integers or logicals. Nota: esiste in Matlab la parola chiave end per accedere all ultimo elemento di un vettore. Ad es., se v ha dieci elementi, v(end) equivale a v(10). Per conoscere la lunghezza di un vettore v: >> length(v) 5 Per controllare la dimensione di una variabile v: >> size(v) 1 5 17
Operazioni su vettori Dati i vettori v=[1 2 3 4] e w=ones(1,4). Trasposizione: >> u=v u = 1 2 3 4 Somma (sottrazione) algebrica tra vettori di ugual dimensioni >> v+w 2 3 4 5 >> v-w 0 1 2 3 Prodotto scalare (v,w) = (v 1 w 1 +v 2 w 2 +...+v n w n ). >> dot(v,w) (oppure v*w se v e w sono vettori riga) 10 18
Norma euclidea v = n i=1 v2 i : >> norm(v,2) (oppure >> norm(v)) 5.4772 Operazioni su vettori componente per componente. Consideriamo i vettori di ugual dimensione a=[1 2 3 4], b=[4 3 2 1]. il prodotto componente per componente genera il vettore: (a 1 b 1,a 2 b 2,a 3 b 3,a 4 b 4 ) >> a.*b 4 6 6 4 la divisione componente per componente genera il vettore: (a 1 /b 1,a 2 /b 2,a 3 /b 3,a 4 /b 4 ) >> a./b 0.2500 0.6667 1.5000 4.0000 19
l elevamento a potenza componente per componente genera il vettore: (a b 1 1,a b 2 2,a b 3 3,a b 4 4 ) >> a.^b 1 8 9 4 >> a.^3 1 8 27 64 Esercizio 4 Generare gli interi da 28 a 80 con passo 1 generare gli interi da 22 a -10 con passo -4 generare 125 punti equispaziati tra -1 e 5 Assegnati i vettori u = [1,0,2, 3] e v = [3;0;2;1] a) calcolarne il prodotto scalare in due modi diversi; cosa fornisce il prodotto v u? b) calcolare i vettori colonna z, w, y definiti, componente per componente, da z i = u i v i, w i = u v i i, y i = z i /w i 20
Manipolazione di sottoblocchi di vettori e concatenazione Siano v=[1 2 3 4 5] e w=[100 200]. Per sostituire alle ultime due componenti di v le componenti di w: >> v=[1 2 3 4 5]; w=[100 200]; >> v(end-1:end)=w v= 1 2 3 100 200 Pereliminaredavlaterzaelaquartacomponenteusiamoilvettore vuoto []: >> v=[1 2 3 4 5]; >> v(3:4)=[]; v= 1 2 5 Per concatenare i due vettori: >> z=[v w] z= 1 2 3 4 5 100 200 21
Altre funzioni predefinite sui vettori >> v=[1,5,3]; >> sum(v) 9 >> prod(v) 15 >> max(v) 5 >> min(v) 1 >> sort(v) 1 3 5 >> diff(v) % => [v(2)-v(1), v(3)-v(2),...v(end)-v(end-1)]. 4-2 22
Esercizio 5 Sia x = [ 3,5,8,0,1,5, 2,4]: - imporre 6 elemento =100 - togliere 4 elemento - aggiungere in testa = [1,2,3] Siconsiderilasuccessionediterminen-esimoa n = sin(n 2 )con n 1. Si calcolino il più grande e piú piccolo numero tra i primi 10 elementi della successione. Suggerimento: Sieseguanooperazionisulvettore[1,2,3,...,10]. (Soluzioni: max = 0.9200, min = 0.9918) Siconsiderilasuccessionediterminen-esimoa n = 1/n,n 1. - Calcolare la somma dei primi 100 termini della successione. - Fissato n = 20, calcolare le seguenti quantità: n 1 a i+1 B1 =, B2 = n (a i +a 1 ) a i i=1 i=2 ( Soluzioni: B1 = 16.4023, B2 = 3.2404) - Per n = 10,100 calcolare il vettore b di componenti b i = a i+1 a i e verificare che la somma delle sue componenti è uguale a a n 1. N.B. Si risolva l esercizio eseguendo operazioni vettoriali. 23