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.

7.9. Dall’algebra lineare sappiamo come i vettori possono essere considerati casi particolari di matrici.11. Questo ` e esattamente il modo in cui MATLAB definisce i vettori. Per esempio un vettore di dimensione 8 nella forma riga o colonna ` e. Il vettore colonna pu` o invece essere ottenuto come segue >> x = [1.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.6 Alcune funzioni matematiche predefinite in MATLAB.9.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.7.13.11. In tale ambito MATLAB esprime al meglio le sue potenzialit` a (non a caso l’acronimo MATLAB sta per MATrix LABoratory). base e logaritmo in base 2 logaritmo in base 10 radice quadrata valore assoluto la funzione segno Tabella 2. 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.5. Non solo. per MATLAB anche le quantit` a scalari sono semplici matrici di tipo 1 × 1. una matrice di tipo 1 × 8 (una riga e otto colonne) o 8 × 1 (otto righe e una colonna). rispettivamente.13. Per accedere al valore di una componente del vettore (riga o colonna) basta scrivere >> x(4) ans = 7 .3.3. mentre gli spazi bianchi le singole componenti del vettore riga. Per memorizzare il vettore x = (1.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.5.

who. Il primo comando. 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 . Workspace. >> who Your variables are: A x 5 13 9 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. elenca i nomi delle variabili attualmente presenti mentre whos aggiunge informazioni riguardanti il tipo di variabile e l’occupazione di memoria. Potremo accedere agli elementi della matrice in maniera naturale utilizzando i corrispondenti indici >> A=(1. 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. 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) basta scrivere >> A=(1. Per passare da vettori riga a vettori colonna si utilizza il simbolo di apostrofo.3) ans= 5 Se vogliamo quindi cambiare l’elemento A(1.3)=4. 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. 15 .

In questo caso ` e preferibile utilizzare il comando linspace.2:1 x = 0 0.2000 0. n=8.4000 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. >> x = linspace(a. La notazione due punti “funziona” anche con valori non interi.b. 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 .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). 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. x = [1 3 5 7 9 11 13 15]. dimensione 0 × 0. Per esempio se vogliamo creare un vettore con un numero prefissato di punti equispaziati all’interno di un dato intervallo.5714 0.8000 1. b=1.0000 0. Per esempio >> a = 0. potrebbe essere generato come >> x = 1:2:15. Un uso particolarmente efficace della notazione due punti si ha nella gestione di indici di vettori e matrici. per esempio >> x=0:0. Per esempio utilizzare i due punti “:” singolarmente significa selezionare ogni elemento di una data riga o colonna .7143 0. Il vettore vuoto ha lunghezza zero.1429 0.n) x = Columns 1 through 7 0 0.0000 Nel caso in cui il passo non sia intero pu` o risultare difficile l’uso dell’operatore due punti.6000 0. Il vettore x utilizzato in precedenza.2857 Column 8 1.

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

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.6180 3.0000i .0000 0 0.0000 >> I3 = I3 = 1 0 0 eye(3) 0 1 0 0 0 1 + 5.8660 -1. 6+7i 1-4i] A = 1.0000 .5000 -0. 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.0000 -0.0000 6.0000i + 4.5. .8660 0. Vediamo subito degli esempi.4.0000i .0472 1. >> A=[1+3i 2+5i .0000 .n).0000i 1.0944 2.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.5708 2. linspace(0. cos(x).3.5).5236 1. c’ e s’.7.0000 >> A’ ans = 1.0000i 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)).pi. 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. Per esempio >> n = >> x = >> c = >> [x’ ans = 7.0000 + 7.0000i 6. c’] 1.7 Alcune funzioni predefinite per la costruzione di particolari matrici in MATLAB.1] matrice identit` a matrice diagonale Tabella 2.0000 + 3.0000i 2.0000 2. L’istruzione [x’ c’ s’] crea una matrice le cui colonne sono i vettori trasposti x’.0000 0.5000 0.

E stesse dimensioni.2857 1. >> y = [50 40 20 30 10]. y con le stesse dimensioni ` e anche possibile l’operazione puntuale y. 3 3 3].0000 0. la somma e la differenza tra vettori. >> 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.*y ans = 50 120 >> y.0000 81 4.1870 0. Le uniche eccezioni a questa regola si verificano quando le precedenti operazioni vengono applicate coinvolgendo una matrice e una costante./x restituendo un vettore le cui componenti sono il risultato della divisione delle corrispondenti componenti di y per quelle di x. Allo stesso modo agisce la divisione puntuale y. Per esempio >> x. >> 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.*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.10 Introduzione a MATLAB >> x = [1 3 5 7 9]. ogni componente del vettore y ` e elevato alla potenza determinata dalla corrispondente componente del vettore x >> y.^2 ans = 1 9 100 13. 7 8 9]. In tal caso MATLAB considerer` a la costante come un vettore di pari dimensioni avente tutte componenti costanti .0000 >> x.3333 25 49 210 90 4.0000 0. Per vettori x. >> B = [ 1 1 1 . In maniera del tutto analoga le precedenti operazioni agiscono su matrici >> A = [ 1 2 3 . 2 2 2 .^x ans = 1.ˆ 2 eleva ogni componente del vettore x al quadrato.ˆ x.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.1111 L’istruzione x. Infine l’espressione x. 4 5 6 .0003 2.0e+010 * 0./x ans = 50.

2π ]. per esempio la funzione razionale f (x) = 120 − 60x + 12x2 − x3 120 + 60x + 12x2 + x3 sull’intervallo [0.2500 0.^3).0000 0.4724 1. >> x+2 ans = 3 4 >> 2-x ans = 1 0 >> 2. 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.1.7788 0. Con MATLAB ` e possibile realizzare grafici di funzioni anche in pi` u dimensioni e realizzare veri e propri programmi.0000 5 -1 1.0000 0. Per costruire una tabella di 5 valori possiamo utilizzare la sequenza di istruzioni >> x = linspace(0.0000 6 -2 7 -3 8 -4 0.5000 0. Se vogliamo visualizzare in forma grafica la funzione sin(x) sull’intervallo [0.5000 9 -5 0.2857 0. >> y = (120-60*x+12*x. Costruiamo prima una successione di valori della funzione del tipo .^2-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. Non solo. >> [x’ y’] ans = 0 1. per esempio il grafico di una funzione y = f (x). possiamo per esempio scrivere >> ezplot(’sin(x)’.^2+x. 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).6667 Consideriamo ora il problema del calcolo di una tabella di valori di una funzione non predefinita in MATLAB.Introduzione a MATLAB 11 >> x = 1:7.6065 0.3333 0. tramite il Symbolic Toolbox con MATLAB ` e possibile anche eseguire calcoli simbolici.[0.7500 0.4000 0.1]./x ans = 2. 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. Grafici bidimensionali vengono utilizzati per visualizzare la variazione di una variabile rispetto a un’altra.2*pi])./(120+60*x+12*x.5).3679 Utilizzando le operazioni vettoriali.^3).

