Integrazione numerica

Come fare un disastro senza rendersene conto


I metodi d’integrazione numerica sono quelli che permettono il calcolo degli integrali definiti di una funziona usando i calcolatori elettronici. Detto in maniera più accessibile (anche se non del tutto formalmente corretta), l’integrazione numerica è quel processo che conduce alla valutazione, in molti casi approssimata, dell’area compresa tra una curva di equazione y=f(x) e l’asse delle ascisse, in una regione x∈[a,b].

L’integrale tra a e c della funzione f(x) rappresenta l’area T colorata di grigio; quello tra c e b della stessa funzione è l’area indicata con U. L’integrale tra a e b rappresenta la somma delle aree T+U. Immagine tratta da Wikimedia Commons (grazie a Juliusross~commonswiki).

Uno dei metodi d’integrazione numerica più semplici e allo stesso tempo più usati, risale al tempo di Isaac Newton (a dimostrazione che il calcolo numerico non è affatto, come si crede, strettamente legato all’uso dei computer). Consiste nel dividere l’intervallo [a,b] in una serie di N intervalli più piccoli [xᵢ,xᵢ₊₁], con x₁=a e xN+1=b, approssimare f(x) in ciascuno di essi con un una costante f(x)≃f(xᵢ)=cost, e approssimare l’area sotto la curva come la somma delle aree di rettangoli di base xᵢ₊₁-xᵢ e altezza f(x̅), dove x̅ è il punto medio del sotto-intervallo [xᵢ,xᵢ₊₁].

L’immagine, tratta da Wikimedia Commons (grazie a Greenbreen), mostra come si può approssimare un integrale definito con la somma delle aree di N rettangoli. Maggiore è il numero di rettangoli, migliore è l’approssimazione.

In effetti, il simbolo d’integrale (∫ ) è una “esse” allungata che deriva dal latino summa (somma). Gli estremi d’integrazione a e b si indicano in basso e in alto. Quello che si somma, in un integrale, è il prodotto della base infinitesima dx di un rettangolo per la sua altezza f(x). La notazione, in sostanza, indica la somma delle aree dei rettangoli di altezza f(x) e larghezza infinitesima dx. In certi casi, l’integrale di alcune funzioni si sa calcolare esattamente. Chi ha studiato un po’ di analisi matematica sa, per esempio, che

Numericamente, con un programma in C, l’integrale in questione si potrebbe calcolare come segue

double integral(double a, double b, int N) { 
  double I = 0., x = a; 
  double dx = (b - a)/N; 
  while (x < b) {
    I += sin(x+0.5*dx)*dx;
    x += dx;
  }
  return I;
}

In questa funzione si pone, inizialmente, la variabile I, che rappresenta l’integrale, uguale a 0. La variabile x, invece, si pone uguale ad a. Si divide quindi l’intervallo [a,b] in N parti di ampiezza dx. Nel ciclo while, alla variabile I si somma, iterativamente, il valore del seno di x, calcolato nel punto medio dell’intervallo, moltiplicato per dx, con x che si sposta ogni volta verso destra. Quando x finisce fuori dell’intervallo [a,b] la variabile I contiene la somma delle aree dei rettangoli di base dx e di altezza uguale al seno dei punti di mezzo di ciascun sotto-intervallo, che fornisce una stima dell’integrale. Una misura della precisione di questa stima è data da 𝛿=|2-I|/2, che fornisce la differenza percentuale tra il valore atteso 2 e quello stimato I.

La seguente tabella riporta il valore di 𝛿 per diversi valori di N.

N𝛿N𝛿
157%80.6%
211%90.5%
34.7%100.4%
42.6%111.7%
51.7%120.3%
65.6%131.2%
70.8%140.2%

