Calcolo Numerico I - A.A. 2011-2012 Laboratorio 3 Grafica 2D in Matlab Per tracciare in Matlab il grafico di una funzione y = f(x) per un intervallo assegnato di valori della variabile x, utilizziamo il comando plot. Ad esempio % vettore delle ascisse >> y=x.*sin(x); % vettore delle ordinate >> plot(x,y) Se vogliamo assegnare un colore e uno stile della linea (ad esempio rosso (red) r, e linea tratteggiata, -- ) >> plot(x,f(x), r-- ) >> grid % tracciamo le linee di griglia Il comando doc LineSpec mostra una lista di tutte le opzioni disponibili per specificare lo stile della linea. Per rappresentare sul medesimo grafico più di una funzione >> y1=x.*sin(x); >> y2=x.*cos(x); >> plot(x,y1,x,y2), grid Alternativamente
>> y1=x.*sin(x); >> plot(x,y1, r ), grid >> hold on >> y2=x.*cos(x); >> plot(x,y2, g ) Il comando hold on funziona come un interruttore acceso/spento; fino a quando non si digita hold off tutti i grafici vengono disegnati nella medesima finestra. Per disegnare più grafici, ciascuno su una specifica finestra >> y1=x.*sin(x); >> plot(x,y1, r ), grid >> figure(2) >> y2=x.*cos(x); >> plot(x,y2, g ) Disegnamo ora il grafico di sin(x) per x [ π, π] e completiamolo con un titolo e delle etichette sugli assi >> x=linspace(-pi,pi,200); >> y=sin(x); >> plot(x,y) >> title( Grafico di sin(x) ) >> xlabel( Asse x ), ylabel( Asse y ) 2
Per ridimensionare gli assi >> xmin=-2; xmax=2; ymin=-1; ymax=1; >> axis([xmin xmax ymin ymax]); Il comando doc axis visualizza tutti i possibili formati di scalatura e di modifica degli assi del grafico. La barra di comandi al di sopra della finestra del grafico permette numerose operazioni, fra cui lo zoom (icona lente ) e la modifica delle proprietà degli oggetti - spessore delle linee, colore delle linee, carattere delle etichette...- del grafico stesso (icona freccia ) Funzioni simboliche (inline) Esiste in Matlab una sintassi che permette di definire una funzione direttamente nello spazio di lavoro (ovvero in linea ) senza ricorrere ad un file esterno. L istruzione relativa è inline, seguita dall espressione della funzione e dall elenco dei parametri da cui essa dipende. Per esempio, definiamo la funzione f(x) = (sin(x) + x) 2 : >> f=inline( (sin(x)+x).^2, x ) dove abbiamo indicato esplicitamente che f è funzione di x. Attenzione alla sintassi con gli apici e i punti e attenzione all operazione di elevamento a potenza componente per componente! 3
Ad una funzione così definita non sono associati dei valori numerici (verificare con whos f), ma solo un espressione matematica. Se ora vogliamo associare dei valori numerici, scriviamo >> y=f(x); %assegna a f dei valori numerici in %corrispodenza del vettore x Verificare con whos y che y è un vettore numerico! Riprendiamo l esempio del disegno del grafico della funzione y = x sin(x) e usiamo il comando inline >> f=x.*sin(x); >> plot(x,f(x)), grid Attenzione: perché il comando >> plot(x,f) non funziona? 4
Rappresentazione dei numeri reali: È impossibile rappresentare su una macchina l infinità dei numeri reali. Si lavora con un sottoinsieme di dimensione finita: l insieme dei numeri floating-point. Ad esempio: 2/3 = 0.6 >> 2/3 0.6667 >> 1/3 0.3333 1/3 = 0.3 I numeri reali vengono arrotondati. Usare solo 4 cifre decimali per rappresentare i numeri sarebbe tuttavia molto grossolano, ma questo è solo un possibile formato del sistema per visualizzare un numero reale che non coincide con la sua rappresentazione interna. Altri possibili formati sono: >> format long >> 2/3 5
0.66666666666667 >>1/3 ans= 0.3333333333333 >> 1/100 0.01000000000000 >> format long e >> 1/100 1.000000000000000e-02 Altre variabili predefinite: eps (epsilon macchina), realmax, realmin (più grande e più piccolo numero floating point), Inf (+ è il risultato di operazioni come 1/0 o di un overflow, ad es. exp(1000)) Nan (Not-a-Number, è il risultato di operazioni come 0/0 o inf-inf). 6
Errori di cancellazione x 1. Si calcoli analiticamente lim x 0 e x 1 x 2. Si calcoli la quantità y = e x 1 per x = 10 15 usando Matlab. Quale è l errore commesso? (Si usi opportunamente il comando format). Perché l errore è grande? 3. Si sostituisca ora a e x la sua espansione in serie Taylor intorno a x = 0 arrestata al termine di secondo ordine. Si calcoli x quindi un espressione approssimata di e x 1. 4. Si calcoli quindi la nuova quantità con Matlab in corrispondenza di x = 10 15 e si verifichi l errore commesso in questo caso. 7
Interpolazione con polinomi di Lagrange Si consideri la funzione f(x) = cos(x) nei punti x 0 = 0, x 1 = 1 3 π, x 2 = 2 3 π e sia π 2 f(x) l interpolante polinomiale di f(x) nei nodi x 0, x 1, x 2. 1. Sia π 2 f(x) = 2 f(x i )L i (x). Si scriva esplicitamente su carta i=0 l espressione dei polinomi di Lagrange L 0 (x), L 1 (x), L 2 (x) e se ne tracci con Matlab il grafico nella stessa finestra per x [x 0, x 2 ]. 2. Si usi la function lagr (da scaricare dalla pagina web del corso) per costruire π 2 f(x) e si rappresenti graficamente nella stessa finestra tale polinomio e la funzione f(x). 8