nella Tabella 2. Colore y m c r g b w k giallo magenta ciano rosso verde blu bianco nero . Per realizzare il grafico basta aggiungere l’istruzione >> plot(x.y). Se vogliamo evidenziare i vertici della poligonale cos` ı costruita possiamo utilizzare l’istruzione >> plot(x.’-o’) che disegna una linea con un circoletto in corrispondenza dei vertici.12 Introduzione a MATLAB >> n = 31.n).8 riportiamo le opzioni principali. dove in questo caso abbiamo scelto 31 punti equispaziati. 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”.5).2*pi.y (i)) in modo ordinato al variare di i da 1 a 31. >> y = sin(x). Non cambia la funzione ma i parametri in ingresso.y ) i vertici (x(i). Esistono molte possibilit` a per personalizzare un grafico come quello creato nell’esempio precedente. Per esempio >> x = linspace(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.8 Principali opzioni del comando plot in MATLAB. >> y = sin(x).y. >> x = linspace(0. -- Linea linea linea linea linea continua punteggiata punto tratteggiata Tabella 2. o x + * s d v Simbolo punto circoletto per pi` u asterisco quadratino diamante triangolo : -. .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). in questo caso i parametri aggiunti specificano lo stile della linea del grafico. >> a = axis a = 0 7 -1 1 >> axis([a(1) pi a(3) a(4)]). La scelta della scala di visualizzazione ` e automatica. >> plot(x. ` possibile cambiare scala nei grafici tramite la funzione axis che permette di stabilire E la grandezza della finestra in cui vedere il grafico.

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

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

Scilab e Octave.y. Mathematica. 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’) . plot(x. 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. 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. x = linspace(0.. La parola chiave principale ` e syms che consente di dichiarare quali variabili sono simboliche.2*pi. MATLAB. In particolare MATLAB pu` o eseguire calcoli simbolici attraverso il Symbolic Mathematics toolbox che utilizza le routine di calcolo simbolico di Maple.10 Alcuni comandi per la gestione del file system. i principali sono riassunti nella Tabella 2. all’interno del menu File dalla finestra dell’editor di MATLAB.n). MATLAB mette a disposizione alcuni comandi. Il calcolo simbolico non comporta le approssimazioni introdotte dal calcolo numerico. Il calcolo simbolico Molti linguaggi di programmazione consentono di effettuare calcoli numerici analoghi a quelli visti finora. Digitando il nome assegnato allo script nella finestra principale di MATLAB. 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. scrivendo quindi esempio. ` e sufficiente selezionare il menu Save as. y = sin(x).10. Per una minima manipolazione dei file su disco. Tali linguaggi dispongono di librerie numeriche opportune che consentono di eseguire in modo semplificato operazioni molto complesse. ottenendo lo stesso risultato che si sarebbe avuto scrivendo uno a uno i comandi elencati nello script.. Il prezzo da pagare per ottenere questo ricade sulla velocit` a d’esecuzione e sulla necessit` a di particolari strutture dati.Introduzione a MATLAB 15 n = 31. si richiama e si esegue questo M-file.’-o’) Per salvare il nostro script e assegnargli il nome prestabilito. 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.

b) ans = 1/3*b^3-1/3*a^3 >> diff(exp(-x^2)) ans = -2*x*exp(-x^2) . Per esempio il calcolo di limiti.0. di integrali e di derivate.x.a.’right’) ans = inf >> limit(1/x.inf) ans = 0 >> syms a b >> int(x^2.’left’) ans = -inf >> limit(1/x.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. Si considerino i seguenti esempi (rinviamo ai rispettivi capitoli per una trattazione pi` u approfondita) >> syms x >> limit(1/x.0.x.

U ]. . realmin ans = 1. Per vedere il pi` u grande numero macchina e il pi` u piccolo numero macchina. l’insieme delle t cifre d1 d2 .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. La precisione macchina ` e legata all’approssimazione ottenibile con l’insieme dei numeri macchina a disposizione. lo indicheremo con fl(z). noi considereremo lo stesso z ) che si commette ` e z − f l(z ) 1 ≤ eps = β 1−t .7977e+308 ans = 2.0 Preliminari 0. dt si chiama mantissa e l’esponente p ` e un intero.2204e-016 e si pu` o verificare un’interessante propriet` a >> 1+eps > 1 ans = . A meno che z sia gi` a un numero macchina si incorre in un errore.2251e-308 In generale dato un numero reale z dobbiamo trovare un suo rappresentante tra i numeri macchina. . In particolare abbiamo a disposizione solo un numero finito di cifre. 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. Il numero macchina x ` e quindi nella forma x=s× d1 β −1 + d2 β −2 + .t. Il numero di cifre t ` e fissato per ogni insieme di numeri macchina che stiamo considerando. dove β ` e la base (per esempio β = 2). k = 1. . . . Ogni cifra soddisfa 0 ≤ dk ≤ β − 1. >> realmax . z 2 dove la quantit` a eps ` e detta precisione macchina. . . In MATLAB >> eps ans = 2. e l’esponente p ∈ [L. + dt β −t × β p . 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..

10000000000000000555111512312578 Interessante infine ` e anche l’uso dell’istruzione format rat che visualizza l’approssimazione tramite razionali di un qualunque numero inserito. Ricordiamo che il risultato di un confronto. o di una espressione logica. bisogna prestare molta attenzione quando si effettuano operazioni di calcolo tramite un calcolatore o una semplice calcolatrice tascabile. Per fare ci` o abbiamo bisogno del Symbolic Toolbox.’d’) ans = .1 t = 0. trattando i numeri come simboli. Per esempio >> format rat >> sqrt(2) ans = 1393/985 . Abbiamo che il numero >> t=0. Infatti sar` a inevitabile la presenza di errori nel risultato dovuta all’approssimazione numerica.’e’) ans = 1/10+eps/40 Utilizzando l’opzione ’d’ visualizziamo la sua rappresentazione decimale con 32 cifre >> sym(t.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). ` e nullo se ` e falso. 0.2 Calcoli simbolici Va precisato che MATLAB ` e in grado di eseguire anche calcoli esatti.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. per esempio >> 3>=5 ans =0 >>3<7 ans = 1 Riassumendo. ` e diverso da zero (uguale a 1 solitamente) se ` e vero.

individuando cos` ı un insieme di punti del piano caratterizzati dalle coppie (xk .1 Calcolo di polinomi Tra le funzioni elementari le funzioni polinomiali sono tra quelle pi` u utilizzate in vari algoritmi numerici. C R .y) (si veda la Figura 1.1926 -1.x).yk ).1). per punti. il grafico in tale intervallo basta utilizzare plot(x. Se vogliamo realizzare il grafico del polinomio.1 Funzioni 1. 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 ).1926 1 Occorre fare attenzione.200). Tali punti sono poi raccordati graficamente in modo da creare l’effetto di una linea continua.5] e le corrispondenti valutazioni del polinomio vengono costruiti in MATLAB tramite >> x=linspace(-2. dobbiamo innanzitutto creare una griglia di valori. >> x=3. Per calcolare una funzione polinomiale in corrispondenza di un valore x occorre utilizzare la funzione polyval. 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. Per esempio con >> p=[1 -3 -5]. Non ` e detto che tutte le radici di un polinomio appartengano all’insieme dei numeri reali. Una serie di 200 valori nell’intervallo [−2. continuando l’ultimo esempio1 >> roots(p) ans = 4. >> y=polyval(p. 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). Per il calcolo delle radici di un polinomio. >> y=polyval(p. Per disegnare.5. 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).x) y = -5 Si ricorda che l’uso del punto e virgola esegue un comando senza visualizzare il risultato.

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. Pu` o risultare utile definire un oggetto che contenga una funzione in modo tale da poterla utilizzare in pi` u contesti. ed ottenere lo stesso risultato.[-2*pi 2*pi -2 2]). 2π ] e considerando una finestra grafica con ordinate y comprese tra −2 e 2 (si veda la Figura 1. Nel caso si esplorino regioni non appartenenti al dominio delle funzioni in uso vi sar` a un segnale di avvertimento. >> c=conv(p. 1.r]=deconv(c. Ulteriori funzioni si possono ottenere componendo le funzioni elementari. disegna il grafico della funzione f (x) = sin 2x + cos x. >> p=[1 -2 5]. warning . per x ∈ [−2π. In alternativa ` e possibile utilizzare fplot.20 Funzioni 6 4 2 0 −2 −4 −6 −8 −2 −1 0 1 2 3 4 5 Figura 1. 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.2 Altre funzioni elementari Molte altre funzioni elementari sono elencate in Appendice B.q) c = 1 0 4 4 >> [a. 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.[-2*pi 2*pi -1 1]).2). Per moltiplicare due polinomi si pu` o utilizzare conv mentre per dividere deconv.1 Grafico di p(x) = x2 − 3x − 5 con plot. >> ezplot(f. o ezplot per esempio >> ezplot(’sin(2*x)+cos(x)’. q=[1 2 3].

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

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.3891 Per la composizione di funzioni. Per esempio >> f=sym(’x^2-1’) .2) ans = 7.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.f) ans = exp(x^2-1) >> compose(f. g=sym(’exp(x)’).22 Funzioni 0. >> finverse(f) ans = log(1/(-1+x)*(-(-1+x)*(1+x))^(1/2)) . 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.x.3) ans = 8 >> subs(g.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))’). utilizzando le due funzioni f e g definite sopra si usa il comando compose >> compose(g.

’right’) ans = inf >> limit((x+1)/(x-1).x.2) .x. quindi (1 + 1/n) = 1.0) ans = 1 >> limit((x+1)/(x-1). per esempio si possono perdere cifre significative o avere errori detti di cancellazione. il numero e. Per esempio non possiamo affrontare il calcolo del limite  n 1 .2 Limiti e continuit` a 2. >> (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. se il valore n ` e troppo grande segue che 1/n ` e minore della precisione macchina e non viene pi` u “sentito” nelle operazioni.x.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. 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. qualche esempio ` e pi` u chiaro di qualsiasi descrizione formale >> syms x t . lim 1+ n→+∞ n semplicemente aumentando il valore di n sperando di avvicinarci al valore limite.x.Inf) ans = exp(1) >> limit((t-2)/(t^2-4).Inf) ans = -3/5 >> limit((1+1/t)^t. Per esempio >> n=10^16.’left’) ans = -inf >> limit((3*x^2+1)/(-5*x^2+x+2). Infatti.1.1. Dal punto di vista del calcolo simbolico abbiamo a disposizione la funzione limit.t. >> limit(sin(x)/x.t.

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

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

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

>> d=diff(ra.2 0. 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.2 Andamento flusso del traffico. Per un fissato b ` e possibile generare una tabella con velocit` a per il flusso massimo e la distanza minima permessa.3 0.7 0. p vm = (20b/α).’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.30 Derivata di una funzione 0.4 0. >> syms v a b x .5 0. >> ra=sym(’v / (v+a*v^2/20+b)’).1 0 0 10 20 30 40 50 60 70 80 90 100 velocità Figura 3. .6 r = mezzi /tempo 0. Tra le due soluzioni selezioniamo solo quella positiva.

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. ni. subplot(224).[-10*pi 4*pi]).ezplot(’cos(x)*exp(-x)’. i quattro grafici nella figura non sembrano della stessa funzione se non parzialmente. Proviamo a ripercorrere i passi suggeriti per lo studio di una funzione con l’ausilio del . si ottengono i grafici di Figura 4.1 Grafici di funzioni Per disegnare il grafico di una funzione abbiamo gi` a visto che possiamo utilizzare la funzione ezplot.[-pi pi]).ezplot(’cos(x)*exp(-x)’.ezplot(’cos(x)*exp(-x)’).1 che si riferiscono alla stessa funzione f (x) = cos xe−x ma con domini differenti. Con le seguenti istruzioni >> >> >> >> subplot(221).ezplot(’cos(x)*exp(-x)’. subplot(223).1 Grafici della funzione cos xe−x in vari intervalli. Si possono comunque analizzare anche i grafici delle derivate successive avvalendosi della funzione diff e ancora di ezplot.[-3*pi 3*pi]).4 Grafici di funzioni e approssimazioni 4. subplot(222).

Il limite sinistro e il limite destro per x → −1/2 valgono rispettivamente >> syms x. 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. (2x + 1) = 0 ⇒ x = −1/2. il grafico di f passa per l’origine (0. + ∞). >> f=sym(exp(-x)*x/(2*x+1)).5. La funzione non sembra presentare particolari simmetrie. da cui f (x) > 0 x ∈ (−1. Dal segno della derivata prima possiamo valutare gli intervalli in cui la funzione f cresce o decresce. Per i limiti per x → ±∞ abbiamo invece: >> limit(f.4549 Per valutare il segno della derivata seconda occorre valutare il comportamento della funzione razionale che vi compare. − 1) ∪ (1/2. Consideriamo la funzione f (x) = x e−x . D(x) = (2x + 1)3 . f (x) x ∈ (−∞. per il numeratore N abbiamo .’left’) ans = inf >> limit(f.x.x.1548 >>x=0.’left’) ans = 0 quindi y = 0 risulta essere un asintoto orizzontale.1/2). subs(fd2) ans = 8. >> limit(f.32 Grafici di funzioni e approssimazioni calcolo simbolico. La retta x = −1/2 risulta essere un asintoto verticale. 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.inf.-inf.0). 2x + 1 Il dominio della funzione ` e determinato dai valori x tali che il denominatore non si annulli.-1/2.’right’) ans = -inf dove inf significa ∞ mentre -inf significa −∞.-1/2. subs(fd2) ans = -0. 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). Valutiamo i limiti per x che tende agli estremi degli intervalli che compongono il dominio.x. Tramite la funzione solve possiamo calcolare gli zeri della derivata. Avremo inoltre che x = −1 risulta essere un punto di minimo locale mentre il punto x = 1/2 ` e un punto di massimo locale. Posto N (x) = (4x3 + 4x2 − 3x − 6).’right’) ans = inf >> limit(f. f (0) = 0.

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). 0558. Il grafico di f ` e schematizzato nella Figura 4. essendo e−x > 0 per ogni x. mentre D(x) > 0 per x > −1/2. 0558 risultano essere punti di flesso.Grafici di funzioni e approssimazioni 33 >> roots([4 4 -3 -6]) ans = -1. 0558.0.5 0 0.1.0279 + 0. N (x) < 0 per x < 1. Per il denominatore D abbiamo semplicemente D(x) < 0 per x < −1/2. Riassumendo N (x)/D(x) > 0 per x ∈ (−∞.2.2 Grafico qualitativo della funzione f (x) = e−x x/(2x + 1). 0558).5 1 1. − 1/2) ∪ (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).0558 quindi essendoci un’unica radice reale N (x) > 0 per x > 1.5 −2 −1. A grandi linee abbiamo a disposizione due strade • pretendere che il polinomio passi esattamente per tutti i punti.6034i -1. • lasciare che il polinomio indichi solo l’andamento qualitativo e parzialmente quantitativo dei dati.2 Approssimare dati e funzioni Il polinomio di Taylor rappresenta solo una delle svariate possibilit` a a disposizione. 14 12 10 8 6 4 2 0 −2 −4 −6 −3 −2. nel secondo caso la funzione risulta essere concava.5 −1 −0. mentre N (x)/D(x) < 0 per x ∈ (−1/2. 4. + ∞). 0558. Nel primo caso. possiamo considerare una approssimazione con un polinomio di un certo grado. la derivata seconda ` e positiva e la funzione f risulta essere convessa.6034i 1. I punti con ascissa x = −1/2 e x = 1. che rappresentano solo alcuni valori di una funzione oppure che rappresentano misure di un fenomeno di cui stiamo cercando un modello. Nel secondo caso si parla di fitting e le ricadute dal punto di vista statistico saranno considerate nel seguito di questo libro. Avendo a disposizione dei dati. .5 2 exp(−x) x/(2 x+1) x Figura 4.0279 .

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

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

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

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

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

