Matematica al calcolatore - SISSA People Personal Home Pages

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