Sei sulla pagina 1di 25

,  0DWODE 1R]LRQL JHQHUDOL

 &RVq 0DWODE Matlab un sistema software integrato per il calcolo tecnico e scientifico. Le sue principali caratteristiche sono: - Linguaggio di programmazione ad alto livello, sulla stessa linea del Fortran, ma con particolari facilitazioni nelle elaborazioni di matrici. - Possibilit di costruire grafici in 2 e 3 dimensioni - Ampia disponibilit di programmi interni per la risoluzione dei problemi dellAnalisi Numerica - Disponibilit di pacchetti per svariati tipi di applicazioni (Toolbox). Tra queste applicazioni ricordiamo lelaborazione numerica dei segnali, la simulazione di sistemi dinamici, il calcolo simbolico ecc. Matlab lavora in modo interattivo, cio lutente digita una istruzione ed ha immediatamente la risposta. Il prompt su cui si digita listruzione la coppia di caratteri >> : >> (comando Matlab. Per eseguire, digitare Enter) Per uscire dalla sessione di lavoro interattiva: >> quit E anche possibile lavorare a programma. In questo caso lutente scrive lintero programma mediante un editor, quindi lo registra su un file , e infine lo manda in esecuzione.  $ULWPHWLFD H IXQ]LRQL HOHPHQWDUL. Operatori aritmetici. + - / * ^ Funzioni elementari. sin cos asin acos tan atan, atan2 sinh asinh cosh .. exp log log10 sqrt abs conj imag real fix (parte intera), floor, (intero inferiore dellargomento), ceil (intero superiore), round (intero pi vicino) rem (resto della divisione tra i 2 argomenti), sign, ecc. I dati numerici sono rappresentati in memoria nella forma a virgola mobile (floating point), su parole di 64 bit ( 16 decimali) per i PC. Tuttavia il formato esterno pu essere deciso dallutente con i seguenti comandi: >> format short % 5-6 cifre (opzione di default) - es: 3.1416 >> format short e % 5-6 cifre, forma esponenziale - es: 0.25 e-4 >>format long % 16 cifre >> format long e % 16 cifre, forma esponenz. .. (altri formati) Costanti predefinite. pi = , realmax, realmin: numeri massimo (21023) e minimo (2-1022) rappresentabili in floating-point , i (oppure j): unit immaginaria (ad esempio 1+2i un mumero complesso), Inf= Esempio: >> exp(4.27)+cos(pi/4) % questo un comando Matlab 72.2287 % questo loutput corrispondente Il valore di una espressione pu essere assegnato ad una variabile: >> a= exp(4.27)+cos(pi/4) a= 72.2287 >> a-2 70.2287 Negli identificatori delle variabili lettere maiuscole e minuscole sono considerate diverse. Cos c1 e C1 sono due variabili GLVWLQWH. Se unistruzione termina con il carattere ; loutput viene soppresso. Sulla stessa riga si possono digitare pi istruzioni separate da virgola (o da ; se si vuole eliminare loutput), ad esempio: >> ceil(1.27), 1.27; exp(1.27) 2 3.5609
1

Se una istruzione troppo lunga per essere contenuta in una riga, prima di andare a capo digitare 3 punti ()

 'HILQL]LRQL H SURSULHWj JHQHUDOL Matlab (= Matrix Laboratory) un linguaggio particolarmente potente nella elaborazione di vettori e matrici, che si scrivono in conformit agli esempi seguenti: Vettore riga: [1 2 3 0.3] (oppure [1,2,3,0.3]) Vettore colonna: : [1; 2; 3; 0.3] Matrice: [1 2 5; 0 3 9; 0.5 4 0] Come separatore tra 2 elementi di un array si pu anche usare la virgola (invece dello spazio). Se una matrice (o qualsiasi istruzione) troppo lunga, prima di andare a capo 3 punti () Se un elemento di una matrice una espressione, non lasciare spazi dentro lelemento. Matrici e vettori non vengono dimensionati. Ci permette il ridimensionamento in corso di lavoro, come mostrato nellesempio: >> A=[1 2; 3 4] A= 1 2 3 4 >> A(3,3)=5 A= 1 2 0 3 4 0 0 0 5 Come si vede, agli elementi non definiti stato assegnato il valore 0. Indici: Debbono essere >0. A(i,j) , v(i) indicano un elemento della matrice A o del vettore v. Trasposta. Con A si indica la trasposta di una matrice A (o vettore) Gli operatori +, -, * indicano le corrispondenti operazioni tra array, se esse sono possibili. Esempio: se u=[1 2 3], v=[3 2 0] il prodotto u*v non possibile, ma u*v=7. Il prodotto di una matrice (o vettore) per uno scalare sempre possibile, ad es. 3*v=[9 6 0]. Loperazioni a+c (a array, c numero) somma ad ogni elemento di a il numero c. Analogam. Per a-c. A^n (A matrice quadrata, n intero >0) moltiplica A n volte per se stessa. Operatori di divisione. Vi sono 2 operatori di divisione , / (slash) e \ (backslash) %DFNODVK: Se A(nxn) quadrata e regolare e b un vettore, x=A\b calcola la soluzione del sistema lineare Ax=b. Se invece B una matrice nxn avente come colonne b1,b2,bn , allora X=A\B sar a sua volta una matrice, avente come colonne x1,x2,xn le soluzioni dei sistemi lineari Ax1=b1, Ax2=b2, Axn=bn (si dice anche che X soluzione dellequazione matriciale AX=B). Se A(mxn) con m>n, x=A\b calcola la soluzione di Ax=b nel senso dei minimi quadrati. Se m<n vi saranno infinite soluzioni, ed x=A\B ne fornisce una base (in questo caso x una matrice). 6ODVK: X=B/A indica la matrice tale che XA=B (poco usato). Operazioni elemento per elemento (gli array A e B debbono avere le stesse dimensioni): A .*B , A./B Prodotto e divisione elemento per elemento A .^B ciascun elemento di A viene elevato a potenza, con esponente il corrispond. di B 1 2 Esempio: $ = , 3 4 1 4 $ .^ 2 = , 9 16 7 10 $^ 2 = $ * $ = , 15 22

  9HWWRUL H PDWULFL DUUD\

In ogni caso, i risultati sono disposti in un array che ha le stesse dimensioni di A (e di B).