aree.^2 +9 * sin(3*t).Integrali.m (quad8stp) at line 123 In C:\MATLABR11\toolbox\matlab\funfun\quad8. le funzioni di calcolo numerico possono incontrare delle difficolt` a che segnalano con una sequenza di avvertimenti./x)’). >> curva=inline(’sqrt(4*cos(2*t).1) Warning: Recursion level limit reached in quad8.0.0.6635 Se la funzione ` e molto oscillante oppure se presenta delle singolarit` a. >> f=inline(’sin(1.. Singularity likely. per esempio derivata infinita..01.^2+1)’. possiamo invece operare come segue. 5. >> quad8(f.m (quad8stp) at line 123 .2 Calcolo di pressione media effettiva. . >> lung=quad8(curva. 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). funzione trapz.2*pi) lung = 16. primitive Z 0 39 2π q 4 cos2 (2t) + 9 sin2 (3t) + 1 dt. 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.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.’t’).m (quad8stp) at line 123 In C:\MATLABR11\toolbox\matlab\funfun\quad8. Z W = P dV. In C:\MATLABR11\toolbox\matlab\funfun\quad8.

5]. I dati sono memorizzati prelevandoli dall’esterno. >> PS=[16. dovendo calcolare un’area compresa tra due curve.6 11. ovvero utilizzando la funzione load.1500 dove ovviamente. primitive Alcuni dati sono rappresentati nella Figura 5.5 1 1. 4.2 20.25 18.6 8 7.40 Integrali. e il calcolo >> load dati PS PI V >> trapz(PS-PI) ans = 181.7 23 32.2 51 59 68 77 81.1 41. aree.5 3.2 33 21 14.2 5.2 4.2 8.2].6 3.5 3.2 47 42.1 11 9.0 2 1.2. . >> PI=[15. V ` e il volume.7 7. dove Ps e Pi indicano la pressione superiore e inferiore. In ogni caso abbiamo >> V=[14 16.5 1.1 37.5]. abbiamo fatto la differenza tra i valori di pressione.6 86.