N=1 equivale ad approssimare l’area sotto la funzione seno con quella di un rettangolo di base π e altezza uguale al seno di π/2, che vale 1. L’area così stimata (π) è chiaramente ben diversa da quella vera che vale 2. E infatti l’errore è grande (57%). All’aumentare di N, l’errore, come ci si potrebbe aspettare, diminuisce. Tuttavia, per certi valori di N, come N=6, N=11 e N=13, tale errore non solo non segue l’andamento decrescente atteso, ma è superiore di un ordine di grandezza rispetto a quello di valori del tutto simili dello stesso parametro.

In un recente post spiegavo come la scelta del costrutto da utilizzare per realizzare un ciclo dovesse basarsi sul tipo di controllo che si poteva eseguire: nel caso in cui si possa prevedere il numero di volte che il ciclo sarà percorso è più opportuno usare il costrutto for, riservando il while per le situazioni nelle quali questo non è possibile.

Nel caso in esame, seguendo quel consiglio, avremmo dovuto usare il for per realizzare il ciclo, così:

double integral(double a, double b, int N) {
  double I = 0., x = a;
  double dx = (b - a) /N;
  for (int i = 0; i < N; i++) {
    I += sin(x+0.5*dx)*dx;
    x += dx;
  }
  return I;
}

In questo caso, i risultati che si ottengono sono esattamente gli stessi, ma per N=6, 11 e 13, gli errori corrispondenti sono, rispettivamente, 𝛿=1.1%, 0.3% e 0.2%, perfettamente in linea con le attese.

Come si spiega? Il fatto è che i numeri nella memoria di un calcolatore sono rappresentati sempre con un numero finito di cifre. Quando si somma dx a x può dunque accadere che, all’ultima iterazione, il valore risultante sia appena più piccolo o appena più grande di b, causando l’omissione o la ripetizione di un addendo nella somma. È così che, anche se l’errore su x, come nel caso in esame, è dell’ordine di 2-53, l’errore finale può essere disastrosamente alto. Usando il costrutto for garantiamo che il numero di intervalli effettivamente usati per la stima sia quello giusto.

Come si vede, l’adesione alle convenzioni descritte nel post sopra indicato, non è solamene una questione di stile, ma permette di limitare errori altrimenti difficili da controllare nei casi generali. Questo caso, inoltre, suggerisce un’ulteriore “regola“: quando si deve scegliere un numero intero arbitrario (come nel caso del numero di intervalli in cui dividere [a,b]), meglio scegliere una potenza di 2 (non 10, ma 8 o 16; non 100, ma 64 o 128; non 1000, ma 1024). Con quelle, gli errori di arrotondamento sono ridotti al minimo possibile.

Questo e altri suggerimenti dello stesso tenore sono contenuti nel mio libro “Programmazione Scientifica“, edito da Pearson.

10 milioni per 7 è sempre pari a 70 milioni?

Il calcolo numerico può condurre a sottili e pericolosi errori di arrotondamento. Per evitarli è necessario conoscere il problema e sapere come aggirarlo.


Consideriamo il seguente programma, scritto in C:

#include <stdio.h>
int main() {
  float x = 7;
  float S = 0;
  int i;
  for (i = 0; i < 10000000; i++) {
    S += x;
  }
  printf(“%f\n”, S);
}

Il programma aggiunge 7 alla variabile S dieci milioni di volte. Il risultato atteso è quindi di 70 milioni. Ma in effetti, compilando (senza ottimizzazioni) ed eseguendo il programma si ottiene

77603248.000000

che è piú grande di oltre il 10%. Sorpresi? È l’effetto degli errori di arrotondamento causati dal fatto che i numeri, nei computer, si possono rappresentare solo con un numero finito di cifre. Ora, sia 7 che 10 milioni sono perfettamente rappresentabili nella memoria di un computer. Allora, perché il risultato è così cattivo?

La rappresentazione dei numeri nei computer

I numeri, nella memoria di un computer, si rappresentano nel sistema binario. In questo sistema qualsiasi numero è rappresentato in un sistema posizionale in base 2, in modo tale che qualsiasi numero intero composto di m cifre (0 e 1) rappresenta un numero