c . / B (c costante, B vettore o matrice) Risultato: [c/b1, c/b2,.] Tutte le funzioni definite in 1.2 possono essere applicate ad una matrice (o vettore), in tal caso la funzione si intende applicata D FLDVFXQ HOHPHQWR. Operatore : A(m:k, i:j) separa la sottomatrice di A con le righe da m a k, e le colonne da i a j. A(:, i:j) sottomatrice delle colonne da i a j. A(m:k, :) sottomatrice delle righe da m a k. Ad esempio, nel caso della matrice A=[1 2 0; 3 4 1; 2 6 3]: >> b=A(2:3, :) b= 3 4 1 2 6 3 Aggiunta alla matrice A di una colonna: A=[A u] aggiunge ad A il vettore u come ultima colonna ( u deve essere vettore colonna, se vettore riga baster fare A=[A u] ) Aggiunta di una riga: A=[A; v] aggiunge ad A il vettore riga v come ultima riga Esempio: >> B=[1 2 3] >> for k=2:3 , B=[B; k k+1 k+2]; end >> B 1 2 3 B= 2 3 4 3 4 5 Azzeramentodi righe o colonne: A(i,:) =[] azzera la i-ma riga di A. A(i:j, :)=0 azzera le righe da i a j A(: , m:k]=[] azzera tutte le colonne da m a k   )XQ]LRQL XWLOL VXP $ Se A e un vettore calcola la somma degli elementi. Se A e una matrice calcola il vettore delle somme di A per colonne. SURG $ Se A e un vettore calcola il prodotto degli elementi. Se A e una matrice calcola il vettore dei prodotti di A per colonne. >PQ@ VL]H $ Assegna ad m ed n i valori delle dimensioni di A. ' GHW $ Calcola il determinante % LQY $ Calcola linversa di A 9 HLJ $ Vettore degli autovalori di A >9'@ HLJ $ V: matrice degli autovettori, D matrice diagonale con gli autovalori $ ]HURV PQ . Inizializzazione a 0 di una matrice A m x n: ' H\H PQ costruisce D con tutti 1 in posizione diagonale (se D quadrata, D=eye(n) la matrice identica) ' GLDJ Y costruisce una matrice diagonale con il vettore v sulla diagonale principale. 5 UDQG Q matrice quadrata ad elementi numeri casuali compresi tra 0 ed 1 5 UDQG PQ Matrice random di dimens. m x n Matrici speciali: KDGDPDUG, KLOE, LQYKLOE, WRHSOL],. Ecc. Esempio. Lequazione matriciale AX=I (matrice identica) ha evidentem. la soluzione X=A-1. Calcolare linversa di una matrice sia con loperatore \ sia con la funzione inv. >> A=[1 2 3;-2 2 0;4 2 1] A= 1 2 -3 -2 2 0 4 -2 -1 >> A\eye(3) -0.3333 1.3333 1.0000 -0.3333 1.8333 1.0000 -0.6667 1.6667 1.0000
3

>> inv(A) -0.3333 1.3333 1.0000 -0.3333 1.8333 1.0000 -0.6667 1.6667 1.0000   &UHD]LRQH GL YHWWRUL Y PLQ  LQFU PD[ oppure Y PLQPD[ Costruisce il vettore riga min, min+incr, min+2*incr,max. Se lincremento manca, si intende uguale ad 1. Esempio: a=0:10:100 produce il vettore riga a=[0 10 20 30 ..100] OLQVSDFH PLQ PD[ QSXQWL crea un vettore di n punti reali equidistanziati tra min e max Esempi: a=linspace(0, 2, 41) produce il vettore riga a=[0 0.05 0.1,.1.95 2] sum(1:1:10) risultato:55 sum((1:1:10).^2) risultato: 385 (somma i quadrati dei primi 10 numeri interi)  )XQ]LRQL GL PDWULFH Se A matrice quadrata nxn ed f(x) una funzione analitica, nellalgebra della matrici si pu definire la matrice quadrata nxn f(A) (questa teoria non fa parte del corso). In matlab: VTUWP $ Radice di A, cio una matrice B tale che B*B=A (Attenz: diverso da sqrt(A), i cui elementi sono le radici degli elementi di A) H[SP $ eA. ORJP $ log(A) ..  6WULQJKH GL FDUDWWHUL Sono sequenze di caratteri racchiuse tra apici. Es: nome = Matteo. In questo caso nome un vettore di 6 caratteri. Si possono considerare anche matrici: nomi=[ Mario; Maria ; Luigi] per tutti devono avere lo stesso numero di caratteri (se non ce lhanno, riempire con blank). Funzioni: FKDU VWULQJD VWULQJD con stringa1, stringa2, anche di lunghezze diverse tra loro. Forma la matrice, aggiungendo automaticamente (se necessario) i blank. HYDO VWULQJD Se stringa un valido comando Matlab, lo esegue. Es: >> eval(x=cos(pi/12)) % Calcola lespressione, e ne assegna il valore ad x. La funzione eval utile quando in una sessione di lavoro si deve calcolare pi volte una data espressione. Esempio: >> f=cos(x)+cos(2*x)+cos(3*x) >> x=0.1; a=2+eval(f) >> x=0.2; b=3+eval(f)  )XQ]LRQL GL PLVXUD GHO WHPSR Vi sono numerose funzioni, che danno il tempo in diversi formati. Ad esempio: WLF ( calcolo..) t=WRF La variabile t contiene il tempo di CPU (in secondi) dal tic, cio il tempo impiegato per il calcolo. GDWH. Data del giorno, ecc.

 3URJUDPPD]LRQH LQ 0DWODE
Oltre che in modo interattivo, Matlab consente di lavorare con un programma memorizzato, che viene scritto mediante un editor incorporato. I programmi Matlab sono detti Script Files, e consentono anche la definizione di funzioni. Sia gli Script Files che le funzioni debbono essere registrati con lestensione .m, e vengono detti pertanto m-files. Premettiamo la definizione degli operatori relazionali e logici, e delle strutture di controllo. 2SHUDWRUL UHOD]LRQDOL H ORJLFL I 2 valori logici (costanti logiche) sono: 0 Falso, 1 Vero (ma ogni intero 0 considerato vero) Operatori Relazionali: < minore, <= minore o uguale, > maggiore, >= maggiore o uguale, == uguale, ~= diverso A primo e secondo membro di una operazione relazionale debbono esserci 2 valori numerici. Esempio: >> t=2>3 % t=0 (falso) Operatori Logici: & AND , | OR , ~ NOT a primo e secondo membro di una operazione logica debbono esserci 2 valori logici. Pi in generale gli operatori relazionali e logici si possono applicare alle matrici, ed il risultato sar una matrice a valori logici avente le stesse dimensioni di quelle poste a confronto. Esempio: se x=[0 5 3 7] ed y=[0 2 8 7] >> m=(x>y)&(x>4) % risultato: m=[0 1 0 0] >> p= x|y % risultato: p=[0 1 1 1] (attenz: qualsiasi intero 0 considerato vero) Altre funzioni logiche: DQ\ [ fornisce 1 (vero) se ogni elemento dellarray x non-zero (..altre funzioni) 6WUXWWXUH GL FRQWUROOR QHOOD OD SURJUDPPD]LRQH Cicli For: for n=j:k for n=j:m:k Blocco di istruzioni blocco di istruzioni end end Nella prima forma literatore n va da j a k con passo 1. Nella seconda da j a k con passo m. Cicli while: while espress. logica Blocco di istruzioni end Il ciclo viene eseguito finch lespress. logica rimane vera (=1). if espress. logica 1 blocco di istruz. elseif espress. logica 2 blocco di istruz. else 3 blocco di istruz. end come in Fortran: la elseif e/o la else possono mancare. In ogni blocco di istruzioni possono essere annidati altri blocchi (cicli o else-if). Se lespressione logica complicata, racchiuderla tra parentesi Ad es. (x>0 & n=100) Le for, while, if possono essere usate anche in modo interattivo nella finestra di lavoro principale (command window). In tal caso lintera struttura va in esecuzione solo quando digitata la end. break provoca luscita da un ciclo for o da un ciclo while.
5

Selezioni if elseif - else:

