SISSA Matematica al calcolatore Roberto Innocente 5 Febbraio 2016 studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... Matematica al calcolatore di Roberto Innocente [email protected] Insegnare ed imparare la matematica con il calcolatore Negli ultimi dieci anni l'informatica personale ha raggiunto prestazioni un tempo disponibili solo su calcolatori molto costosi. E' così che alcuni dei migliori programmi scientifici che venivano utilizzati negli ambienti della ricerca ed industriali sono diventati disponibili su una vasta platea di sistemi. Questo non sarebbe sufficiente se non fosse anche che molti di questi programmi sono freeware e quindi possono essere installati da tutti : questo è il risultato della spinta del movimento in favore del software libero. Si introdurranno 3 differenti programmi scientifici interattivi freeware di largo uso : maxima l'unico di questi programmi che tratta l'algebra simbolica al calcolatore octave è un programma generale per il calcolo numerico, molto friendly la sintassi per il calcolo matriciale R è il programma più usato da coloro che si occupano di statistica In particolare useremo tali programmi per presentare : L'algebra e la manipolazione simbolica con maxima : studio di funzioni I calcoli numerici : le catene di Markov con octave Il teorema del limite centrale e la nuova statistica con R L'algebra e la manipolazione simbolica con maxima Il paradosso di Zenone di Elea Zenone di Elea ( Ἐλέα città della Magna Grecia, in epoca romana poi chiamata Velia : i suoi resti si trovano oggi in comune di Ascea all'interno del parco del Cilento in provincia di Salerno) era un discepolo di Parmenide. Achille è ad x=0 e quando corre ha una velocità di 1 lunghezza per unita' di tempo, una tartaruga e' a x=0.9 e corre ad una velocita' di 0.1 (1 decimo di Achille). Quando e dove Achille raggiungerà la tartaruga ? Oggi conosciamo i numeri reali. Numeri che coprono completamente una linea e che sono stati scoperti molto più tardi. Tutti oggi descriverebbero il moto di Achille e della tartaruga come una relazione continua tra il tempo e lo spazio con le seguenti formule (vachille and vtartaruga sono le rispettive velocità) : In [1]: achille(t):=vachille*t; Out[1]: achille(t):=vachille*t; In [2]: tartaruga(t):=0.9+vtartaruga*t; Out[2]: tartaruga(t):=0.9+vtartaruga*t; In [3]: vachille:1; Out[3]: 1 of 21 1 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [4]: vtartaruga:0.1; Out[4]: 0.1 In [5]: solve(achille(t)=tartaruga(t),t); rat: replaced -0.9 by -9/10 = -0.9 rat: replaced 0.9 by 9/10 = 0.9 Out[5]: [t = 1] In [6]: 'plot2d([achille(t),tartaruga(t)],[t,0,2],grid2d,[ylabel,"Distanza"],[xlabel ,"Tempo"]); Out[6]: 2 t 0.1*t+0.9 Distanza 1.5 1 0.5 0 0 0.5 1 1.5 2 Tempo Ai tempi di Zenone i numeri reali R erano sconosciuti. Pensate che perfino gli irrazionali erano considerati una blasfemia e la setta dei pitagorici (movimento del secolo precedente a Zenone) mantenne per lungo tempo il segreto sull'irrazionalità di √2 e quindi sull'impossibilita' di rappresentare quel numero come frazione intera. Solo nel '800 fu dimostrata da Liouville l'esistenze dei numeri trascendenti(cioè che non potevano essere soluzione di equazioni algebriche) e successivamente da Hermite e Lindemann la trascendenza di e e π. 2 of 21 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... Zenone analizza il moto nel seguente modo : Achille per raggiungere la tartaruga deve dapprima raggiungere il punto x = 0.9 dove la tartaruga sta all'inizio Nel frattempo tuttavia la tartaruga che si muove ad 1/10 della velocità di Achille avra' percorso 0.09 unita' e si trovera' quindi a 0.99 Achille deve quindi percorrere 0.09 unità per giungere dove sta ora la tartaruga cosi via ad infinitum ... Il procedimento di Zenone è arbitrario nel suddividere un moto continuo in istantanee dell'oggetto in vari punti del suo percorso. Queste istantanee nulla dicono dove l'oggetto fosse in tutti gli altri istanti del percorso : descrivono la posizione all'istante 0.9, 0.99, 0.999 ... , ma nulla dicono degli istanti intermedi o successivi. tempo parziale tempo totale distanza Achille corsi da Achille distanza Tartaruga corsi da Tartaruga 0 0 0.0 0 0.9 0.0 0.9 0.9 0.9 0.9 0.99 0.09 0.09 0.99 0.99 0.09 0.999 0.009 L'unica cosa che ci dice effettivamente è che la velocità di Achille e' 1 e quella della tartaruga 1/10. Per costruzione questa serie non toccherà mai x = 1, ma gli si avvicinera' a piacere anche in un infinito numero di passi. Anche se la serie ha infiniti punti che si addensano attorno ad x moto. = 1 non copre assolutamente la totalità dei punti del Una ragione dello sbigottimento che il paradosso di Zenone ci provoca è che Zenone sceglie una serie che ha somma 1 e quindi si avvicina a piacere al punto in cui Achille raggiunge la tartaruga. Se Zenone ci avesse proposto la serie : ∞ 1 9 ×∑ i 2 i=1 10 che ovviamente ha somma 1/2 ci sarebbe subito apparsa evidente l'arbitrarietà della scelta. In [7]: tp:[[0.9,0.9],[0.99,0.99],[0.999,0.999],[0.9999,0.9999]]; Out[7]: 3 of 21 [[0.9, 0.9] , [0.99, 0.99] , [0.999, 0.999] , [0.9999, 0.9999]] 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [8]: 'plot2d([[discrete,tp],achille(t),tartaruga(t)],[t,0.85,1.05], [style,points,lines,lines],[point_type,diamond],grid2d,[ylabel,"Distanza"], [xlabel,"Tempo"]); Out[8]: 1.05 discrete1 t 0.1*t+0.9 Distanza 1 0.95 0.9 0.85 0.85 0.9 0.95 1 1.05 Tempo Per serie si intende una somma infinita del tipo : ∞ Sn = ∑ ai i=1 L'algebra tratta solo un numero finito di addendi. In effetti quando parliamo di somma di un serie usiamo una semplificazione linguistica: una serie non ha somma, ma può esistere finito il limite l = limn→∞ Sn Diciamo, impropriamente, che tale limite è la somma della serie. Solo molto tempo dopo Zenone con la nozione di limite e quindi di R si arriva ad assegnare in maniera non contradditoria un numero come limite di una serie nei casi in cui essa risulti convergente. Per Zenone era impossibile poter percorrere un'infinità di segmenti (anche se sempre più piccoli), non teneva conto che il tempo totale restava però finito. La serie geometrica : come è facile vedere converge a 1 : n Sn = ∑ i=1 lo sa anche maxima : 9 10 i , = (1 − 1 ) 10n lim Sn = 1 n→∞ In [9]: sn(n):=sum(9/10^i,i,1,n); Out[9]: 4 of 21 sn(n):=sum(9/10^i,i,1,n); 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [10]: limit(sn(n),n,inf),simpsum=true; Out[10]: 1 Il limite è un procedimento topologico (metrico) : significa che per quanto scegliamo piccolo un intorno di 1, ad es (1 − ϵ, 1 + ϵ) , possiamo sempre trovare un n tale che tutte le successive somme Sn finiscono in tale intervallo : In [11]: solve(abs(sn(n)-1) = epsilon,n),simpsum=true; Out[11]: Basta scegliere n [n = − log ε ] log 10 log ϵ > − log 10 . I tempi in cui Achille percorre i vari tratti sono dati da una serie identica (essendo la sua velocità 1) : n Tn = ∑ ovviamente ∀n i=1 : S n /T n = 1 9 10i In [12]: tn(n):=sum(9/10^i,i,1,n); Out[12]: tn(n):=sum(9/10^i,i,1,n); In [13]: limit(tn(n),n,inf),simpsum=true; Out[13]: 1 Il procedimento usato da Zenone è inadeguato per descrivere un moto continuo. Possiamo però dire che estendendo per continuità quello che abbiamo trovato nei nostri fotogrammi agli istanti Tn : = 1 , il fotogramma di un'altra camera (essendo la prima sempre occupata a scattare) mostrerà Achille e la tartaruga entrambi al punto x = 1 . al tempo t Studio di funzioni : un esercizio di analisi Studiamo una funzione razionale : P(x) , quoziente di due polinomi. La sintassi voluta da maxima è facilmente Q(x) riconoscibile : il simbolo ^ viene usato per indicare l'esponenziazione, il simbolo / la divisione. f(x) = p(x) x3 − x2 + 1 = q(x) x2 − 1 NB gli articoli scientifici o i libri scientifici non vengono scritti in Word ,come qualcuno potrebbe pensare, ma in TEX ( l'ultima lettera non è una X , ma la greca χ e quindi si pronuncia tech ) : un programma sviluppato in molti anni da un famoso matematico (D.Knuth) cultore anche della tipografia. Dovete ammettere che la formula sopra, inserita in un linguaggio molto simile a quello della matematica, e' estremamente elegante ed in passato i tipografi per comporla dovevano essere piuttosto abili. 5 of 21 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [14]: p(x):=x^3-x^2+1; Out[14]: p(x):=x^3-x^2+1; In [15]: q(x):=x^2-1; Out[15]: q(x):=x^2-1; In [16]: f(x):=p(x)/q(x); Out[16]: f(x):=p(x)/q(x); maxima sa fattorizzare le espressioni : In [17]: factor(q(x)); Out[17]: (x − 1) (x + 1) Ed espanderle : In [18]: expand(%); Out[18]: x2 − 1 Sa anche risolvere le equazioni. Negli zeri del denominatore la funzione razionale non è definita : In [19]: zeriden: solve(q(x)=0,x); Out[19]: [x = −1, x = 1] Quindi il nostro studio analitico si limiterà al dominio della funzione R ∖ {−1, 1}. Se Newton avesse avuto a disposizione tool automatici per fare il grafico delle funzioni forse non avrebbe inventato l'analisi matematica ! :) 6 of 21 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [20]: 'plot2d(f(x),[x,-6,6],[y,-40,40],grid2d,[xtics,-6,1,6],[ytics,-40,10,40]); Out[20]: 40 30 (x^3-x^2+1)/(x^2-1) 20 10 0 -10 -20 -30 -40 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 x Calcoliamo la funzione derivata prima : In [21]: dfdx : diff(f(x),x) Out[21]: 2 x (x3 − x2 + 1) 3 x2 − 2 x − x2 − 1 (x2 − 1)2 La derivata calcolata in un punto ci dà il coefficiente angolare m della tangente alla curva in quel punto : in x y = f ′ (x0 ) ⋅ x + b = −4/5 : In [22]: m1:ev(dfdx,[x=-4/5]) Out[22]: − 944 81 Derivata (=coefficiente angolare tangente) negativa → la funzione li è decrescente, troviamo la retta tangente nel punto (x0 , y0 ) , f(x0 ) = m1 ∗ x0 + b1 : In [23]: solve(f(-4/5)=m1*(-4/5)+ b1,b1); Out[23]: 7 of 21 [b1 = − 721 ] 81 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [24]: 'plot2d([f(x),-944/81*x-721/81],[x,-6,6],[y,-40,40],grid2d,[xtics,-6,1,6],[y tics,-40,10,40]); Out[24]: 40 (x^3-x^2+1)/(x^2-1) (-(944*x)/81)-721/81 30 20 10 0 -10 -20 -30 -40 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 x In [25]: m2:ev(dfdx,[x=-4]); Out[25]: 208 225 = −4 la derivata è positiva → lì la funzione è crescente , calcoliamo la tangente nel punto (−4, f(−4)) : f(−4) = m2 ∗ (−4) + b2 In x In [26]: solve(f(-4)=m2*(-4)+b2,b2); Out[26]: 8 of 21 [b2 = − 353 ] 225 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [27]: 'plot2d([f(x),-944/81*x-721/81,208/225*x-353/225],[x,-6,6],[y,-40,40],grid2d ,[xtics,-6,1,6],[ytics,-40,10,40]); Out[27]: 40 (x^3-x^2+1)/(x^2-1) (-(944*x)/81)-721/81 (208*x)/225-353/225 30 20 10 0 -10 -20 -30 -40 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 x Gli zeri della derivata prima (dove la funzione ha probabilmente tangente orizzontale), sono detti punti critici della funzione (e possono essere o massimi o minimi relativi o flessi ). Sia pcf la lista punti critici di f : In [28]: pcf: solve(dfdx=0,x); Out[28]: [x = −√3, x = √3, x = 0] Esplicitiamoli come numeri reali : In [29]: float(pcf) Out[29]: [x = −1.732050807568877, x = 1.732050807568877, x = 0.0] Test della derivata seconda Calcoliamo la derivata seconda : In [30]: d2fdx2 : diff(f(x),x,2) Out[30]: 2 (x3 − x2 + 1) 8 x2 (x3 − x2 + 1) 4 x (3 x2 − 2 x) 6x − 2 − + − x2 − 1 (x2 − 1)3 (x2 − 1)2 (x2 − 1)2 I valori della derivata seconda nei punti critici, ci indicano il comportamento della funzione nei punti critici (qui applichiamo la funzione derivata seconda d2fdx2 ai punti pcf ) : 9 of 21 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [31]: ev(d2fdx2,pcf[1]); Out[31]: 5 (−3 2 − 2) 3 2 3 −2 3 2 − 2 + + √3 (2 √3 + 9) 2 In [32]: float(%) Out[32]: −2.598076211353316 In [33]: ev(d2fdx2,pcf[2]); Out[33]: 3 2 23 − 2 + 2 5 (3 2 − 2) 3 2 − (9 − 2 √3) √3 In [34]: float(%) Out[34]: 2.598076211353313 In [35]: ev(d2fdx2,pcf[3]); Out[35]: 0 Perciò poiché f ′′ (−√3) < 0 allora −√3 è un massimo relativo. f ′′ (√3) > 0 e quindi √3 è un minimo relativo. f ′′ (0) = 0 e quindi 0 è un punto di flesso. Ci potrebbero essere degli asintoti verticali negli zeri del denominatore. Questo a meno che i fattori relativi non siano anche fattori del numeratore. Perché siano effettivamente asintoti verticali il limite della funzione in tali punti deve essere ∞ (tali punti non appartengono al dominio della funzione, ma sono aderenti e quindi ha senso chiedersi qual'è il limite) : In [36]: limit(f(x),x,-1); Out[36]: infinity maxima può perfino calcolare separatamente il limite sinistro ed il limite destro : In [37]: limit(f(x),x,-1,minus); Out[37]: −∞ In [38]: limit(f(x),x,-1,plus); Out[38]: ∞ In [39]: limit(f(x),x,1); Out[39]: infinity Abbiamo quindi trovato che la funzione ha due asintoti verticali x = −1 ed x = 1. Poiché il numeratore è solo di grado +1 rispetto al denominatore la funzione razionale avrà anche un asintoto obliquo del tipo : dove : 10 of 21 y=a∗x+b 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [40]: a:limit(f(x)/x,x,inf) Out[40]: 1 In [41]: b:limit(f(x)-a*x,x,inf) Out[41]: −1 L'asintoto obliquo ha quindi equazione y = x − 1. Disegnamo gli asintoti assieme al grafico della funzione (gli asintoti verticali non sono funzioni di x e quindi li disegniamo come curve parametriche :) ) : In [42]: 'plot2d([f(x),x-1,[parametric,-1,t,[t,-40,40]],[parametric,1,t,[t,-40,40]]], [x,-6,6], [y,-40,40], grid2d,[xtics,-6,1,6],[ytics,-40,10,40]); Out[42]: 40 (x^3-x^2+1)/(x^2-1) x-1 -1, t 1, t 30 20 10 0 -10 -20 -30 -40 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 x Questo uso delle derivate per lo studio delle funzioni è opportuno ricordarselo come conseguenza dello sviluppo della funzione in serie di Taylor attorno ad un punto x0 (poiché formalmente identico anche nel caso di più variabili): 1 ′′ f (x0 )(x − x0 )2 2! troncata al primo termine, il resto nella forma di Lagrange ( ξ ∈ (x, x0 ) se x < x0 o ξ ∈ (x0 , x) se x > x0 ) : R1 = f ′ (ξ)(x − x0 ) dove ξ ∈ (x, x0 ) o ξ ∈ (x0 , x) , ci dice che se la derivata prima non è nulla, il resto sarà di segno diverso a seconda che x è a sinistra o a destra di x0 . Il resto del secondo ordine per Lagrange : R2 = f ′′ (ξ)(x − x0 )2 2 essendo (x − x0 ) sempre positivo o nullo , R2 avrà lo stesso segno di f ′′ (x0 ) . f(x) = f(x0 ) + f ′ (x0 )(x − x0 ) + maxima ha una funzione speciale per calcolare le ridotte della serie di Taylor in forma simbolica (f(x) sviluppata attorno ad x 11 of 21 = 2 fino al termine di secondo grado ) : 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [43]: t2: taylor(f(x),x,2,2); /* questo oggetto è una serie con proprietà speciali */ Out[43]: 4 (x − 2) 14 (x − 2)2 5 + + +⋯ 3 9 27 In [44]: 'plot2d([f(x),%],[x,-6,6],[y,-40,40]); Out[44]: 40 (x^3-x^2+1)/(x^2-1) 5/3+(4*(x-2))/9+(14*(x-2)^2)/27 30 20 10 0 -10 -20 -30 -40 -6 -4 -2 0 2 4 6 x Questa approssimazione locale (attorno ad x vede è molto buona. = 2) mediante lo sviluppo di Taylor troncato al secondo ordine, come si Lo sviluppo in serie di Taylor però, funziona solo nei punti "buoni" in cui la funzione può essere approssimata da un polinomio (nessun asintoto !). Vi sono altre espansioni. Ad esempio se la funzione ha singolarità come la f(x) in {−1, 1}, può essere approssimata usando dei termini come 1 . Queste si chiamano serie di Laurent e si studiano in analisi complessa. Maxima usa (z−z0 )n taylor anche per l'espansione in serie di Laurent : In [45]: taylor(f(x),x,-1,3); Out[45]: 7 (x + 1) (x + 1)2 (x + 1)3 1 9 − + − − +⋯ 4 8 16 32 2 (x + 1) In [46]: taylor(f(x),x,1,2); Out[46]: 12 of 21 7 (x − 1) (x − 1)2 1 1 + + + +⋯ 4 8 16 2 (x − 1) 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [47]: 'plot2d([f(x),%],[x,-6,6],[y,-40,40]); Out[47]: 40 (x^3-x^2+1)/(x^2-1) 1/(2*(x-1))+1/4+(7*(x-1))/8+(x-1)^2/16 30 20 10 0 -10 -20 -30 -40 -6 -4 -2 0 2 4 6 x Come si vede l'approssimazione in x = 1, pur essendo lo stesso una singolarità( polo ), è molto buona. maxima sa anche integrare simbolicamente la funzione (il procedimento per l'integrazione delle funzioni razionali l'aveva già scoperto Hermite e consiste nella decomposizione in frazioni parziali): In [48]: partfrac(f(x),x); Out[48]: 1 1 +x+ −1 2 (x + 1) 2 (x − 1) Ora l'integrale è facilmente immaginabile. Comunque maxima lo calcola facilmente : In [49]: integrate(f(x),x) Out[49]: log(x + 1) log(x − 1) x2 − 2 x + + 2 2 2 E sa anche calcolare l'area sottostante la curva sull'intervallo [2, 3] : In [50]: integrate(f(x),x,2,3) Out[50]: log 4 + log 2 + 3 log 3 − 2 2 In [51]: float(%) Out[51]: 13 of 21 1.990414626505863 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... L'integrazione non è un processo semplice come la derivazione. In effetti non tutte le funzioni costruite a partire dalle funzioni standard hanno un integrale in forma chiusa, il più famoso esempio di funzioni di tale tipo essendo probabilmente la gaussiana : 2 gaussian(x) = e−x In [52]: integrate(exp(-x^2),x); Out[52]: √π erf (x) 2 Questa è una definizione circolare, poiché la funzione degli errori (error function) è definita proprio tramite l'integrale della gausssiana : erf(x) = x 2 2 ∫ e−t dt √π 0 e quindi la precedente è semplicemente il teorema fondamentale del calcolo (Non associatelo a nomi di matematici : molte nazioni lo hanno attribuito anche a qualcuno dei propri matematici : in effetti molti collaborarono per circa un secolo a questo risultato. Newton è probabilmente quello maggiormente accreditato per averlo usato per primo ): P rimitiva(e−x ) = ∫ 2 0 x 2 e−t dt Questa mancanza di primitiva in forma chiusa non significa assolutamente che non è integrabile. La funzione è integrabile numericamente e per molto tempo è stata consultata in tavole apposite da tutti coloro che si sono occupati di probabilità e statistica (ora ovviamente è il calcolatore che la calcola). 2 L'area sottesa da e−x tra −3 e 3 con un errore al massimo di 0.001 è 1.7724.. : In [53]: quad_qag(exp(-x^2),x,-3,3,0.001) /* maxima può eseguire l'integrazione numer ica */ Out[53]: [1.772414696519043, 1.9677756052594513 × 10−14 , 61, 0] Funzioni di più variabili Funzioni di più variabili le avete incontrate in fisica. Ad esempio una funzione di 2 variabili può essere rappresentata da una superficie nello spazio. 1 3 g(x, y) = e− 3 x +x−y 2 Lo studio di queste funzioni avverrà nei primi anni di università, ma per analogia potete provare a gustare questo esercizio, sempre calcolato tramite maxima. In [1]: g(x,y) := exp(-1/3*x^3+x-y^2); Out[1]: g(x,y):=exp((-1*x^3)/3+x-y^2); In [57]: plot3d(g(x,y),[x,-2,2],[y,-2,2]) Out[57]: 14 of 21 [ /home/jupi/maxout.gnuplot , /home/jupi/maxima-jupyter11615.svg ] 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... Alle volte la rappresentazione mediante le curve di livello (contour plot in inglese) rende molto più chiaro il comportamento di una funzione in due variabili : In [59]: contour_plot(g(x,y),[x,-2,2],[y,-2,2],[grid,10,10],[gnuplot_preamble,"set cn trparam levels 10"]); Out[59]: 15 of 21 [ /home/jupi/maxout.gnuplot , /home/jupi/maxima-jupyter11615.svg ] 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... 2 1.5 %e^((-y^2)-x^3/3+x) 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 1 y 0.5 0 -0.5 -1 -1.5 -2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 x Lo studio di queste superfici avviene considerando il comportamento delle loro sezioni lungo piani con x costante od y costante. La derivata di queste proiezioni (che sono funzioni di una sola variabile) viene detta derivata parziale e viene calcolata come una normale derivata considerando l'altra variabile costante. Le due derivate parziali vengono indicate con i simboli : ∂ ∂x ∂ ∂y In [9]: delgdelx:diff(g(x,y),x) Out[9]: (1 − x2 ) e−y 2 3 − x3 +x In [10]: delgdely:diff(g(x,y),y) Out[10]: −2 y e−y 2 3 − x3 +x L'analogo della derivata prima è per queste funzioni il vettore gradiente od in generale la matrice jacobiana: ∇g = ( ∂g ∂x ∂g ) ∂y In [57]: j:jacobian([g(x,y)],[x,y]); Out[57]: ( (1 − x2 ) e−y 2 − x3 3 +x −2 y e−y 2 3 − x3 +x ) Questo vettore è tangente alla superficie, diretto nella direzione di massima pendenza della superficie. I punti in cui questo vettore si annulla sono i punti critici della funzione g(x, y) , dove il piano tangente potrebbe essere orizzontale. Troviamoli : 16 of 21 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [58]: pcg : solve([j[1,1] = 0, j[1,2] = 0],[x,y]); Out[58]: [[x = 1, y = 0] , [x = −1, y = 0]] Come nel caso della funzione f : R → R, il comportamento della funzione g : R2 → R dipende dall'analogo della derivata seconda per questa funzione. Questo analogo è una matrice che è detta matrice hessiana ( la matrice delle derivate parziali seconde) per la funzione g(x, y) : In [59]: h:hessian(g(x,y),[x,y]); Out[59]: ⎛ (1 − x2 )2 e−y − 3 +x − 2 x e−y − ⎜ x3 2 ⎝ −2 (1 − x2 ) y e−y − 3 +x x3 2 2 x3 3 +x ⎞ ⎟ x3 x3 2 2 4 y 2 e−y − 3 +x − 2 e−y − 3 +x ⎠ −2 (1 − x2 ) y e−y 2 3 − x3 +x Nel caso della funzione g(x, y) questa matrice nei punti critici diventa diagonale. In questo semplice caso, il comportamento della funzione è dato dal segno degli elementi diagonali (autovalori della matrice). Se gli autovalori sono tutti dello stesso segno allora vi è un massimo o minimo relativo ( un massimo se sono tutti negativi, un minimo se sono tutti positivi ) : In [60]: ev(h,pcg[1]); Out[60]: ( 2 −2 e 3 0 0 −2 e 3 ) 2 In [61]: float(%); Out[61]: ( −3.895468082109351 0.0 ) 0.0 −3.895468082109351 Quindi nel punto (1,0) la funzione ha un massimo relativo. Nel caso gli autovalori siano di segni discordi la funzione ha un punto di sella. Cioè vi sono direzioni a partire da tale punto in cui la funzione cresce ed altre in cui cala. Questo è quello che succede in (-1,0) : In [62]: ev(h,pcg[2]); Out[62]: ( 2 2 e− 3 0 0 2 −2 e− 3 ) In [63]: float(%) Out[63]: ( 1.026834238065184 0.0 0.0 ) −1.026834238065184 maxima può calcolare lo sviluppo di Taylor anche per funzioni di più variabili. Ecco lo sviluppo attorno a (1, 0) di g fino al terzo ordine : In [64]: t3: taylor(g(x,y),[x,y],[1,0],[3,3]); Out[64]: (e 3 ) + (−(e 3 ) (x − 1)2 − (e 3 ) y 2 ) − 1 17 of 21 2 1 2 1 2 2 (e 3 ) (x − 1)3 1 3 +⋯ 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... Il resto del secondo ordine per Lagrange rende chiaro che (1, 0) è un massimo poiché esso è sempre negativo eccetto che nel punto (1, 0) in cui è zero. In [64]: plot3d([g(x,y),trunc(%),[x,-2,2],[y,-2,2]]) Out[64]: 18 of 21 [ /home/jupi/maxout.gnuplot , /home/jupi/maxima-jupyter11615.svg ] 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... Lo sviluppo fino al secondo termine di una funzione di più variabili in serie di Taylor attorno al punto a seguente formula : x, a ∈ Rn ∈ Rn ha la g(x) = g(a) + ∇g(a) ⋅ (x − a) + (x − a)T Ha (x − a) Se vogliamo risparmiare neuroni, questa è l'unica formula che possiamo ricordarci per giustificare tutto il meccanismo per lo studio delle funzioni a singola variabile o a variabili multiple tramite la derivata seconda. Manca un solo tassello al mosaico : se una matrice simmetrica S (e la matrice hessiana è simmetrica per il teorema di Schwartz) ha una delle due proprietà : 1. gli autovalori sono tutti positivi 2. il prodotto per qualsiasi vettore x di xT Sx è positivo essa si dice definita positiva, e se ha una delle due proprietà ha necessariamente anche l'altra. Ovviamente se gli autovalori sono tutti negativi, basta raccogliere un −1 ed abbiamo un risultato analogo : cioè xT Sx è allora sempre negativo. Pertanto nel caso di un punto critico a dove ∇g(a) = 0, il resto nella forma di Lagrange del termine del secondo ordine non cambia segno in qualsiasi direzione ci si muova sse la matrice ha tutti gli autovalori concordi e se sono positivi allora ha lì un minimo, tutti negativi allora ha li un massimo. maxima sa integrare anche funzioni di più variabili e calcolare il volume sotteso. La funzione g(x, y), contenendo un 2 e−y sappiamo già che non è integrabile formalmente. Prendiamo allora h(x, y) = In [64]: h(x,y):=(x^2+y^2)/(x*y); Out[64]: h(x,y):=(x^2+y^2)/(x*y); x2 + y 2 x⋅y In [64]: integrate(h(x,y),x); # maxima non usa segnalare la costante di integrazione negli integrali Out[64]: log x y 2 + y x2 2 In [64]: integrate(%,y); Out[64]: x2 log y log x y 2 + 2 2 Volume sottostante la superficie descritta da h(x, y) sul rettangolo (x, y) ∈ [2, 3] × [3, 5] : In [64]: integrate(integrate(h(x,y),x,2,3),y,3,5); Out[64]: 5 log 5 11 log 3 + − 8 log 2 2 2 In [64]: float(%); Out[64]: 19 of 21 4.520784924280292 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... Serie di potenze ∞ Le serie di potenze ∑i=0 ai (x − c)n sono uno strumento importante in analisi. Queste serie sono convergenti in domini particolarmente piacevoli : 1. tutte convergono nel punto c ad a0 (se conveniamo che 00 = 1). 2. oppure convergono ovunque all'interno di un disco di raggio R (raggio di convergenza) e sono divergenti al di fuori di esso : an+1 n→∞ an R può essere ∞ e la serie può quindi convergere su tutto R o C . In C le funzioni di questo tipo sono dette R−1 = lim intere. 3. Non vi sono altre possibilità. All'interno del disco di convergenza |x − c| < R , la serie di potenze converge assolutamente e per ogni disco interno al disco di convergenza essa converge uniformemente. In analisi una funzione che può essere espressa tramite una serie di potenze convergente su un aperto si dice analitica. In analisi complessa le funzioni analitiche sono anche olomorfe (dotate di derivata complessa sull'aperto) e viceversa e sono al centro di tutta l'analisi complessa. Una proprietà che le rende particolarmente importanti è che le serie di potenze possono essere integrate e derivate termine a termine. Cioè se : ∞ f(x) = ∑ ai (x − c)i i=0 allora : ∞ f ′ (x) = ∑ ai i(x − c)i−1 i=1 , ∞ ∫ f(x)dx = ∑ i=0 ai (x − c)i+1 + k i+1 In questa maniera possiamo scrivere esplicitamente l'integrale e le derivate di ogni ordine della funzione. Questo rende possibile usarle per approssimare gli integrali numerici o per trovare soluzioni approssimate di equazioni differenziali. L'integrale della distribuzione normale approssimato con una serie di potenze La normale standard ha media 0 e deviazione standard 1 : N(x) = 1 √2π 1 2 ⋅ e − 2 ⋅x In [64]: n(x):=1/sqrt(2*%pi)*exp(-1/2*x^2); Out[64]: n(x):=exp((-1*x^2)/2)/sqrt(2*%pi); Espandiamola in serie di potenze attorno a 0 : In [64]: ps: Out[64]: niceindices(powerseries(n(x),x,0)); ∑∞ i=0 (−1)i x2 i 2i i! √2 √π In [64]: ips:integrate(%,x); Out[64]: ∑∞ i=0 (−1)i x2 i+1 (2 i+1) 2i i! √2 √π 20 of 21 02/09/2016 09:01 AM studio-funzioni https://ghost.sissa.it:9999/nbconvert/html/tmp/studi... In [64]: grind(%); ('sum(((-1)^i*x^(2*i+1))/((2*i+1)*2^i*i!),i,0,inf))/(sqrt(2)*sqrt(%pi))$ Out[64]: done In [64]: tex(ips); $${{\sum_{i=0}^{\infty }{{{\left(-1\right)^{i}\,x^{2\,i+1}}\over{ \left(2\,i+1\right)\,2^{i}\,i!}}}}\over{\sqrt{2}\,\sqrt{\pi}}}$$ Out[64]: f alse La serie integrale è quindi : ∫ 0 x = N(x)dx 2 ∑∞ i=0 −i− 1 2 (−1)i x2 i+1 (2 i+1) i! √π In [64]: tips: sum(((-1)^i*x^(2*i+1))/((2*i+1)*2^i*i!),i,0,20)/(sqrt(2)*sqrt(%pi)); Out[64]: x41 104594388901158967050240000 − x39 2487305589722682753024000 + x37 62098722550431350784000 − x35 1631723190138961920000 In [64]: ev(tips,[x=3]); Out[64]: 15259754456079892954157508993003 44414199927815843125 2 77 2 √π In [64]: threesigma:float(%); Out[64]: 0.4986501257178469 La funzione N(x) è simmetrica e pertanto l'area tra −3σ e 0 è la stessa, ed assieme sono : In [64]: 2*threesigma; Out[64]: 0.9973002514356938 Al di là di ±3σ la distribuzione normale ha solo il 2.7 per mille della popolazione. x Normalmente si dà ∫−∞ N(x)dx che è la cdf (cumulative distribution function): ∫ x −∞ N(x)dx = 1/2 + ∫ 0 x N(x) = 1 + 2 2 ∑∞ i=0 −i− 1 2 (−1)i x2 i+1 (2 i+1) i! √π In [ ]: 21 of 21 02/09/2016 09:01 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... I calcoli numerici : catene di Markov e Random Walks con octave di Roberto Innocente [email protected] Cleve Moler insegnava all'universita' del Nuovo Messico (USA) negli anni '70 e voleva che i suoi studenti avessero accesso in maniera semplice ai pacchetti di algebra lineare senza dover imparare il linguaggio Fortran con cui i pacchetti erano costruiti. Invento' quindi un linguaggio elegante con cui interagire con queste routine numeriche, per specificare vettori e matrici. Questo fu l'inizio di quello che poi divenne matlab. Ora matlab e' diventato uno dei piu' diffusi pacchetti di calcolo numerico interattivo. Questa diffusione e' dovuta anche alla maniera semplice ed elegante con sui si possono usare vettori e matrici in matlab. Cosa c'entra octave ? matlab e' un prodotto commerciale, relativamente costoso. John Eaton agli inizi degli anni '90 inzio' il progetto octave il cui obiettivo e' di essere un sostituto di matlab opensource e quindi gratuito. In [108]: v1=[1,2,3] # vettore riga Out[108]: v1 = 1 2 3 In [109]: v2=[3;4;5] #vettore colonna Out[109]: v2 = 3 4 5 Prodotto scalare (riga per colonna) : In [110]: v1*v2 Out[110]: ans = 26 In [111]: A=[1,2,3;5,5,6;6,7,8] # matrice 3x3 Out[111]: A = 1 5 6 In [112]: A' 2 5 7 3 6 8 # trasposta Out[112]: ans = 1 2 3 1 of 17 5 5 6 6 7 8 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... Soluzione di un sistema lineare (divisione a sinistra) : In [113]: x2=A\v2 # soluzione di M . x = v2 Out[113]: x2 = -0.20000 -1.40000 2.00000 In [114]: A*x2 # verifichiamo Out[114]: ans = 3.0000 4.0000 5.0000 In [ ]: I limiti delle catene di Markov Spesso si incontrano nella pratica situazioni che possono venire descritte tramite un insieme di stati si ∈ S ed una probabilita' pij di transizione dallo stato si allo stato sj in un passo(od un certo intervallo temporale). Se tali probabilita' non dipendono dalla storia passata del sistema, allora parliamo di un processo di Markov o markoffiano. Queste probabilita' possono essere scritte in una matrice e la distribuzione in un vettore colonna. In tal caso lo stato alla fine del periodo e' il prodotto della matrice per la colonna. Esempio: abitanti in periferia ed in citta' Supponiamo che ad ogni anno : il 95% degli abitanti della citta' resti in citta' ed il 5% si muova a vivere in periferia il 97% degli abitanti della periferia resti in periferia ed il 3% di loro si muova in citta' Gli abitanti della citta' alla fine del periodo saranno : c = 0.95c + 0.03p che possiamo scrivere anche come prodotto scalare o vettore riga per vettore colonna : c = ( 0.95 c 0.03 ) ⋅ ( ) p Gli abitanti della periferia alla fine del periodo saranno invece : che possiamo scrivere : p = 0.05c + 0.97p p = ( 0.05 c 0.97 ) ⋅ ( ) p Possiamo raccogliere entrambi le formule usando una matrice : c 0.95 ( )=( p 0.05 0.03 c )⋅( ) 0.97 p dove si intende che le righe della matrice ad una ad una moltiplicano scalarmente la colonna. La distribuzione iniziale degli abitanti tra citta' e periferia (il 40% vive in citta', il 60% in periferia) sia : 2 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [115]: D=[0.4;0.6] Out[115]: D = 0.40000 0.60000 Citta' Periferia Citta' 0.95 0.05 Periferia 0.03 0.97 0.97 0.95 0.03 Abitanti della periferia 1 Abitanti della citta' 2 0.05 La matrice di Markov o di transizione per l'esempio considerato e' : In [116]: M=[0.95,0.03;0.05,0.97] Out[116]: M = 0.950000 0.050000 0.030000 0.970000 Se applichiamo successivamente questa evoluzione otteniamo una catena di Markof o markoffiana. Dopo tre anni la variazione dovuta a questo processo sara' rappresentata da : M 3 =M ⋅M ⋅M In [117]: M3 = M^3 Out[117]: M3 = 0.861680 0.138320 3 of 17 0.082992 0.917008 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... Vediamo cosa potrebbe succedere piu' in la' nel tempo : a 300 anni di distanza ed a 1000 anni (l'analisi e' ideale, ci sono ben poche speranze che queste probabilita' non cambino in periodi cosi' lunghi): In [118]: M300 = M^300 Out[118]: M300 = 0.37500 0.62500 0.37500 0.62500 In [119]: M1000 = M^1000 Out[119]: M1000 = 0.37500 0.62500 0.37500 0.62500 In [120]: Mlimit = M1000 Out[120]: Mlimit = 0.37500 0.62500 0.37500 0.62500 La matrice si e' stabilizzata e sembra abbia raggiunto un punto fisso che e' detto stato stazionario. Siamo perfettamente legittimati a considerare questo come un limite empirico e quindi ad usarlo prevedendo che dopo un tempo quanto piu' lungo possibile, la distribuzione iniziale (0.4,0.6) si trasfomera' in : In [121]: Dlimit = Mlimit * D Out[121]: Dlimit = 0.37500 0.62500 E quindi vi sara' il 37.5% di abitanti nella citta' ed il 62.5% in periferia. Questo limite e' assorbente nel senso che qualsiasi distribuzione iniziale porta allo stesso limite. Ad esempio se inizialmente tutti vivono in citta' : In [122]: D1=[1;0]; Mlimit*D1 Out[122]: ans = 0.37500 0.62500 Oppure viceversa se tutti all'inizio vivono in periferia : 4 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [123]: D2=[0;1]; Mlimit*D2 Out[123]: ans = 0.37500 0.62500 Ora questo risultato cosi' facile da calcolare numericamente e giustificare empiricamente, viene provato in maniera rigorosa dall'algebra lineare che incontrerete nei primi anni di universita' : le matrici di Markov o stocastiche sono costituite da elementi ≥ 0 e la somma di tutti gli elementi di una colonna e' 1. In questo caso la matrice puo' essere = SΛS −1 , in cui con S −1 abbiamo denotato la matrice inversa di S (quella −1 per cui S S = 1 ) . In questo caso si puo' provare che la matrice diagonale Λ ha tutti gli elementi ≤ 1 ed uno solo di essi e' esattamente 1. Troviamo la decomposizione con octave : decomposta nel prodotto di 3 matrici : M In [124]: [s,lambda]=eig(M) Out[124]: s = -0.70711 0.70711 -0.51450 -0.85749 lambda = Diagonal Matrix 0.92000 0 0 1.00000 In effetti vediamo che SΛS −1 e' proprio la M originale : In [125]: s*lambda*inverse(s) Out[125]: ans = 0.950000 0.050000 Ora 0.030000 0.970000 M 3 = MMM = SΛS −1 SΛS −1 SΛS −1 = S Λ3 S −1 e cosi' via .. M n = S Λn S −1 Quindi il limite di lim M n = S( lim Λn )S −1 = S ( n→∞ n→∞ 0 0 ) S −1 0 1 ( la potenza di una matrice diagonale si ottiene elevando a potenza i singoli elementi diagonali : eccetto l'elemento che e' 1 tutti gli altri < 1 si annullano all'infinito ) In [126]: s*[0,0;0,1]*inverse(s) Out[126]: ans = 0.37500 0.62500 5 of 17 0.37500 0.62500 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... Questa e' la stessa matrice limite calcolata empiricamente come Mlimit. E' il limite della catena di Markov studiata. Qui sotto un diagramma a torta della distribuzione limite. In [127]: pie(Dlimit) 37% 62% Le camminate casuali (Random Walks) Sono spesso usate in fisica o matematica nelle simulazioni. Sono camminate su un reticolo discreto regolare (punti con n coordinate intere) : lineari (su una linea ), bi-dimensionali (su un reticolo del piano), ecc. ( Camminate casuali su Z ). Si evolvono ad intervalli di tempo discreti : ad ogni passo si sceglie su quale dei punti vicini saltare (di solito con uguale probabilita' in ogni direzione). I possibili percorsi possono essere rappresentati attraverso un albero. Molti fenomeni probabilistici possono essere rappresentati in questo modo. Ad esempio il lancio di una moneta puo essere visto come una camminata casuale dove si salta +1 se esce testa e −1 se esce croce (in inglese Head e Tail) : Albero lancio moneta : First flip H Third flip T H T H T H T H T H T H T H T H T H T H T H T H T H T H T H T H T H T Outcome HTTTH HTTTT THHHH THHHT THHTH THHTT THTHH THTHT THTTH THTTT TTHHH TTHHT TTHTH TTHTT TTTHH TTTHT TTTTH TTTTT T Fifth flip HTTHH H HTTHT T HTHTH H HTHTT T HTHHH H HTHHT T HHTTH T HHTTT H HHTHH T HHTHT H H HHHTT T T HHHTH H T H T HHHHT T H HHHHH H H T H Fourth flip 6 of 17 T H Second flip Lands on 5 3 3 1 3 1 1 -1 3 1 1 -1 1 -1 -1 -3 3 1 1 -1 1 -1 -1 -3 1 -1 -1 -3 -1 -3 -3 -5 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... Questi modelli ad albero sono ora spesso usati per valutare le opzioni finanziarie (qui opzioni e' un termine tecnico della finanza) . Usi frequenti delle camminate casuali nelle simulazioni : moto delle molecole in una soluzione miscelazione dei gas diffusione degli elettroni nei metalli Se la camminata parte da 0 ∈ Z e i passi successivi (±1) sono z1 , z2 , z3 , . . . allora la serie : n Sn = ∑ z i 1 si dice camminata casuale semplice su Z e ci da' su quale punto di Z siamo dopo il passo n . Una domanda interessante che ci possiamo porre e' : quante volte una camminata casuale semplice passa per un punto i∈Z? La risposta e' che la camminata casuale passa infinite volte con probabilita' 1 attraverso qualsiasi punto di Z . Questo fatto implica quello che si chiama teorema della rovina del giocatore. Se un giocatore, con disponibilita' finanziaria D, gioca contro un banco che ha disponibilita' infinita quando passera' per −D avra' perso tutto e non avra' piu' possibilita' di giocare. Tre camminate casuali in 3 dimensioni (da Wikipedia ) : 7 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... I numeri pseudo-casuali che vengono usati nelle simulazioni sono generati dal calcolatore tramite algoritmi che producono sequenze di numeri che hanno le proprieta' statistiche che ci aspetteremo di osservare in veri fenomeni casuali. Uno dei primi algoritmi usati e' stato quello lineare congruenziale rn ≡ [rn−1 ∗ a + c] Generiamo 4 numeri casuali in tale maniera : 8 of 17 mod 231 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [128]: r=int64(1) # seme del generatore a=int64(1103515245) c=int64(12345) m=int64(2^31) for i = 1:4 r = mod(a*r+c,m) endfor Out[128]: r a c m r r r r = = = = = = = = 1 1103515245 12345 2147483648 1103527590 377401575 662824084 1147902781 Basta dividere per il modulo m per ottenere numeri casuali uniformemente distribuiti tra 0 e 1 : In [129]: r=int64(1);a=int64(1103515245);c=int64(12345);m=int64(2^31) for i = 1:4 r = double(mod(a*r+c,m))/double(m) endfor Out[129]: m r r r r = 2147483648 = 0.51387 = 0.26407 = 0.13570 = 0.069737 Naturalmente octave ha un generatore migliore builtin : rand(1) che genera un numero casuale tra 0 e 1 e rand(n, m) che genera una matrice n ⋅ m di numeri casuali (casuale in inglese si dice random ): In [130]: rand(1) rand(3,3) Out[130]: ans = ans = 0.48433 0.10644 0.80829 0.52971 0.90699 0.60703 0.42470 0.71537 0.96159 0.59187 Siamo ora pronti a generare una camminata casuale in Z (il codice per questioni di agevolarne la comprensione non e' dei piu' efficienti ) : In [131]: function r=random_walk(nsteps,prob) r=[]; for i=1:nsteps if(rand<prob) r=[r;-1]; # aggiunge una riga con -1 else r=[r;1]; # aggiunge una rig con 1 endif endfor endfunction 9 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... Questa funzione genera una colonna di passi casuali (-1 o 1) di lunghezza nsteps , scegliendo -1 o 1 a seconda che il numero casuale generato da octave sia minore o maggiore di prob : In [132]: r=random_walk(10,0.5) Out[132]: r = 1 1 1 1 1 -1 -1 1 1 -1 La somma degli elementi di r da' il punto dove il walker e' arrivato alla fine : In [133]: sum(r) # il walker e' esattamente a 4 dopo 10 passi Out[133]: ans = 4 Poiche' ci interessa quanto si e' allontanato dall'origine e non se e' a destra o a sinistra dell'origine, usiamo il quadrato : In [134]: sum(r)^2 # il walker e' a 4 passi dall'origine dopo 10 Out[134]: ans = passi 16 Facciamo ora molte camminate nrndwalks = 200 , molto piu' lunghe (ad esempio di nsteps = 1000 ∼ 10000 passi) e raccogliamo le medie delle somme dei quadrati in una lista : In [135]: nrndwalks=200; average=[]; startloop=1000; delta=1000; endloop=10000; for nsteps=startloop:delta:endloop; sumofsquares=0; for i=1:nrndwalks; r=random_walk(nsteps,0.5); sumofsquares+=sum(r)^2; endfor average=[average;sumofsquares/nrndwalks]; endfor 10 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [136]: plot(startloop:delta:endloop,average,'o') 14000 12000 10000 8000 6000 4000 2000 0 0 2000 4000 6000 8000 10000 Proviamo a far passare una linea (polinomio di primo grado), minimizzando gli scarti quadratici tra i punti trovati : 11 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [137]: x=startloop:delta:endloop; [p,s]=polyfit(x',average,1) Out[137]: p = 1.1530 -585.4227 s = scalar structure containing the fields: yf = 5.6756e+02 1.7205e+03 2.8735e+03 4.0265e+03 5.1795e+03 6.3325e+03 7.4855e+03 8.6384e+03 9.7914e+03 1.0944e+04 X = 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 1 1 1 1 1 1 1 1 1 1 R = -1.9621e+04 0.0000e+00 -2.8031e+00 -1.4639e+00 C = 1.2121e-08 -6.6667e-05 df = 8 normr = 12 of 17 -6.6667e-05 4.6667e-01 2270.7 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [138]: plot(startloop:delta:endloop,average,'o'); hold on; y=polyval(p,x); plot(x,y,'r'); 14000 12000 10000 8000 6000 4000 2000 0 La linea ha equazione 0 2000 4000 6000 8000 10000 y = 1.15 ⋅ x − 585 Questa cosa ha anche un importanza clinica. E' ad esempio importante conoscere : tempo in cui una molecola di O2 raggiunge le cellule 10 μ m da un capillare tempo necessario ad un neurotrasmettitore per passare dal neurone pre-sinaptico ai ricettori a 30 − 40nm sulla membrana post-sinaptica L'equazione normalmente usata per il calcolo del tempo di diffusione di ioni e molecole in soluzioni e' : t∼ x2 D dove D e' il coefficiente di diffusione. Nel caso simulato questo coefficiente e' circa ∼ ha catturato l'essenza del fenomeno della diffusione : D∼ 0.44. Questa semplice simulazione ⟨x2 ⟩ t (in piu' dimensioni cambia solo il coefficiente di proporzionalita'). Il significato geometrico di autovettori e autovalori Qual'e' l'azione di una matrice diagonale su un vettore ? Una dilatazione : la matrice m qui sotto dilata la componente x di un vettore v di 2 e quella y di 3 13 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [139]: v=[2;1] Out[139]: v = 2 1 In [140]: m=[2,0;0,3] Out[140]: m = 2 0 0 3 In [141]: mv=m*v Out[141]: mv = 4 3 In [142]: plot([0;v(1)],[0;v(2)]);axis([-1,5,-1,5]) line([0;mv(1)],[0;mv(2)]) line([0;v(1)],[0;0]) line([0;0],[0;v(2)]) text(2,0,"v_x") text(0,1,"v_y") text(2,1,"v") text(4,3,"m*v") grid on 5 4 m*v 3 2 1 vy v 0 -1 -1 vx 0 1 2 3 4 5 Quale sara' l'azione di una matrice generica su un vettore ? 14 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [143]: m2=[0.94868,0.31623;0.31623,0.94868] Out[143]: m2 = 0.94868 0.31623 0.31623 0.94868 Troviamo autovalori ed autovettori : (decomposizione SΛS −1 ) In [144]: [s,lambda]=eig(m2) Out[144]: s = -0.70711 0.70711 0.70711 0.70711 lambda = Diagonal Matrix 0.63245 0 0 1.26491 In [145]: s*lambda*inverse(s) # per verifica Out[145]: ans = 0.94868 0.31623 0.31623 0.94868 I due autovettori sono : In [146]: a1=s(1:2,1), a2=s(1:2,2) Out[146]: a1 = -0.70711 0.70711 a2 = 0.70711 0.70711 ed i due autovalori : In [147]: alpha1=lambda(1,1), alpha2=lambda(2,2) Out[147]: alpha1 = alpha2 = 0.63245 1.2649 La matrice m2 agisce su un vettore v tramite una dilatazione generalizzata : la componente di v lungo l'autovettore a1 viene dilatata di α1 la componente di v lungo l'autovettore a2 viene dilatata di α2 15 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [148]: va1= v'*a1 *a1 Out[148]: va1 = 0.50000 -0.50000 In [149]: va2=v'*a2 *a2 Out[149]: va2 = 1.5000 1.5000 In [150]: m2v=m2*v Out[150]: m2v = 2.2136 1.5811 In [151]: plot([0;v(1)],[0;v(2)]);axis([-1,3,-1,3]) line([0;m2v(1)],[0;m2v(2)]) line([0;va1(1)],[0;va1(2)]) line([0;va2(1)],[0;va2(2)]) text(va1(1),va1(2),"v_{a_1}") text(va2(1),va2(2),"v_{a_2}") text(2,1,"v") text(m2v(1),m2v(2),"m2*v") grid on 3 2.5 2 va 1.5 1 2 m2*v v 0.5 0 -0.5 -1 -1 -0.5 0 va 0.5 1 1 1.5 2 2.5 3 Ora va1 e va2 sono le componenti di v lungo gli autovettori a1 ed a2 verifichiamo che dilatando tali componenti per i due autovalori otteniamo m2 ∗ v : 16 of 17 01/19/2016 10:16 AM catene-markov https://ghost.sissa.it:9999/nbconvert/html/tmp/cate... In [152]: va1*alpha1+va2*alpha2 Out[152]: ans = 2.2136 1.5811 In [ ]: In [ ]: 17 of 17 01/19/2016 10:16 AM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... Il teorema del limite centrale e la nuova statistica con R di Roberto Innocente [email protected] Vi sono alcuni termini che è essenziale comprendere per discutere di statistica. Due di questi sono : popolazione : l'insieme di tutti i possibili soggetti (ad esempio in una statistica per prevedere i risultati delle votazioni : tutti gli italiani con diritto di voto) altro esempio : tutti i possibili risultati di una misura campione : un sottoinsieme, di solito non troppo numeroso, scelto a caso dalla popolazione, che ci permette di inferire caratteristiche di tutta la popolazione altro esempio : un numero finito di misure di una grandezza I dati che si studiano in statistica possono essere usati in varie forme : 1. un vettore di risultati : la forma più semplice, ma richiede un grande uso di memoria per i campioni/popolazioni grandi 2. due vettori : uno con l'elenco di tutti i risultati x , ed uno con le frequenze o probabilità relative p , molto vantaggiosa nel caso i risultati siano pochi rispetto alla numerosità dei campioni 3. nel caso continuo ( risultati x ∈ ℝ) la probabilità è rappresentata da una funzione p(x) : ℝ → ℝ dettà densità di probabilità. In tal caso alle singole uscite x = π deve essere assegnata probabilità 0 (teoria della misura : pur essendo π un possibile risultato ! ). Gli intervalli hanno una probabilità calcolabile. Ad esempio P (x ∈ [a, b]) = ∫a b p(x)dx l'area sottesa dalla curva p(x) tra a e b. Ed ovviamente poiché la probabilità di tutti i risultati deve essere 1 : ∫−∞ +∞ p(x)dx = 1 Per distribuzione si intende una funzione che associa una probabilità ad ogni possibile risultato. Due parametri importanti delle distribuzioni sono il centro e la dispersione che normalmente sono misurati dalla media e dalla deviazione standard(con n indichiamo la numerosità del campione, con N quella della popolazione) : media : dobbiamo distinguere tra la media della popolazione che spesso è sconosciuta e si indica con μ e quella del campione che si indica con x̄ : x̄ = ∑ n i=1 pi ⋅ xi , μ= ∑ N i=1 pi ⋅ xi 𝚗𝚎𝚕 𝚌𝚊𝚜𝚘 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚘 : μ= ∫−∞ +∞ x ⋅ p(x)dx In [1]: x<-c(1,2,3,4,5,6) x Out[1]: 1 2 3 4 5 6 In [2]: m=mean(x) m Out[2]: 3.5 1 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... deviazione standard : anche qui la deviazione standard della popolazione si indica con σ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ⎯ n 2 s = (xi − x̄) ⋅ pi ∑ i=1 mentre quella del campione con s : 𝚗𝚎𝚕 𝚌𝚊𝚜𝚘 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚘 : ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ⎯ n 2 , σ = (xi − μ) ⋅ pi ∑ i=1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ⎯ σ= √∫−∞ +∞ (x − μ)2 ⋅ p(x)dx In [3]: s=sd(x) s Out[3]: 1.87082869338697 Il teorema del limite centrale E' uno dei pilastri della statistica classica che si basa spesso su modelli parametrici delle popolazioni. Nelle distribuzioni continue, sono calcolabili le probabilità che il risultato sia in un intervallo x P (x ∈ [a, b]) = ∫a b ∈ [a, b] : p(x)dx Dobbiamo cominciare descrivendo la distribuzione normale. E' una distribuzione molto comune in molti 2 fenomeni ed è molto simile alla funzione gaussiana e−x (dette anche curve a campana), è sempre positiva, ha un unico massimo, si annulla all'infinito. Come la gaussiana non può essere integrata in forma chiusa, ma ovviamente si può calcolare l'integrale numericamente per ogni numero reale. Ha due parametri la media μ e la deviazione standard σ : N (x, μ, σ) = . x−μ 2 1 −1( ) ⎯⎯⎯⎯ e 2 σ σ √2π Quello che ci si deve ricordare è che μ è il centro e massimo della curva, e : entro ±σ stanno il 68.2% dei valori, entro ±2σ stanno il 95.4% dei valori entro ±3σ sta quasi la totalità dei valori (0.4% stanno fuori) 2 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... R per ogni distribuzione che conosce ha tre funzioni (faremo qui gli esempi per la distribuzione normale abbreviata da R in norm) : la densità di probabilità o probability density function in inglese(pdf) : dnorm l'integrale della densità o cumulative distribution function : pnorm l'inversa della cdf (o funzione quantile) : qnorm una funzione che genera numeri casuali distribuiti secondo la distribuzione : rnorm In [4]: xtest=seq(-4,4,.1) xqnorm=seq(0,1,.01) plot(xtest,pnorm(xtest),type="l",col="green") lines(xtest,dnorm(xtest),type="l",col="red") title(main="pdf probability density/cdf cumulative distribution") text(c(2,0.95),"cdf") text(c(2,0.1),"pdf") grid(10) E' chiaro dal grafico che, come si dovrebbe supporre, al di fuori di ±3σ, l'integrale della distribuzione è nullo. 3 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [5]: plot(xqnorm,qnorm(xqnorm),type="l") title(main="Inversa della cdf") grid(10) Il teorema del limite centrale ci dice che : Se la distribuzione della popolazione è sufficientemente "buona" con media μ e deviazione standard σ allora la media campionaria per i campioni di n elementi è distribuita come la distribuzione normale con media μ e deviazione standard x̄ ∼ N 4 of 20 ( μ, σ : √n σ ⎯⎯ √n ) 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... Una prova rigorosa richiede l'uso di metodi matematici che ancora non conoscete: la trasformata di Fourier. Tuttavia la sua applicazione ai dati reali della statistica richiede in qualche modo (un atto di fede ) un passaggio al concreto che in qualche modo è simile a quello che si fa applicando la calcolabità secondo Turing ai calcolatori reali. Quello che il teorema (che si dimostra per distribuzioni continue) richiede nelle ipotesi è che : la popolazione ha una deviazione standard o varianza ed una media finita le variabili casuali sono indipendenti ed identicameente distribuite (iid) vale per il limite all'infinito della media delle variabili causali : limn→∞ X1 +X2 +X3 +... n D'altra parte svilupperemo qui una dimostrazione empirica sufficientemente convincente che ci supporta nella sua applicazione anche ai casi reali e ci dice quanto numerosi debbano essere i campioni perché l'approssimazione valga. Supporremo che il vettore x rappresenti il risultato del lancio di un dado. Allora le probabilità che poniamo in un vettore p saranno : In [6]: p<-c(1,1,1,1,1,1)/6 p Out[6]: 0.166666666666667 0.166666666666667 0.166666666666667 0.166666666666667 0.166666666666667 0.166666666666667 Questa è la distribuzione che ne risulta : 5 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [7]: plot(x,p) title(main="lancio di un dado") grid(10) E' una distribuzione uniforme. Tutti i risultati hanno la stessa probabilità. Quale è la distribuzione di probabilità per il risultato del tiro di due dadi ? La probabilità che il tiro di due dadi (o due lanci in successione di un dado) produca 6 è (dove con p1 (x) indichiamo la probabilità che il primo dado sia x e con p2 (x) indichiamo la probabilità che il secondo dado sia x : p(6) = p1 (5) ∗ p2 (1) + p1 (4) ∗ p2 (2) + p1 (3) ∗ p2 (3) + p1 (2) ∗ p2 (4) + p1 (1) ∗ p2 (5) Ora tutte le probabilità elementari per un dado sono 1/6 e quindi i prodotti sono tutti 1/36 quindi la probabilità che il lancio di due dadi dia 6 è di 5/36 In probabilità la distribuzione della somma di due variabili casuali si chiama convoluzione ed R ha speciali funzione per calcolarla : X + Y ∼ conv(X, Y) p(k) = 𝚗𝚎𝚕 6 of 20 𝚌𝚊𝚜𝚘 ∑ k−1 i=1 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚘 : p1 (i) ⋅ p2 (k − i) p(x) = ∫−∞ +∞ pX (t) ⋅ pY (x − t)dx 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... La funzione che effettua la convoluzione discreta (per il nostro caso) si trova in un pacchetto separato. Carichiamola : In [8]: library("kSamples") Loading required package: SuppDists Ora d2 diventerà la distribuzione delle probabilità per la somma di due dadi : In [9]: d2=conv(x,p,x,p) Il risultato della convoluzione (distribuzione derivante dal lancio di due dadi) è posto nella matrice d2 fatta da due colonne : 1. la prima colonna ha i possibili risultati 2. la seconda le probabilità di tali risultati I risultati possibili sono i numeri da 2 a 12 con diverse probabilità (il più probabile come si sa è il 7) : In [10]: plot(d2[,1],d2[,2]) title(main="lancio due dadi") 7 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... Vediamo che la distribuzione della somma è molto diversa e risulta evidente un centro della distribuzione : è la nuova media che è 7, due volte la media di un solo dado = 3.5. Proviamo ora a calcolare la distribuzione della somma di 36 dadi (copiamo la distribuzione d2 in d che ci serve come variabile di lavoro) : In [11]: d=d2 topconv=36 for (i in 3:topconv) { d=conv(d[,1],d[,2],x,p) } In [12]: plot(d[,1],d[,2],type="l") title(main="lancio 36 dadi") Ora il centro della distribuzione è : topconv ⋅ 3.5 = 126 Calcoliamo ora la distribuzione delle medie che sono 1/36 dei risultati essendo la somma di 36 lanci : In [13]: m=d[,1]/topconv;pm=d[,2] 8 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [14]: plot(m,pm,type="l") title(main="distribuzione della media lancio 36 dadi") In [15]: wm=weighted.mean(m,pm) wm Out[15]: 3.5 La deviazione standard sui risultati pesati : In [16]: wsd=sqrt(sum(pm *(m-wm)^2)) wsd Out[16]: 0.284637521276655 Ora poiché il 68% dei valori cade entro ±σ (±0.3) dalla media se scomettete molte volte che la somma che si ottiene dal lancio di 36 dadi cade in [115, 136] probabilmente vincerete ! (ma non fatelo, poiché avete una quantità di denaro finita, consultate il teorema sulla rovina del giocatore ! ) Dal teorema del limite centrale la deviazione standard della popolazione dovrebbe essere quella del ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ campione moltiplicata per la radice del numero di elementi del campione √topconv : 9 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [17]: sigma=wsd*sqrt(topconv) sigma Out[17]: 1.70782512765993 Disegnamo assieme la curva che abbiamo ottenuto e la normale con la stessa media e deviazione standard : In [18]: fact=dnorm(m,wm,wsd) sfact=sum(fact) plot(m,fact/sfact,type="l",col="red") lines(m,pm,type="l") title(main="media lancio 36 dadi e normale con stessa dev std=0.2846") Si sovrappongono perfettamente. La media è la stessa. Il σ stimato è abbastanza vicino alla deviazione standard della distribuzione iniziale, pur essendo la stessa, piuttosto peculiare. Abbiamo quindi verificato empiricamente che : Se il campione è più numeroso di 30 allora qualsiasi sia la distribuzione iniziale la distribuzione della media campionaria segue il teorema del limite centrale. La forma della distribuzione è invece molto diversa da una normale con gli stessi parametri. 10 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [19]: nx<-seq(1,6,length=100) nd<-dnorm(nx,mean=wm,sd=sigma) plot(x,p,col="black") lines(nx,nd,col="red") title(main="probabilita' iniziali e normale ricavata dal CLT") Vogliamo ora mostrare che nella ipotesi molto più verosimile (come nel caso di misure di una grandezza soggette ad errori casuali) che la distribuzione iniziale sia "grosso modo" gaussiana : Se la distribuzione iniziale è "grosso modo" gaussiana, allora già la media dei campioni di soli 15 elementi si ditribuisce secondo il teorema del limite centrale In [20]: x Out[20]: 11 of 20 1 2 3 4 5 6 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [21]: p_16=dnorm(x,3.5,s) p_16=p_16/sum(p_16) plot(x,p_16) title(main="probabilita' iniziali dado truccato") Ripetiamo i passi precedenti, ma stavolta calcoliamo la convoluzione solo per 16 addendi : In [22]: d2_16=conv(x,p_16,x,p_16) In [23]: d_16=d2_16 In [24]: topconv_16=16 for (i in 3:topconv_16) { d_16=conv(d_16[,1],d_16[,2],x,p_16) } 12 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [25]: plot(d_16[,1],d_16[,2],type="l") title(main="lancio 16 dadi truccati") In [26]: m_16=d_16[,1]/topconv_16 pm_16=d_16[,2] wm_16=weighted.mean(m_16,pm_16) wsd_16=sqrt(sum(pm_16 * (m_16 - wm_16)^2)) wm_16 wsd_16 Out[26]: 3.5 Out[26]: 0.36322943168884 13 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [27]: plot(m_16,pm_16,type="l") title(main="distribuzione media lancio 16 dadi truccati") Compariamola con una normale avente gli stessi parametri : 14 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [28]: fact_16=dnorm(m_16,wm_16,wsd_16) sfact_16=sum(fact_16) plot(m_16,fact_16/sfact_16) lines(m_16,pm_16,type="l") title(main="raffronto media lancio 16 dadi trucc. e normale con stessi parametri" Le 2 linee si sovrappongono perfettamente. Ora anche la nostra ipotesi sulla distribuzione iniziale è sufficientemente adeguata : è simile ad una normale con media μ = 3.5 e deviazione standard ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ σ = √topconv_16 ⋅ 0.34.. = 1.44.. 15 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [29]: guess=dnorm(x,wm_16,wsd_16*sqrt(topconv_16)) guess=guess/sum(guess) plot(x,guess) lines(x,p_16,col="red") title(main="raffronto dist iniziale e calcolo attraverso CLT") Pratica Industriale Normalmente si richiedeva nei processi manifatturieri di rispettare le misure dei pezzi con una deviazione standard di ±3σ. Cioè se una misura doveva essere 10.1 − 10.2 mm, accettabile era un lotto con una misura media di 10.15 e σ = 0.015, perché 10.15 − 3 ∗ 0.015 = 10.105e 10.15 + 3 ∗ 0.015 = 10.195. Solo lo 0.3% dei pezzi (3 su mille) può uscire dalle misure richieste : In [30]: 1-(pnorm(3)-pnorm(-3)) # probabilità tra +- 3 sigma Out[30]: 0.00269979606326021 16 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... Fisica delle particelle I risultati annunciati dal CERN di Ginevra devono ora essere verificati con una deviazione standard di ±5σ Pratica nell'industria giapponese Da diverso tempo l'industria giapponese (principalmente quella automobilistica) ha richiesto per la precisione dei particolari meccanici ±6σ : In [31]: 1-(pnorm(6)-pnorm(-6)) Out[31]: 1.97317540084896e-09 Un utilizzo pratico : errori di misura Le misure di una grandezza fisica sono soggette ad errori. Alcuni errori devono essere eliminati correggendo il metodo : errori sistematici errori grossolani Gli errori casuali sono solitamente piccoli ed ineliminabili, inoltre, questi errori seguono leggi probabilistiche e si può quindi tenerne conto. Se questi errori sono indipendenti e dovuti a molteplici cause, possiamo supporre che la loro somma per campioni sufficientemente numerosi segua il teorema del limite centrale. Allora se effettuiamo n (≥ 15/30) misure ed x̄ è la media delle misure effettuate e s la sua devizione standard, allora possiamo supporre che il valore della grandezza sia x̄ e che la stessa abbia una deviazione standard di σ ⎯⎯ = s√n. Deragliamento di un treno alla Gare Montparnasse (Parigi) nel 1895 per una errata analisi degli errori :) : 17 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... La nuova statistica : il ri-campionamento Con la disponibilità di calcolatori veloci anche per uso personale si è aperta una nuova strada nella statistica. L'uso di modelli parametrici per lo studio dei fenomeni può portare alle volte a conclusioni aberranti. In effetti la cosa che conosciamo meglio sulla popolazione è il campione. Pertanto se a partire da questo estraiamo altri campioni tramite il calcolatore avremmo delle altre informazioni (senza l'uso di modelli e particolari assunzioni). Il ri-campionamento può essere effettuato in molti modi. Il metodo più diffuso si chiama bootstrap. Secondo questo metodo gli altri campioni (della stessa numerosità del campione originale) si ottengono estraendo (con rimpiazzo) una serie numerosa di pseudo campioni (con elementi presi dal'originale campione con possibili ripetizioni) e calcolando le varie statistiche su tutti questi campioni : In [32]: library("boot") Scegliamo casualmente un campione di 36 elementi : In [33]: sample36 <- sample(x, topconv, prob=p,replace=TRUE) Da tale campione eseguiamo un ri-campionamento tramite il metodo del bootstrap per 1000 nuovi pseudo campioni e calcoliamo tutte le loro medie e vediamo come queste si distribuiscono : In [34]: mymean<-function(sample,i){ return( mean(sample[i])) } result<-boot(sample36, statistic=mymean, R=1000) 18 of 20 02/08/2016 05:08 PM teorema-limite-centrale https://ghost.sissa.it:9999/notebooks/tmp/teorema-... In [35]: plot(result) In [36]: print(result) ORDINARY NONPARAMETRIC BOOTSTRAP Call: boot(data = sample36, statistic = mymean, R = 1000) Bootstrap Statistics : original bias t1* 3.805556 0.01194444 std. error 0.2664483 Questa inferenza non ha avuto bisogno di alcun modello parametrico dei dati. In [ ]: In [ ]: 19 of 20 02/08/2016 05:08 PM teorema-limite-centrale 20 of 20 https://ghost.sissa.it:9999/notebooks/tmp/teorema-... 02/08/2016 05:08 PM