dove dᵢ è il valore della i-esima cifra (0 o 1). Ad esempio, il numero intero 5 si rappresenta come 00000101 in un computer a 8 bit, essendo 1⨉2²+0⨉2¹+1⨉2⁰=4+0+1=5. Gli zeri iniziali non sono, naturalmente, significativi.

Per rappresentare numeri non interi, come 3.14, in linea di principio si potrebbe usare la stessa notazione, con la sola differenza che il valore iniziale di i è negativo e pari al numero di cifre dopo la virgola. Ad esempio, 3.14 corrisponde a 11.001000111111010101110001 in binario. In effetti,

Osserviamo che il numero preciso risultante dal calcolo di cui sopra è, in effetti, 3.1400003433. I numeri razionali in una base non sono necessariamente numeri razionali in un’altra base (ad esempio, 1/10 è irrazionale in base 2). Una tale rappresentazione è poco pratica per i computer, che hanno bisogno di un numero enorme di cifre per rappresentare, con sufficiente precisione, numeri che, nella notazione decimale, richiedono un numero limitato di cifre. I computer, per questo, utilizzano la notazione standard IEEE754. All’interno di questa notazione, i numeri in virgola mobile, come vengono chiamati, si rappresentano con 32 bit, utilizzando una sorta di notazione scientifica in base 2. Nella notazione scientifica, un numero x si scrive come x=y×10ⁿ, dove, di solito, y∈[1,10) e n è scelto di conseguenza. Ad esempio, la distanza media della Terra dal Sole è di 149 597 870 700 m, che si scrive anche come 1.49 597 870 700⨉10¹¹ m. Analogamente, 3.1400003433, in base 2, si può scrivere come 1.100100011110101110001⨉2¹, cioè, come y×2ⁿ, con y∈[1,2) e n=1. Con questa convenzione, la cifra che precede il punto decimale è sempre 1 e si può omettere. Il numero che moltiplica la potenza di due (1.100100100011111101010101110001) si chiama mantissa e può essere rappresentato, nella cosiddetta forma normale, come 1001000111111010101110001, omettendo il primo 1. Nella notazione IEEEE754, un numero si rappresenta utilizzando il primo bit per il suo segno (0 se positivo), 8 bit per rappresentare l’esponente di 2 (n=1 nell’esempio) nella notazione in eccesso a 127 (cioè come un intero tale che n=m-127; m=128 nel nostro esempio), e 23 bit per rappresentare la sua mantissa nella forma normale. La sequenza di bit necessaria per rappresentare il nostro numero è la seguente: 0 10000000 10010001 11101011 1000100.

Anatomia del problema

Dichiarando x come numero in virgola mobile (float), il compilatore lo rappresenta come 0 10000001 1100000 000000000000 0000000000, cioè come (1+1×2-¹+1×2-²)×2²=7. Infatti, il primo 0 rappresenta il segno +. Il seguente gruppo di 8 bit rappresenta 129 che, a sua volta, corrisponde all’esponente di due 129-127=2. Dei restanti 23 bit, solo i primi due non sono nulli e corrispondono alle potenze -1 e -2. L’1 aggiunto a queste potenze è implicito nella forma normale e non rappresentato esplicitamente.

Il problema sorge quando il programma effettua la somma. Per fare ciò, una CPU deve considerare i due termini della somma come rappresentati utilizzando la stessa potenza di due; in questo modo può utilizzare la proprietà distributiva della moltiplicazione. Quando S=16 777 222, la sua rappresentazione nella memoria del computer è 0 10010111 000000000000 000000000000 0000011. L’esponente di due è 10010111, corrispondente al numero intero 151. L’esponente di 2 nella notazione scientifica è quindi 151-127=24. S, di conseguenza, si esprime come y×2²⁴. Per poter sommare x=7 ad esso, dobbiamo esprimere x come z×2²⁴, in modo che la CPU possa fare la somma di y e z per ottenere il nuovo valore di S. La rappresentazione originale di x era 1,11 seguita da 21 zeri, per 2². Per esprimerla come z×2²⁴, dobbiamo spostare i bit della mantissa di 22 posti a destra. Il risultato è un numero composto da 21 zeri seguiti dalle cifre 111. In un numero a 32 bit non c’è posto per l’ultimo 1, che si perde, e, di fatto, x=6 e S=16 777 228.