Selezioni Switch-case-Otherwise: switch flag case valore1 1 blocco di istruz. case valore2 2 blocco di istruzioni . otherwise ultimo blocco di istruzioni end Flag una qualsiasi variabile. Se il suo attuale valore valore1 viene eseguito il 1 blocco. Se valore2 il 2 blocco, e cos via.  (GLWLQJ HG HVHFX]LRQH GHL SURJUDPPL 6FULSW ILOHV Uno script file un file di comandi matlab , che pu essere chiamato ed eseguito in qualsiasi punto del Command Window. Gli script files sono memorizzati nella Directory di Lavoro (Current Directory), che appare nel piccolo riquadro in alto a destra della finestra Matlab, e per default c:\matlab6p1\work. Pu per essere cambiata (ad es. in A:\) agendo sul pulsante () a destra. Per crearlo File New 0-File (appare uno schermo editor)scriverlo: % commento su cosa fa x=. ; ( ; se non si vuole visualizzare il risultato nella esecuzione) z=. (istruzioni) Per salvarlo: File Save as (finestra di dialogo. Digitare il nome con estensione .m) 6DOYD Per eseguirlo >>nome (in qualsiasi punto della finestra principale) Viene subito eseguito. Pu essere richiamato per correggerlo dal Command Window con !! HGLW QRPHP . Se il file nome.m non esiste, >> edit nome.m consente anche di crearlo. Comandi utili in uno Script-File: GLVS YDORUH Visualizza valore sullo schermo. Valore puo essere una variabile (anche un array), od una stringa di caratteri. Se si vogliono visualizzare pi elementi, porli in un array. D LQSXW VWULQJD Lelaborazione si arresta e viene visualizzata la stringa . Riparte dopo lintroduzione da tastiera di un valore, che viene assegnato ad a. Nel caso si voglia introdurre un array occorre digitare anche le parentesi quadre, ad es. [1 2; 4 1] SDXVH. Arresto finche viene premuto un tasto. SDXVH Q : arresto per n secondi. NH\ERDUG passa il controllo al Command Window. Per mettere in rilievo la particolare situazione, il prompt si presenter cos: k>> N!! UHWXUQ ritorna allo Script File, dove era uscito con keyboard. Le variabili di uno Script File sono globali, cio condivise col Command Window (e viceversa) Dunque una sessione di lavoro pu essere interattiva, a programma o mista. Una sessione di lavoro interattiva (o parte di essa) pu essere conservata mediante il comando GLDU\ . Supponiamo che debba essere conservata nel file miofile.m. Allora: >>diary on >> diary miofile.m ( sessione di lavoro che si vuole conservare) >> diary off (parte che non si vuole conservare) >> diary on (si vuole conservare di nuovo, sempre in miofile.m) >>diary off
6

Per rieseguirlo bisogna cancellare tutti gli output generati durante lesecuzione precedente, e gli eventuali messaggi di errore.  , ILOHV IXQ]LRQH Una funzione una parte di codice che esegue un determinato calcolo (ad esempio linversione di una matrice), e che pu essere chiamata tutte le volte che occorre sia dal Command Window sia da un programma. Le funzioni Matlab scritte dal programmatore vengono registrate in appositi m-files. La prima istruzione utile di una funzione (dopo eventuali commenti) deve essere: IXQFWLRQ >YDULDELOL GL RXWSXW@ QRPHBIXQ]LRQH YDULDELOL GL LQSXW . Le variabili di output sono i dati che la funzione calcola e restituisce al Command Window o al programma chiamante. Se vi una sola variabile la coppia di parentesi [] pu essere omessa. Le variabili di input e di output possono essere variabili semplici o array, tra le variabili di input ci possono essere anche stringhe di caratteri. &KLDPDWD GL XQD IXQ]LRQH (ad esempio dal Command Window): >> [var. output]=nome(var.input) oppure nome(var. input) (anche inclusa in una espressione) La chiamata delle funzioni interne Matlab segue ovviamente questa sintassi. Ad esempio: >> [m, n]=size([1 2 3; 7 6 3]) m=2 n=3 Le funzioni vengono scritte (o modificate) con leditor di Matlab come script file. Sono salvate con lestensione m. Esempio 1 % calcolo del fattoriale di n>0 function fatt=fattoriale(n) fatt=1; for i=1:n, fatt=fatt*i; end Esempi di chiamate: >> fattoriale(5) ans = 120 >> 2+2 % il valore dellespressione assegnato alla variabile ans, che pu essere ans = 4 % riutilizzata. >> zz=7+fattoriale(ans) % il risultato ora assegnato a zz, non ad ans zz = 31 Esempio 2 % questa funzione riceve r come variabile di input. Costruisce 2 vettori x ed y contenenti le % coordinate di 100 punti della circonferenza di centro 0 e raggio r, fa il grafico di tale % circonferenza e restituisce al punto di chiamata i vettori x ed y. function [x,y]=circlefn(r); % [x,y] sono le variabili di output (in questo caso 2 vettori) theta=linspace(0, 2*pi,100); x=r*cos(theta); y=r*sin(theta); plot(x,y); axis(equal) Esempi di chiamate: >> R=5 >> [x,y]=circlefn(R ); % Fa il grafico, e passa al Command Window i vettori x,y >>[cx,cy]=circlefn(4); % cerchio di raggio 4 >> circlefn(1); % fa solo il grafico del cerchio di raggio 1 Si noti che nella chiamata le variabili di output se non servono possono essere omesse. Lomissione del carattere ; dopo le chiamate comporta comunque il display dei vettori x, y sul monitor.
7

Le variabili interne ad una funzione sono locali, e vengono azzerate dopo luscita. Per dichiarare le variabili globali (cio comuni alla funzione, e Command Window o script file): JOREDO [ \, sia nella funzione che nella parte chiamante. Anche se chiamate da uno script file, le funzioni devono essere in un m-file VHSDUDWR..   )XQ]LRQL SDVVDWH FRPH DUJRPHQWR Matlab possiede molte funzioni interne al sistema per la risoluzione di problemi di Calcolo Numerico, ad esempio il calcolo di un integrale, la risoluzione di unequazione differenziale, il calcolo delle radici di una equazione eccetera. Luso di queste funzioni comporta che lutente prepari una sua propria funzione descrivente il SDUWLFRODUH problema (ad esempio: la funzione integranda nel calcolo di un integrale definito). La risoluzione completa del problema appare dunque costituita da 3 moduli:
Script File, oppure Command Window Funzione di calcolo numerico di Matlab Funzione particolare (dellutente)

Nel primo modulo vi il programma (o semplicemente listruzione del Command Window) che chiama la funzione Matlab risolvente il problema (ad esempio lintegratore). Tra i parametri della chiamata deve essere presente e UDFFKLXVR WUD DSLFL lidentificatore della funzione particolare (ad esempio lintegrando), preparata dallutente. La funzione Matlab utilizzer questo identificatore per chiamare, quando necessario, la funzione particolare. Se la funzione particolare dipende da parametri c1, c2..dello Script File che possono variare durante lelaborazione, essi possono essere dichiarati globali (sia nello Script File che nella funzione). Esempio. Si vuole risolvere lequazione differenziale y = sen(x*y)+cos(x), con la condizione iniziale y(0)=1, nellintervallo [0,2] (problema di Cauchy). Una importante funzione Matlab per il problema di Cauchy la ode23, la cui sintassi : [x, y]=ode23(funzione_utente, intervallo, y0) La risoluzione della particolare equazione comporta dunque che lutente abbia preparato il seguente m-file: % particolare equazione differenziale function y1=fxy(x,y) y1=sin(x*y)+cos(x) dopo di che il problema sar risolto con la seguente chiamata della ode23: >> [xa,ya]=ode23(fxy,0,2,1) Il risultato sar una coppia di vettori xa,ya contenenti rispettivamente le ascisse e le ordinate della soluzione calcolata in un numero adeguato di nodi.

 *UDILFL LQ  GLPHQVLRQL La funzione piu importante per la grafica e la plot, che richiede come argomenti principali due vettori (vettx e vetty) contenenti le coordinate (xi,yi) dei punti da graficare. La sintassi e: SORW YHWW[ YHWW\ RS]LRQL ( opzioni puo mancare) vettx e vetty devono avere lo stesso numero di componenti. Opzioni indica il colore, ed il tipo o marcatore di linea. Esempi colore: m magenta, r rosso, g verde, b blu, w bianco, k nero, y giallo Esempi tipo e marcatore di linea: - continua (default), -- tratteggiata, : punteggiata, -. Puntolinea, + segni pi, o cerchietti, * asterischi, x lettere x,.