1. Per esempio con >> taylortool(’atan(x)’) si ottiene il disegno mostrato nella Figura 6. Non avendo specificato altro. considera la somma parziale fino a n = 7.1 Serie di Taylor Tramite le possibilit` a del calcolo simbolico possiamo valutare le somme parziali della serie di Taylor di una data funzione. serie ed equazioni differenziali 6. 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. Per esempio .6 Integrali impropri. 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.

potrebbero essere dell’ordine di 1011 .42 Integrali impropri. Le equazioni differenziali costituiscono infatti uno strumento importante nella modellizzazione matematica. per esempio. una volta che si siano determinati i parametri.[0 100].’1/2’)+subs(t1. >> t1=taylor(t. si ottengono delle serie efficienti dal punto di vista del calcolo. Per esempio la serie di Leibniz 1 − 1/3 + 1/5 − 1/7.’x’.u]=ode45(f.5)’. >> 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. la simulazione del seguente modello di crescita tumorale   α  λu u u (t) = 1− . per esempio >> dsolve(’Dx = -a*x’) ans = exp(-a*t)*C1 >> x = dsolve(’Dx = -a*x’.’x’. >> plot(t. valori realistici. converge a π/4 ma in modo estremamente lento. 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. Per l’aspetto simbolico ` e possibile utilizzare dsolve.100). . α e ϑ sono dei parametri determinati dalle caratteristiche del tumore che stiamo analizzando. λ ` e un fattore di crescita. vogliamo fare una simulazione numerica. . e. Stiamo normalizzando le quantit` a in gioco. . >> t=sym(’atan(x)’). 01.10). serie ed equazioni differenziali >> s=sym(’exp(-x)’). >> p=4*(subs(t1. grazie alla rappresentazione in serie di Taylor della funzione arcotangente. Abbiamo invece arctan(1/2) + arctan(1/3) = arctan(1) = π/4.’1/3’)) p = 498668825/158723712 >> sym(498668825/158723712. ϑ = 5 e u(0) = 100.’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). Consideriamo.u) = 0.’u’) f = Inline function: f(t. 5. λ = 0.02*u*(1-(u/50)^0. Modelli simili sono importanti. α ϑ dove u(t) rappresenta il numero di celle tumorali presenti al tempo t. per esempio per la popolazione iniziale.1417411974336890700953972554998 6.u).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. L’equazione scritta si pu` o analizzare dal punto di vista analitico. 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. per simulare il comportamento del tumore nel caso di differenti terapie.5) Con >> [t.’d’) ans = 3.02*u*(1-(u/50)^0.’t’. Consideriamo il caso α = 0.

2. >> plot(t.’t’.100] in cui valutare la soluzione. La funzione ode45 necessita della funzione con cui descrivere l’equazione differenziale.r sono costanti positive. r = 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).[0 5]. u (0) = y (0) = 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.[1 1]).b. serie ed equazioni differenziali 43 si ottiene uno dei grafici nella Figura 6.2 Un esempio di formula di simulazione di un modello di crescita tumorale.3. il vettore [0 100] indica l’intervallo di tempo t ∈ [0.u]=ode45(f. Per esempio. -13 -4]*u’. 01. Abbiamo >> f=inline(’[0 1 . b = 0.Integrali impropri.4 e ottenuto tramite . Un esempio di simulazione ` e mostrato in Figura 6. La variabile u1 rappresenta le prede mentre la variabile u2 i predatori. I parametri scelti sono k = 1. l’ultimo argomento denota la condizione iniziale. Abbiamo due specie in competizione. Risolviamo il problema di Cauchy per questa equazione con u(0) = 1. 6.u). In MATLAB ` e gi` a disponibile una funzione lotka per la simulazione di questo sistema. e il risultato ` e mostrato in Figura 6. 130 120 θ = 150 110 100 θ = 100 90 80 θ = 50 70 60 0 10 20 30 40 50 60 70 80 90 100 Figura 6. Infine un esempio storico. u1 e u2 . 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. a = 0.k.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.’u’). 02. >> [t. posto u = y .

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

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 . -1 0] B = 1 3 5 7 -1 0 Possiamo calcolare direttamente il prodotto 2B . -2 1 5] A = 3 5 7 9 11 15 -2 1 5 >> B = [1 3 . Inseriamo in MATLAB le seguenti matrici A e B >> A = [3 5 7 . 5 7 . 9 11 15.1 Operazioni con matrici e vettori Una delle caratteristiche principali di MATLAB ` e la sua abilit` a nell’operare con matrici. In Appendice B abbiamo descritto alcune di queste possibilit` a. Nel seguito vedremo alcuni semplici esempi. 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(:.7 Vettori e matrici algebrici 7.

a. 7] x = 1 -1 3 7 >> y = [2.0000 0 .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 . 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. 15*a] [ -2*a.5000 >> A1*A ans = 1.5000 -0. Abbiamo quindi >> A=[1 2. Ad esempio abbiamo >> syms a >> a*A ans = [ 3*a. 3 4].0000 1. -1. 7*a] [ 9*a. 5*a] >> syms x1 x2 x3 >> x=[x1. 11*a. 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.2 Alcune funzioni avanzate Ricordiamo come tramite il Symbolic Toolbox sia possibile utilizzare anche simboli al posto di numeri. 5*a. -3. Le basi teoriche dell’algoritmo utilizzato saranno presentate nel prossimo capitolo. 4. x2. >> A1=inv(A) A1 = -2.0000 1.

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. A=zeros(7). verde e blu).1.0000 >> A*A1 ans = 1. Vediamo un semplice esempio di immagine monocromatica. >> image(255*I). realizza tramite il comando image che associa ad ogni elemento della matrice un colore l’immagine nella Figura 7.0000 0. L’operazione di prodotto per uno scalare quindi corrisponde ad una variazione della luminosit` a dell’immagine (si provi con image(50*I)).4)=1.3:5)=1.0000 1.2:6)=1. A(5.0000 7.3 Matrici e immagini Una delle applicazioni principali delle matrici la si deve alle immagini digitali.0000 0 1. In MATLAB una immagine monocromatica di m × n pixels ` e memorizzata in una matrice con le medesime dimensioni.Vettori e matrici algebrici 47 0. >> I=eye(10). A(4. 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’). Ogni elemento della matrice viene detto pixel. figure. .1 Matrice identit` a e immagini. 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. image(255*A). la mappa di colori delle scale di grigio nella quale lo 0 corrisponde al nero ed il 255 al bianco. La successione di istruzioni >> colormap(’gray’). 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. A(3. image(255*A’).

Si provi help image per esplorare ulteriori funzioni MATLAB per la gestione delle 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.2.2 Trasposizione e immagini. Il risultato ` e riportato nella Figura 7.

-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. -3]. Nel caso di sistemi inconsistenti MATLAB risolve comunque il problema approssimando la soluzione nel senso dei minimi quadrati. >> b=[3. -1 1 2. Per l’eliminazione di Gauss applicata ad una matrice quadrata di dimensione n il numero di operazioni ` e n3 /3. indicato con ’\’ e detto backslash.-3. Abbiamo gi` a osservato come il metodo di eliminazione di Gauss rappresenti un algoritmo applicabile direttamente al calcolatore.10]. 2 4 -2]. >> b=[3. -1 1 2. L’operatore backslash nel caso di matrici quadrate si basa su questo algoritmo. Un metodo per misurare il costo computazionale ` e quello di valutare il numero di operazioni necessarie al calcolatore per ottenere la soluzione. ma ` e importante ricordare da subito che l’operatore backslash fornisce sempre ’qualcosa’ che non e’ detto sia il risultato cercato.1250 1.0000 -3.10. Non deve stupire quindi il fatto che MATLAB riservi addirittura uno specifico operatore.0000 .8 Sistemi lineari 8. per la risoluzione di un sistema. >> x=A\b x = 0. ossia quanto paghiamo in termini di costo computazionale per ottenere il risultato.0000 10. 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).1250 >> A*x ans = -0. 2 4 -2. Parleremo di questo nel prossimo capitolo. Per esempio >> A=[1 3 2. Uno degli aspetti importanti nell’ambito della risoluzione di un sistema lineare ` e l’efficienza di un metodo risolutivo. 1 3 2].3750 -2.

Infatti il sistema in esame risulta essere inconsistente e MATLAB automaticamente ne ha calcolato una soluzione nel senso dei minimi quadrati. -1 1 2.i. Nel caso di matrice quadrata. >> A=[1 3 2.0000 La soluzione x di fatto non ` e quindi una soluzione. L’opzione ’r’ forza MATLAB a fornire una soluzione in formato razionale. -1 1 2. >> rank(A) ans = 2 . >> 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. rank = 2 tol = 1.-3. La funzione null applicata ad A calcola una soluzione del sistema Ax = 0. x1 = Inf Inf Inf >> A=[1 3 2. >> x1=A\b Warning: Matrix is singular to working precision.6]. La verifica dell’inconsistenza pu` o essere effettuata tramite il Teorema di Rouch´ e-Capelli e la funzione rank di MATLAB. 2 6 4]. -1 1 2.2243e-014.-3. >> b=[3. 2 6 4].6]. Se la matrice ` e quadrata ci segnala il fatto che il determinante ` e nullo e non calcola nessuna soluzione. 4 12 8]. 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.50 Sistemi lineari -0. dopo averne eventualmente verificato il rango.12]. x1 = 3. >> x1=A\b Warning: Rank deficient.6.-3. 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. sar` a sufficiente risolvere il sistema caratterizzato dalle equazioni l.’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. >> A=[1 3 2. >> b=[3. 2 6 4.0000 0.

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

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

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

54 .

2276 0. >> 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.D]=eig(A) V = 0. 0 0 2].4411 0.1 Calcolo di autovalori La funzione principale per il calcolo degli autovalori in MATLAB ` e la funzione eig. Consideriamo un semplice modello di edificio a n piani rappresentato da un sistema di n masse uguali sovrapposte. c d].8681 0 0 2.0000 2.0000 0 0 1. Supponiamo che ogni piano sia collegato ai piani adiacenti in modo elastico. 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.8321 0. >> eig(A) ans = 2.0000 0 0 0.0000 La matrice V ` e formata da autovettori unitari ed ` e tale che AV = V D.7071 0.5547 0. Assumiamo che ogni massa possa scivolare senza frizione e che la tendenza a conservare la configurazione iniziale sia proporzionale .9 Autovalori e autovettori 9.0000 Possiamo inoltre calcolare gli autovettori tramite >> [V. L’uso ` e abbastanza immediato >> A=[4 -3 1.2 Fenomeni di risonanza Una dei risvolti fisici di maggior rilievo degli autovalori lo si ha nell’ambito dello studio delle frequenze di risonanza.7071 0 0 D = 2. 2 -1 1.0000 1.

. . La forza elastica che tiene i piani legati tra loro sia caratterizzata da k = 100 tonnellate/metro. 0 > > > > > > > > > > > . Supponiamo di avere un edificio a 10 piani e che la massa di ogni piano sia di 20 tonnellate. . Gli autovalori della matrice A hanno un ruolo chiave nella risoluzione del precedente sistema.. 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 > > > : . . 0 .. .. k −2k k > > > : . √ Nei sistemi meccanici tipicamente gli autovalori di A sono tutti negativi ed i valori ωi = −λi sono detti frequenze naturali del sistema. . . . La soluzione del corrispondente sistema omogeneo pu` o essere effettuata tramite il calcolo degli autovalori λi della matrice A e dei rispettivi autovettori vi . . 0 > > > > > k > > −2k k . i = 2.. 0 > > 0 > > > > > > 0 > > . Al fine di studiare il problema numericamente con MATLAB vediamo di calcolare le 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 ω . . .n − 1. 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 . Fi (2) = −k(xi − xi+1 ). .1). .. con A = M −1 K ed e = (1.. ossia se ω 2 = −λi per ogni autovalore di A. 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. . . . L’applicazione della legge di Newton F = ma = mx fornisce le equazioni del moto in forma matriciale M x = Kx. 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.. 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 ). Nel caso in cui ω sia una delle frequenze naturali il sistema risulta singolare ed abbiamo il fenomeno cosiddetto della risonanza. 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. Derivando due volte otteniamo la forza inerziale F = ma = mEω 2 cos(ωt) che agisce su ogni piano dell’edificio. K=> . Sul primo piano agir` a la forza −kx1 − k(x1 − x2 ) mentre sull’ultimo solo la forza −k(xn − xn−1 ). 0 0 0 0 0 0 0 0 5 −5 . > >.xn )T .56 Autovalori e autovettori allo spostamento orizzontale del piano. . Quest’ultimo sistema ha soluzione se e solo se la matrice A + ω 2 I ` e non singolare. dove x = (x1 . 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 .

7883 2.6339 3.5594 -13.Autovalori e autovettori 57 Possiamo calcolare gli autovalori λi della matrice A. >> norm(x.1117 0.2534 -2.4222 1. >> omega=sqrt(-lambda).4208 -10.-1)+5*diag(ones(1.9166 -7.8456 -0.7004 -18.2349 4.9).1). Per esempio >> x=[1 -2 3 4 -8].2361 2.7473 3.2735 1.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.4703 -19.10)+5*diag(ones(1. >> lambda=eig(A). 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.0000 2. 8456 (sinistra) e caso non risonante per 2π/ω = 5 (destra) in funzione del tempo nel modello di grattacielo a 10 piani.6695 1.7748 2.9). 9.3138 -0.9903 0. >> A(10.1 Vibrazioni di risonanza all’ultimo piano per 2π/ω = 3.8099 -16.10)=-5.9951 6.1 mostriamo gli spostamenti nel tempo dell’ultimo piano dell’edificio nel caso di una frequenza naturale e di una frequenza non naturale.6951 1.5557 4.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.0293 1.2624 4.6534 3.1) ans = 18 . Nella Figura 9.2783 1. >> [lambda omega 2*pi/omega] ans= -5.3342 18. le relative frequenze naturali ωi ed i periodi 2π/ωi >> A=-10*eye(10.

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

2 Retta dei minimi quadrati.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. . parabola dei minimi quadrati e polinomio interpolante.

60 .

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

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

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

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

1/2.2500 0. 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. discreta che pu` o assumere i valori 3. Inseriamoli come vettori >> X = [3.5000 0.a.11 Probabilit` a 11.4. Infatti.P) Sempre con il comando find possiamo calcolare P ({X > 3}).1 Variabili aleatorie discrete Sia X una v.8 con probabilit` a 1/4.8] X = 3 4 8 >> P=[1/4.2500 Controlliamo che P possa essere una legge di probabilit` a.1/4 rispettivamente.1/2.4.1/4] P = 0. 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 .

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

Y ) (xi . >> Var_X = EX2 .1000 i = 1.Var_X) ans = 0 11.1000 Queste due matrici P P rappresenta una legge congiunta.4) P = 0. 0. >> Y = [ -1 .Y ) (xi .^2 )’ *p.2000 Inseriamo la “buona matrice” P >> P(3. 4 ].4.1000 0.1000 0.1000 0.yj ). Infatti i suoi elementi sono non negativi ma i j p(X. 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.1000 0 Questa ` e una legge congiunta.Y ).3.yj ) > 1 >> find( (P<0) ) ans = Empty matrix: 0-by-1 >> sum( sum( P ) ) ans = 1.2.0. La legge congiunta verr` a assegnata mediante la matrice P = pij = p(X.1000 0. >> EX2= (x. 4 .1000 0.1000 0 0. Inseriamo la matrice P >> P= 1/10*ones(3.1000 0.^2.1000 0. poich´ e adesso .8 e Y pu` o assumere i valori −1. 0 .Probabilit` a 67 [ p1] [ p2] [ 1-p1-p2] Abbiamo inserito p3 = 1 − (p1 + p2 ) in modo da garantire che p1 + p2 + p3 = 1.4.1000 0.1000 0. >> simplify(VAR_X . Inseriamoli come vettori >> X = [ 3 .2 Variabili aleatorie doppie X e Y Analizziamo ora la coppia di v. dove X pu` o assumere i valori 3. 3 .a.1000 0.1000 0. j = 1. >> VAR_X=( (x-EX).3.1000 0.2. discrete (X.(EX).1000 0.1000 0.3:4)= 0 P = 0.1000 0.4.1000 0.1000 0. 8 ].3.1000 0.^2)’ * p. Ora.

3000 0.2000 0.2000 >> P_X * ( P_Y )’ ans = 0.YY]=meshgrid(X.9589 0.1200 0. Se vogliamo avere ad esempio la matrice Sij = sin(xi + 3yj ).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.4202 -0. Costruiamo ora le due matrici XX e YY tramite il comando meshgrid >> [XX.0800 0.* P ) ) ans = 5. ossia %matrice con fenomeni X e Y indipendenti 0. il valore atteso di g (X.Y ) >> sum( sum( S’ .9614 0.5000 .0600 %distribuzione marginale di Y %distribuzione marginale di X Verifichiamo se X e Y sono indipendenti.* P ) ) ans = 0.2879 0.1411 -0. troviamo le distribuzioni marginali >> P_Y = ( sum ( P ) )’ P_Y = 0.6503 -0.8415 -0.0600 0.68 Probabilit` a >> sum( sum ( P ) ) ans = 1 Ricordando che il comando sum somma per colonne.9129 Calcoliamo.2000 >> P_X = ( sum ( P’ ) )’ P_X = 0.0800 0.0800 0.0502 Calcoliamo ora E (X + Y ) e mostriamo che ` e uguale a E (X ) + E (Y ) >> sum( sum( ( XX + YY ) . baster` a scrivere >> S = sin( XX + 3 * YY ) S = 0 0.5366 0.1200 0.0400 Per il criterio di indipendenza.1200 0. essendo quest’ultima matrice diversa da P.9894 -0.3000 0.0400 0.7568 0.4000 0.0800 0. i due eventi X e Y non sono indipendenti.1200 0.4000 0.Y ).

ossia p0 = {1. . Vediamo un esempio numerico con l’ausilio di MATLAB. In sostanza lo stato del sistema al passo n + 1 dipende solo dallo stato del sistema al passo n. i cui elementi rappresentano delle probabilit` a di transizione tra diversi stati.0. detta matrice di transizione. n volte n ≥ 0. Si ` e interessati a sapere cosa succede per n crescente. Supponiamo inoltre che se una stanza ha m collegamenti il topolino possa scegliere ognuna di esse con uguale probabilit` a 1/m. Un topolino inizialmente in una stanza si muove in questo labirinto in maniera casuale attraverso le altre stanze collegate tra loro. Tale propriet` a` e soddisfatta da quasi tutti i sistemi nell’ambito della fisica e della scienza dei calcolatori1 .0. Pi` u precisamente pij ` e la probabilit` a condizionata che il sistema si trovi “domani” nello stato j essendo “oggi” nello stato i.4000 >> EY = sum( Y’ * P_Y ) EY = 1.1000 >> EX + EY ans = 5. per cui spesso si preferiscono modelli alternativi. 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 somma di ogni riga di P ` e uguale ad 1. 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 . 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. Supponiamo che gli stati rappresentino delle stanze di un labirinto.Probabilit` a 69 >> EX = sum( X’ * P_X ) EX = 4. Si noti che anche P n ` e una matrice di transizione avente righe a somma 1. Supponiamo che il topolino inizialmente si trovi nella prima stanza.0.0.0. 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).5000 11.3 Catene di Markov Nella dinamica delle catene di Markov abbiamo una matrice P .0.0.0}. 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. La variabile n caratterizza una successione temporale discreta.