Per mitigare gli effetti dell’arrotondamento, le somme si eseguono nella FPU (Floating Point Unit), che utilizza 80 bit per rappresentare i numeri in virgola mobile. Aggiungendo 7 a 16 777 228 si ottiene 16 777 235. Sfortunatamente, quando si copia questo numero nella memoria, la FPU aggiunge un 1 alla mantissa, per recuperare l’errore precedente. Il risultato è S=16 777 236, cioè 16 777 228 + 8. Di fatto, il valore aggiunto alla somma è 8 invece di 7. Lo stesso accade a ogni iterazione successiva e di fatto si aggiunge 8 invece di 7 molte volte. In un caso, il valore aggiunto alla somma effettiva S è in realtà 11!

La lezione

Quando si sommano, con un computer, due valori, S e x, è necessario prestare attenzione ai loro valori relativi. Se log₂(S)-log₂(x) ≪ p, dove p è il numero di bit utilizzati per la mantissa, allora non avrete problemi. Se invece log₂(S)-log₂(x) ≃ p o più grande, allora, molto probabilmente, vi imbatterete in errori di arrotondamento che potrebbero anche essere gravi. Mai sommare ciecamente numeri troppo diversi. Allo stesso modo, dovreste sempre prestare attenzione alla differenza di numeri molto simili. Se i numeri sono troppo vicini, la loro differenza può essere difficile da rappresentare e può essere pari a zero, anche se i due numeri sono diversi.

La bellezza salverà la fisica

Parafrasando la celebre massima di Dostoevskij (o forse, meglio, del suo “idiota”), in questo post discutiamo il ruolo della bellezza delle equazioni della fisica.


Sì, lo so. Non tutte le leggi della fisica sono belle e molti lettori potrebbero non essere d’accordo con una tale affermazione. Tuttavia, dubito che la maggior parte di coloro che mi seguono abbiano da ridire su questo, perciò assumerò che praticamente tutti la pensino così: le equazioni della fisica sono indubbiamente molto belle. Non è un caso che artisti come Andrea Galvani ne abbiano fatto uno strumento della propria poetica.

Andrea Galvani © The Subtleties of Elevated Things_ARCOmadrid 2019.jpg
Andrea Galvani: la sottigliezza delle cose elevate

Molti scienziati, in effetti, credono in quello che io chiamo “l’argomento della bellezza”, che ha portato il premio Nobel Richard Feynman ad affermare che

Non importa quanto sia bella la tua ipotesi; non importa quanto sei intelligente, o come ti chiami. Se la tua teoria non va d’accordo con i dati sperimentali… è sbagliata“.

L’argomento della bellezza consiste nel credere che la Natura debba essere descritta da equazioni “belle”. Sono portato a credere che una tale convinzione si debba far risalire a un’intervista rilasciata da Paul Dirac a Thomas Kuhn e Eugene Wigner in cui uno dei fondatori della meccanica quantistica dice

[L’idea dello spin] è scaturita effettivamente solo grazie alle manipolazioni delle equazioni che stavo studiando; non stavo cercando di introdurre idee fisicamente plausibili. Gran parte del mio lavoro del resto consiste nel lavorare con le equazioni per vedere cosa se ne può ricavare. La seconda quantizzazione, per esempio, è nata così. Non credo che questo abbia senso per gli altri fisici; penso sia una mia peculiarità il fatto che mi piace lavorare con le equazioni, soltanto alla ricerca di relazioni matematiche interessanti che magari non hanno alcun significato fisico. Succede, però, che a volte ce l’hanno“.