8

  *UDILFL

Il grafico appare in una finestra apposita (Graphics Window) sovrapposta al Command Window, e che puo essere inviata alla stampante mediante listruzione print. Vi sono regole di default che consentono di ottenere una visualizzazione ottimale del grafico, riguardo alle scale degli assi, la forma del riquadro ecc. Tuttavia vi sono istruzioni che consentono di personalizzare il grafico aggiungendo scritte, commenti, e variando le regole di default della presentazione. Tali istruzioni debbono seguire la plot, e la loro esecuzione modifichera via via nel modo voluto il grafico creato dalla plot. Ne ricordiamo alcune: ylabel(scritta) etichetta lasse y, xlabel(scritta) etichetta l asse x, title(scritta) pone un titolo in testa al grafico, text( coord.x, coord.y, scritta) inserisce scritta nel grafico con inizio alle coord. specificate. grid: inserisce nel grafico una griglia. axis([xmin,xmax,ymin,ymax]) limita il grafico allintervallo specificato axis(equal) Stessa scala sulle ascisse e le ordinate axis(square) Nel grafico i 2 assi hanno la stessa lunghezza print Il grafico (nella attuale fase di formazione) viene stampato (La stampa pu essere effettuata anche dal men file di Graphics Window) Esempio 1: Grafico di un cerchio di raggio 1 >> theta=linspace (0, 2*pi, 100); >> x=cos(theta); y=sin(teta); % sono creati i vettori x e y, lunghi 100 >> plot(x,y, y) % effettua il grafico sulla finestra Graphics Window. >> axis(equal) % stessa scala su ascisse e ordinate (se no appare una ellisse) >> xlabel(x) % Etichetta lasse x >> ylabel(y) % y >> title(cerchio) % Titolo del grafico >> print % scrive il grafico sulla stampante di default Esempio 2: Grafico di pi funzioni sulla stessa figura: >> x=linspace(0, pi/2, 50); >> plot(x,sin(x)) % grafico di sin(x) tra 0 e  DQFKH VLQ [ un vettore lungo 50) >> y=1-x.^2; % elevaz. al quadrato del vettore x punto per punto >> plot(x, sin(x),x, y,g*), grid % grafico di 2 funzioni con griglia. La lineadella 2 % funzione verde e formata da asterischi.
1

0.5

-0.5

-1

-1.5

0.5

1.5

 *UDILFL GL IXQ]LRQL GHILQLWH PDWHPDWLFDPHQWH fplot(funzione,[xmin,xmax]) Con la fplot basta dare lintervallo del grafico, il vettore x viene calcolato automatic. da Matlab. La funzione deve essere data come costante carattere. Usare operatori del tipo punto per punto.
9

Esempio: >> fplot(exp(-0.1*x) .* sin(x),[0,3] ) % attenz. .* : anche la funzione un vettore ! >> xlabel(x), ylabel(y=e^(x/10) sin(x)), title(grafico)  &XUYH GL OLYHOOR *UDILFL GHOOH IXQ]LRQL LPSOLFLWH Il grafico delle curve di livello di una superficie z=f(x,y) richiede una discretizzione mediante un adeguato numero di nodi (xi,yi) del rettangolo in cui si vuole il grafico. Le funzioni necessarie sono: >;<@ PHVKJULG D[G[E[ D\G\E\ Crea 2 matrici X ed Y descriventi la discretizzazione. Ogni coppia di elementi corrispondenti (xij,yij) fornisce le coordinate di un nodo della discretizzazione. >&K@ FRQWRXU ;<= Crea il grafico. X,Y, sono le 2 matrici precedenti. Z la matrice che contiene i valori della z=f(x,y) nei nodi della discretizzazione. C una matrice che contiene le coordinate dei punti che contour utilizza per costruire il grafico. h un vettore associato alle curve di livello che appariranno nel grafico. Se C ed h non interessano possono essere omesse, tuttavia sono necessarie se si vuole etichettare le curve con le rispettive quote mediante la successiva istruzione FODEHO &K  Contour(X,Y,Z, [a,b]) limita le curve a quelle comprese tra le quote a e b. Esempio: curve di livello della funzione f(x,y)= 2x2-3xy+x-y2+1 >> [X, Y]=meshgrid(-2: 0.2: 2, -2: 0.2: 2); % Crea in un rettangolo la griglia di nodi xi, yj >> Z= 2*X .^2 3* X .*Y +X- Y .^2 +1; % In ogni nodo della griglia calcola la funzione Z ( attenz: operazioni elemento per elemento!) >> [C,h]=contour(X,Y,Z); % Crea il grafico (C la matrice dei nodi, ) >> clabel(C,h) % etichetta le curve di livello (. Altre scritte se occorre) >> print % Stampa il grafico

Per la f(x,y)=0 (funzione implicita): [C,h]=contour(X,Y,Z, [0 0])

% serve solo la curva di livello 0 della z=f(x,y)

 *UDILFD ' FHQQL Oltre che mediante le sue curve di livello, una funzione z=f(x,y) pu essere visualizzata (ed in modo pi naturale) mediante il grafico della sua superficie, il che si ottiene mediante la funzione mesh. Ad esempio vogliamo graficare nel rettangolo -2[ -2\ OD IXQ]LRQH

10

] = [H [ (( [ \

2 2

) + \2 )

Il programma sar: >> [X,Y]=meshgrid(-2:0.1:2);

% poich specificato solo lintervallo sullasse x, lintervallo sullasse y sar preso uguale. >> Z= X.*exp(-((X-Y.^2).^2+Y.^2)); >> mesh(X,Y,Z), xlabel(x), ylabel(y), zlabel(z).

Ovviamente laspetto della superficie cambia a seconda del punto P(x,y,z) dello spazio da cui la guarda losservatore. Tale punto pu essere definito dai 2 angoli D]LPXW H HOHYD]LRQH  LO primo dei quali specifica la rotazione orizzontale dallasse y per raggiungere la proiezione di P sul piano (x,y), ed il secondo langolo tra la retta congiungente P con (0,0,0) ed il piano (x,y). Matlab pone per default questi angoli a -37.5 e 30. Tuttavia questi valori possono essere cambiati mediante listruzione YLHZ   Cos se, ad esempio, lultima istruzione mesh fosse seguita da view(40, -30) la superfice assumerebbe un aspetto diverso (sarebbe vista dal di sotto anzich dal di sopra) Grafico di curve dello spazio: SORW [\]RS]LRQL dove x, y, z sono i vettori delle coordinate (xiyizi) dei punti della curva, ed anche opzioni sono analoghe a quelle viste per la plot. La plot3 pu essere seguita, come la mesh, dalla funzione view. Esempio: >> z=0:0.2:20; >> plot3(sin(z),cos(z),z), title(Spirale) Matlab possiede moltissime altre funzioni per la grafica e la creazione di figure in movimento. Per approfondire Matlab: W.J.Palm III Matlab 6 per lingegneria e le scienze (Mc Graw Hill) Testo di consultazione per Analisi Numerica: G. Pesamosca Metodi dellAnalisi Numerica (Ediz. Kappa)

11

0$7/$% 

)LQHVWUD 0DWODE VWDQGDUG

Matlab File Edit Launch Pad

View

Vindow Current Directory Command Window

Command History

Command Window: lo spazio di lavoro Launch Pad: Elenca i Toolbox e altri programmi installati (Simile ad Esplora Risorse), Command History. Lista dei comandi immessi in precedenza. Un comando pu essere traferito da questa finestra nel command Window (selezionarlo, poi KS e trascinarlo). 0HQ 0DWODE )LOH (GLW 9LHZ :HE :LQGRZ Per pu cambiare secondo la finestra attiva (cio le 3 standard + WorkSpace+Editor+Graphic Window) 0RGLILFD GD PHQ GHOOD ILQHVWUD 0DWODE VWDQGDUG: Matlab 9LHZ 'HVNWop Layout 2S]LRQH YROXWD SRVVLELOLW: default (standard), Command Vindow only, Simple (Command Vindow e Command History), ecc :RUN 6SDFH. Euna finestra (normalmente nascosta) che contiene i nomi e le dimensioni di tutte le variabili usate nella sessione. Per vederla: Matlab 9LHZ :RUN 6SDFH La stessa cosa per vedere altre finestre, eventualmente non presenti nella finestra standard (es.: Matlab 9LHZ /DXQFK 3DG $]]HUDPHQWR GHO FRQWHQXWR GL XQD ILQHVWUD: Matlab (GLW &OHDU &RPPDQG :LQGRZ RSSXUH Command History, oppure Work Space) Ma per azzerare il Command Window anche: >> clc (pi semplice) (OLPLQD]LRQH GL XQD ILQHVWUD: X &XUUHQW GLUHFWRU\:

12

la directory dove vengono registrati o letti i programmi che vanno in esecuzione, cio gli m-files. Normalmente settata su c:\matlab6p1\work. Per cambiarla, selezionare sul pulsante () immediatamente a destra, la directory (o il dischetto) voluto (ad esempio a:\). &RPPDQG 9LQGRZ: Possibilit di ritornare su un comando precedente per modificarlo, rieseguirlo, ecc. spostandosi con le freccette (   HFF  La variabile DQV. Pu essere riutilizzata: ad esempio se lultimo risultato vale 0.5, 4*ans varr 2. (OLPLQD]LRQH GL WXWWH OH YDULDELOL: >> clear (OLPLQD]LRQH GHOOH YDULDELOL Y Y, .. >> clear v1, v2 TXLW: uscita da Matlab

13

,,  0DWODE $SSOLFD]LRQL DO FDOFROR QXPHULFR

 ,QWHUSROD]LRQH H DSSURVVLPD]LRQH DL PLQLPL TXDGUDWL


 ,QWHUSROD]LRQH SROLQRPLDOH Siano y=[y0,y1,yn] gli n+1 valori di una funzione negli n+1 nodi x=[x0,x1,xn]. Listruzione a=polyfit(x, y, n) assegna al vettore a i coefficienti del polinomio interpolatore (1) Pn(x)=anxn+ an-1xn-1+ . +a1x+ a0 I coefficienti sono sistemati in a cos: a=[an,an-1,a0] (2) Se x un vettore di elementi x1,x2,xm ed a il vettore (2), listruzione y=polyval(a,x) costruisce il vettore y=[y1,y2,ym] dei valori di Pn(x) nei punti x1,x2,xm . (VHUFL]LR. Costruire la tavola di f(x)= |cos(x)| in [0,2] e passo h=0.25. Graficare questi punti con cerchietti. Costruire quindi linterpolatore di grado 8 P8(x) sui dati della tavola, e graficare (sulla stessa figura precedente, ma con passo 0.05) anche P8(x) ed f(x). Nota. La funzione KROG tiene la figura precedente attiva, in modo che su di essa si possano inserire altri grafici. KROG RII annulla leffetto di hold. >> x=0:0.25:2; y=abs(c0s(x)); >> plot(x,y,o) >> hold >> a=polyfit(x,y,8) >> xplot = -0.1:0.1:2 >> plot(xplot, polyval(a,xplot)), title(punti tabulate e interpolatore di grado 8) >> pause >> plot(xplot, abs(cos(xplot))) Si nota che f(x) approssimata in modo molto modesto da P8(x). Si tenga per presente che f(x) solo di classe C0, quindi lerrore sar elevato. La formula del resto non valida, lerrore non maggiorabile.  $SSURVVLPD]LRQH SROLQRPLDOH DL PLQLPL TXDGUDWL Sia m il numero dei nodi e dei valori della funzione, ed x=[x0,x1,xm], y=[y0,y1,ym] i 2 vettori. Sia inoltre m il grado del polinomio Pn(x) che si vuol costruire. Se m>n+1, allora la a= polyfit (x,y,n) calcola Pn(x) nel senso dei minimi quadrati, cio Pn(x) sar il polinomio tale che

