La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Elementi di MatLab e Mathematica

Presentazioni simili


Presentazione sul tema: "Elementi di MatLab e Mathematica"— Transcript della presentazione:

1 Elementi di MatLab e Mathematica
Grafici e Studio di funzioni

2 Grafica 2D plot Crea un grafico da vettori di valori fplot
Disegna un grafico dal prototipo di una funzione ad una variabile title Aggiunge un titolo al grafico xlabel Label asse x ylabel Label asse y text Mostra un testo ad una posizione generica gtext Mostra un testo ad una posizione acquisita grid Mostra (toglie) la griglia

3 Grafico di sen(x) più grafico di 2sin(x)+cos(x)
Anzitutto generiamo un vettore di valori attraverso linspace (linspace genera un vettore di b valori distanziandoli di un certo coefficiente che accetta come parametro di ingresso), la sintassi è la seguente linspace (a,x,b). Nel nostro caso linspace(0,2*pi,100) Poi definiamo le due funzioni e generiamone i valori: >> x= linspace(0,2*pi,100) >>Y1=sin(x) >>Y2=2*sin(x)+cos(x) Disegnamo il grafico attraverso le seguenti istruzioni >> plot(x,y1,'-',x,y2,':') Esaminiamo il comando plot >> grid >> xlabel('Asse x') >> ylabel('Asse y') >> title('Grafico delle 2 funzioni') >> text(x(5),y1(5),'sin(x)') >>text(x(30),y2(30),'2sin(x)+cos(x)')