Inoltre, in un articolo scritto nel 1982 [Pretty mathematics. Int J Theor Phys 21, 603-605 (1982)], Dirac ha scritto

Una delle caratteristiche fondamentali della natura sembra essere che le leggi fisiche fondamentali sono descritte in termini di una teoria matematica di grande bellezza e potenza. Potremmo forse descrivere la situazione dicendo che Dio è un matematico sopraffino, cui è piaciuto usare una matematica molto avanzata nella costruzione dell’universo. A me sembra che se si lavora allo scopo di perseguire la bellezza nelle proprie equazioni, con una buona intuizione, si è di sicuro sulla buona strada“.

In effetti, la bellezza emerge semplicemente perché la matematica è un linguaggio molto flessibile per il quale un matematico esperto può inventare nuove parole e nuove regole grammaticali, tali che ciò che appariva brutto in una lingua diventi bello in un’altra. Uno degli esempi più sorprendenti è l’insieme delle equazioni di Maxwell. Le si può vedere nella loro forma originale in molte edizioni digitalizzate del “Trattato” come questa (pagg. 259-262/515). Dubito che riuscirete a individuarle… infatti le equazioni di Maxwell sono state riformulate nella forma che usiamo oggi da Oliver Heaviside che ha usato un nuovo linguaggio con una nuova sintassi per riscriverle in una forma che sembra decisamente più bella.

La bellezza, tuttavia, in matematica non è fine a sé stessa e il suo perseguimento un ruolo ce l’ha eccome. Serve a far emergere più chiaramente il significato delle equazioni e a semplificare la derivazione di nuovi risultati dalle loro manipolazioni. Spesso, una forma più sintetica, getta molta più luce su un argomento rispetto a una forma più pletorica. Potremmo in effetti paragonare una bella equazione matematica a una poesia, mentre una forma più esplicita della stessa equazione si potrebbe paragonare alla prosa.

Considerate, per esempio, questo celebre passo:

Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un’ampia costiera dall’altra parte; e il ponte, che ivi congiunge le due rive, par che renda ancor più sensibile all’occhio questa trasformazione, e segni il punto in cui il lago cessa, e l’Adda rincomincia, per ripigliar poi nome di lago dove le rive, allontanandosi di nuovo, lascian l’acqua distendersi e rallentarsi in nuovi golfi e in nuovi seni

Pare quasi di vederlo, il lago, con le sue montagne che vi si tuffano dentro disegnando una costa sinuosa e quasi sensuale. Ma confrontiamo questa sia pur magistrale scena con quella descritta da un haiku giapponese di Yosa Buson, un poeta del 1700:

Che luna! il ladro si ferma per cantare

In queste poche sillabe si vede molto più della luna: si vede in realtà tutta la scena, con il ladro nell’oscurità che guarda con ammirazione la luna; si vedono le stelle, la vegetazione, e tutto il resto. Ma non solo. Si possono perfino quasi sentire gli odori, udire gli animali notturni, percepire il freddo e l’umidità, la paura del ladro di essere scoperto.

Nella scienza, come nelle arti (un argomento simile si applica ai dipinti: vedi il quadro di Mark Rothko riportato sotto), la semplificazione consiste nella sottrazione di quanto non è necessario per trasmettere quanto più contenuto possibile. Il risultato di questo lavoro è spesso più complesso del prodotto iniziale, pur apparendo più chiaro e denso di significato. Di conseguenza, il risultato finale è più adatto a suggerire nuove interpretazioni e ulteriori sviluppi.

Mark Rothko’s no. 14: foto di Naotame Murayama su Flickr

