P. 1
Tutorial Matlab Per Il Calcolo

Tutorial Matlab Per Il Calcolo

|Views: 146|Likes:
Published by gdenunzio
Un tutorial su matlab, molto bello! Avanzato!
Un tutorial su matlab, molto bello! Avanzato!

More info:

Categories:Topics
Published by: gdenunzio on Sep 06, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/16/2014

pdf

text

original

Laboratorio Matlab

Matematica I:

Calcolo differenziale, Algebra lineare, Probabilit` a e Statistica

G.Aletti, G.Naldi, L.Pareschi

Introduzione a MATLAB

Introduzione a MATLAB
Questo capitolo introduttivo si propone lo scopo di fornire una breve guida a MATLAB. Per maggiori approfondimenti, oltre ai laboratori MATLAB presentati nel seguito, rimandiamo a testi pi` u specifici 1 . Per iniziare a lavorare con MATLAB in ambiente Windows solitamente occorre selezionare l’icona di MATLAB nel desktop o nella barra comandi, mentre se si usa il sistema operativo Unix (o qualche derivato come Linux) ` e necessario scrivere matlab, seguito da invio, in una finestra al prompt dei comandi. Una volta avviato, MATLAB vi offre diverse finestre; fisseremo la nostra attenzione sulla finestra dei comandi caratterizzata dal prompt >> se state utilizzando la versione Professional Edition o dal prompt EDU>> nel caso abbiate a disposizione la versione Student Edition. Per comodit` a nel seguito utilizzeremo sempre >> per indicare il prompt della riga comandi della finestra principale di MATLAB.

Prime operazioni
MATLAB pu` o essere utilizzato in modo diretto per calcolare semplici espressioni matematiche: >> 8 + 3 - 1 ans = 10 >> 1/sqrt(2) ans = 1.4142 La funzione sqrt ` e una funzione matematica elementare di MATLAB che calcola la radice quadrata del suo argomento. La risposta ` e del tipo ans=..., dove ans ` e una variabile generata automaticamente da MATLAB quando un’espressione non ` e assegnata a una variabile definita dall’utente. Le variabili definite dall’utente possono essere utilizzate in altre espressioni matematiche >> a = 8 + 3 - 1 a = 10 >> b = 1/sqrt(2) b = 1.4142 >> c = a + b c = 11.4142
1 Si veda oltre alla Reference Guide di MATLAB, il testo MATLAB: concetti e progetti, ed. Apogeo 2002, degli stessi autori.

Introduzione a MATLAB

3

Per evitare la visualizzazione del risultato basta concludere l’espressione con un punto e virgola ;. Per visualizzare il contenuto di una variabile ` e sufficiente scriverne il nome/i eventualmente separati con una virgola: , >> a,b,c a = 10 b = 1.4142 c = 11.4142 Pi` u espressioni o pi` u istruzioni MATLAB possono convivere sulla stessa riga, basta che siano separate da un punto e virgola (se vogliamo sopprimere la visualizzazione di qualche risultato) oppure da una virgola (se vogliamo visualizzare il risultato). Per esempio > a=2+3/5; b=sqrt(a), c=a*b b = 1.6125 c = 4.1924 I nomi delle variabili possono essere lunghi un massimo di 31 caratteri con la distinzione tra lettere maiuscole e minuscole, per esempio le variabili a e A sono distinte. La prima lettera di una variabile deve essere un carattere alfabetico (a-z, A-Z), mentre dalla seconda lettera in avanti possiamo utilizzare un qualsiasi carattere alfanumerico incluso il simbolo underscore “ ”.

Variabile ans i,j pi eps realmax realmin Inf NaN computer version

Significato valore ultima operazione eseguita non assegnata a una variabile √ unit` a immaginaria, −1 approssimazione di π , 3.14159265... precisione macchina massimo numero macchina positivo rappresentabile minimo numero macchina positivo rappresentabile ∞, ossia un numero maggiore di realmax Not a Number, tipicamente il risultato di un’espressione 0/0 tipo di computer versione di MATLAB

Tabella 2.4 Le principali variabili predefinite in MATLAB.

Alcune variabili sono predefinite in MATLAB per la memorizzazione di valori speciali. Parte di queste variabili sono riportate nella Tabella 2.4. Il significato delle variabili eps, realmax, realmin, Inf e NaN ` e strettamente legato all’aritmetica e all’insieme dei numeri macchina utilizzato. I principali operatori disponibili in MATLAB sono indicati nella Tabella 2.5. Vi sono gli usuali operatori aritmetici e altri operatori preceduti da un punto, vedremo in seguito il significato delle operazioni corrispondenti. I numeri in virgola mobile (la rappresentazione che un calcolatore fa dei numeri reali) non sono l’unico tipo di dato numerico ammesso. Un altro tipo di dato utile in varie applicazioni e presente in MATLAB sono i numeri complessi e le operazioni con questi. Un numero complesso z , in forma algebrica z = Re z + iIm z (con Re z , Im z parte reale e parte immaginaria, due valori reali), pu` o essere scritto in modo simile anche in MATLAB:

4

Introduzione a MATLAB

Operatore + * / ˆ .* ./ .ˆ

Significato addizione sottrazione moltiplicazione divisione elevamento a potenza moltiplicazione termine a termine per vettori divisione termine a termine per vettori elevamento a potenza termine a termine per vettori

Tabella 2.5 Le principali operazioni definite in MATLAB.

>> a=3+4i; >> b=2.6+3.3i; >> a+b ans = 5.6000 + 7.3000i >> a*b ans = -5.4000 +20.3000i Ricordiamo che l’unit` a immaginaria, rappresentata dalle variabili i e j, ` e tale che i2 = 2 j = −1. Le forme a=3+4i, a=3+4*i, a=3+4j, a=3+4*j sono accettate e sono equivalenti. Oltre alle operazioni di base, molte delle funzioni comunemente disponibili per una calcolatrice scientifica sono presenti in MATLAB. Per esempio >> y=cos(pi/4)+sin(pi/4) y = 1.4142 utilizza le funzioni trigonometriche coseno cos e seno sin, con argomento π/4, somma tali valori e infine assegna il risultato alla variabile y . Si noti che il risultato dell’espressione cos (π/4) + sin (π/4) ` e visualizzato utilizzando solo ` quattro cifre decimali. Questa ` e l’impostazione del formato standard di MATLAB. E possibile modificarla tramite il comando format. Per esempio >> format long >> cos(pi/4)+sin(pi/4) ans = 1.41421356237309 >> format short abilita prima il formato a 14 cifre decimali (format long), calcola il risultato, poi riattiva il formato standard a 4 cifre decimali (format short)2 . Per numeri molto piccoli o molto grandi ` e comoda la notazione esponenziale scientifica in cui si esprime un valore numerico come un numero (maggiore di 1 e minore di 10, detto mantissa ), moltiplicato per una opportuna potenza di 10, detta esponente. Per esempio il numero 31415000000 sar` a rappresentato come 3.1415e+010 che significa 3. 1415 × 1010 , mentre il numero 0.000001234 come 1.2340e-006, ossia 1. 234 × 10−6 . Alcune funzioni matematiche elementari predefinite in MATLAB, sono riportate nella Tabella 2.6, per una lista pi` u ampia si provi il comando help elfun.
2 La modifica della visualizzazione di un risultato tramite format non ha nulla a che vedere con l’effettiva precisione con cui MATLAB effettua il calcolo. Tutte le operazioni in MATLAB sono eseguite in doppia precisione, questo vuol dire avere almeno 15 cifre decimali significative.

Per accedere al valore di una componente del vettore (riga o colonna) basta scrivere >> x(4) ans = 7 . Questo ` e esattamente il modo in cui MATLAB definisce i vettori.3.13.15] x = 1 3 5 7 9 11 13 15 Le componenti in questo caso sono delimitate da un punto e virgola che serve per indicare la fine della riga. Per memorizzare il vettore x = (1.15)T nella forma riga in MATLAB possiamo scrivere >> x = [1 3 5 7 9 11 13 15] x = 1 3 5 7 9 11 13 15 Le parentesi quadre delimitano gli elementi del vettore. rispettivamente. una matrice di tipo 1 × 8 (una riga e otto colonne) o 8 × 1 (otto righe e una colonna).5.3.7. Per esempio un vettore di dimensione 8 nella forma riga o colonna ` e. Vettori e matrici Se le operazioni viste nella sezione precedente sono comuni a molte calcolatrici tascabili non altrettanto si pu` o dire della capacit` a di effettuare calcoli con matrici e vettori. per MATLAB anche le quantit` a scalari sono semplici matrici di tipo 1 × 1.7.Introduzione a MATLAB 5 Funzione sin cos asin acos tan atan exp log log2 log10 sqrt abs sign Significato seno coseno arcoseno arcocoseno tangente arcotangente esponenziale logaritmo naturale. Dall’algebra lineare sappiamo come i vettori possono essere considerati casi particolari di matrici. Non solo.5. Il vettore colonna pu` o invece essere ottenuto come segue >> x = [1.9.9.11. base e logaritmo in base 2 logaritmo in base 10 radice quadrata valore assoluto la funzione segno Tabella 2.6 Alcune funzioni matematiche predefinite in MATLAB. In tale ambito MATLAB esprime al meglio le sue potenzialit` a (non a caso l’acronimo MATLAB sta per MATrix LABoratory). mentre gli spazi bianchi le singole componenti del vettore riga.13.11.

9 11 13 15] A = 1 3 5 7 9 11 13 15 Anche in questo caso gli spazi separano gli elementi per colonna e il punto e virgola separa le righe..3) ans= 5 Se vogliamo quindi cambiare l’elemento A(1. Per passare da vettori riga a vettori colonna si utilizza il simbolo di apostrofo. La funzione MATLAB che ci consente di determinare le dimensioni di una matrice ` e size >> size(A) ans = 2 4 Se vogliamo controllare le variabili che attualmente MATLAB ha memorizzato nell’area di lavoro.3)=4. 15 . Il primo comando. per esempio >> x = [1 3 5 7 9 11 13 15]’ x = 1 3 5 7 9 11 13 15 Dal punto di vista dell’algebra lineare l’operazione che si effettua ` e la trasposizione. possiamo usare i comandi who e whos. >> who Your variables are: A x 5 13 9 7 > . elenca i nomi delle variabili attualmente presenti mentre whos aggiunge informazioni riguardanti il tipo di variabile e l’occupazione di memoria. Workspace.3) basta scrivere >> A=(1. Potremo accedere agli elementi della matrice in maniera naturale utilizzando i corrispondenti indici >> A=(1. who. La funzione length in MATLAB consente di determinare la lunghezza di un vettore >> length(x) ans = 8 Se ora vogliamo inserire la matrice 2 × 4 8 1 3 : A=> 9 11 possiamo scrivere >> A = [1 3 5 7 .6 Introduzione a MATLAB Se cambiamo il valore di una componente del vettore dobbiamo ricordarci di usare il punto e virgola per evitare la visualizzazione dell’intero vettore >> x(4)=1.

n=8. Il vettore vuoto ha lunghezza zero. x = [1 3 5 7 9 11 13 15].0000 0. Per esempio >> a = 0.8000 1. Il vettore x utilizzato in precedenza.4000 0.0000 Nel caso in cui il passo non sia intero pu` o risultare difficile l’uso dell’operatore due punti. In questo caso ` e preferibile utilizzare il comando linspace.b.7143 0. >> x = linspace(a. Per rimuovere le variabili dalla memoria lavoro di MATLAB si utilizza l’istruzione clear >> clear x A Un operatore di fondamentale importanza per costruire vettori equispaziati e per operare con insiemi di indici ` e la notazione due punti . potrebbe essere generato come >> x = 1:2:15.6000 0. Altri esempi sono i seguenti >> y=1:9 y = 1 2 >> z=10:-2:2 z = 10 8 3 6 4 4 5 2 6 7 8 9 Se il valore iniziale ` e maggiore di quello finale e il passo ` e positivo viene creato un vettore vuoto >> x=7:1 x = [] Si noti che il vettore vuoto (tabella vuota) si denota in MATLAB con [].4286 0. Un uso particolarmente efficace della notazione due punti si ha nella gestione di indici di vettori e matrici.n) x = Columns 1 through 7 0 0.1429 0. per esempio >> x=0:0.Introduzione a MATLAB 7 >> whos Name A x Size 2x4 1x8 Bytes 64 64 Class double array double array Grand total is 16 elements using 128 bytes Come si pu` o notare una variabile reale occupa 8 byte di memoria. La notazione due punti “funziona” anche con valori non interi. b=1. dimensione 0 × 0. Per esempio se vogliamo creare un vettore con un numero prefissato di punti equispaziati all’interno di un dato intervallo.2:1 x = 0 0. Per esempio utilizzare i due punti “:” singolarmente significa selezionare ogni elemento di una data riga o colonna .8571 restituisce un vettore riga x di lunghezza n con la propriet` a che l’elemento di indice i vale x(i) = a + (i − 1) · (b − a)/(n − 1).2000 0.5714 0.2857 Column 8 1.

eye.4000 0. alcune di queste sono riportate per convenienza nella Tabella 2.8000 o parti di righe e colonne in matrici e sottomatrici >> A = [1 2 3. 4 5 6.3) B = 0 0 0 0 >> Z = zeros(2) Z = 0 0 0 0 0 0 Analogamente per altre funzioni quali ones. 7 8 9].6000 >> A = [1 2 3 . 4 >> A(2. 4 5 6.1:2) ans = 7 8 >> A(2:3. ma applica l’operazione di coniugazione a ogni componente . 4 5 6 . 7 8 9].:) ans = 7 8 9 Naturalmente ` e possibile specificare un intervallo di indici ed estrarre cos` ı parti di vettori (o matrici) >> x=0:0. >> A(:. 3 6 9 Esistono molte funzioni MATLAB che consentono di costruire particolari matrici e vettori. >> A(:.2000 0. >> A(3. Per esempio abbiamo >> B=zeros(2. >> x(2:5) ans = 0.2:1.1:2) ans = 4 5 7 8 La notazione due punti pu` o essere usata anche per assegnare in modo rapido nuovi valori a righe e colonne di matrici >> A = [1 2 3. 7 8 9].7. Attenzione.:)=2:2:6 A = 1 2 2 4 7 8 5 6.1) ans = 1 4 7 >> A(3. Queste funzioni MATLAB possono essere utilizzate con un diverso numero di parametri.1:2) ans = 1 2 4 5 7 8 0.0. rand.8 Introduzione a MATLAB >> A = [1 2 3. 7 8 9]. nel caso la matrice abbia elementi complessi la trasposizione non si limita a scambiare righe con colonne.

0000i La funzione eye genera invece la matrice identit` a Operazioni tra matrici La maggior parte delle funzioni predefinite in MATLAB accettano come argomenti array a pi` u indici. 6+7i 1-4i] A = 1.0000 0.0472 1.5000 -0. >> A=[1+3i 2+5i .n).0000i 6.5).0000 2.0000i 2.0000i 1.6180 3.0000 >> A’ ans = 1.0000 + 7. Per esempio >> n = >> x = >> c = >> [x’ ans = 7. Uno dei vantaggi principali dell’uso di funzioni vettoriali si ha in termini di velocit` a di esecuzione delle operazioni rispetto alla corrispondente esecuzione in forma scalare. cos(x). Consideriamo alcune operazioni che coinvolgono array a pi` u indici e che agiscono simultaneamente su tutte le componenti dell’array stesso (si veda la Tabella 2.5.0944 2.0000 -0.0000 . L’istruzione [x’ c’ s’] crea una matrice le cui colonne sono i vettori trasposti x’.0000i . c’] 1.7. c’ e s’.0000 >> I3 = I3 = 1 0 0 eye(3) 0 1 0 0 0 1 + 5.0000i + 4.4.0000 + 3.0000 0 0.0000 .8660 0.5000 0.8660 -1.5708 2.pi. linspace(0.0000i 1.0000i .7 Alcune funzioni predefinite per la costruzione di particolari matrici in MATLAB. .3. Vediamo subito degli esempi.0000 6.1] matrice identit` a matrice diagonale Tabella 2.5236 1.1416 L’istruzione c=cos(x) applicata a un vettore x restituisce un vettore c di uguali dimensioni e tipo con la propriet` a che l’elemento di indice i vale c(i) = cos(x(i)).Introduzione a MATLAB 9 Funzione linspace logspace zeros ones rand eye diag Azione vettore riga di elementi equispaziati vettore riga di elementi equispaziati in scala logaritmica matrice contenente solo elementi uguali a zero matrice contenente solo elementi uguali a uno matrice contenente numeri pseudo-casuali in [0.

^2 ans = 1 9 100 13. la somma e la differenza tra vettori.0000 0.^x ans = 1. >> 4*x ans = 4 12 20 28 >> x+y ans = 51 43 25 37 >> y-x ans = 49 37 15 23 36 19 1 Le tre operazioni appartengono all’algebra lineare e sono la moltiplicazione di un vettore per uno scalare.0000 >> x./x restituendo un vettore le cui componenti sono il risultato della divisione delle corrispondenti componenti di y per quelle di x.3333 25 49 210 90 4.10 Introduzione a MATLAB >> x = [1 3 5 7 9].1111 L’istruzione x. Allo stesso modo agisce la divisione puntuale y. 7 8 9]. >> C = A+B C = 2 3 4 6 7 8 10 11 12 >> 2*B ans = 2 4 6 2 4 6 2 4 6 Al contrario le operazioni puntuali sono tipiche di MATLAB e non hanno necessariamente un corrispondente dal punto di vista dell’algebra lineare. 4 5 6 . Per esempio >> x. Infine l’espressione x.0000 0.0e+010 * 0. Per vettori x.2857 1. >> B = [ 1 1 1 . ogni componente del vettore y ` e elevato alla potenza determinata dalla corrispondente componente del vettore x >> y. In maniera del tutto analoga le precedenti operazioni agiscono su matrici >> A = [ 1 2 3 .*y effettua la moltiplicazione puntuale tra vettori e fornisce un vettore con la propriet` a che ogni sua componente ` e uguale al prodotto delle corrispondenti componenti dei singoli vettori x e y.ˆ 2 eleva ogni componente del vettore x al quadrato. y con le stesse dimensioni ` e anche possibile l’operazione puntuale y. 3 3 3]./x ans = 50. >> y = [50 40 20 30 10].0000 81 4. 2 2 2 .1870 0. Le uniche eccezioni a questa regola si verificano quando le precedenti operazioni vengono applicate coinvolgendo una matrice e una costante.0003 2.ˆ x.*y ans = 50 120 >> y.1000 Le stesse operazioni possono essere applicate nel caso di vettori colonna o pi` u in generale ` essenziale che gli operandi siano dello stesso tipo e abbiano le nel caso di matrici. E stesse dimensioni. In tal caso MATLAB considerer` a la costante come un vettore di pari dimensioni avente tutte componenti costanti .

Costruiamo prima una successione di valori della funzione del tipo .1.0000 0./(120+60*x+12*x.5).Introduzione a MATLAB 11 >> x = 1:7. per esempio il grafico di una funzione y = f (x). >> y = (120-60*x+12*x. Con MATLAB ` e possibile realizzare grafici di funzioni anche in pi` u dimensioni e realizzare veri e propri programmi.1].5000 9 -5 0. Grafici bidimensionali vengono utilizzati per visualizzare la variazione di una variabile rispetto a un’altra.3333 0. per esempio la funzione razionale f (x) = 120 − 60x + 12x2 − x3 120 + 60x + 12x2 + x3 sull’intervallo [0.^2-x. tramite il Symbolic Toolbox con MATLAB ` e possibile anche eseguire calcoli simbolici.0000 0. possiamo per esempio scrivere >> ezplot(’sin(x)’. i valori della funzione in corrispondenza della successione di punti definita dal vettore x sono creati con una singola istruzione vettoriale e assegnati al vettore y.5000 0. Cenni di grafica Uno dei punti di forza di MATLAB ` e la sua capacit` a grafica che consente di rappresentare dati memorizzati in vettori e matrici in molti modi differenti.6667 Consideriamo ora il problema del calcolo di una tabella di valori di una funzione non predefinita in MATLAB.2500 0. >> x+2 ans = 3 4 >> 2-x ans = 1 0 >> 2.4000 0. Ma come ha fatto MATLAB a realizzare il grafico della funzione? Se procediamo in modo diverso possiamo capire quale automatismo sia insito nella funzione ezplot.4724 1. Se vogliamo visualizzare in forma grafica la funzione sin(x) sull’intervallo [0.3679 Utilizzando le operazioni vettoriali. Non solo.^2+x.^3).7500 0.6065 0.^3).2*pi])./x ans = 2. >> [x’ y’] ans = 0 1.7788 0.0000 6 -2 7 -3 8 -4 0.0000 5 -1 1.[0. Per costruire una tabella di 5 valori possiamo utilizzare la sequenza di istruzioni >> x = linspace(0. Funzioni avanzate MATLAB ` e molto pi` u di un semplice software in grado di eseguire calcoli numerici (anche se in forma molto sofisticata come abbiamo visto nei paragrafi precedenti).2π ].2857 0.

sar` a sufficiente aumentare il numero di punti n in modo tale che i segmenti di raccordo siano cos` ı piccoli da fornire l’impressione di una curva continua (vedi la Figura 2. in questo caso i parametri aggiunti specificano lo stile della linea del grafico. Se vogliamo evidenziare i vertici della poligonale cos` ı costruita possiamo utilizzare l’istruzione >> plot(x. dove in questo caso abbiamo scelto 31 punti equispaziati. Non cambia la funzione ma i parametri in ingresso. Possiamo inoltre commentare il grafico aggiungendo delle scritte sugli assi coordinati e mettendo un titolo >> title(’Grafico della funzione sin(x)’) >> xlabel(’asse x’) >> ylabel(’asse y’) Se vogliamo produrre un risultato visivamente privo di “spigoli”. . >> y = sin(x). Per esempio >> x = linspace(0.y) In questo modo otteniamo una rappresentazione grafica della tabella di valori ottenuta semplicemente raccordando con segmenti di retta nel piano cartesiano (x.2*pi). >> a = axis a = 0 7 -1 1 >> axis([a(1) pi a(3) a(4)]). nella Tabella 2. La scelta della scala di visualizzazione ` e automatica. >> y = sin(x). ` possibile cambiare scala nei grafici tramite la funzione axis che permette di stabilire E la grandezza della finestra in cui vedere il grafico.12 Introduzione a MATLAB >> n = 31.y (i)) in modo ordinato al variare di i da 1 a 31.8 riportiamo le opzioni principali. Esistono molte possibilit` a per personalizzare un grafico come quello creato nell’esempio precedente.’-o’) che disegna una linea con un circoletto in corrispondenza dei vertici.8 Principali opzioni del comando plot in MATLAB. >> plot(x.n). o x + * s d v Simbolo punto circoletto per pi` u asterisco quadratino diamante triangolo : -.y ) i vertici (x(i).5). Per realizzare il grafico basta aggiungere l’istruzione >> plot(x.2*pi. -- Linea linea linea linea linea continua punteggiata punto tratteggiata Tabella 2. >> x = linspace(0.y). Colore y m c r g b w k giallo magenta ciano rosso verde blu bianco nero .y.

Per aggiungere una legenda all’interno del grafico possiamo infine utilizzare la funzione legend >> legend(’Coseno’.6 0.π ].2*pi).y2) che utilizza in modo automatico linee di colore differente per i diversi grafici. >> y1 = cos(x).2 0 0 −0.y1.4 asse y asse y 0.6 0. Lo stesso risultato pu` o essere ottenuto in forma pi` u compatta tramite la singola funzione plot per grafici multipli >> plot(x.2 −0. ’Intersezione’) . E u funzioni nella stessa finestra grafica. Per esempio se vogliamo realizzare i grafici delle funzioni seno e coseno sull’intervallo [0.’-’) hold on plot(x.2 −0. Infine se vogliamo realizzare i due grafici evidenziando per esempio i punti di intersezione delle due curve possiamo scrivere >> plot(x.[1 5]*pi/4.’o’). Il comando axis usato da solo fornisce un vettore contenete i valori ` possibile inoltre sovrapporre grafici di pi` attuali della finestra grafica.2π ] con 31 punti e 101 punti. Per disegnarne i grafici sovrapposti possiamo scrivere (utilizzando due tratti di linea diversi) >> >> >> >> plot(x.2 0.y1.8 −0.x.[1 -1]/sqrt(2).6 −0.’--’.y2.x.y1.8 0.8 −1 0 1 2 −1 asse x 3 4 5 6 0 1 2 asse x 3 4 5 6 Figura 2. per ottenere solo la parte di grafico sull’intervallo [0. La funzione axis([xmin xmax ymin ymax]) impone che l’intervallo di valori di x sia compreso tra xmin e xmax e quello di y tra ymin e ymax.5 Rappresentazione grafica dei valori della funzione sin(x) in [0.Introduzione a MATLAB 13 Grafico della funzione sin(x) 1 Grafico della funzione sin(x) 1 0.4 −0. >> y2 = sin(x).6 −0. Il comando hold off ritorna all’impostazione originale.4 0.’--’) hold off Il comando hold on mantiene l’attuale contenuto della finestra grafica in modo tale che i grafici successivi si sovrappongano nell’attuale finestra grafica.8 0. ’Seno’.2π ] nella stessa finestra grafica dobbiamo costruire i vettori di valori per le due funzioni: >> x = linspace(0.y2.4 −0.’-’.

per toglierla grid off.6 si mostra il risultato.9 riportiamo le principali funzioni che consentono di aggiungere commenti a un grafico. Nella Tabella 2.4 0.8 −1 0 1 2 3 4 5 6 7 Figura 2. In questo modo si crea un M-file MATLAB. M-files Le successioni di comandi viste negli esempi precedenti possono essere memorizzate di` possibile rettamente in un file di testo. una rapida scorciatoia consiste nell’utilizzare il comando edit dalla finestra principale di MATLAB.6 0.9 Funzioni per perfezionare i grafici in MATLAB. ossia .m all’interno del quale abbiamo posto in successione i comandi MATLAB per generare il grafico della funzione sin(x).8 0. Come per la funzione hold.6 Sovrapposizione dei grafici delle funzioni seno e coseno con una legenda. Per aggiungere la griglia grid on. Funzione axis title xlabel ylabel grid legend text Significato prescrive i valori minimi e massimi sugli assi x e y inserisce un titolo nel grafico inserisce un nome per l’asse x inserisce un nome per l’asse y inserisce una griglia sugli assi x e y inserisce una legenda per identificare i diversi grafici inserisce una stringa di testo in una posizione specificata Tabella 2. Ulteriori funzioni possono essere sperimentate utilizzando il comando help graph2d.4 −0. Per attivare tale editor ` e sufficiente selezionare il menu File nella finestra principale di MATLAB e poi New e quindi Mfile.6 −0. Nella Figura 2.14 Introduzione a MATLAB 1 Coseno Seno Intersezione 0. Supponiamo di aver scritto uno script M-file di nome esempio. scrivere solo grid permette di passare da on a off e viceversa.2 0 −0. L’ambiente di sviluppo MATLAB fornisce un editor orientato alla scrittura di M-file. In alternativa. E creare un M-file tramite un editor di testi qualunque.2 −0.

plot(x. Il prezzo da pagare per ottenere questo ricade sulla velocit` a d’esecuzione e sulla necessit` a di particolari strutture dati. all’interno del menu File dalla finestra dell’editor di MATLAB.n). La parola chiave principale ` e syms che consente di dichiarare quali variabili sono simboliche. Digitando il nome assegnato allo script nella finestra principale di MATLAB. Mathematica.10 Alcuni comandi per la gestione del file system. y = sin(x). L’uso risulta poi estremamente intuitivo >> syms a b >> expand((a+b)^2) ans = a^2+2*a*b+b^2 Abbiamo usato il comando expand che forza MATLAB ad “espandere” l’espressione simbolica. MATLAB dir type delete cd pwd mkdir copyfile MS-DOS dir type del cd chdir mkdir copy UNIX ls cat rm cd pwd mkdir cp Tabella 2.y.. MATLAB.’-o’) Per salvare il nostro script e assegnargli il nome prestabilito. Ritroviamo la nota formula per il calcolo di radici di equazioni di secondo grado tramite >> syms a b x >> solve(’a*x^2+b*x+c=0’) . ottenendo lo stesso risultato che si sarebbe avuto scrivendo uno a uno i comandi elencati nello script. Tali linguaggi dispongono di librerie numeriche opportune che consentono di eseguire in modo semplificato operazioni molto complesse. In generale i risultati numerici possono essere ottenuti molto pi` u velocemente tramite un calcolo numerico invece di una valutazione numerica di un calcolo simbolico. Scilab e Octave.Introduzione a MATLAB 15 n = 31. Al contrario calcoli simbolici (ossia calcoli analoghi a quelli che noi eseguiamo con carta e penna quando sviluppiamo il quadrato di un binomio (a + b)2 = a2 + b2 + 2ab) possono essere effettuati da pochi programmi specifici quali per esempio Maple. si richiama e si esegue questo M-file. Il calcolo simbolico non comporta le approssimazioni introdotte dal calcolo numerico. MATLAB mette a disposizione alcuni comandi.2*pi.10. x = linspace(0. Per una minima manipolazione dei file su disco. i principali sono riassunti nella Tabella 2. ` e sufficiente selezionare il menu Save as.. In particolare MATLAB pu` o eseguire calcoli simbolici attraverso il Symbolic Mathematics toolbox che utilizza le routine di calcolo simbolico di Maple. Il calcolo simbolico Molti linguaggi di programmazione consentono di effettuare calcoli numerici analoghi a quelli visti finora. scrivendo quindi esempio.

0. di integrali e di derivate.x.b) ans = 1/3*b^3-1/3*a^3 >> diff(exp(-x^2)) ans = -2*x*exp(-x^2) .x.a.x.’right’) ans = inf >> limit(1/x.inf) ans = 0 >> syms a b >> int(x^2.0.’left’) ans = -inf >> limit(1/x. Per esempio il calcolo di limiti. Si considerino i seguenti esempi (rinviamo ai rispettivi capitoli per una trattazione pi` u approfondita) >> syms x >> limit(1/x.16 Introduzione a MATLAB ans = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] Nel corso del presente testo si ` e fatto largo uso del calcolo simbolico in quanto consente sostanzialmente di risolvere la maggior parte dei problemi analitici che vengono affrontati.

0 Preliminari 0. .7977e+308 ans = 2. Per vedere il pi` u grande numero macchina e il pi` u piccolo numero macchina. La precisione macchina ` e legata all’approssimazione ottenibile con l’insieme dei numeri macchina a disposizione. dt si chiama mantissa e l’esponente p ` e un intero. . I numeri macchina sono rappresentati usualmente considerando l’idea della notazione scientifica dove un numero ` e espresso come il prodotto di una quantit` a per una opportuna potenza di una assegnata base. realmin ans = 1. dove β ` e la base (per esempio β = 2). Il numero di cifre t ` e fissato per ogni insieme di numeri macchina che stiamo considerando.U ]. . lo indicheremo con fl(z). + dt β −t × β p .2251e-308 In generale dato un numero reale z dobbiamo trovare un suo rappresentante tra i numeri macchina.1 Numeri macchina Una approssimazione inevitabile che si incontra in MATLAB o in ambienti di calcolo simili ` e dovuta alla rappresentazione dei numeri reali in un calcolatore. In MATLAB >> eps ans = 2. Il numero macchina x ` e quindi nella forma x=s× d1 β −1 + d2 β −2 + . .2204e-016 e si pu` o verificare un’interessante propriet` a >> 1+eps > 1 ans = . Per z = 0 e arrotondando al numero macchina pi` u vicino l’errore relativo (ovvero l’errore z −f l(z ) valutato rispetto a una quantit` a di riferimento. A meno che z sia gi` a un numero macchina si incorre in un errore. . e l’esponente p ∈ [L. z 2 dove la quantit` a eps ` e detta precisione macchina. Ogni cifra soddisfa 0 ≤ dk ≤ β − 1. noi considereremo lo stesso z ) che si commette ` e z − f l(z ) 1 ≤ eps = β 1−t . >> realmax .t. In particolare abbiamo a disposizione solo un numero finito di cifre. . l’insieme delle t cifre d1 d2 . k = 1.. .

per esempio >> 3>=5 ans =0 >>3<7 ans = 1 Riassumendo. Abbiamo che il numero >> t=0. Per fare ci` o abbiamo bisogno del Symbolic Toolbox.2 Calcoli simbolici Va precisato che MATLAB ` e in grado di eseguire anche calcoli esatti. Ricordiamo che il risultato di un confronto.’e’) ans = 1/10+eps/40 Utilizzando l’opzione ’d’ visualizziamo la sua rappresentazione decimale con 32 cifre >> sym(t. o di una espressione logica. bisogna prestare molta attenzione quando si effettuano operazioni di calcolo tramite un calcolatore o una semplice calcolatrice tascabile. ` e nullo se ` e falso. Infatti sar` a inevitabile la presenza di errori nel risultato dovuta all’approssimazione numerica.10000000000000000555111512312578 Interessante infine ` e anche l’uso dell’istruzione format rat che visualizza l’approssimazione tramite razionali di un qualunque numero inserito.’d’) ans = .1 t = 0.1000 pu` o essere rappresentato nella sua forma razionale tramite >> sym(t) ans = 1/10 Utilizzando l’opzione ’e’ otteniamo la forma razionale del numero pi` u la differenza tra la rappresentazione razionale teorica e l’attuale rappresentazione in termini di numeri macchina >> sym(t. ` e diverso da zero (uguale a 1 solitamente) se ` e vero. trattando i numeri come simboli.18 Preliminari 1 >> 1+eps/2 > 1 ans = 0 ovvero eps ` e il pi` u piccolo numero “sentito” dall’aritmetica dei numeri macchina (per quantit` a dell’ordine di 1). Per esempio >> format rat >> sqrt(2) ans = 1393/985 . 0.