4 Le opzioni di plot Il comando plot accetta una serie di parametri tra cui i più importanti sono i colori. La funzione la seguente sintassi plot(x,y,’colore') I colori disponibili sono: ‘c’ = azzurro;‘m’=Magenta;‘y’=Giallo 'r‘= rosso 'g‘=verde 'b‘=blu 'w‘=bianco 'k‘=nero Lo stile che le linee possono assumere sono: '-' per una linea piena, '--' per una linea tratteggiata, ':' per una linea punteggiata, '-.' per una linea tratti-punti. Lo stile prescelto va inserito subito dopo il colore in questo modo plot(x,y,‘colore--') La forma dei punti può essere:'+', 'o','*','x‘, 's‘ per i quadrati, 'd' forma di diamanti, '^' per i triangoli plot(x,y,‘colore--+')

5 Grafico 3D contour,contour3 curve di livello mesh, meshc, meshz
3D prospettici zlabel Label asse z clabel Label curve di livello

6 Calcolo simbolico I calcoli simbolici (ossia calcoli analoghi a quelli che noi eseguiamo con carta e penna quando sviluppiamo il quadrato di un binomio) possono essere effettuati da pochi programmi specifici quali per esempio Maple, Mathematica, MatLab, Scilab e Octave. MatLab può eseguire calcoli simbolici attraverso il Symbolic Mathematics toolbox che utilizza le routine di calcolo simbolico di Maple. Il calcolo simbolico non comporta le approssimazioni introdotte dal calcolo numerico, ma il prezzo da pagare per ottenere questo ricade sulla velocità d’esecuzione e sulla necessità di particolari strutture dati. Verrà fatto largo uso del calcolo simbolico da adesso in poi specialmente per quanto riguarda il disegno di grafici, limiti, derivazione ed integrazione. Inizieremo quindi con la definizione di variabili simboliche e di funzioni simboliche.

7 Variabili e calcoli simbolici
La parola chiave principale è syms che consente di dichiarare quali variabili sono simboliche. L’uso risulta estremamente intuitivo per esempio espandiamo il quadrato di un binomio. >>syms a b; >>expand((a+b)^2) Proviamo invece a risolvere simbolicamente un polinomio di secondo grado: >>syms a b x; rendo simboliche le variabili >>solve(‘a*x^2+b*x+c=0’) Possiamo rendere simbolico il prototipo di una funzione attraverso i seguenti comandi: >>f=inline(‘x^3’) >>f =Inline function: f(x) = x^3 Possiamo rendere simbolica una variabile che verrà usata per i calcoli successivi, la sintassi è la seguente syms variabile, in particolare >>syms x; Adesso possiamo iniziare con lo studio di funzioni.

8 Altri comandi di calcolo simbolico
Proviamo ad inserire i seguenti comandi: >>syms x y >>(x-y)*(x-y)^2 >>ans= (x-y)^3 >>expand(ans) >>ans =x^3-3*x^2*y+3*x*y^2-y^3 >>factor(ans) >>ans = (x-y)^3 Proviamo adesso ad inserire i seguenti comandi >>z = xˆ2 - 2*x*y + y >>5*y*z ans = 5*y*(x^2-2*x*y+y) Come si vede possiamo eseguire molte azioni con il calcolo simbolico

9 Grafico di una funzione ad una variabile
Per disegnare una funzione ad una variabile si utilizza la funzione fplot(funzione ,”estremi”). Dove funzione è la funzione scritta per esteso e gli “estremi” sono i valori massimi e minimi del dominio che stiamo analizzando. Gli “estremi” hanno la seguente sintassi [xmin,xmax] oppure [xmin, xmax, ymin, ymax]. Esempio visualizziamo la seguente funzione x^2. Sintassi >> syms x; //rendiamo la variabile simbolica >>fplot(‘x^2’,[-10 10]); //disegnamo la funzione

10 Grafico di una funzione a due variabili
Il grafico di una funzione a più variabili viene fatto attraverso la funzione mesh che prende come parametri X,Y,Z ed ha il seguente prototipo mesh(X,Y,Z). Il grafico S di una funzione z = f( x, y ) è la superficie S formata da tutti i punti della forma ( x, y, f( x, y ) ). In questo caso le equazioni parametriche di S sono x = u y = v z = f( u, v ) dove i parametri u e v coincidono con le variabili x ed y. A questo punto si procede così: si costruisce una griglia di punti in una regione rettangolare del piano R2, specificando gli estremi di variazione xmin e xmax della variabile x, gli estremi di variazione ymin e ymax della variabile y ed i rispettivi passi Dx e Dy attraverso il comando [ x , y ] = meshgrid( xmin : Dx : xmax, ymin : Dy : ymax ), se gli estremi di variazione ed il passo sono uguali per entrambe le variabili si può scrivere più brevemente [ x , y ] = meshgrid( min : D : max ); si valuta la funzione f in ogni punto della griglia, costruendo la matrice z = f( x, y); infine si rappresenta la supeficie mediante un reticolato con mesh( x, y, z ) oppure mediante un reticolato con pannelli opachi con surf( x, y, z ). NB Il grafico della funzione simbolico a due variabili è fatto attraverso ezmesh

11 Rappresentiamo la seguente funzione
Per rappresentare il diagramma della funzione f, definita da >>[ x , y ] = meshgrid( -2 : .1 : 2 ); >>z = x .*exp( - ( x - y.^2 ).^2 - y.^2 ); >>mesh( x, y, z ) Per rappresentare in uno stesso grafico due diagrammi distinti (di funzioni, superficie, curve, etc.) si utilizza il comando hold on. L'azione di questo comando consiste nel non cancellare il contenuto della finestra grafica quando si disegna un nuovo grafico. Con il comando hold off si annulla l'azione del comando hold on. Ad esempio, per rappresentare simultaneamente il grafico della funzione ed il grafico del piano tangente nell'origine si può scrivere: >>[x,y]=meshgrid(-2:.1:2); >>z=x.^2-y.^2;  >>surf(x,y,z),holdon >>z=0*x;  >>surf( x, y, z )

12 Curve di livello Per disegnare le curve le livello in un grafico 2D si utilizza il comando contour(Z), il comando accetta come dato di ingresso la matrice contenente il valore di Z precedentemente calcolato. Per disegnare le curve di livello 3D si utilizza il comando contour3(Z). E’ possibile disegnare le curve di livello insieme al grafico attraverso il comando subplot;

13 Comando sub plot Il comando subplot ci permette di mettere in una singola finestra n grafici. Il funzionamento è abbastanza semplice, il “foglio” del grafico può essere diviso in una matrice di m righe ed n colonne. Digitando subplot(2,2,1) eseguiamo la seguente azione, dividiamo il foglio del grafico in una matrice di due righe e due colonne e ci stiamo riferendo al primo elemento (grafico) della nostra matrice, digitando subplot(2,2,2) ci riferiamo al secondo grafico disponibile e così via. Per esempio digitiamo i seguenti comandi: >> x= linspace(0,2*pi,100) ; >> Y1=sin(x); >> subplot(2,1,1); >> plot(Y1); >> subplot(2,1,2); >>plot(Y1);

14 Torniamo allo studio della nostra funzione
Abbiamo già definito la funzione Possiamo adesso iniziare a disegnare la funzione attraverso il comando fplof >>syms x; >>fplot(‘x^2’,[ ]) Mettere le caratteristice del grafico Cerchiamo adesso il minimo attraverso la funzione fminbnd(funzione,intervallo di ricerca) che restituisce il valore di x in cui la y è più bassa. >>fminbnd(‘x^2’,-10,10); Si possono anche stampare i metodi numerici utilizzati per trovare il minimo e corrispondentemente il valore assunto dalle y attraverso la seguente sintassi fminbnd(‘x^2’,-300,4,optimset('TolX',1e-12,'Display','iter')) MatLab non dispone di una funzione per il calcolo del massimo, ma viene utilizzata sempre la funzione fminbnd ponendo il meno davanti alla funzione ovvero invertendo il campo di definizione.

15 Studio di funzioni Possiamo cercare gli zeri di una funzione attraverso la fzero (funzione,x1,x2) che restituisce il valore di x in cui la funzione assume valore 0: >>fzero(‘x^2’,0,3) >>ans=0; Se proviamo a trovare i punti in cui la funzione assume valore 0 in un intervallo in cui la funzione non è definita avremo il seguente messaggio di errore: >>fzero(‘1/x’,0,3) Warning: Divide by zero. ??? Error using ==> fzero Function value at starting guess must be finite and real.

16 Studio di funzioni Troviamo il limite della nostra funzione, il limite di una funzione viene trovato tramite il comando limit(funzione,x,valore a cui tende x,direzione opzionale) ove la direzione opzionale dice a MatLab se procedere per difetto( da sinistra) o per eccesso (da destra). Proviamo adesso ad eseguire il limite di x che tende ad infinito: >> limit(x^2,x,inf,’left’) >> inf Per differenziare la funzione rispetto alle sue variabili, dobbiamo utilizzare il comando diff che vuole come parametro di ingresso la funzione da differenziare, ed ha il seguente prototipo diff (funzione). Per avere la derivata n-esima di deve applicare n volte la funzione diff. Calcoliamo la ,la e la ricordando che per osservare il comportamento della funzione dobbiamo studiare gli zeri della derivata prima attraverso fzero(derivata prima) e controllare il segno della derivata seconda e terza. In ultimo testiamo l’invertibilità della funzione attraverso il comando finverse(funzione)

17 Integrali Anche nell’ambito dell’integrazione possiamo sfruttare le potenzialità del calcolo simbolico oppure utilizzare approssimazione numeriche. Quest’ultime si basano soprattutto sulla possibilità di considerare l’integrale come limite di una opportuna somma finita. In particolare si approssima un integrale definito attraverso la somma dove la scelta dei punti xk e dei pesi wk > 0 caratterizza le varie formule di integrazione (formule di quadratura numerica). Il calcolo numerico di un integrale avviene attraverso due funzioni: quad che calcola l’integrale definito usando la regola di Simpson; quad8 che calcola lo stesso integrale usando l'algoritmo di Newton-Cotes; quadl che calcola lo stesso integrale usando l’algoritmo di Labatto; Il funzionamento delle due funzioni è praticamente identico quad(funzione,a,b), dove funzione è la nostra funzione e a e b sono gli estremi in cui l’integrale viene valutato. In breve dobbiamo creare un handle di funzione attraverso il seguente comando: x.^2 >>quad(F,0,2) Il calcolo analitico di un integrale avviene attraverso l’istruzione int (derivata,a,b) che restituisce la funzione originaria.

18 Equazioni differenziali
L’equazione differenziale è, genericamente parlando, una relazione tra una funzione di una o più variabili e le sue derivate. Nel caso di più variabili si parla di equazione differenziale alle derivate parziali, nel caso di una singola variabile si parla di equazione differenziale ordinaria. In simboli l’equazione differenziale di una variabile può essere scritta nella forma: Si dice ordine o grado dell’equazione il grado della più alta derivata presente, ad esempio se abbiamo ,allora è un equazione differenziale del 2° ordine. Generalmente trovare una funzione che soddisfi l’equazione, cioè darne una soluzione esplicita, è difficile se non impossibile. Tuttavia è sempre possibile un’integrazione attraverso calcoli numerici. Prima della formalizzazione del calcolo differenziale si procedeva dalla soluzione implicita alla soluzione esplicita ovvero

19 Equazioni differenziali
Un esempio molto elementare di come le equazioni differenziali vengano usate in economia riguarda lo studio dell’evoluzione della numerosità delle aziende nel territorio italiano. Supponiamo che la “popolazione” sia composta da P0 aziende, chiamiamo P(t) la “popolazione” al tempo t. E’ ragionevole aspettarsi che in media in ogni istante t, dopo un tempo relativamente piccolo dt, nasce una quantità di nuove aziende proporzionale alla numerosità delle aziende preesistenti ed al tempo trascorso, cioè pari a nP(t)dt dove n è un numero costante che indica il numero di aziende fondate; analogamente, nello stesso lasso di tempo, è lecito aspettarsi che altre aziende cessino l’attività e le indichiamo con mP(f)dt. Il numero di aziende al tempo t+dt sarà quindi data dal totale delle aziende al tempo t a cui si aggiungono le aziende appena fondate e si sottraggono quelle che hanno cessato l’attività, ovvero: da cui che può essere riscritta Risolvere questa equazione significa determinare l’andamento della numerosità delle aziende nel tempo, nel nostro caso

20 Risolviamo questa equazione differenziale con MatLab
MatLab risolve le equazioni differenziali sia numericamente che analiticamente. Vediamo la soluzione analitica del problema prima presentato, ovvero della funzione Anzitutto MatLab richiede la creazione di variabili simboliche attraverso il comando syms variabili simboliche >>syms t Successivamente bisogna creare la funzione che verrà studiata assegnandogli un nome, il differenziale della funzione ha il seguente nome Dy che indica a MatLab che a sinistra del segno = c’è qualcosa che è un una derivata di y, mentre a destra del segno = vi è l’equazione vera e propria >> DE1='Dy=(n-m)*y‘ infine si invoca la funzione dsolve che accetta in ingresso la funzione da noi definita, insieme ad altri parametri. L’output di MatLab è il seguente C1*exp((n-m)*t) In caso di impossibilità di soluzione viene visualizzato il messaggio Warning: explicit solution could not be found


Scaricare ppt "Elementi di MatLab e Mathematica"

Presentazioni simili


Annunci Google