1468 0.0755 0. .D]=eig(P). Quindi se λ∗ < 1 la matrice di transizione converge ad una matrice stazionaria P ∞ . 9384 < 1.8 0. . .6 0.7 0. >> Dinf=diag([0 1 0 0 0 0 0 0 0]). Otteniamo >> p0=[1 0 0 0 0 0 0 0 0]. Dunque poich` e λ < 1 per n → ∞ si conserva solo l’elemento diagonale uguale ad 1 nella matrice D.0000 0.2954 0.7430 0.0922 0. l’estrazione della parte reale tramite real ` e di fatto superflua. Nella Figura 11. 1 0.0. >> pinf(1) % Il vettore ha componenti tutte uguali ans = 0.1887 0.1.70 Probabilit` a >> [V.0000 0.3 0.50. .0. .5 0.0755 0. 1887.0629 Essendo la matrice P ∞ reale. Si ottiene λ∗ = 0.0.1 0 0 5 10 15 20 25 30 35 40 45 50 Figura 11.2 0. . Ricordando il Capitolo 9. .0461 0.0.0. Tale comando migliora per` o la visualizzazione dei risultati finali (si provi senza). 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 . In altre parole limn→∞ Dn = diag{0.6855 0. . indichiamo con λ∗ il pi` u grande modulo dei restanti autovalori. >> abs(D) ans = 0.:) % La matrice ha righe tutte uguali ans = 0. . Indipendentemente dallo stato iniziale la stanza pi` u probabile in cui trovare il topolino ` e la numero 6 con probabilit` a 0. >> Pinf(1.2 Comportamento delle componenti del vettore pn per n = 1.0}.9384 1. mentre la probabilit` a che il topolino sia ancora nella prima stanza ` e 0.9 0. 0755.1572 0.2864 0. da P V = V D segue −1 n n −1 ∗ P = V DV e quindi P = V D V .50.2 ` e visualizzato il comportamento delle componenti del vettore pn per n = 1.0461 >> pinf=Pinf*p0. >> Pinf=real(V*Dinf*inv(V)).0.2864 0.1499 A parte l’autovalore uguale ad 1.1845 0.4 0.

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

1)) k−1≤ <k log(1 − 1/4) ossia se e solo se (si ricordi che 3/4 < 1). Per generare E vettore 1 × 4 di v.0619 49. ) (3 4 P ({X = k}) = P 3 ({( 4 ) k −1 ≥ rand(1.2324 14.1)) >t 2 rand(1. di legge gaussiana possiamo operare in due modi: 1.1) > (3 ) 4 k .1139 ` e un vettore di 4 elementi distribuiti come una normale standard.a. indipendenti con legge geometrica di parametro 1/25 >> X = floor(log(rand(1. 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 > t accade ` e quindi e−2t ossia la legge di X ` e una esponenziale di parametro 2. A questo punto.4) A = -0.7329 16. utilizzare la funzione randn(m. indipendenti esponenziali di parametro 1/25 >> E = -log(rand(1.n) che genera una matrice m × n di numeri pseudocasuali indipendenti distribuiti come una normale standard (con parametri 0 e 1).1832 -0.5883 2. 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.1364 0.2558 Avremo che X > t se e solo se − ossia se.a. Avremo dunque che >> A =randn(1. Poich´ e rand(1.2 Generazione di leggi continue Digitiamo ora >> X = -log(rand(1. Per generare G vettore 1 × 4 di v.1))/2 X = 0.a.72 Modelli probabilistici dove abbiamo usato la funzione floor che restituisce la parte intera dell’argomento. Avremo che X = k se e solo se log(rand(1.4))/log(1-1/25))+1 X = 8 29 5 14 12.3825 Per generare una v. uniforme U . log(rand(1.a.1) < e−2t .4))/(1/25) E = 31.

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.25/sqrt(2) ) ans = 0. utilizzare il Teorema Limite Centrale: Mn ≈ N (0.1000/2 ) X = 0. Avremo dunque che >> X = 2 / sqrt(1000) * ( sum((rand(1000.1) o calcolare P ({X ≤ 1.8818 2.y) >> >> 1/2 + 1/2 * erf( -1.8854 ` e distribuito come una normale standard (per generare un vettore di m elementi.1). scrivendo >> x= [-4:.Modelli probabilistici 73 >> N = 3 + sqrt(5)*A N = 1. Attraverso questa funzione vogliamo calcolare Φ(x) = P ({X ≤ x}) (la funzione delle tavole di una distribuzione normale standard).25 }) .m) invece di rand(1000. 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).3 La funzione Φ Rx √ 2 MATLAB calcola l’approssimazione numerica di erf(x) = 0 2/ π e−s ds con la funzione erf(x).9799 12.6950 3. A questo punto.1)).1) > 1/2 )) .2548 (s) 2.01:4].1056 %ascisse per il grafico %ordinate per il grafico %disegna grafico %calcola P({ X <= 1. >> plot(x. per generare N distribuito come una normale di media 3 e varianza 5 >> N = 3 + sqrt(5)*X N = 4. avremmo scritto rand(1000. 25}).6845 7. n Utilizziamo n = 1000. >> y= 1/2 + 1/2 * erf( x/sqrt(2) ).

1 Grafico della funzione Φ.6 0. .74 Modelli probabilistici 1 0.4 0.8 0.2 0 −4 −2 0 2 4 Figura 12.

7905 >> var(A) %varianza ans = 0. std e median.7 e calcoliamo qualche indice descrittivo tramite i comandi mean.8 1.91]. Per selezionare gli estremi delle barre.0960 >> median(A) %mediana ans = 1.6 1.61 1. >> mean(A) %media ans = 1.88 1.84 1. standard ( =sqrt(var(A)) ) ans = 0.73 1. >> Y = [1. La funzione histc non disegna il grafico.Y).9 1.. notiamo che .60:0. occorre utilizzare la funzione histc(X.00].67 1. max(X )] in N sottointervalli (barre) di uguale ampiezza e calcolando quanti valori di x cadono in un dato intervallo.8000 La funzione MATLAB hist(x.7 1.13 Campionamento statistico e descrizione dei dati 13. ma restituisce l’altezza delle barre i cui estremi sono nel vettore Y .77 1. var. >> alt= histc(A. 1. Costruiamo l’istogramma di densit` a della Tabella 13. Prima di proseguire.alt.N) consente di realizzare l’istogramma di frequenza di x suddividendo l’intervallo [min(X ).5.86 . dove X ` e il vettore dei dati eY ` e il vettore con gli estremi delle barre..’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). >> hist(A.8) MATLAB ha una sua formula per calcolare gli estremi delle barre.94 1.77 1.85 1.84 1.8 1.79 1.84 1. >> A = [1.1 Indici descrittivi e istogrammi Carichiamo in un vettore A i dati dell’Esempio 13.05:2.Y) alt = 2 2 2 3 >> bar(Y.0092 >> std(A) %dev.71 1.

2 Retta dei minimi quadrati X Y Inseriamo i dati dell’Esempio 13.8 1.8 e calcoliamo Mn .60 1. 94. >> G=diag(ones(5. 57.5000 >> S_X= std(Eta) S_X = 8.1 >> Y=[1. >> ser_stat= num_oss / 20. 54. 93.1)).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. >> amp_int= (G*Y’)’.alt_bar.87 1.7 1. >> MnX= mean(Eta) MnX = 51 >> MnY= mean(Alt) MnY = 91.81 1. 51./amp_int) alt_bar = 2.3333 4.:). >> num_oss= histc(A.:)=G(5.1667 2. >> Eta=[ 36. 48. 95].7 1. >> alt_bar= (ser_stat.’histc’) >> sum(alt_bar.8 1.0833 3. >> G(6. 60].76 Campionamento statistico e descrizione dei dati 5 5 4 4 3 3 2 2 1 1 0 1. .1). >> Alt=[ 86.6 1.*amp_int) %controllo area=1 ans = 1 0 13. Mn .9 2 1.Y). ottenuti con barre assegnate da MATLAB e imponendo gli estremi delle barre. 91.4853 >> S_Y= std(Alt) S_Y = 3.5000 0 >> bar(Y.95 2].72 1.6 1.1)-diag(ones(6.1 Istogrammi dei dati dell’Esempio 13.9 2 Figura 13. hist restituisce i dati per il grafico con una barra in pi` u dell’ampiezza pari all’ultima assegnata. 90.7. SX e SY .

9944 1.3.Y ) Calcoliamo quindi a ˆeˆ b per la retta dei minimi quadrati.’) hold on xx=[35 65].0000 0..3 Distribuzione statistica Vediamo ora una simulazione per mostrare il Teorema 13.0000 La matrice M di correlazione va letta nel seguente modo 9 8 > r(X.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.Y ) > > M => .X ) r(X. La loro somma sum conta quindi quanti elementi nelle colonne di X sono minori o uguali a 2. 9772. >> F_2= sum( ( X <=2 ) )/10000 F_2 = 0. 0 altrimenti.a * MnX b = 71.9765 0. %Phi(2) (vedere Capitolo 12) >> F_2/Phi_2 %rapporto valore stimato/valore vero ans = 1.Campionamento statistico e descrizione dei dati 77 >> M=corrcoef([ Eta Alt ]) M = 1.9766 0.0015 0. Abbiamo che >> a=M(1.9763 L’operatore logico ( X <=2 ) restituisce 1 se gli elementi sono minori o uguali a 2.4).3833 >> b= MnY .Alt. 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 .9992 0. >> >> >> >> plot(Eta. Ripetendo l’esperimento con 4 simulazioni.’. a*xx + b) %scatterplot %per una retta bastano due punti.9787 0.9993 0. Simuliamo quindi molti dati (n = 10000) di una distribuzione gaussiana standard e vediamo se F ∗ (2) approssima bene P ({X ≤ 2}) = Φ(2) ≈ 0.9500 e quindi disegniamo la Figura 13. >> F_2= sum( ( X <=2 ) )/10000 F_2 = 0. : r(Y. %disegna la retta dei minimi quadrati 13.4..9755 >> Phi_2=1/2 + 1/2 * erf( 2/sqrt(2) ).9982 13.1). >> X=randn(10000.2)*S_Y/S_X a = 0.9944 0. plot(xx.X ) r(Y. >> X=randn(10000.

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

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

80 .

1.8288 0.4 0.[0:1/10:1]). Avremo.7266 0. 140 120 100 80 60 40 20 0 0 0.6318 0.B. >> bar([0:1/10:1]+1/20.1).1). che sappiamo essere 1/2.3637 0.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.4423 Disegniamo l’istogramma con i dati che abbiamo >> B=histc(A. Costruiamo un intervallo di confidenza con affidabilit` a 95% per il valore atteso della distribuzione simulata.14 Metodi statistici inferenziali 14. un istogramma simile a quello nella Figura 14. . per esempio. Le nostre simulazioni vengono raccolte nel vettore A. che le osservazioni tra la 45-esima e la 50-esima saranno >> A(45:50)’ ans = 0.8 1 Figura 14.’histc’) ottenendo.1 Istogramma delle mille simulazioni da distribuzione uniforme.6 0. >> A=rand(1000.0351 0.2 0. a meno della casualit` a.

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

Il calcolo diviene in MATLAB algebricamente semplice.8000 Per questa simulazione./VA) %distanza pivotale per i test Chi Quadro D = Columns 1 through 7 2. in nessun caso possiamo rifiutare l’ipotesi di adattamento.0400 13.20). >> SR=sum(A’)’. a priori. >> A=[30 40. n = 1000. Per ogni intervallo. d0.7800 5. moltiplicando il vettore colonna SR per il vettore riga SC e divendo il totale per NT. Va notato comunque che su 20 test a livello α = 0. 666.6000 Columns 8 through 14 3. %numero di osservazioni in ogni intervallo Il nostro test. mi aspetto 100 simulazioni.3200 4. SC=sum(A).4600 8. >> VA=100*ones(10.9600 6.[0:1/10:1]). 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.82. 37 18] A = 30 40 58 67 37 18 Ricordando che sum somma i dati per colonne.0200 5.9800 11.7000 13.2600 Columns 15 through 20 5.Metodi statistici inferenziali 83 in 10 classi. NT = 250 >> VA=SR*SC/NT VA = . Impostiamo quindi i 20 test (abbiamo in memoria 20 simulazioni). p0 k = 1/10 (distribuzione uniforme).3200 4. come si verifica 0 semplicemente dalla relazione n0 k = n ∗ pk .5000 10. la probabilit` a che nessuno dia come risultato di rigettare l’ipotesi nulla ` e circa 0. >> VO=VO(1:10.11. >> D=sum((VO-VA).7400 6. Dalle tavole.99. Avremo quindi N = 10. >> VO=histc(A.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.3000 2. calcoliamo SR (somme righe) e SC (somma colonne) per mezzo dell’operatore ’ (trasposta di una matrice). come si pu` o pi` u facilmente osservare con l’operatore logico > >> (D > 21. con D ∼ χ2 N −1 .1400 3.2600 7. ognuna di ampiezza 1/10.8600 2.:).0800 10.^2. Eseguiamo ora un test χ2 di indipendenza con i dati dell’Esercizio 14.99 ∼ 21. 58 67. rigetter` a l’ipotesi di adattamento se D > d1−α .

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

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

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

Sign up to vote on this title
UsefulNot useful