Ecco perché le equazioni fisiche sono belle: spesso i fisici seguono inconsciamente questa regola, ma di fatto lo fanno. La capacità di apprezzare la bellezza è qualcosa che dovremmo insegnare a tutti i nostri studenti che non meritano di essere formati solo dal punto di vista puramente tecnico. Sogno (e forse quest’anno mi riuscirà) di poter integrare le mie lezioni di fisica con il punto di vista di un artista, mentre, dall’altro lato, studenti di arte visitano una galleria o un museo accompagnati da uno scienziato che fa loro da guida e interpreta, a suo modo, le opere esposte.

Esperimenti radioattivi

Con il simulatore di Geiger presentato nell’ultimo post si possono solo fare dimostrazioni qualitative circa la maniera in cui si comporta un rivelatore di particelle quando si avvicina una sorgente radioattiva. Al più si può fare una serie di misure che permettono di stabilire la legge secondo la quale il numero di conteggi per unità di tempo diminuisce col quadrato della distanza, come nel filmato.

Una serie di misure più interessanti si può seguire con il programma riportato sotto.

#define _DEBUG

#define CLIK 8
#define ECHO 2
#define TRIG 3

#define TAU 2.2414 // the decay time in minutes
#define c 340.e-6  // the speed of sound

float tau = TAU*60.;
unsigned long t0;

