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.

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

. Il primo comando.3) ans= 5 Se vogliamo quindi cambiare l’elemento 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. elenca i nomi delle variabili attualmente presenti mentre whos aggiunge informazioni riguardanti il tipo di variabile e l’occupazione di memoria. who. 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. Workspace. Per passare da vettori riga a vettori colonna si utilizza il simbolo di apostrofo.3) basta scrivere >> A=(1. La funzione length in MATLAB consente di determinare la lunghezza di un vettore >> length(x) ans = 8 Se ora vogliamo inserire la matrice 2 × 4 8 1 3 : A=> 9 11 possiamo scrivere >> A = [1 3 5 7 .6 Introduzione a MATLAB Se cambiamo il valore di una componente del vettore dobbiamo ricordarci di usare il punto e virgola per evitare la visualizzazione dell’intero vettore >> x(4)=1. 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. >> who Your variables are: A x 5 13 9 7 > . possiamo usare i comandi who e whos.3)=4. 15 . Potremo accedere agli elementi della matrice in maniera naturale utilizzando i corrispondenti indici >> A=(1.

7143 0.4286 0.b. potrebbe essere generato come >> x = 1:2:15.1429 0. Un uso particolarmente efficace della notazione due punti si ha nella gestione di indici di vettori e matrici. >> x = linspace(a. x = [1 3 5 7 9 11 13 15]. La notazione due punti “funziona” anche con valori non interi. per esempio >> x=0:0.0000 Nel caso in cui il passo non sia intero pu` o risultare difficile l’uso dell’operatore due punti. Il vettore vuoto ha lunghezza zero.5714 0.n) x = Columns 1 through 7 0 0. In questo caso ` e preferibile utilizzare il comando linspace.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). b=1.6000 0. Altri esempi sono i seguenti >> y=1:9 y = 1 2 >> z=10:-2:2 z = 10 8 3 6 4 4 5 2 6 7 8 9 Se il valore iniziale ` e maggiore di quello finale e il passo ` e positivo viene creato un vettore vuoto >> x=7:1 x = [] Si noti che il vettore vuoto (tabella vuota) si denota in MATLAB con [].0000 0. Il vettore x utilizzato in precedenza. dimensione 0 × 0. Per esempio utilizzare i due punti “:” singolarmente significa selezionare ogni elemento di una data riga o colonna . n=8. Per esempio se vogliamo creare un vettore con un numero prefissato di punti equispaziati all’interno di un dato intervallo.8000 1.2857 Column 8 1. Per esempio >> a = 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. 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 .2:1 x = 0 0.4000 0.2000 0.

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

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

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

^2-x.Introduzione a MATLAB 11 >> x = 1:7.0000 0.3333 0.7500 0.6065 0. 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./(120+60*x+12*x. Grafici bidimensionali vengono utilizzati per visualizzare la variazione di una variabile rispetto a un’altra.3679 Utilizzando le operazioni vettoriali./x ans = 2. possiamo per esempio scrivere >> ezplot(’sin(x)’.1.2500 0. per esempio il grafico di una funzione y = f (x). per esempio la funzione razionale f (x) = 120 − 60x + 12x2 − x3 120 + 60x + 12x2 + x3 sull’intervallo [0. Funzioni avanzate MATLAB ` e molto pi` u di un semplice software in grado di eseguire calcoli numerici (anche se in forma molto sofisticata come abbiamo visto nei paragrafi precedenti).1].^2+x.0000 6 -2 7 -3 8 -4 0.4000 0. Con MATLAB ` e possibile realizzare grafici di funzioni anche in pi` u dimensioni e realizzare veri e propri programmi. >> [x’ y’] ans = 0 1.2π ].6667 Consideriamo ora il problema del calcolo di una tabella di valori di una funzione non predefinita in MATLAB. Per costruire una tabella di 5 valori possiamo utilizzare la sequenza di istruzioni >> x = linspace(0.5000 0.0000 0.^3). tramite il Symbolic Toolbox con MATLAB ` e possibile anche eseguire calcoli simbolici.5000 9 -5 0.^3).[0. Non solo. 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.7788 0.5). Se vogliamo visualizzare in forma grafica la funzione sin(x) sull’intervallo [0. Ma come ha fatto MATLAB a realizzare il grafico della funzione? Se procediamo in modo diverso possiamo capire quale automatismo sia insito nella funzione ezplot.2*pi]).4724 1. Costruiamo prima una successione di valori della funzione del tipo .2857 0. >> x+2 ans = 3 4 >> 2-x ans = 1 0 >> 2. >> y = (120-60*x+12*x.0000 5 -1 1.

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

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

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

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

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

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

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

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

ed ottenere lo stesso risultato.1 Grafico di p(x) = x2 − 3x − 5 con plot.20 Funzioni 6 4 2 0 −2 −4 −6 −8 −2 −1 0 1 2 3 4 5 Figura 1. per x ∈ [−2π. nell’esempio precedente si poteva procedere utilizzando inline nella forma >> f=inline(’sin(2*x)+cos(x)’).[-2*pi 2*pi -1 1]).q) c = 1 0 4 4 >> [a. q=[1 2 3]. disegna il grafico della funzione f (x) = sin 2x + cos x. 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). 2π ] e considerando una finestra grafica con ordinate y comprese tra −2 e 2 (si veda la Figura 1.2 Altre funzioni elementari Molte altre funzioni elementari sono elencate in Appendice B. Nel caso si esplorino regioni non appartenenti al dominio delle funzioni in uso vi sar` a un segnale di avvertimento.[-2*pi 2*pi -2 2]). per esempio la funzione lx=log(abs(x)) calcola il logaritmo del valore assoluto di x.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. >> p=[1 -2 5].r]=deconv(c. 1. Per moltiplicare due polinomi si pu` o utilizzare conv mentre per dividere deconv. warning . >> ezplot(f. In alternativa ` e possibile utilizzare fplot. o ezplot per esempio >> ezplot(’sin(2*x)+cos(x)’. >> c=conv(p. Ulteriori funzioni si possono ottenere componendo le funzioni elementari.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1 11 9.6 11. abbiamo fatto la differenza tra i valori di pressione. primitive Alcuni dati sono rappresentati nella Figura 5.6 86. V ` e il volume.5 1 1.5 1. .2].25 18.5].40 Integrali.2 8.2 33 21 14. dove Ps e Pi indicano la pressione superiore e inferiore.1500 dove ovviamente.2.2 4.0 2 1. aree. In ogni caso abbiamo >> V=[14 16. >> PI=[15.6 8 7. e il calcolo >> load dati PS PI V >> trapz(PS-PI) ans = 181. ovvero utilizzando la funzione load.7 7.6 3. 4.5 3.7 23 32.2 51 59 68 77 81. >> PS=[16. I dati sono memorizzati prelevandoli dall’esterno.2 5.1 41.2 20.1 37. dovendo calcolare un’area compresa tra due curve.5 3.5].2 47 42.

Per esempio con >> taylortool(’atan(x)’) si ottiene il disegno mostrato nella Figura 6. Altre funzioni interessanti sono taylor (per il calcolo della serie di Taylor ma senza rappresentazione grafica) e symsum che permette la somma di una serie in modo formale. Non avendo specificato altro. Per esempio .1 Serie di Taylor Tramite le possibilit` a del calcolo simbolico possiamo valutare le somme parziali della serie di Taylor di una data funzione.1 Un esempio di formula di Taylor. 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.6 Integrali impropri. considera la somma parziale fino a n = 7.1.

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

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

5 2 2. Come si pu` o vedere nella figura abbiamo un comportamento di tipo periodico.5 1 u 0.u).44 Integrali impropri.3 Soluzione di un’equazione del secondo ordine tramite un sistema di equazioni differenziali.u]=ode45(’lotka’.5 1 1. serie ed equazioni differenziali 1. .5 4 4.5 0 −0.4 Un esempio di simulazione di un sistema preda-predatore.5 5 Figura 6.[0 20].5 −2 0 0.5 y −1 −1.[80 100]). dove siamo partiti con 80 prede e 100 predatori. >> [t.5 3 3. >> plot(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.

Inseriamo in MATLAB le seguenti matrici A e B >> A = [3 5 7 . 9 11 15.1:2) C = 3 5 9 11 -2 1 1101 2596 51 1959 4599 148 Se definiamo la matrice C data dalle prime due colonne di A possiamo sommarla a B . Nel seguito vedremo alcuni semplici esempi.1 Operazioni con matrici e vettori Una delle caratteristiche principali di MATLAB ` e la sua abilit` a nell’operare con matrici.7 Vettori e matrici algebrici 7. -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 . 5 7 . 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(:. In Appendice B abbiamo descritto alcune di queste possibilit` a.

15*a] [ -2*a. 3 . 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. 7] x = 1 -1 3 7 >> y = [2.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 4]. >> A1=inv(A) A1 = -2.5000 -0.0000 1. 7*a] [ 9*a.5000 >> A1*A ans = 1. 5*a. -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. 4. -1. a.0000 1. Le basi teoriche dell’algoritmo utilizzato saranno presentate nel prossimo capitolo. Ad esempio abbiamo >> syms a >> a*A ans = [ 3*a. Abbiamo quindi >> A=[1 2. 5*a] >> syms x1 x2 x3 >> x=[x1. 11*a.0000 0 . x2.

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

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

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

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

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

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

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

54 .

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

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

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.4208 -10.6951 1.5594 -13.9).5557 4. le relative frequenze naturali ωi ed i periodi 2π/ωi >> A=-10*eye(10.8456 -0.2783 1.2735 1.0000 2. Per esempio >> x=[1 -2 3 4 -8]. Nella Figura 9.-1)+5*diag(ones(1.Autovalori e autovettori 57 Possiamo calcolare gli autovalori λi della matrice A.10)+5*diag(ones(1.7473 3.3138 -0.1117 0.6695 1.3342 18.4703 -19. 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. >> norm(x.7883 2.9).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.1).9903 0. >> A(10. >> [lambda omega 2*pi/omega] ans= -5.1 mostriamo gli spostamenti nel tempo dell’ultimo piano dell’edificio nel caso di una frequenza naturale e di una frequenza non naturale.6534 3.1 Vibrazioni di risonanza all’ultimo piano per 2π/ω = 3.9951 6.10)=-5.9166 -7.0293 1.1) ans = 18 .2624 4.2534 -2. >> omega=sqrt(-lambda).4222 1.2361 2.7748 2. >> lambda=eig(A).2349 4.7004 -18.6339 3. 8456 (sinistra) e caso non risonante per 2π/ω = 5 (destra) in funzione del tempo nel modello di grattacielo a 10 piani. 9.8099 -16.

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

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

60 .

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

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

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

rette e piani 2 1. .4 Campo vettoriale di F(x.y ) = (x exp(−x2 − y 2 ). − y exp(−x2 − y 2 )).64 Vettori geometrici.5 −1 −0.5 0 0.5 2 Figura 10.5 0 −0.5 1 1.5 −1 −1.5 −2 −2 −1.5 1 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.a.1/4 rispettivamente.4. 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 .P) Sempre con il comando find possiamo calcolare P ({X > 3}).2500 Controlliamo che P possa essere una legge di probabilit` a.8] X = 3 4 8 >> P=[1/4.8 con probabilit` a 1/4.4.2500 0. Inseriamoli come vettori >> X = [3.5000 0.1/2.1/4] P = 0.11 Probabilit` a 11. Infatti.1 Variabili aleatorie discrete Sia X una v. discreta che pu` o assumere i valori 3.1/2.

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

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

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

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

.1845 0. >> Pinf=real(V*Dinf*inv(V)).1 0 0 5 10 15 20 25 30 35 40 45 50 Figura 11.0. .1887 0.0755 0.0461 0.2 0. Indipendentemente dallo stato iniziale la stanza pi` u probabile in cui trovare il topolino ` e la numero 6 con probabilit` a 0. Tale comando migliora per` o la visualizzazione dei risultati finali (si provi senza).0. Quindi se λ∗ < 1 la matrice di transizione converge ad una matrice stazionaria P ∞ .4 0. . mentre la probabilit` a che il topolino sia ancora nella prima stanza ` e 0.6855 0.0.0.70 Probabilit` a >> [V. 0755. Nella Figura 11.0461 >> pinf=Pinf*p0.50. l’estrazione della parte reale tramite real ` e di fatto superflua. 9384 < 1.5 0. >> pinf(1) % Il vettore ha componenti tutte uguali ans = 0. . Ricordando il Capitolo 9.1.7430 0. >> abs(D) ans = 0. da P V = V D segue −1 n n −1 ∗ P = V DV e quindi P = V D V .2 ` e visualizzato il comportamento delle componenti del vettore pn per n = 1.0}.D]=eig(P).50. indichiamo con λ∗ il pi` u grande modulo dei restanti autovalori.0629 Essendo la matrice P ∞ reale.1499 A parte l’autovalore uguale ad 1. >> Pinf(1.2954 0.:) % La matrice ha righe tutte uguali ans = 0.0000 0.7 0.9 0.1572 0.1468 0. . 1887.2 Comportamento delle componenti del vettore pn per n = 1.3 0.0755 0. Si ottiene λ∗ = 0.0. >> Dinf=diag([0 1 0 0 0 0 0 0 0]).9384 1. .0000 0.2864 0. Otteniamo >> p0=[1 0 0 0 0 0 0 0 0]. . 1 0.0922 0.2864 0.0.6 0. . 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 . . Dunque poich` e λ < 1 per n → ∞ si conserva solo l’elemento diagonale uguale ad 1 nella matrice D.8 0. In altre parole limn→∞ Dn = diag{0.

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

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

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

74 Modelli probabilistici 1 0.1 Grafico della funzione Φ.8 0.6 0.2 0 −4 −2 0 2 4 Figura 12. .4 0.

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

91. 94.1).5000 >> S_X= std(Eta) S_X = 8.:)=G(5. 95].1)).7.4853 >> S_Y= std(Alt) S_Y = 3. 51.alt_bar.7 1.8 1. hist restituisce i dati per il grafico con una barra in pi` u dell’ampiezza pari all’ultima assegnata.87 1.1 >> Y=[1. >> Alt=[ 86.1)-diag(ones(6.2 Retta dei minimi quadrati X Y Inseriamo i dati dell’Esempio 13. ottenuti con barre assegnate da MATLAB e imponendo gli estremi delle barre. 57. Mn . >> G(6. >> ser_stat= num_oss / 20.8 e calcoliamo Mn .’histc’) >> sum(alt_bar.Y). 60].5000 0 >> bar(Y.60 1.*amp_int) %controllo area=1 ans = 1 0 13.9 2 1./amp_int) alt_bar = 2.95 2]. >> alt_bar= (ser_stat.:).3333 4.72 1. 48. >> amp_int= (G*Y’)’.81 1.6 1. 93.1 Istogrammi dei dati dell’Esempio 13.7 1. 90.0833 3.1667 2.6 1. 54.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. >> G=diag(ones(5.8 1. . >> MnX= mean(Eta) MnX = 51 >> MnY= mean(Alt) MnY = 91. >> Eta=[ 36.76 Campionamento statistico e descrizione dei dati 5 5 4 4 3 3 2 2 1 1 0 1.9 2 Figura 13. SX e SY . >> num_oss= histc(A.

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

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

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

80 .

’histc’) ottenendo. un istogramma simile a quello nella Figura 14.4 0.4423 Disegniamo l’istogramma con i dati che abbiamo >> B=histc(A. >> bar([0:1/10:1]+1/20.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.8288 0. 140 120 100 80 60 40 20 0 0 0. per esempio.6318 0.2 0.1).6 0.8 1 Figura 14. . 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.1). Costruiamo un intervallo di confidenza con affidabilit` a 95% per il valore atteso della distribuzione simulata.B. Avremo.1.3637 0. che sappiamo essere 1/2.1 Istogramma delle mille simulazioni da distribuzione uniforme.14 Metodi statistici inferenziali 14. >> A=rand(1000. a meno della casualit` a.7266 0.0351 0.[0:1/10:1]).

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful