IT EN

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.

Grafico 1 Grafico 2

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$:
\[\chi^2_{min} = \sum_{d=0}^{9} \left( \frac{f_d - f_{lin}(d;\hat{\alpha},\hat{\beta})}{\sigma_{f_d}} \right)^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.