= (3 ( [ ) \
Q L L

=1

)2

= min

Il vettore a ordinato sempre come in (2). Anche la y=polyval(a,x) ha lo stesso significato del punto precedente. (VHUFL]LR (fatto a lezione): Determinare la retta che approssima nel senso dei minimi quadrati i seguenti dati (xi,yi): (-1 0), (0 2.5), (1 3), (2 4), (3 3.5). >> x=[-1 0 1 2 3]; y=[0 2.5 3 4 3.5]; >> a=polyfit(x,y,1) % non necessario determinare la matrice a = 0.85 1.75

14

 $SSURVVLPD]LRQH DL PLQLPL TXDGUDWL QRQ SROLQRPLDOH Matlab possiede una istruzione diretta per risolvere il problema dellapprossimazione ai minimi quadrati solo nel caso polinomiale. Nel caso si voglia approssimare i dati sperimentali (x1,y1), (x2,y2),. (xm,ym) secondo un modello non polinomiale: y = a1 1(x)+ a2 2(x)+ .. + an n(x) (n < m) occorrer procedere cos: 1) costruire la matrice (m x n) di elementi i,j = j (xi), 2) a= \y con y (m x 1) vettore FRORQQD dei dati sperimentali. Infatti, se quadrata e regolare loperazione \y fornisce (come gi visto) la soluzione del sistema x = y. Se invece ha pi righe che colonne \y fornisce la soluzione del sistema delle equazioni normali, cio Ha=D, con H=T, e D=Ty. (vedere esercizio)  ,QWHUSROD]LRQH SROLQRPLDOH D WUDWWL Linterpolazione polinomiale a tratti unaltra tecnica che consente di approssimare mediante polinomi di grado basso una funzione continua f(x), di cui sono noti i valori nei nodi (x1,y1), (x2,y2),. (xm,ym). Vi sono due varianti principali: Interpolazione lineare a tratti. Se x* un punto compreso tra xi ed xi+1, la f(xi) viene approssimata mediante interpolazione lineare tra xi ed xi+1. Interpolazione a tratti di terzo grado. Se x* un punto compreso tra xi ed xi+1, la f(xi) viene approssimata mediante linterpolatore di terzo grado tra xi-1 , xi , xi+1 ed xi+2: xi-1 xi x* xi+1 xi+2 Ovviamente, se x* cade in [x0, x1] o in [xn-1 xn] linterpolatore di 3 grado viene costruito in altro modo (nel primo caso, sui nodi x0, x1 , x2 , x3). La funzione che consente linterpolazione a tratti : yn = interp1(x, y, xn,metodo) in cui: x, y sono rispettivamente i vettori dei nodi xi, e dei valori yi, xn il nuovo valore x* (ma pu essere anche un array!) in cui si vuole valutare f(x), yn lapprossimazione calcolata,e metodo pu essere linear se si vuole linterpolazione lineare o cubic se si vuole linterpolazione di terzo grado. Se metodo omesso linterpolazione sar per default lineare. Un altro importante metodo di approssimazione a tratti, non visto a lezione, spline. In ogni intervallo [xi,xi+1] costruito un polinomio di 3 grado. Linsieme di questi polinomi garantisce non solo che sia yi= f(xi) nei nodi, ma anche che la derivata di f(x) sia continua nei nodi. Si pu anche dire che la interp1 implementa alcuni criteri per ricostruire una funzione continua, a partire da alcuni suoi campioni discreti. (VHUFL]LR. a)- Costruire il vettore dei valori di f(x)=exp(-x2) nei nodi 2, -1.5, -1, 1.5, 2. b)- Graficare in [-2,2] lapprossimazione ottenuta mediante la interp1 con metodo linear (per il grafico, si costruiscano 2 vettori x, y di 81 elementi, cio con passo 0.05) c)- Graficare in [-2,2] lerrore exp(-x2)-yappr. (yappr lapprossimaz. lineare a tratti). Ripetere i punti a), b), c) con il metodo cubic e con il metodo spline. Per le approssimazioni linear e cubic (ma specialmente linear) si notano dei punti angolosi in corrispondenza dei nodi, molto evidenti nella funzione di errore exp(-x2)-yappr.. Il motivo che quando x* passa da xi- ad xi+ lapprossimazione viene effettuata con un GLYHUVR polinomio interpolatore. Poich i 2 polinomi relativi ad [xi-1,xi] ed [xi,xi+1] assumono xi lo stesso valore yi , garantita la continuit della approssimazione, mentre non c nulla che possa garantire anche la continuit della derivata prima. Tale continuit invece garantita dalle approssimazioni di tipo spline.
