Python
Visto che la quasi totalità dei progetti è stata scritta in C++ riporto qui due piccoli progetti con Jupyter notebook. Tali script possono essere aperti con diversi servizi online gratuiti come Google Colab.
Grafici
Il primo script è stato utilizzato per la creazione dei grafici presenti al capitolo 7 della tesi per il progetto di comunicazione aumentativa. Puoi visitare il progetto e scaricare il PDF della tesi qui sotto.
Ecco due esempi dei grafici ottenuti.
Analisi statistica delle cifre di $\pi$, numeri irrazionali e Legge di Benford
In questo secondo progetto ho esplorato il comportamento statistico delle cifre di alcuni numeri irrazionali e di particolari sequenze numeriche, con l’obiettivo di verificare sperimentalmente proprietà teoriche come la normalità delle cifre e la Legge di Benford. Il progetto è scaricabile premendo il seguente pulsante.
L’intero lavoro è stato sviluppato in Python, utilizzando librerie scientifiche come mpmath, numpy, scipy e matplotlib.
Parte I — Densità delle cifre nei numeri irrazionali
Obiettivo
Verificare sperimentalmente l’ipotesi che $\pi$ possa comportarsi come un numero normale, ovvero che ogni cifra decimale (0–9) compaia con frequenza pari a 1/10.
Metodologia
1. Calcolo di 50.000 cifre di $\pi$
Ho utilizzato la libreria mpmath per generare $\pi$ con precisione arbitraria.
È stato necessario impostare correttamente il numero di cifre significative (mp.dps) e convertire il numero in stringa per analizzare ogni singola cifra.
2. Calcolo delle frequenze
Per ciascuna cifra ( d \in [0,9] ) ho calcolato:
\[f_d = \frac{n_d}{N}\]dove ( $n_d$ ) è il numero di occorrenze della cifra e ( N = 5 $\times 10^4$ ).
3. Stima delle incertezze
Assumendo distribuzione binomiale, ho stimato l’errore come:
\[\sigma_{f_d} = \sqrt{\frac{f_d(1-f_d)}{N}}\]4. Fit lineare dei dati
Per testare formalmente l’ipotesi di equiprobabilità ho adattato ai dati il modello:
\[f_{lin}(d; \alpha, \beta) = \frac{\alpha}{10} + \beta d\]utilizzando scipy.optimize.curve_fit.
L’ipotesi teorica di distribuzione uniforme corrisponde al punto:
\[(\alpha_0, \beta_0) = (1.0, 0.0)\]5. Analisi statistica
Dal fit ho ottenuto:
- Parametri ottimali ( $\hat{\alpha}, \hat{\beta}$ )
- Matrice di covarianza
- Correlazione tra i parametri
- Valore minimo del $\chi^2$:
Con 10 punti e 2 parametri, i gradi di libertà sono:
\[n_{dof} = 8\]Ho quindi calcolato il p-value come probabilità di sopravvivenza della distribuzione $\chi^2$.
6. Ellissi di confidenza
Utilizzando la matrice di covarianza restituita dal fit, ho costruito l’ellisse definita da:
\[\Delta\chi^2 = \chi^2(\alpha,\beta) - \chi^2_{min} = \chi^2_{2,\,0.95}\]Nel grafico sono stati indicati:
- Il punto di best-fit ( ($\hat{\alpha}, \hat{\beta})$ )
- L’ipotesi teorica ( (1,0) )
- L’ellisse di confidenza al 68%
- L’ellisse di confidenza al 95%
Questo permette di valutare visivamente e quantitativamente la compatibilità dell’ipotesi di equiprobabilità con i dati.
Estensione ad altri numeri
La stessa analisi è stata ripetuta per:
- ( e )
- ( $\sqrt{2}$ )
- Il numero aureo ( $\varphi$ )
- La sequenza di Fibonacci
- Le sequenze di Lucas e Padovan
In tutti i casi analizzati, le frequenze delle cifre risultano compatibili con l’equiprobabilità entro le fluttuazioni statistiche.
È particolarmente interessante osservare come sequenze completamente deterministiche, come quella di Fibonacci, mostrino proprietà statistiche simili a quelle attese per numeri normali.
Parte II — La Legge di Benford
La seconda parte del progetto riguarda la distribuzione della prima cifra significativa.
A differenza delle cifre interne di $\pi$, le prime cifre di molte grandezze reali non sono uniformi ma seguono la distribuzione logaritmica:
\[f_d = \log_{10}(d+1) - \log_{10}(d)\]con ( $d \in [1,9]$ ).
Analisi effettuate
1. Prima cifra dei numeri di Fibonacci
Ho estratto la prima cifra dei numeri ( $F_n$ ) e calcolato le frequenze osservate.
Successivamente ho adattato il modello parametrico:
\[f(d) = \log_{10}(d + \alpha) - \log_{10}(d + \beta)\]L’ipotesi esatta della Legge di Benford corrisponde a:
\[(\alpha_0, \beta_0) = (1.0, 0.0)\]Anche in questo caso ho:
- Eseguito il fit
- Calcolato la matrice di covarianza
- Costruito l’ellisse di confidenza al 95%
- Valutato il $\Delta\chi^2$ rispetto all’ipotesi teorica
2. Prodotti di variabili casuali
È noto che il prodotto di molte variabili casuali indipendenti tende alla Legge di Benford.
Ho verificato numericamente questo comportamento per:
\[Z_n = \prod_{k=0}^{n} X_k\]dove ( $X_k$ ) sono variabili uniformi.
All’aumentare di ( n ), la distribuzione della prima cifra converge rapidamente alla distribuzione logaritmica teorica.