void setup() {
  pinMode(CLIK, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(TRIG, OUTPUT);
  digitalWrite(TRIG, LOW);
  digitalWrite(CLIK, LOW);
  t0 = millis();
#ifdef _DEBUG
  Serial.begin(9600);
  Serial.print("============ tau = ");
  Serial.print(tau);
  Serial.println(" s");
#endif
}

void trigger() {
  /* trigger the sensor */
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
}

float measure() {
  /* measure the distance between the sensor and the obstacle */
  float d = 0.;
  for (int i = 0; i < 15; i++) {
    trigger();
    unsigned long T = pulseIn(ECHO, HIGH);
    d += c*T/2.;
  }
  return d;
}

int status = HIGH; // the current status of the relay

void loop() {
  /* measure distance and time */
  float d = measure();
  float t = (millis() - t0)*1.e-3;
  /* compute the probability of a decay */
  float Pdecay = exp(-t/tau);
  float f = (float)random(1000)/1000.;
  /* if an atom decay... */
  if (f < Pdecay) {
    /* ...detect it with a probability that depens on d */
    unsigned long trigger = 10000./(d*d); 
    unsigned long r = random(10000);
    if (r < trigger) {
      digitalWrite(CLIK, status);
#ifdef _DEBUG
      Serial.println(t);
#endif
      if (status == HIGH) {
        status = LOW;
      } else {
        status = HIGH;
      }
    }
  }
}

Il programma è solo apparentemente complicato. La costante definita alla linea

#define TAU 2.2414

rappresenta il tempo di vita medio, espresso in minuti, di una ipotetica sostanza radioattiva (in questo caso dell’Alluminio 28: quello ottenuto da Enrico Fermi nei suoi esperimenti sulla radioattività artificiale).

Con questa versione dello sketch di Arduino i click si susseguono con una probabilità che diminuisce esponenzialmente con un tempo caratteristico TAU.

A questo punto simulare una misura è facile. Si avvicina, a un’opportuna distanza, la presunta sostanza radioattiva e si contano i click che si odono nell’unità di tempo. Per esempio, si possono contare i click ogni 20 o 30 secondi, avendo cura di porre la sorgente a una distanza tale da avere un numero statisticamente significativo di click in questo intervallo di tempo (all’inizio delle misure questo numero dovrebbe essere almeno attorno a 80-100). Dividendo il numero di click N per l’intervallo di tempo T si ottiene la frequenza dei conteggi N/T. Si ripete la misura a tempi successivi e si osserva che il rapporto N/T non è costante, ma diminuisce col tempo. Se si fa un grafico di N/T (o semplicemente di N) in funzione del tempo si ottiene la figura sotto riportata:

Fermi_Al

La figura include il “fit” ai dati sperimentali eseguito con un esponenziale. Per ottenere una prima stima del tempo di decadimento senza dover eseguire un complesso fit con un esponenziale si può riportare il logaritmo del numero di conteggi in funzione del tempo, il che darà al grafico l’aspetto di una retta, di cui basta misurare la pendenza. Oppure si può, per tempi relativamente piccoli, approssimare l’esponenziale con una retta

N·exp(-t/τ)≈N(1-t/τ).

Le misure fluttuano in maniera statistica, quindi si ha l’impressione di fare una vera misura e s’impara a gestire gli errori sistematici e statistici in modo corretto. Conoscendo il tempo di vita impostato si può confrontare il valore ottenuto con quello atteso per valutare la bontà delle misure eseguite.

 

Le scuole di Fisica con Arduino e Smartphone crescono

Le Scuole di Fisica con Arduino e Smartphone cui ho dato vita dal 2016 continuano a riscuotere un discreto successo. Alcuni insegnanti hanno già iniziato a lavorare con Arduino nelle loro classi e presumibilmente avremo materiale da presentare al prossimo Congresso della Società Italiana di Fisica.

Recentemente è stato pubblicato un mio post su Math is in the Air: un blog di divulgazione della matematica. Alcuni insegnanti hanno cominciato a fare sperimentazione in classe con Arduino e a Marzo parteciperò a un Workshop internazionale a Parigi per illustrare le nostre esperienze a un panel di esperti provenienti da vari Paesi europei.

Abbiamo anche ricevuto un invito per presentare le Scuole al Summer Meeting dell’American Association of Physics Teachers, dove condurremo anche un workshop sull’uso di Arduino per esperimenti scientifici.

 

La stima di π

Il problema della cosiddetta quadratura del cerchio è molto antico. Consiste nella determinazione dell’area di un cerchio di raggio 1 (l’area del cerchio di raggio qualsiasi essendo semplicemente quella del cerchio di raggio 1 moltiplicata per il raggio al quadrato). Un modo per definire questa misura è il seguente: prendiamo un cerchio di raggio 1 e inscriviamolo in un quadrato, che evidentemente deve avere lato pari a 2 (e dunque area pari a 4). Se chiamiamo π l’area di questo cerchio, il rapporto tra quest’area e quella del quadrato è π/4.

Il 14 marzo è il cosiddetto Pi Day: il giorno del pi greco (in inglese la data del 14 marzo si scrive 3/14). Questo post è dunque un suggerimento per attività didattiche da portare avanti in quella giornata.

Se si distribuiscono N punti in maniera uniforme all’interno del quadrato, una frazione di essi cadrà all’interno del cerchio ed è evidente che il numero di punti che cade all’interno del cerchio diviso il numero di punti N sarà in media uguale al rapporto delle aree di queste figure. Chiamando Nint il numero di punti interni al cerchio possiamo perciò dire che

Nint/N ≃ π/4,

e, di conseguenza, possiamo stimare π semplicemente contando il numero Nint che cade all’interno del cerchio:

π ≃ 4Nint/N.

La statistica c’insegna che la precisione con cui potremo determinare il valore di π sarà tanto migliore quanto maggiore sarà il numero di punti Nint, che a sua volta dipende da N.

Con il linguaggio di programmazione Scratch anche i bambini possono scrivere un semplice algoritmo per stimare il valore di π.

All’indirizzo https://scratch.mit.edu/projects/149703806/ si può vedere in funzione il programma piCat che fa proprio questo. Il gattino di Scratch chiede quanti punti N si devono generare e comincia a mettere un pallino in punti a caso scelti all’interno del quadrato. Quando il pallino si trova nel cerchio (e questo lo si determina controllando il colore col quale il pallino è in contatto) cambia colore e incrementa il valore di un contatore Ninside. La stima di π è costantemente aggiornata. Con N=2000 si trovano valori molto prossimi a quello vero, pari a 3.1415926535897932384626433832795028841971693… (alla pagina http://www.piday.org/million/ trovate il valore di π con un milione di cifre dopo la virgola).

La Fisica non è un’opinione

“La Fisica non è un’opinione” è il titolo di un incontro-scontro con insegnanti (per lo più laureati in matematica) sul rapporto tra la matematica e la fisica. L’incontro si è tenuto il 10 febbraio 2017 presso il Dipartimento di Matematica di Sapienza, nell’ambito delle iniziative del Piano Lauree Scientifiche.

Il mio esordio è stato abbastanza divertente, avendo confessato che il vero titolo che avrei voluto dare all’incontro non era quello di questo post, ma “La Matematica è un’opinione”. Poi ho pensato che sarebbe stato troppo provocatorio e così ho ripiegato su un titolo meno soggetto a fraintendimenti.

Analizzando il contenuto dei libri di fisica per le scuole e per l’Università si trovano un certo numero di affermazioni discutibili, cui di norma nessuno presta attenzione e che si tramandano così dai tempi di Galileo Galilei, senza che alcuno senta la necessità di riflettere su di esse.

La prima riguarda l’oggetto della Fisica che, secondo i libri che ho consultato, riguarderebbe lo studio dei fenomeni naturali. Basta dare un’occhiata alle pubblicazioni dei fisici per capire che della fisica non fanno parte fenomeni naturali come l’amore, mentre sono oggetto d’indagine fenomeni come le oscillazioni dei valori delle azioni in borsa che certo naturali non sono. La verità è che la fisica riguarda tutti i fenomeni misurabili, per i quali, cioè, esiste uno strumento e una procedura che permette di associare un valore (non necessariamente numerico) a quella che i fisici chiamano grandezza fisica.

Per descrivere i rapporti e l’evoluzione temporale di questi valori i fisici usano la matematica, semplicemente perché la matematica è un linguaggio e come tutti i linguaggi possiede una sufficiente arbitrarietà per descrivere qualsiasi cosa.

In questa accezione la Matematica è un’opinione nel senso che un matematico ha la totale libertà di inventare i postulati a partire dai quali costruisce, secondo un metodo che non ha più niente di arbitrario, una matematica. Non è un mistero per nessuno che esistono più Matematiche alternative: esistono Matematiche in cui le parallele non s’intersecano e quelle in cui lo fanno, Matematiche in cui 2+2 fa 4 e altre in cui fa un numero qualunque compreso tra 0 e 4, e così via.

A differenza di un matematico, un fisico non può stabilire principi a priori sui quali basare la sua scienza. Il fisico è costretto ad accettare come verità (e quindi come postulati delle sue teorie) i fatti sperimentali, almeno fino a quando non si verificheranno fatti che facciano ritenere tali postulati non più validi in certe condizioni. Non si costruiscono teorie prive di fatti sperimentali a loro supporto.

In questo senso la Fisica non è un’opinione. I fatti sono fatti e le loro interpretazioni devono essere coerenti con essi. Che ci piaccia o no. Se si accetta questo principio la fisica moderna (quella della relatività e dei fenomeni quantistici) non appare più così ripugnante. Lo è solo per coloro che immodestamente pretendono di dettare Legge su come l’Universo debba comportarsi.

Al fine di far comprendere agli studenti che è la fisica a non essere un’opinione e non la matematica, sarebbe dunque giusto introdurre la matematica, nei corsi di fisica, non in maniera assiomatica, come si fa spesso, ma giustificando le scelte di volta in volta con opportuni argomenti. E far loro apprezzare la bellezza della matematica nella quale c’è molto più spazio per la creatività e la fantasia. La matematica è un’arte, né piú, né meno della pittura, della musica, della letteratura, etc..

Nel corso dell’incontro ho fatto solo alcuni esempi di come si potrebbe insegnare l’uso degli strumenti matematici nella fisica in modo alternativo: dall’algebra vettoriale alla definizione di forza, di lavoro e di stato, passando per la definizione di derivata e l’uso delle funzioni di variabile continua. Presto lavorerò a una pubblicazione su questi argomenti.