x) y = -5 Si ricorda che l’uso del punto e virgola esegue un comando senza visualizzare il risultato. >> y=polyval(p. Per esempio la funzione p(x) = x3 − 2x − 5 si pu` o rappresentare come p=[1 -2 -5] (se il polinomio ha alcuni coefficienti nulli essi vanno sempre inseriti nel vettore per non alterare il grado del polinomio). Una serie di 200 valori nell’intervallo [−2. Per esempio con >> p=[1 -3 -5]. individuando cos` ı un insieme di punti del piano caratterizzati dalle coppie (xk . Per calcolare una funzione polinomiale in corrispondenza di un valore x occorre utilizzare la funzione polyval. Se vogliamo realizzare il grafico del polinomio.x). C R . dobbiamo innanzitutto creare una griglia di valori.200). Tali punti sono poi raccordati graficamente in modo da creare l’effetto di una linea continua. continuando l’ultimo esempio1 >> roots(p) ans = 4. >> y=polyval(p.yk ). In MATLAB un polinomio ` e rappresentato come un vettore che contiene i coefficienti ordinati dal coefficiente del monomio di grado massimo al monomio di grado minore.5] e le corrispondenti valutazioni del polinomio vengono costruiti in MATLAB tramite >> x=linspace(-2.1926 -1. Per disegnare. Un calcolatore infatti per realizzare il grafico di una qualunque funzione f (x) utilizza in generale una griglia equispaziata di valori {xk } nei quali valuta la funzione yk = f (xk ).1 Funzioni 1.y) (si veda la Figura 1. >> x=3.1 Calcolo di polinomi Tra le funzioni elementari le funzioni polinomiali sono tra quelle pi` u utilizzate in vari algoritmi numerici. In generale la radice di un polinomio appartiene all’insieme dei numeri complessi (insieme estensione dell’insieme che permette di avere un ambiente adatto per le radici di tutti i polinomi).1926 1 Occorre fare attenzione. per punti.1).5. Non ` e detto che tutte le radici di un polinomio appartengano all’insieme dei numeri reali. il grafico in tale intervallo basta utilizzare plot(x. Per il calcolo delle radici di un polinomio.

1 Grafico di p(x) = x2 − 3x − 5 con plot.2 Altre funzioni elementari Molte altre funzioni elementari sono elencate in Appendice B.2). >> ezplot(f. nell’esempio precedente si poteva procedere utilizzando inline nella forma >> f=inline(’sin(2*x)+cos(x)’). per esempio la funzione lx=log(abs(x)) calcola il logaritmo del valore assoluto di x. o ezplot per esempio >> ezplot(’sin(2*x)+cos(x)’. disegna il grafico della funzione f (x) = sin 2x + cos x. Ulteriori funzioni si possono ottenere componendo le funzioni elementari. q=[1 2 3].[-2*pi 2*pi -1 1]). 1. per x ∈ [−2π. Pu` o risultare utile definire un oggetto che contenga una funzione in modo tale da poterla utilizzare in pi` u contesti. >> c=conv(p. Nel caso si esplorino regioni non appartenenti al dominio delle funzioni in uso vi sar` a un segnale di avvertimento. ed ottenere lo stesso risultato.20 Funzioni 6 4 2 0 −2 −4 −6 −8 −2 −1 0 1 2 3 4 5 Figura 1.p) a = 1 2 3 r = 0 0 0 0 15 0 dove nell’ultima espressione r rappresenta il resto della divisione di c con p. Abbiamo detto che per disegnare per punti il grafico di una data funzione occorre preparare l’insieme dei punti x in cui calcolare la funzione in esame e poi considerare istruzioni per la grafica.q) c = 1 0 4 4 >> [a.[-2*pi 2*pi -2 2]). warning .r]=deconv(c. >> p=[1 -2 5]. Per moltiplicare due polinomi si pu` o utilizzare conv mentre per dividere deconv. In alternativa ` e possibile utilizzare fplot. 2π ] e considerando una finestra grafica con ordinate y comprese tra −2 e 2 (si veda la Figura 1.

Esistono anche altre costanti predefinite.3)+log(5.5193 >> 10^(log10(100)) ans = 100 >> acos(1) ans = 0 >> cos(2*pi/3)^2+sin(2*pi/3)^2 ans = 1. Nel caso di indeterminazione il valore associato ` e NaN (Not-a-Number). lo stesso valore pu` o essere ottenuto in molti modi >> format long >> 4*atan(1) ans = 3. per esempio 1/Inf fornisce il valore zero.2 Grafico di f (x) = sin 2x + cos x con ezplot.5193 l2 = 2. per esempio per il seno di 30◦ >> sin(30*pi/180) ans = .3 * 5. l2=log(2.0000 Per le funzioni trigonometriche gli argomenti devono essere espresse in radianti.Funzioni 21 sin(2 x)+cos(x) 2 1. >> log(0) Warning: Log of zero. per esempio l’espressione sin(0)/0 fornisce questo valore come esito. per esempio le cifre disponibili di π sone memorizzate in pi.5 0 −0.5 −2 −6 −4 −2 0 x 2 4 6 Figura 1.4) .5 1 0. ans = Inf Il valore predefinito Inf equivale a +∞ e potrebbe essere utilizzato formalmente nei calcoli. Nel caso si abbiano i gradi occorre convertirli in radianti.14159265358979 Possiamo verificare qualche propriet` a del logaritmo e delle funzioni trigometriche con qualche esempio >>l1= log(2.4) l1 = 2. ans = -Inf >> 1/sin(0) Warning: Divide by zero.5 −1 −1.

f) ans = exp(x^2-1) >> compose(f.3) ans = 8 >> subs(g. utilizzando le due funzioni f e g definite sopra si usa il comando compose >> compose(g.3 Funzioni e calcolo simbolico Nell’ambiente di calcolo simbolico possiamo avvalerci di un “calcolatore funzionale” ovvero possiamo lavorare in modo analogo a quanto potremmo fare con carta e penna. Per esempio >> f=sym(’x^2-1’) .22 Funzioni 0. >> finverse(f) ans = log(1/(-1+x)*(-(-1+x)*(1+x))^(1/2)) .x.g) ans = exp(x)^2-1 mentre per determinare la funzione inversa il comando finverse >> f=sym(’(exp(x)-exp(-x))/(exp(x)+exp(-x))’).3891 Per la composizione di funzioni. Per esempio ritroviamo >> syms s t >> expand(cos(s+t)) ans = cos(s)*cos(t)-sin(s)*sin(t) oppure >> syms a x y >> expand(a^(x+y)) ans = a^x*a^y Se consideriamo invece le operazioni tra funzioni osserviamo che tramite il comando sym(’f (x)’) possiamo creare funzioni astratte.5000 1. >> f+g ans = x^2-1+exp(x) >> f*g ans = (x^2-1)*exp(x) >> f/g ans = (x^2-1)/exp(x) Per valutare una funzione astratta in un punto possiamo utilizzare subs e scrivere con le definizione precedenti >> syms x >> subs(f.x. g=sym(’exp(x)’).2) ans = 7.

2 Limiti e continuit` a 2.1 Calcolo di limiti Affrontare il calcolo di un limite dal punto di vista numerico pu` o portare a brutte sorprese dovute all’approssimazione del mondo dei numeri reali con i numeri macchina.t.x.Inf) ans = -3/5 >> limit((1+1/t)^t. quindi (1 + 1/n) = 1.x.t.x.Inf) ans = exp(1) >> limit((t-2)/(t^2-4).x. Per esempio >> n=10^16. >> limit(sin(x)/x.1. Da quel valore di n in avanti la somma (1+1/n) resta uguale a uno e il limite numerico sembra attestarsi proprio su 1. per esempio si possono perdere cifre significative o avere errori detti di cancellazione.1.’left’) ans = -inf >> limit((3*x^2+1)/(-5*x^2+x+2).’right’) ans = inf >> limit((x+1)/(x-1).0) ans = 1 >> limit((x+1)/(x-1). lim 1+ n→+∞ n semplicemente aumentando il valore di n sperando di avvicinarci al valore limite. il numero e. se il valore n ` e troppo grande segue che 1/n ` e minore della precisione macchina e non viene pi` u “sentito” nelle operazioni. >> (1+1/n)^n ans = 1 Fenomeni simili possono avvenire anche per altre “anomalie” dovute alla necessit` a di ricorrere ai numeri macchina e alle operazioni tra questi. Per esempio non possiamo affrontare il calcolo del limite  n 1 .2) . Dal punto di vista del calcolo simbolico abbiamo a disposizione la funzione limit. Infatti. qualche esempio ` e pi` u chiaro di qualsiasi descrizione formale >> syms x t .

oppure crescita illimitata. end La struttura for. .end rappresenta un ciclo. per un fissato valore del parametro r e un dato iniziale x0. xk=x0. passando per dinamiche di tipo periodico. Di seguito scriviamo le istruzioni MATLAB per generare un vettore x con N valori. Ricker. In particolare possiamo pensare a modelli a tempo discreto ovverosia a successioni {xk }k∈N dove l’indice k indica un certo istante. Il blocco di istruzioni precedenti potrebbe convenientemente essere memorizzato in un M-file. Vengono generalizzate procedure simili a quella adottata nel Metodo di bisezione per la dimostrazione del .24 Limiti e continuit` a ans = 1/4 2. 2. Tipico ` e il caso in cui il valore xk+1 ` e legato a uno o pi` u valori passati.5. Nella Figura 2. L’evoluzione della popolazione (studiata da Ricker sul fiume Fraser in Canada) pu` o essere scritta nel modo seguente xk+1 = xk er(1−xk ) . si immagini una specie di cronometro che segni il tempo (secondi. r=1. ad un comportamento estremamente disordinato. r=3. anni) k = 0.1). non ci soffermeremo nel descriverle essendo chiaro il contesto. xk = xk * exp(r * (1-xk)). x(1)=x0... l’indice k conta il tempo (di solito in anni). xk → L > 0. ovverosia a successioni definite per ricorrenza (utilizzando una differente terminologia. Ci limitiamo al solo caso xk+1 = g (xk ). x0=0. . Ogni grafico ` e ottenuto tramite le istruzioni precedenti e utilizzando poi l’istruzione plot(x. xk → 0. per esempio su quale quantit` a di salmoni sia permesso pescare in un certo tempo. ovverosia metodi che generano successioni {xk }k∈N con opportune propriet` a.. la popolazione pu` o diventare periodica? La risposta a queste domande potrebbe essere una prima indicazione sulla gestione della popolazione.’-o’). xk → +∞. o altro ancora? Per esempio. x=zeros(N. Non analizzeremo dal punto di vista teorico il modello ma alcuni esperimenti numerici si possono facilmente fare.5. ossia permette di ripetere un certo numero di volte un blocco di istruzioni nelle quali la variabile k parte da 2 e arriva a N con incrementi di uno. Le restanti istruzioni dovrebbero essere chiare. r=1. r ` e un parametro del modello legato alla modalit` a di riproduzione e di spostamento della popolazione di salmoni.2 Sistemi dinamici discreti Un interessante applicazione del concetto di limite si ha nel caso di simulazione di semplici modelli rappresentabili come successioni numeriche. mesi.1 mostriamo alcuni esempi di simulazione per differenti valori del parametro r ma per il medesimo dato iniziale x0=0. %parametri for k = 2:N. sono utilizzati in MATLAB per la ricerca degli zeri di equazioni. 2. dove xk indica il numero di salmoni (normalizzato rispetto a una popolazione di riferimento). o un valore stazionario. 1. abbiamo un sistema dinamico discreto ). Come si vede al variare di r abbiamo differenti comportamenti: da un valore limite positivo.3 Metodi iterativi Metodi iterativi. La domanda sul modello essenzialmente ` e: come cambia la dinamica della popolazione al variare del parametro r e del numero inziale di salmoni x0 ? Abbiamo estinzione. x(k) = xk. >> >> >> >> N=50. Un esempio di carattere ecologico riguarda la dinamica di una popolazione di salmoni ed ` e dovuto al biologo W. mentre xk indica una certa quantit` a al tempo k..

Limiti e continuit` a

25

2

r=1

r=2
2 1.5

1.5

1

1

0.5

0.5

0

0

20

40

60

0

0

20

40

60

r=2.5
2 2 1.5 1.5

r=3

1

1

0.5

0.5

0

0

20

40

60

0

0

20

40

60

Figura 2.1 Alcuni esempi di simulazione del Modello di Ricker.

Teorema degli zeri. Vediamo un esempio tratto dalla Meccanica Celeste. Nel XVII secolo Keplero ha descritto la cinematica dei pianeti in moto intorno al Sole, riassumendone le caratteristiche in tre leggi • un pianeta descrive un orbita ellittica intorno al Sole, il Sole occupa uno dei due fuochi di tale ellisse; • la linea che congiunge il pianeta al Sole descrive uguali aree in tempi uguali; • esiste una correlazione tra il periodo T dell’orbita di ciascun pianeta e il raggio 3 medio Rm dell’orbita, Rm = k T 2 , dove k ` e una costante positiva. La seconda legge riguardante le aree ` e descritta nella Figura 2.2, i punti A, B descrivono la posizione del pianeta in due tempi successivi. Il medesimo intervallo di tempo viene impiegato dal pianeta per passare da C a D, le aree A1 e A2 sono uguali. Per disegnare l’ellisse con semiassi a e b basta descrivere l’equazione in forma parametrica x(t) = a cos t, y (t) = b sin t, con t ∈ [0,2π ]. Dalle leggi di Keplero si deduce la relazione tra il tempo t e l’angolo al centro ϑ descritto dal pianeta, 2πt = T (ϑ − e sin (ϑ)), dove T ` e il periodo di rivoluzione, e l’eccentricit` a dell’orbita ellittica, e ∈ (0,1). Per trovare l’angolo ϑ in corrispondenza di un certo tempo t occorre risolvere l’equazione scritta sopra. La funzione MATLAB utile allo scopo ` e la funzione fzero. Per esempio consideriamo un pianeta con T = 219 giorni ed eccentricit` a approssimativamente uguale a 0. 5 (il periodo corrisponde al periodo del pianeta Venere). Volendo conoscere l’angolo corrispondente al tempo t = 20 (giorni) possiamo operare come segue, >> f=inline(’2*pi*20-219*theta+0.5*219*sin(theta)’); >> fzero(f,0.1) Zero found in the interval: [-0.924, 1.124]. ans = 0.9925

26

Limiti e continuit` a

B

A2

A Sole C A1

D

Figura 2.2 Illustrazione della seconda legge di Keplero.

Il valore 0.1 ` e il valore iniziale, essendo angoli esprime un valore in radianti, da cui iniziare la ricerca dello zero. Non abbiamo fatto un’analisi teorica per l’unicit` a dello stesso zero, l’esistenza discende direttamente dal Teorema dei valori intermedi. Variando il tempo t ` e possibile ricostruire la legge ϑ = ϑ(t), almeno per punti.

3
Derivata di una funzione

3.1 Calcolo di derivate
Anche per le derivate il calcolo numerico tramite opportuni rapporti incrementali ` e una questione piuttosto delicata (sempre per via della necessit` a di basarsi sull’insieme dei numeri macchina e sul fatto che possiamo incappare in errori di cancellazione o altro). Memorizzati i valori di una funzione in un vettore y la funzione diff permette di calcolare le differenze tra due valori successivi del vettore. Assegnato il passo h il rapporto incrementale approssimato si pu` o quindi valutare come ri=diff(y)/h. Il vettore ri ha una componente in meno rispetto al vettore y. Con le seguenti istruzioni (a parte le scritte) si ottiene il disegno nella Figura 3.1. >> >> >> >> >> >> >> N=120; x=linspace(0,2*pi,N); h=x(2)-x(1); y=sin(x); ri=diff(y)/h; subplot(211),plot(x,y); subplot(212),plot(x(1:N-1),ri);

Abbiamo approssimato con un rapporto incrementale la derivata della funzione seno nell’intervallo [0,2 ∗ pi]. L’istruzione subplot consente di visualizzare grafici multipli nella stessa finestra. Per visualizzare il grafico dell’errore assoluto, differenza tra valore approssimato e valore vero in modulo, possiamo scrivere >> xd=x(1:N-1); >> plot(xd,abs(ri-cos(xd))); Non bisogna essere troppo ottimisti pensando che basti un passo h molto piccolo. Vediamo un esempio per una approssimazione della derivata della funzione f (x) = sin 10x in x = 1 con un passo piccolo, il valore vero ` e 10 cos 10 ≈ −8. 3907. >> h=eps/4; >> (sin(10*(1+h))-sin(10))/h ans = 0 Nell’ambito del calcolo simbolico la stessa funzione diff permette di calcolare la funzione derivata. Qualche esempio >> >> >> >> f1=sym(’sin(10*x)’); f2=sym(’exp(x) * cos(2*x)’); f3=sym(’x^2+1/x’); diff(f1)

28

Derivata di una funzione

1

sin(x)
0.5 0

−0.5

−1

0

1

2

3

4

5

6

7

1

0.5

diff(sin(x))/h

0

−0.5

−1

0

1

2

3

4

5

6

7

Figura 3.1 Approssimazione di sin (x).

ans = 10*cos(10*x) >> diff(f2) ans = exp(x)*cos(2*x)-2*exp(x)*sin(2*x) >> diff(f3) ans = 2*x-1/x^2

3.2 Ricerca di massimi e minimi
Per la ricerca dei massimi e dei minimi di una funzione ` e possibile utilizzare la funzione fmin o fminbnd. Tali funzioni calcolano il punto di minimo (globale) in un certo intervallo di una funzione specificata. Si noti che per il calcolo del massimo di una funzione f basta considerare il problema del minimo della funzione −f . Per esempio con >> fminbnd(’cos’,3,4) ans = 3.1416 calcoliamo il punto di minimo della funzione coseno nell’intervallo [3,4] ovverosia una approssimazione di π . I metodi per la ricerca del punto di minimo costruiscono una successione di valori che sotto opportune ipotesi tende verso il punto di minimo. Con >> fminbnd(’cos’,3,4,optimset(’TolX’,1e-12,’Display’,’iter’)) Func-count x f(x) Procedure 1 3.38197 -0.971249 initial 2 3.61803 -0.888633 golden 3 3.23607 -0.995541 golden 4 3.13571 -0.999983 parabolic 5 3.1413 -1 parabolic 6 3.14159 -1 parabolic 7 3.14159 -1 parabolic 8 3.14159 -1 parabolic 9 3.14159 -1 parabolic Optimization terminated successfully: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-012 ans = 3.1416

Se ci mettiamo in un dato punto di osservazione. ovviamente la velocit` a v influisce sulla distanza d.9443 dove si considera la funzione rm = −r perch` e cerchiamo il massimo con un algoritmo che seleziona solo punti di minimo. Abbiamo la distanza pensata dal conduttore. Il flusso dei mezzi dipender` a da vari fattori tra cui: (i) velocit` a del traffico.Derivata di una funzione 29 vengono visualizzati i passi compiuti per calcolare una approssimazione di π con 12 cifre significative esatte.3 Problemi di ottimizzazione Affrontiamo un problema di ottimizzazione. ovvero il tipo di strategia per la selezione del prossimo punto della successione approssimante.2. per esempio un tratto di galleria. con α ∈ (0. (iii) lunghezza dei mezzi.100) ans = 8. Con una lunghezza media di b = 4 (metri) abbiamo. r= >> rm=inline(’-v / (v+v^2/20+4)’). Evidentemente la risposta. che sar` a anche il punto di massimo per come ` e l’andamento del grafico del flusso. inoltre sia b la lunghezza media dei mezzi. Consideriamo la distanza minima d (per evitare incidenti) che dividiamo in due parti con relazioni empiriche legate alla velocit` a (i valori sono comunque nell’unit` a di misura scelta per le distanze). Possiamo rilassare i vincoli e considerare la distanza d = dp + α · df . Tasso di flusso delle macchine ` e definito come il numero di mezzi che passano in un posto fissato nell’unit` a di tempo.0.1) parametro. Supponiamo di dover gestire il traffico per un tratto di strada. 3. quando passa un mezzo il tempo medio che dobbiamo aspettare per vederne un altro ` e uguale a d+b T = . Possiamo utilizzare il calcolo simbolico per trovare il punto stazionario. T d+b Assumiamo come parametri v e d. (|v | + |v |2 /20 + b) visto che la velocit` a sar` a considerata positiva possiamo togliere il modulo nei termini al denominatore. Il grafico di r ` e mostrato nella Figura 3. v Il tasso r di flusso ` e uguale a 1 v r= = . La colonna Procedure indica il tipo di algoritmo selezionato passo dopo passo. (ii) distanza tra due mezzi consecutivi. Vogliamo trovare il punto di massimo ovvero il massimo flusso ottenibile e valutare la corrispondente velocit` a media da suggerire. non sembra molto realistica. Posto d = dp + df . >> fminbnd(rm. d p = |v |. il tasso di flusso ` e dato da v . se pensata come chilometri all’ora. . Consideriamo una velocit` a media v e una media delle distanze tra mezzo e mezzo denotata con d. e la distanza utile per la fermata df = |v |2 /20.

e a indica il parametro α.v) d = 1/(v+1/20*a*v^2+b)-v/(v+1/20*a*v^2+b)^2*(1+1/10*a*v) >> vm=solve(d.6 r = mezzi /tempo 0.1 0 0 10 20 30 40 50 60 70 80 90 100 velocità Figura 3.4 0.5 0. Tra le due soluzioni selezioniamo solo quella positiva. p vm = (20b/α). >> ra=sym(’v / (v+a*v^2/20+b)’).30 Derivata di una funzione 0.2 Andamento flusso del traffico.3 0. Per un fissato b ` e possibile generare una tabella con velocit` a per il flusso massimo e la distanza minima permessa. .’v’) vm = [ 2/a*5^(1/2)*(a*b)^(1/2)] [ -2/a*5^(1/2)*(a*b)^(1/2)] La funzione solve risolve la corrispondente equazione. >> d=diff(ra.2 0.7 0. >> syms v a b x .

ezplot(’cos(x)*exp(-x)’.ezplot(’cos(x)*exp(-x)’. Proviamo a ripercorrere i passi suggeriti per lo studio di una funzione con l’ausilio del . Bisogna fare attenzione a come collezionare le varie informaziocos(x) exp(−x) 2 60 40 0 20 −1 0 −2 −20 −3 −40 −6 −4 −2 x 0 2 4 −30 −20 −10 x 0 10 1 9 x 10 300 0 200 100 0 −100 −200 −5 0 x 5 −2 0 x 2 −5 −10 −15 Figura 4.4 Grafici di funzioni e approssimazioni 4. Con le seguenti istruzioni >> >> >> >> subplot(221). Si possono comunque analizzare anche i grafici delle derivate successive avvalendosi della funzione diff e ancora di ezplot.1 Grafici di funzioni Per disegnare il grafico di una funzione abbiamo gi` a visto che possiamo utilizzare la funzione ezplot.ezplot(’cos(x)*exp(-x)’). subplot(224).ezplot(’cos(x)*exp(-x)’. si ottengono i grafici di Figura 4.1 che si riferiscono alla stessa funzione f (x) = cos xe−x ma con domini differenti. subplot(223).[-10*pi 4*pi]).[-3*pi 3*pi]). i quattro grafici nella figura non sembrano della stessa funzione se non parzialmente. ni. subplot(222).[-pi pi]).1 Grafici della funzione cos xe−x in vari intervalli.