15

'HULYD]LRQH H 4XDGUDWXUD
 'LIIHUHQ]LD]LRQH H GHULYD]LRQH diff(X) Se X un vettore (riga o colonna) di dimensione n , fornisce il vettore (riga o colonna) delle differenze, di dimensione n-1. Se X una matrice n x m, fornisce la matrice delle differenze (colonna per colonna), che sar di dimensione (n-1) x m. diff(X,k) come sopra, ora calcola la differenza k-ma. Dati 2 vettori X, Y tali che (x1,y1), (x2,y2), .(xn,yn) siano i valori di una tavola di una funzione f(x), allora diff(Y) ./ diff(X)sar un vettore di dimensione n-1, le cui componenti (yi+1-yi)/ (xi+1-xi) forniscono unapprossimazione della derivata f (x) nei nodi.  4XDGUDWXUD. integrale=quad (funz, a, b, tol, trace, p1, p2,) Calcolo dellintegrale definito tra a e b di una funzione f(x), data analiticamente. Argomenti obbligatori: funz : lidentificatore dellintegrando. Pu essere dato come function-file, e in questo caso deve essere preceduto da @. Pu essere dato anche come funzione definita entro la quad, o compresa tra apici oppure mediante la funzione inline. Esempio: quad(exp(-x.^2).*sin(x), . oppure quad(inline(exp(-x.^2).*sin(x)),... $WWHQ].: siccome x considerata internamente come un vettore costruito sui nodi, usare gli operatori vettoriali .* ./ (ad es: x .*sin(x)+2) a, b : sono gli estremi di integrazione. Argomenti opzionali: tol : indica lerrore assoluto massimo tollerato. Il valore di default 10-6. trace : se un valore  visualizzata una tabella indicativa di come si svolta lintegrazione (ad esempio: mostra il numero di valutazioni dellintegrando in vari subintervalli) . p1, p2 . : valori numerici di eventuali parametri che compaiono nella funzione integranda. Se p1,p2 sono presenti, lintegrando deve essere del tipo funz(x,p1,p2), cio x 1 parametro. Se compare uno qualsiasi degli argomenti opzionali, debbono comparire anche i precedenti. Quad applica il metodo di Simpson adattivo, con un massimo di 10 suddivisioni. [int nvf]=quad1( funzione, a, b, tol, trace, p1, p2,) Esattamente come quad, ma lavora con un algoritmo pi sofisticato riuscendo ad effettuare il calcolo anche se lintegrando poco regolare. . Il parametro di uscita nvf il numero complessivo di valutazione dellintegrando. Se per vi sono singolarit evidenti, conviene spezzare lintervallo di integrazione sulla su di esse integrale=trapz(y) largomento y un vettore di dati. trapz calcola lintegrale dei dati con il metodo dei trapezi, supponendo il passo h=1. Se h 1, moltiplicare il risultato per h. integrale=dblquad(funzione,c,d,a,b,tol,metodo) WRO. esattamente come in quad. PHWRGR. il metodo con cui sono calcolati internamente gli integrali in una dimensione (quad o quad1). Per default quad
16
E G

Calcolo dellintegrale doppio, esteso ad un rettangolo: int =

I ( [, \ )G[G\

Esercizio. E data f(x)= x sin(x). Effettuare il grafico e lintegrazione con la traccia in [-1,1] >> fplot(x .* sin(2*x),[-1,1]), grid, title(f(x)=x sin(2 x)) >> int=quad(@fint, -1,1,1e-5,1) lm-file della funzione integrando : % funzione integrando fint function f=fint(x) f=x .*sin(2*x); Tuttavia si poteva anche evitare lm-file e chiamare quad cos: >> int=quad(x.*sin(2*x), -1,1,1e-5,1) % oppure quad(inline(x.*sin(2*x)). La traccia mostra una notevole difficolt del calcolo nellintorno dellorigine, dove la |fiv(x)| pi alta. Il grafico della fiv(x) pu essere visualizzato con le seguenti istruzioni Mathematica: f=x Sin[2 x] D[f, {x,4}] Plot[%, {x,-1,1}]

 5DGLFL GHOOH HTXD]LRQL QRQ OLQHDUL.


 &DOFROR GL XQD UDGLFH GL XQHTXD]LRQH I [ . La funzione Matlab fzero: sol=fzero(@funz, x0, opzioni, p1, p2,) Argomenti obbligatori: IXQ] lidentificatore della f(x). Pu essere una Function File od una funzione matlab. IXQ] deve essere preceduto da @ ( ad esempio: fzero(@cos, 1.5 ) ). Pu anche essere una funzione definita direttamente entro la fzero mediante la funzione inline, come dallesempio seguente che calcola la radice di x3-2x-5=0 vicina a 2: >> x=fzero(inline(x.^3-2*x-5),2) x=2.0946 Attenzione: x inteso come un vettore. Definire le operazioni elemento per elemento. (per compatibilit con la versione matlab precedente la funzione pu essere data semplicemente racchiusa tra apici, ad es: fzero(cos,1.5) oppure fzero( x.^3-2*x-5,2) ) [ prima approssimazione della radice. Ma si pu dare anche lintervallo in cui cade: [x0 x1]. Argomenti opzionali: RS]LRQL sono parametri che consentono di definire lerrore max tollerato, oppure il tipo di display (ad es. il risultato di ogni iterata). Vedere Help per dettagli. S S, eventuali parametri della f(x), che sar del tipo: funzione(x, p1, p2). Se RS]LRQL non presente, indicarlo con [] (prima di p1, p2) [sol, valf]=fzero(@funz, x0, opzioni, p1, p2,) Come la precedente, in pi fornisce il valore valf di f(x) sullapprossimazione sol della radice. Lalgoritmo basato sul metodo di Brent, alternato se occorre con iterate che possono essere a seconda dei casi bisezioni, oppure secanti. Lalgoritmo QRQ calcola radici di molteplicit 2. Esempio. Calcolo della radice di f(x)=sin(x) ex+5=0, approssimaz. iniziale x0=1. % funzione frad function f=frad(x) f = sin(x)-exp(x)+5; % Chiamata da Command Window >> x=fzero(@frad, 1)

17

 &DOFROR GL WXWWH OH UDGLFL GL XQD HTXD]LRQH DOJHEULFD Sia anxn+ an-1xn-1+. a1x+ a0=0 lequazione. Il calcolo delle n radici fatto dalla roots: v=roots([an an-1 . a1 a0]) Il risultato il vettore che contiene le n radici (reali e complesse). La funzione: a=poly(v) ricostruisce dal vettore v delle radici il vettore a dei coefficienti del polinomio. Esempio. Radici di x3-6x2-72x-27=0 >> v=[1 -6 -72 -27]; >> roots(v) 12.1229 -5.7345 -0.3884 % attenz. : esce un vettore colonna

 (TXD]LRQL GLIIHUHQ]LDOL RUGLQDULH.

 /H IXQ]LRQL SULQFLSDOL. Matlab possiede diverse funzioni per la risoluzione del problema di Cauchy. Tutte richiedono che i sistemi o le singole equazioni di ordine superiore al primo siano scritti nella forma di sistemi del primo ordine:
G\1 G[ = I 1 ( [, \1 , \ 2 ,  \ Q ) G\ G[ = I ( [, \ , \ ,  \ ) 2 Q 2 1 2    G\ Q G[ = I Q ( [, \1 , \ 2 ,  \ Q ) \1 ( [0 ) = \1,0 \ 2 ( [0 ) = \ 2 ,0 \ Q ( [0 ) = \ Q , 0

Le funzioni principali sono ode23 ed ode45, che implementano rispettivamente i metodi di RungeKutta del 2/3 ordine e del 4/5 ordine. Sintassi della ode23 (e dalla ode45) nella loro forma pi semplice: [x,y]=ode23(@funzione_utente, intervallo, y0) dove: x il vettore colonna dei valori della variabile indipendente in cui la soluzione ottenuta. y una matrice di n colonne (n=numero di equazioni). Ciascuna colonna contiene nellordine i valori di y1, y2,.yn corrispondenti ai valori della variabile situati nel vettore x. funzione_utente lm-file creato dallutente, che dovr calcolare i secondi membri del sistema (od equazione). Nella sua forma pi semplice, sar del tipo: function der = funzione_utente(x ,y) e dovr porre nel vettore FRORQQD der i secondi membri del sistema, calcolati sulla variabile indipendente x, e sugli elementi del vettore colonna y intervallo lintervallo della x in cui richiesta la soluzione (vettore riga, ad es. [0 1]. y0 il vettore delle condizioni iniziali (ad es [y10 y20 yn0] ). Si tenga presente che i nodi xi (componenti del vettore di output x) non sono prevedibili a priori, in quanto gli integratori lavorano D SDVVR YDULDELOH. Se per si desidera avere la soluzione in m determinati punti xi, si deve porre il parametro di input intervallo cos: [x0 x1 x2 .xm] La ode23 e la ode45 lavorano con passo variabile, calcolando ad ogni passo una stima dellerrore ed accettando il risultato se lerrore relativo < 10-3, e lerrore assoluto (per ogni componente della soluzione) < 10-6. La sintassi completa degli integratori Matlab la seguente: [x,y]=ode23(@funzione_utente, intervallo, y0,opzioni, p1, p2,) ( analogo per ode45) dove:
18

opzioni un argomento opzionale, creato con la odeset (vedere Help ). Mediante questo argomento si pu ad esempio variare la tolleranza relativa ed assoluta (RelTol ed AbsTol) rispetto ai valori di default 10-3 e 10-6. Unaltra possibilit quella di generare in output il grafico delle componenti della soluzione (ma questo si pu fare anche utilizzando la plot sugli output x, y). p1, p2, sono eventuali parametri della funzione_utente, che sar in questo caso del tipo function der=funzione_utente(t, y, p1, p2,..) Altre funzioni Matlab per la soluzione delle equazioni differenziali: ode23 - equazioni non-stiff, metodo Runge-Kutta di ordine 4/5 ode45 - equazioni non-stiff, metodo Runge-Kutta di ordine 4/5 ode15s - equazioni stiff, metodo di ordine variabile. ode113 equazioni non stiff, algoritmo Adams Bashfort-Moulton di ordine variabile ode23t - equaz. moderatamente stiff, metodo dei trapezi Le equazioni stiff sono quelle difficili da risolvere numericamente. Per unequazione del 1 ordine in modulo elevata. y=f(x,y) stiff significa che la I ( [, \ ) \ (VHUFL]LR . Calcolare in [0,2] la soluzione del problema di Cauchy y=x sin(y)+1, y(0)=1. Visualizzare la soluzione in forma di tabella e di grafic0. >> [x,y]=ode23(@fode1, [0,2],1]; >> plot(x,y), grid, title(Soluzione equaz. differ. y=x sin(y)+1) >> soluzione=[x y] e la funzione_utente fode1 sar: % m-file della funzione-utente function y1=fode1(x,y) y1=x*sin(y)+1 ; (VHUFL]LR . Calcolare in [0,1] la soluzione del problema di Cauchy y=3 y+2 y2+y-1, condiz. iniziali y(0)=0, y(0)=1/2. Grafico della soluzione e della derivata prima, e visualizzazione della soluzione e della derivata prima in forma di tabella. Matlab richiede che lequazione del 2 ordine sia scritta in forma di sistema del 1 ordine, cio: = \2 \1 \1 (0) = 0 2 = 3 \ 2 + 2 [\1 + \1 1 \2 (0) = 1 / 2 \2 >> [x,y]=ode23(@fzutente, [0,1],[0 1/2]); >> plot(x, y(:,1),r, x, y(:,2),g), grid, title(Soluzione equaz. differ. y=x sin(y)+1) >> [x y(:,1) y(:,2)] e la funzione_utente fzutente sar: % m-file della funzione-utente function y1=fzutente(x,y) y1(1,1)=y(2) ; % Attenzione ! il vettore delle derivate deve essere un vettore colonna y1(2,1)=3*y(2)+2*x*y(1)^2+y(1)-1 ;

19

pstat vettore a 6 componenti, rappresentanti una statistica sulle performances del risolutore: 1- numero di passi corretti, 2- numero di passi non riusciti, 3- numero di valutazioni della funzione_utente, (vedere la struttura opzioni, creata con odeset). Questo parametro di uscita opzionale. funzione_utente la funzione (M-file) che descrive il sistema. tspan - Intervallo di integrazione y0 - vettore colonna delle n condizioni iniziali I parametri di input successivi sono opzionali. opzioni e una struttura creata prima della chiamata del risolutore, mediante la funzione odeset: opzioni=odeset(opzione1, valore1, opzione2,valore2,.) Esempi di opzioni sono: reltol tolleranza relativa . Valori possibili: 1e-3 (default), 1e-4, abstol tolleranza assoluta. Val. possibili: 1e-6 (default), 1e-4, outputfcn Valori possibili per loutput, ad es: odeplot (grafico), odephas2 (grafico nel piano delle fasi), odeprint (visualizza la soluzione man mano che procede)... stat deve essere on se richiesta la statistica nell output del risolutore . Esempio: opzioni=odeset(rltol,1e-4, stats,on,outputfcn,odeplot)
20

p1,p2,eventuali parametri che compaiono dentro il sistema di equazioni differenziali. Funzioni di utilit nellintegrazione delle equazioni differenziali: odefile un help sulla sintassi dei vari integratori. odeset Importante. Gi visto sopra. odeplot, odephas2, odeprint: varie funzioni, che possono essere chiamate dalla opzione outputfcn   /RS]LRQH HYHQWV. Se si vuole arrestare il calcolo al verificarsi di una certa condizione (ad esempio: yn=h , e/o yn=k) occore porre ad on lopzione events: opzioni=odeset(events, on,.) In tal caso, lintegratore passa alla funzione_utente un parametro (flag) che viene posto ad events quando deve essere verificata la condizione. Quindi: 0DLQ intervallo=; y0=.; opzioni= odeset(events, on,. ) [t,y,te,ye]=ode23(funz_utente, intervallo, y0, opzioni) (te, ye sono il valori della var.indipendente e della y al verificarsi dellevento) funz_utente: function [y1, isfinale, derfinale]=funz_utente(t,y,flag) if isempty(flag) % se ode23 non ha assegnato a flag il valore events, calcola y1 secondo lequazione (o % il sistema) differenziale. else switch flag case events y1=y h % assegna ad y1 la condiz. darresto ULIHULWD D ]HUR. Se lequaz. del 2 % ordine, assegnare la condizione darresto se occorre anche alla derivata isfinale=1 % se la condizione proprio una condizione di uscita dalla ode23. otherwise Error(errore non previsto) end end derfinale deve figurare tra gli argomenti anche se non utilizzato.

21

&DOFROR VLPEROLFR FRQ 0$7/$%


Le variabili simboliche debbono essere dichiarate mediante la V\PV: >> syms x y z1 z2 % crea 4 variabili simboliche x y z1 z2 Sulle variabili simboliche si pu operare con gli operatori e le usuali funzioni matematiche, formando espressioni simboliche. Non necessario dichiarare simboliche le espressioni create mediante sole variabili simboliche. Ad es: >> f1=x*y^2-sqrt(y+x) >> f2=3*x-2*y^2 >> f3=f1+f2 E possibile manipolare le espressioni simboliche mediante funzioni analoghe a quelle usate in Matematica, cio expand, factor, collect, Es: >> syms x y >> expand(x+y)^2 x^2+2*x*y+y^2 >> expand(sin(x+y)) sin(x)*cos(y)+cos(x)*sin(y) >> factor(x^2-1) (x+1)*(x-1) In una espressione simbolica E possibile sostituire una varabile (o una intera parte di E) con unaltra variabile, un numero od unaltra espressione. La funzione Matlab : VXEV ( Y Q dove v (vecchio) la parte che viene sostituita, n (nuovo) la parte che sostituisce. Esempio: >> syms x y a >> esp=x^3-2*y+1; >> t=subs(esp,y,a) x^3-2*a+1 >> z=subs(t,x,2) 9-2*a La funzione poly2sym(v) trasforma il vettore v contenente i coefficienti di un polinomio in un polinomio simbolico. Ad es: >> p=[1 3 -2 5]; >> poly2sym(p) x^3+3*x^2-2*x+5 Nota: il calcolo simbolico di Matlab presuppone che la variabile indipendente sia sempre x. Tuttavia questa posizione di default pu essere cambiata. Se E una espressione simbolica dipendente da una sola variabile simbolica (x), la funzione H]SORW(E, [xmin xmax]) grafica E nellintervallo specificato. Il grafico pu essere migliorato utilizzando le solite funzioni axis, xlabel, ylabel, grid.. Esempio: syms x f=x^2-6*x+3 ezplot(f, [-2 2]), xlabel(x), ylabel(f)

Calcolo simbolico dellAnalisi Matematica. Derivazione: GLII ( Calcola la derivata dellespressione simbolica E rispetto alla variabile di default x Esempio: >> syms x >> diff((1+x)/(1+x^2)) 1/(1+x^2)-2*(1+x)/(1+x^2)^2*x GLII (Q deriva E n volte rispetto ad x (n=1,2,). GLII (] deriva E rispetto alla variabile simbolica z (anche diversa da x) LQW ( integrale indefinito di E rispetto alla variabile di default x. Esempio: 22

>> syms x >> f=int(x*cos(x)) cos(x)+x*sin(x) LQW (DE (con E espressione simbolica, a, b valori numerici) calcola lintegrale definito di E tra a e b, rispetto alla variabile di default x. Esempio: >> syms x >> i=int(x*sin(x),-1,1) 2*sin(1)-2*cos(1) >> double(i) % la funzione GRXEOH ( converte lespressione E dalla forma esatta alla numerica decimale (equivalente della funz. N in Matematica). 0.6023

23

Esercizi 1 Di una f(x) conosciamo i seguenti valori (xi,yi): (0 0), (0.25 0.52), (1 1.56), (1.5 2.1). a) stima della f (x) in x=0.5 b) stima dell

1.5

I ( [ )G[

MATLAB >>syms x ; >> t=[0 0.25 1 1.5]; y=[0 0.52 1.56 2.1]; >> a=polyfit(t,y,3) 0.2987 -1.0667 2.3280 -0.0000 >> p=poly2sym(a) p= 112/375*x^3-16/15*x^2+291/125*x-22034213020631/316912650057057350374175801344 >> der=diff(p) 112/125*x^2-32/15*x+291/125 >> d05=subs(der,x,0.5) 1.4853 >> i=double(int(p,0,1.5)) 1.7970 2 - Stabilire graficamente il numero e la localizzazione approssimata delle radici della equazione x(1-exp(-x/2))-1=0, che pu essere posta nella forma x=x exp(-x/2)+1. Stabilire (sempre graficamente) la convergenza o meno verso di esse della iterazione xn+1=xnexp(-xn/2)+1. Applicare questa iterazione per calcolare una radice, arrestando il calcolo quando |xn+1-xn|<10-5. MATLAB (m-file) syms x fx=x*(1-exp(-x/2))-1 ezplot(fx,[-2,2]),grid pause fi=x*exp(-x/2)+1 df=diff(fi) ezplot(df,[-2,2]) pause x0=2; test=1; iter=0 while test, x1=x0*exp(-x0/2)+1; test=abs(x1-x0)>1.e-5; iter=iter+1; x0=x1; end [x0 iter] Stesso calcolo, fatto con la funzione Matlab fzero: >> fzero(inline(x*(1-exp(-x/2))-1), 2) 1.72836 3- Stessa equazione dellesercizio 2. Calcolo della 1 radice con il metodo di Newton, dopo aver verificato che la condizione di convergenza soddisfatta, e con una scelta opportuna dallapprossimazione iniziale x0. Condizione di arresto: |xn+1-xn|<10-6 & |f(xn+1)|<10-6 MATLAB >> syms x >> f=x*(1-exp(-x/2))-1 >> f1=diff(f) >> f2=diff(f,2) >> ezplot(f, [-2,2]), grid >> ezplot(f2, [-2,2])

% la derivate prima serve per il metodo di Newton % il grafico mostra la prima radice tra -2 ed 1 % il grafico mostra che f (x ) > 0 tra -2 e -1. Quindi il metodo di Newton converge prendendo x0=-2 (estremo di Fourier)

% m-file del metodo di Newton x0= -2; test=1; iter=0; eps=1e-6; while test, 24

f=x0*(1-exp(-x0/2))-1; f1=1-exp(-x0/2)+x0*exp(-x0/2)/2; x1=x0-f/f1; test= ~(abs(x1-x0) < eps & abs(f) < eps); x0=x1; iter=iter+1; end [x0 iter] -1.207 5 4 E data la funzione f(x)=1/(1+x2). Trovare

,9

= max | I
2 [ 2

,9

( [ ) | (massimo assoluto)

MATLAB >> syms x >> f=1/(1+x^2) >> d4=diff(f,4) >> d4=simplify(d4) (* espressione identica a quella di Mathematica *) >> ezplot(abs(d4), [-2,2]) (* il massimo per x=0 non rilevabile perch fuori grafico *) >> ezplot(abs(d4,[-0.5, 0.5]), grid (* grafico pi dettagliato, ora si vede che in x=0 d4 ~ = 24 *) [Matlab non possiede una funzione per il calcolo dei massimi e minimi relativi di una f(x)]

25