Posto N (x) = (4x3 + 4x2 − 3x − 6). da cui f (x) > 0 x ∈ (−1.x. >> f=sym(exp(-x)*x/(2*x+1)). Per le intersezioni con gli assi coordinati. Per stabilire se i punti stazionari sono punti di massimo o di minimo possiamo anche utilizzare la derivata seconda >> fd2=simplify(diff(fd)) fd2 = exp(-x)*(4*x^3+4*x^2-3*x-6)/(2*x+1)^3 >> x=-1.x. per il numeratore N abbiamo . il grafico di f passa per l’origine (0.-1/2. La funzione non sembra presentare particolari simmetrie.4549 Per valutare il segno della derivata seconda occorre valutare il comportamento della funzione razionale che vi compare. D(x) = (2x + 1)3 . Tramite la funzione solve possiamo calcolare gli zeri della derivata. (2x + 1) = 0 ⇒ x = −1/2.-inf.0). Per la derivata prima abbiamo >> fd= simplify(diff(f)) fd = -exp(-x)*(2*x^2+x-1)/(2*x+1)^2 dove l’uso della funzione simplify effettua eventuali semplificazioni presenti dopo il calcolo della derivata.’left’) ans = 0 quindi y = 0 risulta essere un asintoto orizzontale.1548 >>x=0. Per i limiti per x → ±∞ abbiamo invece: >> limit(f.’left’) ans = inf >> limit(f.32 Grafici di funzioni e approssimazioni calcolo simbolico.x.x. Valutiamo i limiti per x che tende agli estremi degli intervalli che compongono il dominio. Avremo inoltre che x = −1 risulta essere un punto di minimo locale mentre il punto x = 1/2 ` e un punto di massimo locale. La retta x = −1/2 risulta essere un asintoto verticale. subs(fd2) ans = -0.inf. Consideriamo la funzione f (x) = x e−x .’right’) ans = inf >> limit(f. 2x + 1 Il dominio della funzione ` e determinato dai valori x tali che il denominatore non si annulli. + ∞).5. f (0) = 0. subs(fd2) ans = 8.-1/2. >> limit(f. − 1) ∪ (1/2. f (x) x ∈ (−∞.’right’) ans = -inf dove inf significa ∞ mentre -inf significa −∞. Dal segno della derivata prima possiamo valutare gli intervalli in cui la funzione f cresce o decresce. che risultano essere gli zeri del numeratore e quindi tramite root gli seri del polinomio (2x2 + x − 1) >> solve(fd) ans = [ -1] [ 1/2] Il segno sar` a determinato dal segno del polinomio −(2x2 + x − 1).1/2). Il limite sinistro e il limite destro per x → −1/2 valgono rispettivamente >> syms x.

la derivata seconda ` e positiva e la funzione f risulta essere convessa. A grandi linee abbiamo a disposizione due strade • pretendere che il polinomio passi esattamente per tutti i punti.5 0 0. • lasciare che il polinomio indichi solo l’andamento qualitativo e parzialmente quantitativo dei dati.6034i 1. 14 12 10 8 6 4 2 0 −2 −4 −6 −3 −2.0279 + 0.0558 quindi essendoci un’unica radice reale N (x) > 0 per x > 1. 0558. + ∞). N (x) < 0 per x < 1.0279 . Per il denominatore D abbiamo semplicemente D(x) < 0 per x < −1/2. possiamo considerare una approssimazione con un polinomio di un certo grado.0.2 Approssimare dati e funzioni Il polinomio di Taylor rappresenta solo una delle svariate possibilit` a a disposizione. che rappresentano solo alcuni valori di una funzione oppure che rappresentano misure di un fenomeno di cui stiamo cercando un modello. Nel primo caso. 4. 0558. .5 1 1. inoltre tutte le ascisse dei punti devono essere differenti per punti diversi altrimenti non stiamo parlando di una funzione p(x) (in corrispondenza di una ascissa non possiamo pretendere che il polinomio p assuma due valori differenti).5 −2 −1. − 1/2) ∪ (1. 0558.6034i -1.2 Grafico qualitativo della funzione f (x) = e−x x/(2x + 1).5 2 exp(−x) x/(2 x+1) x Figura 4. Avendo a disposizione dei dati. Nel secondo caso si parla di fitting e le ricadute dal punto di vista statistico saranno considerate nel seguito di questo libro. I punti con ascissa x = −1/2 e x = 1.1. essendo e−x > 0 per ogni x.5 −1 −0. Il grafico di f ` e schematizzato nella Figura 4. 0558). 0558 risultano essere punti di flesso.2. mentre D(x) > 0 per x > −1/2. mentre N (x)/D(x) < 0 per x ∈ (−1/2. Riassumendo N (x)/D(x) > 0 per x ∈ (−∞. nel secondo caso la funzione risulta essere concava.Grafici di funzioni e approssimazioni 33 >> roots([4 4 -3 -6]) ans = -1. Nel primo caso si parla di interpolazione e il polinomio deve essere di grado opportuno (il grado deve essere uguale al numero di punti meno uno).

>> >> >> >> >> x=linspace(0. indipendentemente dall’unit` a di misura (qui sono milioni di persone). y=humps(x). facciamo la “previsione” per il 2000. Possiamo trovare. il polinomio interpolatore e alcuni polinomi che tentano il fitting. y2=interp1(x. >> pi=polyfit(cdate. pop e cdate: il primo contiene i dati dei censimenti. ’cubic’). il secondo gli anni corrispondenti.0268 250 Censimenti 200 150 100 50 0 1750 1800 1850 1900 1950 2000 anni Figura 4.1.20).3750 219. y.prev(1)=polyval(pi. xi.prev(4)=polyval(pi. cubic stanno ad indicare il metodo con cui si ` e riempita la tabella partendo dai 10 valori iniziali.3 Dati censimento USA. Per leggerli e memorizzarli >> load census .2000). Come si pu` o constatare le previsioni. sono molto differenti per i vari polinomi (di grado 20. I primi due consistono nello scegliere il valore pi` u vicino o una media tra i valori pi` u vicini. xi. y3=interp1(x. 2. A questo punto vengono creati due vettori.1. Sperimentiamo alcune possibilit` a e.4. Le etichette nearest.1). 5). >> pi=polyfit(cdate. Trovare il modello corretto o fare previsioni attendibili ` e un compito piuttosto delicato. con la funzione polyfit.pop. y1=interp1(x. xi.pop. In tutto abbiamo 21 dati rappresentati in Figura 4.2000). spline.prev(2)=polyval(pi. linear. y.pop. ’nearest’).pop.2). y4=interp1(x.2000). I dati sono accessibili dall’ambiente MATLAB perch` e fanno parte di insiemi di dati utilizzabili come test. xi=linspace(0. ’linear’). Gli ultimi due metodi consistono in un . >> prev prev = 143. y. xi.2000). >> pi=polyfit(cdate. 1. per ogni modello polinomiale scelto.10).5).34 Grafici di funzioni e approssimazioni Consideriamo. >> pi=polyfit(cdate.6221 281. y.3. per esempio. Per ottenere valori intermedi rispetto ad una tabella data possiamo utilizzare la funzione interp1. i dati corrispondenti ai censimenti della popolazione degli Stati Uniti dal 1790 al 1990.50). ’spline’).prev(3)=polyval(pi. Per esempio generando alcuni valori con la funzione humps possiamo provare varie opzioni ed ottenere il grafico di Figura 4.4586 274.

’spline’). z.5.3.x1.Grafici di funzioni e approssimazioni 35 100 80 60 40 20 0 100 nearest 80 60 40 20 0 linear 0 0. y.2 0. z4=interp1(x.’cubic’). Questa idea ` e stata pienamente sviluppata nell’ambito della progettazione assista dal calcolatore e nel disegno industriale.z]=peaks(10). che si raccordano con una certa regolarit` a.4 Varie possibilit` a per interpolare una tabella.y. .40)).x1.4 0. approccio interessante che consiste nel costruire un certo numero di polinomi consecutivi. y. Le stesse idee si possono adottare in pi` u dimensioni e. y. ’linear’). z2=interp2(x.6 0.y1. generando una prima tabella con la funzione MATLAB peaks.x1.4 0. [x1.6 0.x1.4 0. z.8 1 0 0.8 1 0 0. z3=interp2(x. per esempio. e si possono ottenere i grafici nella Figura 4.5 Interpolazione di una tabella bidimensionale.y1. z. in questo caso di grado 3. z1=interp2(x.3.6 0. y.8 1 100 80 60 40 20 0 100 spline 80 60 40 20 0 cubic 0 0. Nella figura ogni singolo grafico ` e ottenuto 8 6 4 2 8 6 4 2 0 0 −2 −4 −6 −8 3 2 1 0 −1 −2 −3 −3 −2 0 −1 1 2 3 −2 −4 −6 3 2 1 0 −1 −2 −3 −3 −2 0 −1 1 2 3 8 6 4 2 0 −2 −4 −6 −8 3 2 1 0 −1 −2 −3 −3 −2 0 −1 1 2 3 8 6 4 2 0 −2 −4 −6 −8 3 2 1 0 −1 −2 −3 −3 −2 0 −1 1 2 3 Figura 4.y1]=meshgrid(linspace(-3.linspace(-3. abbiamo >> >> >> >> >> >> [x.2 0.2 0.y1.8 1 Figura 4.’nearest’).y1.40).6 0. z.4 0.2 0.

36 Grafici di funzioni e approssimazioni tramite la funzione mesh. per esempio mesh(x1. .z1).y1.

>> quad8(f. primitive 5.1 Calcolo numerico di integrali Anche nell’ambito dell’integrazione possiamo sfruttare le potenzialit` a del calcolo simbolico oppure utilizzare approssimazione numeriche.5216 >> f=inline(’sqrt(1+cos(x))’). Quest’ultime si basano soprattutto sulla possibilit` a di considerare l’integrale come limite di una opportuna somma finita. Per esempio avremo >> syms x >> int(x^2) ans = 1/3*x^3 >> int(log(x). In particolare si approssima un integrale definito come somma pesata Z a b f (x)dx = X wk f (xk ).*sin(x)’).0.0.0. aree. dove la scelta dei punti xk e dei pesi wk > 0 caratterizza le varie formule di integrazione (formule di quadratura numerica). Per esempio >> f=inline(’exp(-x).3560 dove le funzioni per l’integrazione numerica sono quad e quad8 (la seconda fornisce usualmente una migliore approssimazione anche se ` e pi` u costosa). >> quad(f.0. Tramite il calcolo simbolico siamo in grado di calcolare integrali in modo esatto.pi/2) ans = 1 .5 Integrali.pi) ans = 0.1) ans = 1.1) ans = -1 >> int(x*exp(-x)) ans = -x*exp(-x)-exp(-x) >> int(cos(x).

’t’).5 0 −0. t ∈ [a. >> quad8(f. z (t) = t.5 −1 −1 −0.0.pi/2) ans = 1. z (t). >> plot3(sin(2*t).8374 dove il risultato deve essere interpretato in base all’unit` a di misura del tempo stabilite.z (a)) al punto (x(b).2π ]. .2 Periodi e lunghezze Vogliamo determinare il periodo di un pendolo semplice.1 Qual’` e la lunghezza di questa curva?. y (t) = cos(3t). primitive 5.t)./sqrt(1-0. Questo periodo ` e legato all’integrale ellittico di prima specie definito come Z π/2 dϑ p K= . Per la valutazione dell’integrale 7 6 5 4 3 2 1 0 1 0. Una interessante applicazione dell’integrale definito consiste nel calcolo della lunghezza di una curva espressa in forma parametrica.5 1 Figura 5.b]. x(t). il calcolo della lunghezza della curva stessa misurata dal punto (x(a). Per esempio con x2 = 0. Un grafico nello spazio tridimensionale della curva si ottiene tramite plot3 nella forma >> t=linspace(0.z (b)) vale Z bp (x (t))2 + (y (t))2 + (z (t))2 dt. t ∈ [0. ed ` e mostrato nella Figura 5.2*pi). 1 − x2 sin2 (ϑ) 0 dove x2 < 1 ` e un parametro reale.y (a).1.cos(3*t).38 Integrali. a Per esempio consideriamo per la curva x(t) = sin(2t). 4 possiamo valutare >> f=inline(’1.4*sin(t))’.y (b). aree. In generale per una curva nello spazio parametrizzata tramite le funzioni. y (t). supposte derivabili.5 0 t=b t=a 0.

le funzioni di calcolo numerico possono incontrare delle difficolt` a che segnalano con una sequenza di avvertimenti. possiamo invece operare come segue.’t’). funzione trapz. .0.m (quad8stp) at line 123 . aree. primitive Z 0 39 2π q 4 cos2 (2t) + 9 sin2 (3t) + 1 dt.0.2 Calcolo di pressione media effettiva./x)’). 5.m (quad8stp) at line 123 In C:\MATLABR11\toolbox\matlab\funfun\quad8.1) Warning: Recursion level limit reached in quad8. >> curva=inline(’sqrt(4*cos(2*t).^2+1)’. 50 45 40 P 35 Ps 30 25 20 15 W 10 5 Pi 20 30 40 50 60 70 80 90 0 10 V Figura 5..6635 Se la funzione ` e molto oscillante oppure se presenta delle singolarit` a.3 Integrali partendo da una tabella Se abbiamo a disposizione una tabella di valori e non una funzione con la sua espressione analitica possiamo utilizzare formule che approssimano la tabella di valori con funzioni lineari a tratti. >> f=inline(’sin(1.^2 +9 * sin(3*t). >> quad8(f. Z W = P dV.01.2*pi) lung = 16. Per esempio da un diagramma sperimentale di volume V e pressione P vogliamo ricavare l’area racchiusa in un ciclo (si pensi ad un ciclo di un motore per esempio). >> lung=quad8(curva.m (quad8stp) at line 123 In C:\MATLABR11\toolbox\matlab\funfun\quad8. Singularity likely..Integrali. In C:\MATLABR11\toolbox\matlab\funfun\quad8. per esempio derivata infinita.

1500 dove ovviamente.40 Integrali.2].2 51 59 68 77 81.2 4.5 1.2. In ogni caso abbiamo >> V=[14 16.2 33 21 14.5 3.7 23 32.2 5. I dati sono memorizzati prelevandoli dall’esterno.2 20.6 11. primitive Alcuni dati sono rappresentati nella Figura 5.6 86. ovvero utilizzando la funzione load.5 1 1. >> PS=[16. >> PI=[15.1 41. dovendo calcolare un’area compresa tra due curve.1 11 9.5]. aree.2 47 42.0 2 1.25 18. dove Ps e Pi indicano la pressione superiore e inferiore.5].2 8. abbiamo fatto la differenza tra i valori di pressione.7 7. 4.6 3. V ` e il volume.6 8 7.1 37.5 3. . e il calcolo >> load dati PS PI V >> trapz(PS-PI) ans = 181.

1. serie ed equazioni differenziali 6. Non avendo specificato altro. Per esempio con >> taylortool(’atan(x)’) si ottiene il disegno mostrato nella Figura 6.6 Integrali impropri. MATLAB Taylor Series Approximation 3 2 1 0 −1 −2 −3 −6 −4 −2 0 2 4 6 TN(x) = x−1/3 x3+1/5 x5−1/7 x7 Figura 6. Altre funzioni interessanti sono taylor (per il calcolo della serie di Taylor ma senza rappresentazione grafica) e symsum che permette la somma di una serie in modo formale.1 Un esempio di formula di Taylor. Per esempio .1 Serie di Taylor Tramite le possibilit` a del calcolo simbolico possiamo valutare le somme parziali della serie di Taylor di una data funzione. considera la somma parziale fino a n = 7.

02*u*(1-(u/50)^0. Consideriamo il caso α = 0. . Per l’aspetto simbolico ` e possibile utilizzare dsolve. potrebbero essere dell’ordine di 1011 .’1/2’)+subs(t1.02*u*(1-(u/50)^0. Le equazioni differenziali costituiscono infatti uno strumento importante nella modellizzazione matematica.1417411974336890700953972554998 6. grazie alla rappresentazione in serie di Taylor della funzione arcotangente.u) = 0.’x(0) = 1’) x = exp(-a*t) Dal punto di vista numerico esistono diverse funzioni perch` e vi sono differenti difficolt` a numeriche per l’approssimazione di equazioni differenziali (o sistemi di equazioni differenziali).’d’) ans = 3. Dobbiamo definire una funzione che riceva in ingresso il tempo t e il valore u e ritorni il valore della derivata prime u >> f=inline(’0. 01. α e ϑ sono dei parametri determinati dalle caratteristiche del tumore che stiamo analizzando. Abbiamo invece arctan(1/2) + arctan(1/3) = arctan(1) = π/4.10). λ = 0.’1/3’)) p = 498668825/158723712 >> sym(498668825/158723712. >> t1=taylor(t. per esempio per la popolazione iniziale. L’equazione scritta si pu` o analizzare dal punto di vista analitico. ϑ = 5 e u(0) = 100. converge a π/4 ma in modo estremamente lento.100). Per esempio la serie di Leibniz 1 − 1/3 + 1/5 − 1/7. per esempio >> dsolve(’Dx = -a*x’) ans = exp(-a*t)*C1 >> x = dsolve(’Dx = -a*x’. per esempio. >> taylor(s) ans = 1-x+1/2*x^2-1/6*x^3+1/24*x^4-1/120*x^5 Tra i molti modi per il calcolo di π vi sono anche le serie di potenze. Stiamo normalizzando le quantit` a in gioco. >> p=4*(subs(t1. serie ed equazioni differenziali >> s=sym(’exp(-x)’).5)’.u]=ode45(f. α ϑ dove u(t) rappresenta il numero di celle tumorali presenti al tempo t. >> plot(t.’u’) f = Inline function: f(t. la simulazione del seguente modello di crescita tumorale   α  λu u u (t) = 1− . Modelli simili sono importanti. valori realistici. vogliamo fare una simulazione numerica. La scelta del tipo di rappresentazione influisce notevolmente sulla velocit` a di convergenza ovvero sul numero di termini necessari per aver un certo numero di cifre esatte. .5) Con >> [t.’t’.2 Un primo modello di crescita Grande attenzione ` e dedicata alla soluzione di equazioni differenziali sia dal punto numerico che dal punto di vista simbolico.u). >> t=sym(’atan(x)’). per simulare il comportamento del tumore nel caso di differenti terapie.42 Integrali impropri. e. 5.[0 100].’x’. .’x’. λ ` e un fattore di crescita. Consideriamo. si ottengono delle serie efficienti dal punto di vista del calcolo. una volta che si siano determinati i parametri.

’t’.r sono costanti positive.4 e ottenuto tramite . u1 e u2 . In MATLAB ` e gi` a disponibile una funzione lotka per la simulazione di questo sistema. >> plot(t. I parametri scelti sono k = 1. l’equazione u (t) + 4u (t) + 13u(t) = 0 pu` o essere riscritta come ( u (t) = y (t) y (t) = −4y (t) − 13u(t). Abbiamo due specie in competizione.3.b. 01.k.2. b = 0. il vettore [0 100] indica l’intervallo di tempo t ∈ [0. La funzione ode45 necessita della funzione con cui descrivere l’equazione differenziale. Abbiamo >> f=inline(’[0 1 .100] in cui valutare la soluzione. l’ultimo argomento denota la condizione iniziale. 02. >> [t. Un esempio di simulazione ` e mostrato in Figura 6. I termini presenti nel sistema riguardano l’evolversi delle due popolazioni in base ai propri tassi di accrescimento e agli eventuali incontri preda-predatore. il modello preda predatore di Lotka-Volterra. Risolviamo il problema di Cauchy per questa equazione con u(0) = 1. posto u = y .u]=ode45(f.Integrali impropri.[0 5]. -13 -4]*u’. r = 1. 130 120 θ = 150 110 100 θ = 100 90 80 θ = 50 70 60 0 10 20 30 40 50 60 70 80 90 100 Figura 6. La variabile u1 rappresenta le prede mentre la variabile u2 i predatori. a = 0. 6. e il risultato ` e mostrato in Figura 6.’u’). u (0) = y (0) = 1.[1 1]). la cui dinamica ` e governata dal sistema ( u1 (t) = ku1 (t) − au1 (t)u2 (t) u2 (t) = −ru1 (t) + bu1 (t)u2 (t) dove a. Per esempio.2 Un esempio di formula di simulazione di un modello di crescita tumorale. Infine un esempio storico.u). serie ed equazioni differenziali 43 si ottiene uno dei grafici nella Figura 6.3 Sistemi e modelli Abbiamo gi` a accennato nel paragrafo sulle equazioni differenziali che un’equazione del secondo ordine pu` o essere trasformata in un sistema di equazioni lineari.

>> [t. serie ed equazioni differenziali 1. . 160 140 u2 120 100 80 60 40 u 1 20 0 2 4 6 8 10 12 14 16 18 20 Figura 6.5 1 1.[80 100]). >> plot(t.5 1 u 0.5 4 4.3 Soluzione di un’equazione del secondo ordine tramite un sistema di equazioni differenziali.u]=ode45(’lotka’.[0 20].5 0 −0.5 2 2.u).5 3 3.5 5 Figura 6.44 Integrali impropri. dove siamo partiti con 80 prede e 100 predatori.5 −2 0 0. Come si pu` o vedere nella figura abbiamo un comportamento di tipo periodico.4 Un esempio di simulazione di un sistema preda-predatore.5 y −1 −1.

Inseriamo in MATLAB le seguenti matrici A e B >> A = [3 5 7 . In Appendice B abbiamo descritto alcune di queste possibilit` a. -2 1 5] A = 3 5 7 9 11 15 -2 1 5 >> B = [1 3 . 5 7 . Nel seguito vedremo alcuni semplici esempi. -1 0] B = 1 3 5 7 -1 0 Possiamo calcolare direttamente il prodotto 2B .7 Vettori e matrici algebrici 7.1 Operazioni con matrici e vettori Una delle caratteristiche principali di MATLAB ` e la sua abilit` a nell’operare con matrici. AB e A3 − A2 + 3I tramite le istruzioni >> 2*B ans = 2 6 10 14 -2 0 >> A*B ans = 21 44 49 104 -2 1 >>A^3-A^2+3*eye(3) ans = 514 1215 -12 >> C = A(:. 9 11 15.1:2) C = 3 5 9 11 -2 1 1101 2596 51 1959 4599 148 Se definiamo la matrice C data dalle prime due colonne di A possiamo sommarla a B .

Abbiamo quindi >> A=[1 2. 7*a] [ 9*a.0000 0 . Ad esempio abbiamo >> syms a >> a*A ans = [ 3*a. 3 .0000 1.0000 1. 5*a] >> syms x1 x2 x3 >> x=[x1.2 Alcune funzioni avanzate Ricordiamo come tramite il Symbolic Toolbox sia possibile utilizzare anche simboli al posto di numeri. a. x2. 3 4]. -1. 7] x = 1 -1 3 7 >> y = [2. 9] y = 2 4 -3 9 Possiamo calcolare il prodotto scalare xT y ed il prodotto y T x tramite >> x’*y ans = 52 >> x*y’ ans = 2 -2 6 14 4 -4 12 28 -3 3 -9 -21 9 -9 27 63 7. Le basi teoriche dell’algoritmo utilizzato saranno presentate nel prossimo capitolo. 11*a. 5*a. >> A1=inv(A) A1 = -2. x3] x = [ x1] [ x2] [ x3] >> A*x ans = [ 3*x1+5*x2+7*x3] [ 9*x1+11*x2+15*x3] [ -2*x1+x2+5*x3] Inoltre il calcolo dell’inversa pu` o essere effettuato tramite l’istruzione MATLAB inv.5000 >> A1*A ans = 1. 15*a] [ -2*a.46 Vettori e matrici algebrici >> C+B ans = 4 14 -3 8 18 1 Dati ora i vettori colonna x e y >> x = [1. -3.5000 -0. 4.

figure. verde e blu). Vediamo un semplice esempio di immagine monocromatica. A=zeros(7). L’istruzione colormap consente di associare all’immagine 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 Figura 7. image(255*A’). image(255*A).0000 0.0000 1. In MATLAB una immagine monocromatica di m × n pixels ` e memorizzata in una matrice con le medesime dimensioni. realizza tramite il comando image che associa ad ogni elemento della matrice un colore l’immagine nella Figura 7. >> I=eye(10).1.3 Matrici e immagini Una delle applicazioni principali delle matrici la si deve alle immagini digitali.0000 >> A*A1 ans = 1.0000 0 1. A(3. Possiamo infine visualizzare come l’azione di trasposizione corrisponda ad una riflessione dell’immagine rispetto alla diagonale principale della matrice tramite le istruzioni >> >> >> >> >> >> colormap(’gray’).2:6)=1.4)=1.3:5)=1. La successione di istruzioni >> colormap(’gray’). la mappa di colori delle scale di grigio nella quale lo 0 corrisponde al nero ed il 255 al bianco. >> image(255*I). .0000 7. L’operazione di prodotto per uno scalare quindi corrisponde ad una variazione della luminosit` a dell’immagine (si provi con image(50*I)). Un’immagine digitale infatti non ` e altro che una matrice (o pi` u matrici) nella quale ogni elemento rappresenta un’informazione sulla luminosit` a (o sul colore) della stessa. mentre una immagine a colori ` e memorizzata in una matrice multidimensionale m × n × 3 (ossia tramite tre matrici ognuna delle quali contiene informazioni relativamente ad una delle tre componenti di colore fondamentali: rosso.Vettori e matrici algebrici 47 0. Ogni elemento della matrice viene detto pixel. A(5. A(4.1 Matrice identit` a e immagini.

48 Vettori e matrici algebrici 1 1 2 2 3 3 4 4 5 5 6 6 7 1 2 3 4 5 6 7 7 1 2 3 4 5 6 7 Figura 7. Il risultato ` e riportato nella Figura 7.2 Trasposizione e immagini.2. . Si provi help image per esplorare ulteriori funzioni MATLAB per la gestione delle immagini.

Un metodo per misurare il costo computazionale ` e quello di valutare il numero di operazioni necessarie al calcolatore per ottenere la soluzione. -1 1 2. 2 4 -2].-3.-3.10]. -3]. Uno degli aspetti importanti nell’ambito della risoluzione di un sistema lineare ` e l’efficienza di un metodo risolutivo. Vediamo un esempio >> A=[1 3 2.1 Sistemi lineari La risoluzione di sistemi lineari pu` o essere affrontata in MATLAB in modo estremamente efficiente (originariamente MATLAB ` e stato progettato proprio per svolgere questo compito). >> b=[3. L’operatore backslash nel caso di matrici quadrate si basa su questo algoritmo. ma ` e importante ricordare da subito che l’operatore backslash fornisce sempre ’qualcosa’ che non e’ detto sia il risultato cercato. >> b=[3. >> x=A\b x = 2 1 -1 L’uso come si vede ` e immediato ma bisogna fare attenzione che non stiamo “dividendo” A per b ma stiamo risolvendo il sistema lineare Ax = b.0000 -3. 1 3 2]. >> x=A\b x = 0. -1 1 2.8 Sistemi lineari 8.0000 10. ossia quanto paghiamo in termini di costo computazionale per ottenere il risultato.1250 1. per la risoluzione di un sistema.3750 -2.10.0000 . Nel caso di sistemi inconsistenti MATLAB risolve comunque il problema approssimando la soluzione nel senso dei minimi quadrati. 2 4 -2. Non deve stupire quindi il fatto che MATLAB riservi addirittura uno specifico operatore. Parleremo di questo nel prossimo capitolo. Abbiamo gi` a osservato come il metodo di eliminazione di Gauss rappresenti un algoritmo applicabile direttamente al calcolatore.1250 >> A*x ans = -0. Per l’eliminazione di Gauss applicata ad una matrice quadrata di dimensione n il numero di operazioni ` e n3 /3. Per esempio >> A=[1 3 2. indicato con ’\’ e detto backslash.

>> x1=A\b Warning: Rank deficient. se invece la matrice ` e rettangolare ci segnala un’eventuale deficienza del rango rispetto al rango massimo possibile e poi calcola una sola soluzione del sistema. >> b=[3. -1 1 2. Nel caso di matrice quadrata.6].6. x1 = 3. >> b=[3.0000 0 La forma generale della soluzione pu` o essere calcolata sfruttando il Teorema di struttura (continuando l’esempio precedente) >> x0=null(A.50 Sistemi lineari -0. >> A=[1 3 2.i. -1 1 2. -1 1 2. 4 12 8]. L’opzione ’r’ forza MATLAB a fornire una soluzione in formato razionale.0000 0. sar` a sufficiente risolvere il sistema caratterizzato dalle equazioni l. Infatti il sistema in esame risulta essere inconsistente e MATLAB automaticamente ne ha calcolato una soluzione nel senso dei minimi quadrati.2243e-014. x1 = Inf Inf Inf >> A=[1 3 2. >> rank(A) ans = 2 .-3.6].’r’) x0 = 1 -1 1 >> A*x0 ans = 0 0 0 0 Ogni vettore del tipo x = x1 + λx0 ` e dunque soluzione del nostro problema. rank = 2 tol = 1. >> A=[1 3 2. 2 6 4].0000 La soluzione x di fatto non ` e quindi una soluzione.-3. Se la matrice ` e quadrata ci segnala il fatto che il determinante ` e nullo e non calcola nessuna soluzione. >> x1=A\b Warning: Matrix is singular to working precision.-3. La funzione null applicata ad A calcola una soluzione del sistema Ax = 0.12]. 2 6 4]. Utilizzando i valori di A e b definiti in precedenza avremo infatti >> rank(A) ans = 3 >> rank([A b]) ans = 4 Nel caso di sistemi che ammettono infinite soluzioni l’operatore backslash si comporta in modo diverso a seconda delle situazioni. La verifica dell’inconsistenza pu` o essere effettuata tramite il Teorema di Rouch´ e-Capelli e la funzione rank di MATLAB. >> b=[3. 2 6 4. dopo averne eventualmente verificato il rango.

1 1 alpha]. exist. Possiamo esplorare i casi esclusi tramite il comando subs > A1=subs(A. at line 29 8.1.2 Determinante e inversa Il calcolo del determinante pu` o essere effettuato tramite il comando det.m ans = [ Inf] [ Inf] [ Inf] >> A2=subs(A. Tramite il calcolo simbolico possiamo risolvere anche sistemi nei quali la soluzione dipende da uno o pi` u parametri. 1 alpha 1. 2 4 1. c d]. >> det(A) ans = a*d-b*c . >> det(A) ans = -17 Ritroviamo le regole delle diagonali per matrici 2 × 2 e pe rmatrici 3 × 3 tramite il calcolo simbolico >> syms a b c d >> A=[a b.1 il sistema ` e inconsistente. 1 -1 0].1) A2 = 1 1 1 1 1 1 1 1 1 >> A2\b Warning: System is inconsistent. Solution does not > In C:\MATLAB6p1\toolbox\symbolic\@sym\mldivide.0000 0 e procedere come nel caso precedente. >> A\b x = [ (alpha-4)/(alpha-2+alpha^2)] [ [ 3/(alpha-2+alpha^2)*alpha] 2/(alpha+2)] La soluzione quindi ` e unica per α = −2. at line 29 exist.-2) A1 = -2 1 1 1 -2 1 1 1 -2 >> A1\b Warning: System is inconsistent.Sistemi lineari 51 >> rank([A b]) ans = 2 >> x1=A(1:2. 3].0000 0. Per esempio >> syms x alpha >> A=[alpha 1 1.m ans = [ Inf] [ Inf] [ Inf] Quindi che per α = −2. 2.:)\b(1:2) x1 = 3. >> b=[1. Solution does not > In C:\MATLAB6p1\toolbox\symbolic\@sym\mldivide.alpha.alpha. Per esempio >> A=[0 1 3.

. + an−1 xn−1 . . Nel caso generale cerchiamo un polinomio p(x) tale che p(xi ) = yi per ogni i = 1. . A1=inv(A) = 1/8 1/8 -1/2 1/2 5/4 -3/4 -1/8 1/2 -1/4 8.5000 1. an−1 8 9 8 9 n−1 9 8 1 x1 x2 . . > > : . . L’inversa precedente risulta >> >> >> A1 format rat A=[2 1 1. . > > > > . 2 n−1 a y n − 1 n 1 xn xn . >> A1=inv(A) A1 = 0.. . > > > > > > .5). :. . . detta matrice di Vandermonde. a=V\y. . . > > > . . .5000 0.. : > . -2 2 1].. an−1 . La funzione continua visualizzata da MATLAB raccordando tutti i punti con una retta ` e detta spline lineare e rappresenta un polinomio a tratti di grado 1. > >. . . . . > > > > > . a1 . Consideriamo una funzione f incognita di cui conosciamo solo una serie di valori yi = f (xi ) in corrispondenza dei punti xi . 4 1 0. .1250 0. -2 2 1].. .1250 -0. . ha determinante diverso da zero se i punti xi sono tutti distinti ed in tal caso esistono unici a0 . Infatti se p(x) = a0 + a1 x + . > > > > > . Avremo per esempio >> A=[2 1 1. .^3]. . Vediamo un esempio in MATLAB. dalle condizioni p(xi ) = yi . .^2 x. Si pu` o dimostrare che esiste unico un polinomio di grado n − 1 che soddisfa alle condizioni precedenti. . i = 1. Un esempio elementare ` e dato dal modo in cui MATLAB realizza il grafico della funzione tramite plot. .n. . .n. . >> >> >> >> >> x=[-1 0 2 5]’. . xi=linspace(-1.3 Interpolazione La risoluzione di sistemi lineari ` e un problema che interviene in numerose applicazioni. . . . i = 1. . .5000 0. >. . b1 b2 b3. V=[x. y=[3 0 4 1]’.52 Sistemi lineari >> syms a1 a2 a3 b1 b2 b3 c1 c2 c3 >> A=[a1 a2 a3. . x1 a0 > > y 1 > > > 1 > > > >> > > > > > > > > > n − 1 2 y2 > > > > > a1 > 1 x2 x2 . . . c1 c2 c3]. a1 .2500 Concludiamo osservando che a volte pu` o essere conveniente forzare MATLAB alla visualizzazione tramite razionali utilizzando format rat. >> det(A) ans = a1*b2*c3-a1*b3*c2-b1*a2*c3+b1*a3*c2+c1*a2*b3-c1*a3*b2 Infine possiamo calcolare l’inversa tramite la funzione inv. Per esempio nel caso dell’interpolazione polinomiale che abbiamo gi` a affrontato nel laboratorio Matlab del Capitolo 4.1250 -0. xn La matrice del sistema. . Vogliamo ricostruire la funzione f utilizzando una sua approssimazione tramite un polinomio.2500 -0. ossia esiste un unico polinomio interpolante.7500 -0. 4 1 0.^0 x x. x2 > > > > > > > > > > > > > > > > > > = > >> > .n otteniamo il sistema lineare di n equazioni nelle n incognite a0 .

xi.’-o’.1.yi. 7 6 5 4 spline lineare 3 2 1 polinomio interpolante 0 −1 −1 0 1 2 3 4 5 Figura 8.’-’). I risultati sono riportati nella Figura 8. >> plot(x.Sistemi lineari 53 >> yi=polyval(a(4:-1:1).xi).1 Interpolazione lineare a tratti e polinomiale. .y.

54 .

4411 0.0000 1.7071 0. L’uso ` e abbastanza immediato >> A=[4 -3 1.2276 0.0000 0 0 1. >> eig(A) ans = 2.7071 0 0 D = 2.2 Fenomeni di risonanza Una dei risvolti fisici di maggior rilievo degli autovalori lo si ha nell’ambito dello studio delle frequenze di risonanza. >> eig(A) ans = [ 1/2*a+1/2*d+1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2)] [ 1/2*a+1/2*d-1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2)] 9. Supponiamo che ogni piano sia collegato ai piani adiacenti in modo elastico. Assumiamo che ogni massa possa scivolare senza frizione e che la tendenza a conservare la configurazione iniziale sia proporzionale .8681 0 0 2.0000 Possiamo inoltre calcolare gli autovettori tramite >> [V.0000 La matrice V ` e formata da autovettori unitari ed ` e tale che AV = V D. 2 -1 1.1 Calcolo di autovalori La funzione principale per il calcolo degli autovalori in MATLAB ` e la funzione eig. 0 0 2].0000 2.9 Autovalori e autovettori 9. c d].8321 0. Consideriamo un semplice modello di edificio a n piani rappresentato da un sistema di n masse uguali sovrapposte.0000 0 0 0.5547 0. Tramite il calcolo simbolico possiamo per esempio calcolare la forma degli autovettori per una generica matrice di dimensione 2 >> syms a b c d >> A=[a b.D]=eig(A) V = 0.

. Al fine di studiare il problema numericamente con MATLAB vediamo di calcolare le frequenze naturali del sistema.. Infatti tale soluzione ha la forma x(t) = xp (t) + xc (t) dove xp (t) ` e una soluzione particolare del problema e xc (t) la soluzione del corrispondente sistema omogeneo. . La soluzione del corrispondente sistema omogeneo pu` o essere effettuata tramite il calcolo degli autovalori λi della matrice A e dei rispettivi autovettori vi .xn )T . ossia se ω 2 = −λi per ogni autovalore di A. La matrice A assume quindi la forma 8 9 −10 5 0 0 0 0 0 0 0 0 > > > > > > 5 > −10 5 0 0 0 0 0 0 0 > > > > > > > > > 0 5 − 10 5 0 0 0 0 0 0 > > > > > > > > > 0 0 5 −10 5 0 0 0 0 0 > > > > > > > > > 0 0 0 5 − 10 5 0 0 0 0 > > > A=> > > > > > 0 0 0 0 5 −10 5 0 0 0 > > > > > > 0 > > > 0 0 0 0 5 − 10 5 0 0 > > > > > > > 0 0 0 0 0 0 5 −10 5 0 > > > > > > > > > > 0 0 0 0 0 0 0 5 −10 5 > > > : . ..56 Autovalori e autovettori allo spostamento orizzontale del piano. . Il nostro modello finale sar` a quindi descritto dal seguente sistema di equazioni differenziali ordinarie non omogeneo del secondo ordine x = Ax + Eω 2 cos(ωt)e. . . Questo p` o essere modellizzato tramite l’azione su ogni piano di due forze elastiche indotte dai piani adiacenti del tipo F = −kx dove x indica lo spostamento relativo del piano. Fi (2) = −k(xi − xi+1 ). .n − 1.. . 0 > > > > > k > > −2k k . . . 0 0 0 0 0 0 0 0 5 −5 . . L’applicazione della legge di Newton F = ma = mx fornisce le equazioni del moto in forma matriciale M x = Kx. Supponiamo di avere un edificio a 10 piani e che la massa di ogni piano sia di 20 tonnellate. mentre una soluzione particolare ` e data da xp (t) = C cos(ωt) dove C ` e il vettore soluzione del sistema lineare (A + ω 2 I )C = −E . Nel caso in cui ω sia una delle frequenze naturali il sistema risulta singolare ed abbiamo il fenomeno cosiddetto della risonanza. k −2k k > > > : . Gli autovalori della matrice A hanno un ruolo chiave nella risoluzione del precedente sistema. M = mI con I matrice identit` a` e la matrice di massa n × n e K ` e la matrice di stiffness 8 9 −2k k 0 . Quest’ultimo sistema ha soluzione se e solo se la matrice A + ω 2 I ` e non singolare. . 0 . dove x = (x1 . i = 2. > >. .. La forza elastica che tiene i piani legati tra loro sia caratterizzata da k = 100 tonnellate/metro. Sul primo piano agir` a la forza −kx1 − k(x1 − x2 ) mentre sull’ultimo solo la forza −k(xn − xn−1 ).. Derivando due volte otteniamo la forza inerziale F = ma = mEω 2 cos(ωt) che agisce su ogni piano dell’edificio. . con A = M −1 K ed e = (1. . .. . .. 0 > > 0 > > > > > > 0 > > . K=> .. .1). √ Nei sistemi meccanici tipicamente gli autovalori di A sono tutti negativi ed i valori ωi = −λi sono detti frequenze naturali del sistema. 0 k −k A questo punto simuliamo l’azione di un terremoto tramite un’oscillazione orizzontale del terreno avente la legge E cos(ωt) con ampiezza E e pulsazione ω . Se indichiamo con xi (t) la coordinata della massa che rappresenta il piano i-esimo avremo che su ogni piano interno agiscono le due forze Fi (1) = −k(xi − xi−1 ). 0 > > > > > > > > > > > .

1). >> norm(x.6534 3.4208 -10. >> [lambda omega 2*pi/omega] ans= -5.7883 2.2783 1. 8456 (sinistra) e caso non risonante per 2π/ω = 5 (destra) in funzione del tempo nel modello di grattacielo a 10 piani.9). >> lambda=eig(A).5594 -13.Autovalori e autovettori 57 Possiamo calcolare gli autovalori λi della matrice A.4703 -19. le relative frequenze naturali ωi ed i periodi 2π/ωi >> A=-10*eye(10.9).7004 -18.3342 18. Nella Figura 9.9166 -7.6339 3.10)=-5.0293 1.3138 -0.6695 1.8005 Il modello quindi avr` a un comportamento critico se la frequenza di oscillazione del terreno risulta prossima ad una delle frequenze naturali del sistema.2624 4.1117 0.2735 1.1 mostriamo gli spostamenti nel tempo dell’ultimo piano dell’edificio nel caso di una frequenza naturale e di una frequenza non naturale.1 Vibrazioni di risonanza all’ultimo piano per 2π/ω = 3.7473 3.8456 -0. Per esempio >> x=[1 -2 3 4 -8].9951 6. 9.5557 4.10)+5*diag(ones(1.0000 2.9903 0.7748 2.2534 -2. >> A(10.6951 1.1) ans = 18 .8099 -16.-1)+5*diag(ones(1.2349 4.2361 2. >> omega=sqrt(-lambda).3 Minimi quadrati e approssimazione di funzioni Innanzitutto osserviamo che il calcolo delle norme di vettore e di matrice ` e implementato in MATLAB tramite la funzione norm. 20 20 15 15 10 10 5 5 x (t) 0 x (t) 0 10 20 30 40 50 tempo 60 70 80 90 100 0 n −5 n −5 −10 −10 −15 −15 −20 −20 0 10 20 30 40 50 tempo 60 70 80 90 100 Figura 9.4222 1.

y=[3 0 4 1]’. i = 1.inf) ans = 8 >> norm(x. Data una funzione f di cui sono noti una serie di valori yi = f (xi ) nei nodi xi . V2=[x.inf) ans = 13 >> norm(A. .6954 >> A=[1 2 4.2) ans = 9.y. . a2=V2\y. Possiamo scrivere >> >> >> >> >> >> >> >> >> >> x=[-1 0 2 5]’. Se m < n − 1 il sistema ` e sovradeterminato e non ammette soluzione. y2i=polyval(a2(3:-1:1).2. y1i=polyval(a1(2:-1:1). .n cerchiamo il polinomio di grado fissato che meglio approssima la funzione nel senso dei minimi quadrati. .5).^0 x x. imponiamo le condizioni p(xi ) = yi . plot(x.1) ans = 13 >> norm(A. .xi. . .xi). Possiamo riutilizzare i dati del Capitolo 8 con n = 4 e cercare la retta (m = 1) e la parabola (m = 2) dei minimi quadrati. a1=V1\y. .2) ans = 11.^2]. xi=linspace(-1.xi). . I risultati sono riportati nella Figura 9. -1 7 3.^0 x]. >> norm(A. In altre parole dato p(x) = a0 + a1 x + a2 x2 + .y2i).n. i = 1. V1=[x. .5506 Consideriamo un problema analogo a quello dell’interpolazione polinomiale visto nel laboratorio Matlab dei Capitoli 4 e 8. Sappiamo che se m = n − 1 ed i nodi sono distinti abbiamo un sistema lineare con una unica soluzione.y1i.xi. + am xm .’o’.58 Autovalori e autovettori >> norm(x. -11 2 0]. quindi ne cerchiamo una nel senso dei minimi quadrati. .

parabola dei minimi quadrati e polinomio interpolante.Autovalori e autovettori 59 7 6 m=3 5 4 3 m=2 2 m=1 1 0 −1 −1 0 1 2 3 4 5 Figura 9.2 Retta dei minimi quadrati. .

60 .

y2=D2(2.’o-’. plot(x(i). 0 -1]. D1=A1*D. >> plot(x. rette e piani 10. La “raccolta di punti” terminer` a non appena avremo premuto il tasto “Invio”. c=cos(theta). A3=[c -s.10 Vettori geometrici. A2=[0 1. y3=D3(2.y]=ginput. Per fare ci` o utilizziamo il comando ginput nella forma >>[x.y.:). s=sin(theta). D3=A3*D.y1.:). x2=D2(1. s c]. end A questo punto tramite le matrici bidimensionali che caratterizzano le trasformazioni lineari di 2 in 2 possiamo agire geometricamente sul disegno.’o’).y(i)]=ginput(1). Vediamo a questo punto come sia possibile trasformare un immagine utilizzando opportune trasformazioni lineari o combinazioni di queste.y2.:). rispetto la retta y = x e di rotazione tramite i comandi R R >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> A1=[1 0. theta=pi/2. y1=D1(2.x2.’o’).:).’o-’). axis([-1 1 -1 1]) hold on for i=1:n [x(i).’o-’). In MATLAB ` e possibile disegnare a “mano libera” tramite il mouse una figura per punti. figure plot(x. plot(x.’o-’. D2=A2*D.:).y(i). D=[x’. 1 0].y. x3=D3(1.y.1 Trasformazioni lineari Abbiamo gi` a parlato di immagini digitali e della loro rappresentazione tramite matrici. x1=D1(1. In alternativa per un migliore inserimento di un numero prefissato di n punti con visualizzazione dei dati si possono usare le istruzioni >> >> >> >> n=10.x1.y’]. figure Vediamo l’azione delle trasformazioni lineari sul nostro disegno . Definiamo quindi le matrici di riflessione rispetto l’asse x.:).

2 0.8 1 Figura 10.6 0.4 −0.1 Riflessioni rispetto all’asse delle x e alla retta y = x e rotazione di π/2 in senso antiorario di un disegno.6 0.4 0. rette e piani >> plot(x.6 −0.6 −0.x3. In modo analogo a quanto fatto in una dimensione bisogner` a .4 0. Va precisato che MATLAB fornisce numerose possibilit` a grafiche e che in questa sede ci limiteremo ad analizzare le principali.’o-’). Possiamo chiaramente effettuare le stesse operazioni anche su figure geometriche ben definite.2 0. >> x=1+3*cos(t).6 −0. 1 1 1 0.2 −0.2 Riflessioni rispetto all’asse delle x e alla retta y = x e rotazione di π/2 in senso antiorario di un ellisse.2*pi).1 riportiamo i risultati ottenuti.2 Grafici in pi` u dimensioni Vediamo come realizzare con MATLAB grafici di funzioni di pi` u variabili. Nella Figura 10.6 −0.2 0.8 −1 −1 −0. Nella Figura 10. 10.6 0.6 0.2 0 0.2 0.6 0. Per esempio possiamo agire su un ellisse definendo la matrice di punti D come >> t = linspace(0.2 −0.8 0.62 Vettori geometrici.4 −0.8 −0.2 0.4 −0.6 −0.2 0 0.8 −0.8 1 −1 −1 −0.2 0 0 0 −0. L’uso del comando figure consente l’apertura di pi` u finestre grafiche.8 −0.4 0.y.8 0.2 sono illustrate le diverse azioni delle trasformazioni.4 0.4 0.4 −0.y].’o-’. 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 −1 −1 −1 −2 −2 −2 −3 −3 −3 −4 −4 −3 −2 −1 0 1 2 3 4 5 −4 6 −4 −3 −2 −1 0 1 2 3 4 5 6 −4 −4 −3 −2 −1 0 1 2 3 4 Figura 10.8 −0.4 −0.6 0. y=1+2*sin(t).8 −0.y3.8 1 −1 −1 −0.2 −0.2 0 0.4 −0.6 −0.4 0. >> D = [x.8 0.

xj ) e yij = (yi . analogo al caso bidimensionale. Il risultato ottenuto ` e riportato in Figura 10.5 1 1.Y]=meshgrid(x.4.n. .^2-Y.5 −2 −2 −1.3 assieme al grafico delle curve di livello. y=linspace(-10.Y (i.y).*exp(-X.px. . La matrice Z avr` a la propriet` a Z (i. si rimanda all’help in linea. generiamo due matrici X e Y di m × n punti tali che l’elemento xij = (xj . xlabel. i = 1.5 4 3 2 1 0 −1 −2 1 0.Z). In generale il grafico di superfici pu` o essere personalizzato in diversi modi. La rappre2 1. . px=X. x=linspace(-10.10. Per esempio consideriamo la funzione f (x. Le curve di livello si possono ottenere tramite la funzione contour(X. title.*sin(X.py) otteniamo il grafico della Figura 10.m).Y.y). .m j = 1.Y.2. Nel caso di campi vettoriali possiamo utilizzare le funzioni quiver in 2 e quiver3 in 3 .5 −3 −4 2 1 0 0 −1 −2 −2 −1 1 2 −1 −1.yi ).j ).20). [X.n=40. . sentazione grafica realizzata da mesh ` e l’analogo in pi` u dimensioni del comando plot. py=-Y.10. Utilizzando invece la funzione surf le varie pezze vengono colorate opportunamente. nell’intervallo [−2. . >> mesh(X. . [X. Per creare il grafico della superficie ` e sufficiente aggiungere le istruzioni >> Z=Z=(X-Y). ylabel e zlabel per il cui uso.^2).j )). In questo caso si raccordano i punti a quattro a quattro con “pezze” piane (parti di piano che passano per i quattro punti).20).j ) = f (X (i.2] × [−2.^2-Y.y ) = (x − y ) sin(x2 + y 2 ).^2).^2+Y.2.Vettori geometrici.y ) = (x − y ) sin(x2 + y 2 ).5 2 Figura 10.^2).5 0 −0. quiver(X.5 0 0. Tramite i comandi >> >> >> >> m=40. .2].Y]=meshgrid(x. y=linspace(-2.n).Y. Per esempio con le istruzioni R R >> >> >> >> >> >> x=linspace(-2.Z). . rette e piani 63 innanzitutto definire una matrice di punti in corrispondenza dei quali valutare la funzione.5 −1 −0.*exp(-X.3 Grafico di superficie e curve di livello di f (x. Le opzioni pi` u comuni sono date dai comandi axis.

64 Vettori geometrici.5 −1 −1.5 2 Figura 10.5 1 1.5 0 −0. rette e piani 2 1.5 1 0.4 Campo vettoriale di F(x.y ) = (x exp(−x2 − y 2 ).5 −2 −2 −1. . − y exp(−x2 − y 2 )).5 −1 −0.5 0 0.

1/2.1/2.1 Variabili aleatorie discrete Sia X una v. Inseriamoli come vettori >> X = [3.a.8] X = 3 4 8 >> P=[1/4.1/4] P = 0.5000 0.4.4. Infatti. discreta che pu` o assumere i valori 3.1/4 rispettivamente.P) Sempre con il comando find possiamo calcolare P ({X > 3}). Possiamo verificare che non ci sono valori negativi tramite il comando find >> find( (P<0) ) ans = Empty matrix: 0-by-1 Inoltre la somma degli elementi di P deve dare 1 >> sum(P) ans = 1 Possiamo realizzare il grafico a barre della distribuzione di probabilit` a con il comando bar nella forma >> bar(X.2500 Controlliamo che P possa essere una legge di probabilit` a.11 Probabilit` a 11. troviamo gli “indici buoni” di X per cui X > 3 >> ind_buo = find( ( X > 3 ) ) ind_buo = 2 3 e quindi sommiamo le probabilit` a corrispondenti .2500 0.8 con probabilit` a 1/4.

p2.7500 Calcoliamo ora il valore atteso di X . x = [ x1] [ x2] [ x3] >> p=[p1. x2.5 0. Ricordiamo come tramite il Symbolic Toolbox sia possibile utilizzare anche simboli al posto di numeri.4 0.66 Probabilit` a 0.0958 Calcoliamo la varianza di X >> VAR_X = ( ( X .^2 )’ * P . per calcolare ad esempio E (sin(X )).( EX ).3 0. >> syms x1 x2 >> syms p1 p2 >> x=[x1.6875 e attraverso la formula della varianza V ar(X ) = E (X 2 ) − (E (X ))2 >> Var_X = ( X. possiamo scrivere >> EsinX = ( sin(X) )’ * P EsinX = -0. p = x3 real positive x3] 1-(p1+p2)] .1 0 3 4 8 Figura 11. ossia >> EX = X’ * P EX = 4.P) ed ottenere lo stesso risultato.^2 )’ * P VAR_X = 3.7500 P i xi pxi . Poich´ e E (X ) = si tratter` a del prodotto scalare xT px .1 Uso del comando bar per visualizzare la distribuzione di probabilit` a. >> PR= sum ( P(ind_buo) ) PR = 0. in forma matriciale Grazie al Teorema del valore atteso di g (X ).EX ).6875 Avremmo anche potuto usare la funzione MATLAB var nella forma var(X.2 0.^2 Var_X = 3.

1000 0. 4 . >> EX2= (x.1000 i = 1.1000 0.1000 0 Questa ` e una legge congiunta.Y ) (xi . discrete (X.1000 Queste due matrici P P rappresenta una legge congiunta. 4 ]. >> simplify(VAR_X .Y ) (xi . Infatti i suoi elementi sono non negativi ma i j p(X.1000 0. 8 ].1000 0.1000 0.0. 0. j = 1.3:4)= 0 P = 0.Y ). >> VAR_X=( (x-EX).4.8 e Y pu` o assumere i valori −1.1000 0.^2.yj ).2.1000 0. dove X pu` o assumere i valori 3.1000 0.1000 0. poich´ e adesso . La legge congiunta verr` a assegnata mediante la matrice P = pij = p(X.1000 0.1000 0.4.1000 0.a.1000 0 0.^2)’ * p.1000 0. 3 .3.Probabilit` a 67 [ p1] [ p2] [ 1-p1-p2] Abbiamo inserito p3 = 1 − (p1 + p2 ) in modo da garantire che p1 + p2 + p3 = 1. 0 .2000 Inseriamo la “buona matrice” P >> P(3.1000 0.2 Variabili aleatorie doppie X e Y Analizziamo ora la coppia di v. >> Var_X = EX2 .4. >> Y = [ -1 . Inseriamo la matrice P >> P= 1/10*ones(3.1000 0.3. Inseriamoli come vettori >> X = [ 3 .2.^2 )’ *p. controlliamo la formula della varianza z Var X VAR X }| { z }| { 2 2 E (X ) −( E (X ) ) = E ((X − E (X )2 ) = V ar(X ) | {z } | {z } EX2 EX %calcola EX %calcola EX2 %calcola Var_X %calcola VAR_X %calcola-semplifica i conti VAR_X-Var_X >> EX = x’ * p.4) P = 0.1000 0.3.yj ) > 1 >> find( (P<0) ) ans = Empty matrix: 0-by-1 >> sum( sum( P ) ) ans = 1.1000 0.Var_X) ans = 0 11.(EX). Ora.1000 0.

baster` a scrivere >> S = sin( XX + 3 * YY ) S = 0 0.0600 %distribuzione marginale di Y %distribuzione marginale di X Verifichiamo se X e Y sono indipendenti.7568 0. essendo quest’ultima matrice diversa da P. Se vogliamo avere ad esempio la matrice Sij = sin(xi + 3yj ).* P ) ) ans = 0.0800 0. troviamo le distribuzioni marginali >> P_Y = ( sum ( P ) )’ P_Y = 0.3000 0.0800 0.0502 Calcoliamo ora E (X + Y ) e mostriamo che ` e uguale a E (X ) + E (Y ) >> sum( sum( ( XX + YY ) .Y ).4000 0.68 Probabilit` a >> sum( sum ( P ) ) ans = 1 Ricordando che il comando sum somma per colonne.1411 -0.9614 0. il valore atteso di g (X.0800 0.6503 -0.5000 .2879 0.1200 0.4000 0.Y) XX = 3 4 8 3 4 8 3 4 8 3 4 8 YY = -1 -1 -1 0 0 0 3 3 3 4 4 4 Queste matrici servono per il calcolo di una funzione g (X.9894 -0.2000 >> P_X = ( sum ( P’ ) )’ P_X = 0.9589 0.* P ) ) ans = 5.4202 -0.0600 0.1200 0.2000 0.8415 -0.0400 0.YY]=meshgrid(X. Costruiamo ora le due matrici XX e YY tramite il comando meshgrid >> [XX. i due eventi X e Y non sono indipendenti.0800 0.9129 Calcoliamo.2000 >> P_X * ( P_Y )’ ans = 0. ossia %matrice con fenomeni X e Y indipendenti 0.1200 0.1200 0.0400 Per il criterio di indipendenza.Y ) >> sum( sum( S’ .5366 0.3000 0.

n volte n ≥ 0.0. Pi` u precisamente pij ` e la probabilit` a condizionata che il sistema si trovi “domani” nello stato j essendo “oggi” nello stato i.3 Catene di Markov Nella dinamica delle catene di Markov abbiamo una matrice P . Supponiamo inoltre che se una stanza ha m collegamenti il topolino possa scegliere ognuna di esse con uguale probabilit` a 1/m.1000 >> EX + EY ans = 5. Supponiamo che gli stati rappresentino delle stanze di un labirinto. Cosa possiamo dire sul “comportamento” della matrice P n e di pn ? Si pu` o dimostrare che matrici del tipo di P hanno un autovalore uguale a 1 (si veda il Capitolo 9).0. Tale propriet` a` e soddisfatta da quasi tutti i sistemi nell’ambito della fisica e della scienza dei calcolatori1 . ossia p0 = {1. Si ` e interessati a sapere cosa succede per n crescente. La somma di ogni riga di P ` e uguale ad 1.4000 >> EY = sum( Y’ * P_Y ) EY = 1. i cui elementi rappresentano delle probabilit` a di transizione tra diversi stati.0}.0.Probabilit` a 69 >> EX = sum( X’ * P_X ) EX = 4. un suo generico elemento di indici i e j rappresenta quindi la probabilit` a che il sistema si trovi dopo n passi nello stato j trovandosi nello stato i all’istante iniziale.0. . per cui spesso si preferiscono modelli alternativi.0.0. Una matrice che rappresenta una possibile dinamica dei cammini del topolino nel caso di 9 stanze ` e la seguente matrice di transizione P 0 1 0 1/2 0 0 0 1 /2 0 0 0 1 / 3 0 1 / 3 0 1 / 3 0 0 0 0 C B B 0 1/2 0 0 0 1 /2 0 0 0 C B C B 1/2 0 0 0 1/2 0 0 0 0 C C B B 1/4 0 1/4 0 1 /4 0 1 /4 0 C P =B 0 C 0 1/3 0 1/3 0 0 0 1 /3 C B 0 C B 0 0 0 0 0 0 0 1 0 C B C B 0 0 0 0 1 / 2 0 1 / 2 0 0 A @ 0 0 1/2 0 0 1 /2 0 0 0 in cui ogni elemento pij della matrice stessa rappresenta la probabilit` a di andare dalla stanza i alla stanza j (pij = 0 significa che le stanze non sono collegate). La variabile n caratterizza una successione temporale discreta.5000 11.0. Supponiamo che il topolino inizialmente si trovi nella prima stanza. In sostanza lo stato del sistema al passo n + 1 dipende solo dallo stato del sistema al passo n. Vediamo un esempio numerico con l’ausilio di MATLAB. Calcoliamo il valore assoluto degli autovalori di P 1 Nella realt` a la dimensione di questi sistemi ` e cos` ı elevata da rendere l’analisi impossibile. Indicato con p0 il vettore iniziale di probabilit` a degli stati si ` e interessati a sapere cosa succede al variare di n al vettore pn definito come n pn+1 = P pn = P ··P | ·{z } p0 = P p0 . detta matrice di transizione. Si noti che anche P n ` e una matrice di transizione avente righe a somma 1. Un topolino inizialmente in una stanza si muove in questo labirinto in maniera casuale attraverso le altre stanze collegate tra loro.

5 0. Si ottiene λ∗ = 0. Ricordando il Capitolo 9.0. . 1887.0. Nella Figura 11.0461 >> pinf=Pinf*p0. Indipendentemente dallo stato iniziale la stanza pi` u probabile in cui trovare il topolino ` e la numero 6 con probabilit` a 0.9 0.50.1499 A parte l’autovalore uguale ad 1. . 9384 < 1. . >> Pinf=real(V*Dinf*inv(V)).3 0.50. 1 0.0. indichiamo con λ∗ il pi` u grande modulo dei restanti autovalori. 0755.0629 Essendo la matrice P ∞ reale.2864 0. Dunque poich` e λ < 1 per n → ∞ si conserva solo l’elemento diagonale uguale ad 1 nella matrice D. >> Pinf(1.1887 0.8 0.70 Probabilit` a >> [V. >> Dinf=diag([0 1 0 0 0 0 0 0 0]).2954 0. .4 0. Otteniamo >> p0=[1 0 0 0 0 0 0 0 0].9384 1.1.1845 0. . In altre parole limn→∞ Dn = diag{0. . Quindi se λ∗ < 1 la matrice di transizione converge ad una matrice stazionaria P ∞ . In tal caso esiste un unico vettore di probabilit` a stazionaria p∞ = P ∞ p0 tale che pn = P n p0 → p∞ per ogni vettore di probabilit` a degli stati iniziale p0 .0. da P V = V D segue −1 n n −1 ∗ P = V DV e quindi P = V D V .6 0. l’estrazione della parte reale tramite real ` e di fatto superflua. mentre la probabilit` a che il topolino sia ancora nella prima stanza ` e 0.1468 0. Tale comando migliora per` o la visualizzazione dei risultati finali (si provi senza). >> pinf(1) % Il vettore ha componenti tutte uguali ans = 0.2 0.1 0 0 5 10 15 20 25 30 35 40 45 50 Figura 11. >> abs(D) ans = 0. .0461 0.2 ` e visualizzato il comportamento delle componenti del vettore pn per n = 1.D]=eig(P).1572 0.0}.0755 0.0755 0.6855 0.0922 0.0000 0.0000 0.:) % La matrice ha righe tutte uguali ans = 0.2 Comportamento delle componenti del vettore pn per n = 1.0.7430 0.7 0. .0. .2864 0.

ottengo un vettore di n colonne distribuite come una binomiale di parametri m e p.1))/log(1-1/4))+1 X = 6 .4) > ( 1 .a. L’operatore logico (A>B) restituisce 1 quando il predicato ` e vero.a. con legge di Bernoulli si parametro 1/4 >> A =(rand(3. Il risultato che si avr` a dando pi` u volte il comando sar` a quindi diverso e indipendente dal precedente. ossia 1/4. Infatti il calcolatore genera numeri con algoritmi numerici deterministici in grado di superare una serie di test statistici che conferiscono a tali numeri una “apparente casualit` a”.75) A = 1 0 0 0 1 1 0 1 0 0 1 0 La funzione rand(m. In generale (rand(m. di Bernoulli di parametro p. Nell’esempio >> B=sum(A) B = 1 2 1 1 abbiamo che B ` e un vettore di 4 elementi.n)>(1-p)) restituisce quindi una matrice m × n di v.1 Generazione di leggi discrete Generiamo una matrice di v.1/4).1] sia maggiore di 0. 75. Il comando rand simula una v.12 Modelli probabilistici 12. continua con risultati tra 0 e 1 e con densit` a 1 costante.3/1000 ) ) ) X = 3 1 2 3 Digitiamo ora >> X= floor(log(rand(1. utilizzeremo l’approssimazione binomiale X ≈ B (1000.3/1000) >> X=sum( (rand(1000. 0 se ` e falso. Torneremo su questo aspetto nel laboratorio Matlab del prossimo capitolo. Per generare un vettore X di 4 elementi. ciascuno dei quali ha legge di Poisson di parametro 3.a. Se sommo le colonne della matrice.n) genera una matrice m × n di numeri pseudo-casuali indipendenti compresi tra 0 e 1. Un computer non pu` o produrre “caso” ma solo pseudo-caso. Nel nostro caso la probabilit` a che esca 1 ` e la probabilit` a che una legge uniforme su [0. ciascuno dei quali ha legge binomiale Xi ∼ B (3.4)>.

2 Generazione di leggi continue Digitiamo ora >> X = -log(rand(1.a. uniforme U .7329 16. utilizzare la funzione randn(m. Avremo che X = k se e solo se log(rand(1. Poich´ e rand(1. La probabilit` a con cui X > t accade ` e quindi e−2t ossia la legge di X ` e una esponenziale di parametro 2.2558 Avremo che X > t se e solo se − ossia se.5883 2.1139 ` e un vettore di 4 elementi distribuiti come una normale standard. Avremo dunque che >> A =randn(1. log(rand(1.a. A questo punto.1) < e−2t .72 Modelli probabilistici dove abbiamo usato la funzione floor che restituisce la parte intera dell’argomento.4))/(1/25) E = 31.1364 0.1)) >t 2 rand(1.1) > (3 ) 4 k . Per generare E vettore 1 × 4 di v.1))/2 X = 0. indipendenti con legge geometrica di parametro 1/25 >> X = floor(log(rand(1.2324 14.a. per generare un vettore N di 4 elementi distribuiti come una normale di media 3 e varianza 5 .1) genera una v. la probabilit` a con cui X = k accade ` e k−1 ≥U > 3 (4 ) }) = ( 3 ) 4 k k−1 − 3 (4 ) k = 1 3 4 4 ( ) k−1 ossia la legge di X ` e una geometrica di parametro 1/4. indipendenti esponenziali di parametro 1/25 >> E = -log(rand(1.4))/log(1-1/25))+1 X = 8 29 5 14 12. di legge gaussiana possiamo operare in due modi: 1.0619 49.3825 Per generare una v.1)) k−1≤ <k log(1 − 1/4) ossia se e solo se (si ricordi che 3/4 < 1). Per generare G vettore 1 × 4 di v.4) A = -0.1832 -0. ) (3 4 P ({X = k}) = P 3 ({( 4 ) k −1 ≥ rand(1.a.n) che genera una matrice m × n di numeri pseudocasuali indipendenti distribuiti come una normale standard (con parametri 0 e 1).

3 La funzione Φ Rx √ 2 MATLAB calcola l’approssimazione numerica di erf(x) = 0 2/ π e−s ds con la funzione erf(x). La standardizzata della media di n leggi bernoulliane di parametro 1/2 ` e (s) = Mn X1 +···+Xn n p − 1/2 1/(4n) 2 = √ (X1 + · · · + Xn − n/2). Avremo dunque che >> X = 2 / sqrt(1000) * ( sum((rand(1000.01:4]. >> y= 1/2 + 1/2 * erf( x/sqrt(2) ).25/sqrt(2) ) ans = 0.1).6845 7. A questo punto. 25}). utilizzare il Teorema Limite Centrale: Mn ≈ N (0.8854 ` e distribuito come una normale standard (per generare un vettore di m elementi.1) o calcolare P ({X ≤ 1. >> plot(x.y) >> >> 1/2 + 1/2 * erf( -1.25 }) .1000/2 ) X = 0. n Utilizziamo n = 1000. scrivendo >> x= [-4:.6950 3.1056 %ascisse per il grafico %ordinate per il grafico %disegna grafico %calcola P({ X <= 1. Abbiamo che Rx R0 Rx Φ(x) = −∞ fX (t) dt = −∞ fX (t) dt + 0 fX (t) dt 1 = + 2 Z 0 x 1 − t2 √ e 2 dt 2π √ x/ 2 √ (t=s/ 2) = 1 + 2 Z 0 √ x/ 2 2 1 √ e−s ds π 1 1 = + 2 2 Z 0 2 2 1 1 √ e−s ds = + erf 2 2 π  x √ 2  Possiamo quindi far disegnare il grafico la funzione Φ(x) (si veda la Figura 12.2548 (s) 2.1) > 1/2 )) .9799 12.8818 2. avremmo scritto rand(1000. per generare N distribuito come una normale di media 3 e varianza 5 >> N = 3 + sqrt(5)*X N = 4. Attraverso questa funzione vogliamo calcolare Φ(x) = P ({X ≤ x}) (la funzione delle tavole di una distribuzione normale standard).1)).Modelli probabilistici 73 >> N = 3 + sqrt(5)*A N = 1.m) invece di rand(1000.

8 0.4 0.6 0.74 Modelli probabilistici 1 0. .1 Grafico della funzione Φ.2 0 −4 −2 0 2 4 Figura 12.

.7905 >> var(A) %varianza ans = 0. >> A = [1.alt.’histc’) 5 3 3 0 0 In quest’ultima riga si ` e usata la funzione bar (che disegna un bar-chart) con l’opzione ’hist’ (che indica che in Y vi sono gli estremi delle barre e non i punti medi). >> mean(A) %media ans = 1. >> alt= histc(A.5.60:0. 1.0960 >> median(A) %mediana ans = 1.7 e calcoliamo qualche indice descrittivo tramite i comandi mean.N) consente di realizzare l’istogramma di frequenza di x suddividendo l’intervallo [min(X ).85 1.1 Indici descrittivi e istogrammi Carichiamo in un vettore A i dati dell’Esempio 13.84 1.8 1.71 1. dove X ` e il vettore dei dati eY ` e il vettore con gli estremi delle barre.. >> Y = [1.61 1.8) MATLAB ha una sua formula per calcolare gli estremi delle barre.0092 >> std(A) %dev. Prima di proseguire. Per selezionare gli estremi delle barre. standard ( =sqrt(var(A)) ) ans = 0.79 1.91].00].77 1. La funzione histc non disegna il grafico.9 1.84 1.86 .84 1.94 1. std e median. max(X )] in N sottointervalli (barre) di uguale ampiezza e calcolando quanti valori di x cadono in un dato intervallo.05:2. notiamo che .88 1.6 1. var.Y).7 1.Y) alt = 2 2 2 3 >> bar(Y.8 1. occorre utilizzare la funzione histc(X.77 1. Costruiamo l’istogramma di densit` a della Tabella 13. ma restituisce l’altezza delle barre i cui estremi sono nel vettore Y .13 Campionamento statistico e descrizione dei dati 13.8000 La funzione MATLAB hist(x.73 1. >> hist(A.67 1.

9 2 Figura 13.2 Retta dei minimi quadrati X Y Inseriamo i dati dell’Esempio 13.:).87 1. 54.4853 >> S_Y= std(Alt) S_Y = 3.1)). 91.1667 2.alt_bar.3333 4.*amp_int) %controllo area=1 ans = 1 0 13.8 e calcoliamo Mn .72 1. >> MnX= mean(Eta) MnX = 51 >> MnY= mean(Alt) MnY = 91.2711 1 Questo perch` e MATLAB assegna i valori all’intervallo di sinistra e quindi si riserva una barra per i valori uguali al massimo valore che abbiamo inserito.95 2].6 1. >> Eta=[ 36. >> amp_int= (G*Y’)’. >> Alt=[ 86. 90. >> num_oss= histc(A. Mn .5000 >> S_X= std(Eta) S_X = 8.8 1. 93. hist restituisce i dati per il grafico con una barra in pi` u dell’ampiezza pari all’ultima assegnata. 60].7.6 1.60 1. >> ser_stat= num_oss / 20.1 Istogrammi dei dati dell’Esempio 13.81 1.1 >> Y=[1.5000 0 >> bar(Y.9 2 1.’histc’) >> sum(alt_bar.7 1.8 1./amp_int) alt_bar = 2. ottenuti con barre assegnate da MATLAB e imponendo gli estremi delle barre.1)-diag(ones(6.0833 3.76 Campionamento statistico e descrizione dei dati 5 5 4 4 3 3 2 2 1 1 0 1. 95]. SX e SY . 57. >> G=diag(ones(5. >> alt_bar= (ser_stat.7 1. 48.Y). .1). 94.:)=G(5. >> G(6. 51.

9787 0. plot(xx.4 Generatori di numeri casuali Il problema della generazione di sequenze di numeri pseudo-casuali distribuiti uniformemente al calcolatore ` e un problema estremamente complesso e affascinante.9982 13.0015 0. >> X=randn(10000. Abbiamo che >> a=M(1...9500 e quindi disegniamo la Figura 13.Alt.3. >> X=randn(10000.Y ) Calcoliamo quindi a ˆeˆ b per la retta dei minimi quadrati.3833 >> b= MnY . : r(Y. 9772.Y ) > > M => . Simuliamo quindi molti dati (n = 10000) di una distribuzione gaussiana standard e vediamo se F ∗ (2) approssima bene P ({X ≤ 2}) = Φ(2) ≈ 0.’) hold on xx=[35 65].X ) r(X.0000 0.9992 0.X ) r(Y.3 Distribuzione statistica Vediamo ora una simulazione per mostrare il Teorema 13.2)*S_Y/S_X a = 0.4. %disegna la retta dei minimi quadrati 13. 0 altrimenti.a * MnX b = 71.1). a*xx + b) %scatterplot %per una retta bastano due punti.Campionamento statistico e descrizione dei dati 77 >> M=corrcoef([ Eta Alt ]) M = 1.9755 >> Phi_2=1/2 + 1/2 * erf( 2/sqrt(2) ). Ricordiamo che nella distribuzione uniforme ogni possibile numero in un determinato intervallo ` e ugualmente probabile (ad esempio il lancio di un dado genera una sequenza di numeri . >> F_2= sum( ( X <=2 ) )/10000 F_2 = 0.9944 0.9766 0.4).0000 La matrice M di correlazione va letta nel seguente modo 9 8 > r(X.9763 L’operatore logico ( X <=2 ) restituisce 1 se gli elementi sono minori o uguali a 2.9993 0. Ripetendo l’esperimento con 4 simulazioni.9765 0.’. %Phi(2) (vedere Capitolo 12) >> F_2/Phi_2 %rapporto valore stimato/valore vero ans = 1. >> >> >> >> plot(Eta.9944 1. >> F_2= sum( ( X <=2 ) )/10000 F_2 = 0. La loro somma sum conta quindi quanti elementi nelle colonne di X sono minori o uguali a 2.

n). 00. a = 75 . detto seme a c cifre. Nel 1948 per la prima volta venne proposto un generatore di numeri casuali distribuiti uniformemente detto generatore lineare congruenziale o pi` u brevemente LCG. c=0. Sfortunatamente questo metodo pu` o degenerare in sequenze con periodi molto brevi. 2 Il metodo LCG con questa scelta era alla base dell’algoritmo utilizzato da MATLAB per la generazione di numeri casuali distribuiti uniformemente fino alla versione 4. . ideato da John von Neumann nel 1946. Cosa si intende per` o per migliori? Un aspetto importante ` e la lunghezza del periodo dalla quale si vede subito che m dovr` a essere molto grande. Da un punto di vista pratico i generatori di numeri casuali restituiscono invece di xn+1 il suo valore diviso per m. In MATLAB per esempio >> n=10. nel nostro caso 01522756. for i=1:n-1.m − 1. Ogni successione di numeri generati da questo algoritmo inizier` a a ripetersi prima o poi. e la funzione str2double che esegue il procedimento inverso.2. Ci limiteremo in questo breve paragrafo ad accennare alcune idee di base. questo al fine di evitare numeri troppo grandi. >> seme=1234. per esempio 1234. La notazione “mod m”.n). L’dea del metodo middle-square. ossia modulo m. Dal punto di vista MATLAB abbiamo usato la funzione num2str che consente di convertire un numero in una stringa. x(i+1)=str2double(st(3:6)).0. >> for i=1:n-1. x=zeros(1. >> x=zeros(1. Il metodo LCG. . La lunghezza di tale periodo pu` o essere considerata una misura della bont` a del generatore di numeri pseudo-casuali. dove a. . ha bisogno di un seme per inizializzare la sequenza di numeri secondo la seguente regola deterministica xn+1 = (axn + c)mod m. c ed m ` e il punto cruciale del metodo. Una delle scelte pi` u popolari2 ` e m = 231 − 1.6]).. ` e la seguente. ossia 5227. 05. analogamente al metodo middle-square. . 00. . di queste teniamo solamente le c cifre di mezzo. st=num2str(x(i)^2. . Si parte da un valore iniziale. Ripetendo il procedimento otteniamo 27321529 e quindi 3215 e cos` ı via. seme = 1234. x(1)=seme. 84. 02. . a=16807. end >> x x = Columns 1 through 7 1234 5227 3215 3362 3030 1809 2724 Columns 8 through 10 4201 6484 422 Ogni nuovo numero nella successione ` e determinato univocamente dal suo predecessore. Il numero di numeri della sequenza prima che intervenga una ripetizione ` e detto periodo della sequenza. ad esempio a partire dal valore 0 la sequenza ha sempre periodo 1. significa che axn + c viene diviso per m e xn+1 posto uguale al resto intero della divisione. c ed m sono opportuni numeri interi costanti. Il problema della scelta dei migliori valori per a. c = 0.78 Campionamento statistico e descrizione dei dati casuali distribuiti uniformemente in [1. end x=x.1. La successione generata quindi non potr` a essere casuale ma avr` a solo il carattere di apparente casualit` a. Per esempio il metodo LCG in MATLAB potr` a essere realizzato come >> >> >> >> >> >> n=10000. m=2147483647. .m). Quindi xn+1 assume valori interi tra 0./m. n ≥ 0. Supponiamo di volere generare un numero casuale di 4 cifre. ossia un numero tra 0000 e 9999. x(i+1)=mod(a*x(i)+c. lo si eleva al quadrato ottenendo un numero con il doppio 2c di cifre. x(1)=seme.’%08d’). oppure partendo con 43 e numeri a 2 cifre otteniamo la sequenza 43. Un secondo aspetto consiste nel garantirsi che per un dato m i valori di a e c siano tali che la successione abbia periodo massimo.

5 0.1 0.6 0.5 0.3 0. b e c e modificato scegliendo come valori m = 31.7 0. Nella figura 13.8 0.4 0.3 0. Nel caso della distribuzione uniforme tale valore teorico dovrebbe essere esattamente pari a n/N ossia 10000/50 = 200 nell’esempio specifico.5 0.8 0.6 0.9 1 Figura 13.4 0.9 1 0 0 0.8 0. forme o altre strutture regolari.4 0.8 0.2 confrontiamo il metodo LCG con il generatore rand di MATLAB.4 0. Questa propriet` a pu` o essere verificata graficamente realizzando il grafico bidimensionale dei punti (xn . .Campionamento statistico e descrizione dei dati 79 dove abbiamo utilizzato la funzione MATLAB mod dall’ovvio significato.7 0.2 0.7 0.2 0.2 0.6 0.1 0 0 0.6 0.9 0.2 Istogramma di frequenza dei generatori uniformi di numeri casuali. >> hist(x. 1 1 0.8 0.6 0.9 1 Figura 13.5 0. Una richiesta pi` u importante nel valutare la bont` a di un generatore uniforme di numeri pseudo-casuali ` e l’assenza di correlazione tra i numeri generati dall’algoritmo.6 0.1 0.4 0.xn+j ) per j > 0.3 0.5 0.1 0.7 0.9 1 0 0 0.2 0. a = 13 e c = 0. LCG 250 250 rand 200 200 150 150 100 100 50 50 0 0 0.1 0.3 riportiamo il risultato per j = 1 con 1000 punti ottenuto con il generatore LCG con le scelte “ottimali” di a.99999999953434 ed il minimo 0.8 0. In figura 13.1 0. In altre parole non deve emergere nessuna relazione funzionale tra xn e xn+1 per n > 0.7 0. Dopo avere generato una tabella di 100 valori pseudo-casuali compresi tra 0 ed 1 possiamo verificarne l’uniforme distribuzione tramite >> N=50.7 0.3 0.3 0. Il valore massimo generato sar` a quindi 0.2 0.9 0.N).4 0.2 0.00000000046566.3 Assenza di correlazione (sinistra) e forte correlazione (destra) nel grafico dei punti (xn . In tale grafico non dovranno comparire linee.3 0.5 0.xn+1 ) in un generatore uniforme di numeri pseudo-casuali.

80 .

>> A=rand(1000.1 Intervalli di confidenza Costruiamo un intervallo di confidenza per la media e per la varianza di un numero molto alto (n = 1000) di simulazioni di una X ∼ U (0.4 0. a meno della casualit` a.[0:1/10:1]).1. che le osservazioni tra la 45-esima e la 50-esima saranno >> A(45:50)’ ans = 0.0351 0.’histc’) ottenendo. Le nostre simulazioni vengono raccolte nel vettore A.6318 0.8 1 Figura 14.4423 Disegniamo l’istogramma con i dati che abbiamo >> B=histc(A.1).14 Metodi statistici inferenziali 14. Avremo.3637 0. per esempio. un istogramma simile a quello nella Figura 14.2 0. 140 120 100 80 60 40 20 0 0 0.1). Costruiamo un intervallo di confidenza con affidabilit` a 95% per il valore atteso della distribuzione simulata.B.6 0. che sappiamo essere 1/2.8288 0. .1 Istogramma delle mille simulazioni da distribuzione uniforme. >> bar([0:1/10:1]+1/20.7266 0.

1] . se Y ∼ B (20.5295 %estremo sinistro intervallo %estremo destro intervallo Ora. 14.96*SA/sqrt(1000).95).b]) = β segue che prima di effettuare le simulazioni.36. ossia controlliamo se il simulatore di MATLAB ` e “uniforme”.2 Venti intervalli di confidenza a confronto col parametro vero. plot([ES(i) ED(i)]. infatti dalla definizione di intervallo di confidenza P (ϑ ∈ [a.[0 21].96*SA/sqrt(1000). avevamo P (1/2 ∈ [a. alt=[1:20]. Dividiamo l’intervallo [0.2 Test d’ipotesi Utilizziamo gli stessi dati per un test di adattamento alla legge uniforme. ossia 1/2. come dichiara. SA=std(A).95.4942 >> ED=MA+1. >> >> >> >> >> >> >> >> >> >> A=rand(1000.20). figure hold on for i=1:20.96*SA/sqrt(1000) ED = 0. ES=MA-1. costruiamo 20 simulazioni di intervalli di confidenza e confrontiamoli sul grafico col valore vero del parametro.b]) = 0.’--’).96*SA/sqrt(1000) = 0.[i i]). ES=MA-1.0.55 Figura 14. MA=mean(A).5 0.2. end plot([1/2 1/2]. come mostrato nella Figura 14. ED=MA+1. SA=std(A). hold off 20 15 10 5 0 0. P ({Y = 20}) ≈ 0.82 Metodi statistici inferenziali >> >> >> ES MA=mean(A). Qual ` e la probabilit` a che tutte e 20 le simulazioni contengano il valore vero? Dalla legge binomiale.45 0. Il valore vero non appartiene a tutti gli intervalli.

rigetter` a l’ipotesi di adattamento se D > d1−α .:). a priori. Impostiamo quindi i 20 test (abbiamo in memoria 20 simulazioni).8000 Per questa simulazione.9600 6.7000 13. >> VO=VO(1:10. Eseguiamo ora un test χ2 di indipendenza con i dati dell’Esercizio 14.8600 2. >> A=[30 40. moltiplicando il vettore colonna SR per il vettore riga SC e divendo il totale per NT.4600 8.1400 3.82. SR = 70 125 55 SC = 125 125 Calcoliamo quindi NT il numero totale di osservazioni e quindi la matrice del numero atteso di osservazioni stimato sotto l’ipotesi nulla. Dalle tavole.7800 5. in nessun caso possiamo rifiutare l’ipotesi di adattamento.7400 6.[0:1/10:1]).99.5000 10. >> D=sum((VO-VA). come si pu` o pi` u facilmente osservare con l’operatore logico > >> (D > 21. con D ∼ χ2 N −1 .Metodi statistici inferenziali 83 in 10 classi. la probabilit` a che nessuno dia come risultato di rigettare l’ipotesi nulla ` e circa 0. calcoliamo SR (somme righe) e SC (somma colonne) per mezzo dell’operatore ’ (trasposta di una matrice).666) ans = Columns 1 through 12 0 0 0 0 Columns 13 through 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Quest’ultimo fatto dipende chiaramente dall’esperimento eseguito.4200 2. NT = 250 >> VA=SR*SC/NT VA = . Il calcolo diviene in MATLAB algebricamente semplice.9800 11. >> SR=sum(A’)’.2600 Columns 15 through 20 5. Per ogni intervallo. 58 67. d0. >> VA=100*ones(10.3000 2. 37 18] A = 30 40 58 67 37 18 Ricordando che sum somma i dati per colonne.3200 4. %numero di osservazioni in ogni intervallo Il nostro test./VA) %distanza pivotale per i test Chi Quadro D = Columns 1 through 7 2.6000 Columns 8 through 14 3. SC=sum(A). mi aspetto 100 simulazioni. 666. Va notato comunque che su 20 test a livello α = 0. >> VO=histc(A. p0 k = 1/10 (distribuzione uniforme).11. Avremo quindi N = 10.20).3200 4. n = 1000.2600 7. come si verifica 0 semplicemente dalla relazione n0 k = n ∗ pk .0200 5.0800 10.0400 13. ognuna di ampiezza 1/10.^2.99 ∼ 21.

95 Dalle tavole.0000 62.5000 27.5000 27. con D ∼ χ2 (r −1)(c−1) .95 ∼ 5.^2.6402 Rifiutiamo l’ipotesi di indipendenza. >> D=sum(sum((A-VA). Scegliamo α = 0. rigetter` a l’ipotesi di adattamento se D > d1−α .991) ans = 1 ./VA)) D = 8. come si pu` o pi` u facilmente osservare con l’operatore logico > >> (D > 5.5000 Il nostro test di indipendenza. 991.5000 35.0000 62. d0.84 Metodi statistici inferenziali 35. a priori.

49 comandi abs. 12 polyval. 55 erf. 70 root. 4 fplot. 75 leggi di Keplero. 28 fmin. 24 format. 79 norm. 5 logspace. 75 median. 5 simplify. 5 atan. 27 dir. 51 diag. 20 inv. 12. 47 inline. 37 quad.Indice Analitico catene di Markov. 9 plot3. 13. 32 sin. 9 diff. 65. 5 log2. 30. 5 std. 75 cd. 15 dsolve. 15 clear. 23 linspace. 75 hist. 9 log. 14. 52 legend. 7. 4.. 42 eig. 15 exp. 43 ones. 15 quad8. 72 rand. 9. 32 sign. 63 randn. 72 fminbnd. 61 grid. 50 num2str. 5 asin. 9 log10. 15 cos. 20 copyfile. 78 ode45. 25 ginput. 5 mean. 19 pwd. 5 axis. 75 . 73 expand. 4. 47 compose.end. 63 bar. 38 plot. 11. 56 istogramma di frequenza. 5 deconv. 25 MATLAB backslash. 15 mod. 5 eye. 62 find. 13 hold on. 13 image. 75 hold off.. 9 ezplot. 32 sqrt. 63 mkdir. 15 det. 63 quiver. 7 colormap. 5 solve. 22 floor. 71 rank. 28 for. 65 finverse. 75 meshgrid. 14 length. 6 limit. 69 frequenze naturali. 14 histc. 20 fzero. 57 null. 22 conv. 5 acos. 68 mesh. 37 quiver3. 20 figure. 50 real. 20 delete.

4 . 6 xlabel. 41 text. 10 Symbolic Mathematics Toolbox.86 Indice Analitico str2double. 14 notazione due punti. 52 probabilit` a di transizione. 3 realmin. 3 ans.*. 4 operazioni puntuali. 4 ˆ. 22. 4 . 27 subs. 14. 69 risonanza. 56 di transizione. 14. 4 /. 15 variabili Inf. 3 version. 51 surf. 9 M-file. 3 operatori \. 63 symsum./. 49 *. 6 who. 2. 3 realmax. 14. 5 taylor. 69 di Vandermonde. 39 type. 3 computer. 9 zlabel. 56 . 15 tan. 4 -. 4 . 7 numeri complessi. 63 zeros. 14 title. 63 trapz. 3 matrice di stiffness. 63 ylabel. 3 i. 75 whos. 15 var.ˆ. 63 funzioni vettoriali. 4 +. 78 subplot.j. 3 NaN. 66. 3 pi. 41 syms.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->