Il meccanismo di Higgs

Se si ha una conoscenza, anche solo elementare, della fisica, è molto probabile che non si sia soddisfatti delle spiegazioni metaforiche del ruolo del bosone di Higgs nel “dare massa alle altre particelle”. In fondo, non spieghiamo la gravità e l’elettromagnetismo usando metafore. Di solito scriviamo equazioni il cui significato è molto chiaro e preciso, e che permettono di calcolare quantità misurabili.

Image for post

In un suo recente post (in inglese), Ethan Siegel ha giustamente sottolineato che la maggior parte della massa dell’Universo deriva dalle interazioni forti all’interno dei nucleoni (protoni e neutroni). In altre parole, la massa m di un protone è, di fatto, il risultato dell’interazione tra i suoi costituenti la cui energia si somma fino a dare mc².

Nel post si sottolinea come il bosone di Higgs sia responsabile soltanto della massa delle particelle fondamentali (e protone e neutrone non lo sono, essendo composte di quark). In ogni caso, il motivo per cui crediamo che il “bosone di Higgs dia massa alle particelle fondamentali” non è così evidente. In passato ho scritto alcuni articoli scientifici [1][2][3] sull’argomento che cerco di riassumere qui di seguito, per dar loro maggiore visibilità ai non addetti ai lavori (specialmente insegnanti). Nel seguito, si assume che il lettore abbia una certa familiarità con la fisica dei campi elettromagnetici (a livello di scuola superiore).

Si consideri, ad esempio, una particella carica a riposo, in un campo elettrico uniforme E. Tale campo si può trovare, ad esempio, in un condensatore a facce piane e parallele. A distanza h da una delle armature, il potenziale è V=Eh.

L’energia della particella si calcola come U’=qV. Tale quantità si può pensare come a una misura dell’intensità dell’interazione tra la particella e il campo. È proporzionale alla costante di accoppiamento q tra la particella e il campo E, ed è una funzione (scalare) delle coordinate (V=Eh). Come regola generale, un’energia potenziale è sempre scritta come U’=cP, c essendo una costante di accoppiamento e P una funzione scalare dei campi e delle coordinate (il potenziale).

L’energia immagazzinata all’interno del volume Sd del condensatore, dove S è l’area delle armature e d la loro distanza, è trasportata dal campo elettrico e vale u=½εE²Sd. Osserviamo che, in generale, l’energia trasportata da un campo è proporzionale alla sua intensità al quadrato (ad esempio, la densità di energia magnetica immagazzinata in un solenoide è w=B²/2μ). In altre parole, l’energia di un campo è sempre nella forma u=𝛾F² , dove F è il campo, e 𝛾 è proporzionale al volume in cui il campo è contenuto e a una costante di autoaccoppiamento (rispettivamente ε o 1/μ, per i campi E e B). Quest’energia si può pensare come a una misura dell’intensità dell’auto-interazione dei campi.

Così, l’energia totale nella regione all’interno del condensatore, diventa U=U’+u=qV+½εE²Sd.

Secondo la relatività ristretta di Einstein, dovremmo includere nell’energia quella a riposo della particella carica, la cui massa è m, in modo che U diventi U=qV+½εE²Sd+mc². Da dove viene quest’ultimo termine? Non è nella forma cP, né nella forma 𝛾F²!

Eliminiamo allora questo termine e supponiamo, invece, che esista un altro campo W’, il cui potenziale è H’, con cui la particella interagisce con una costante di accoppiamento g. Dovremmo perciò scrivere l’energia totale come U=cP+½εE²Sd+gH’+½⍺W’²Sd (Il fattore ½ in quest’ultimo termine è stato introdotto per rendere evidente la somiglianza tra i termini).

Supponiamo anche che, a differenza di E o B, il campo W’ pervada l’intero universo, in modo tale che il suo valore minimo possibile non sia zero, ma W₀, in modo tale che W’=W₀+W. Corrispondentemente H’=H₀+H. Il campo extra aggiunge dunque un’energia al sistema pari a

Image for post

Svolgendo le parentesi troviamo

Image for post

Il primo termine della somma è una costante che dipende dall’accoppiamento tra la particella e il campo H₀. L’accoppiamento sarà diverso da particella a particella. Se mc²=gH₀, l’origine dell’energia a riposo è chiara: è una misura dell’intensità dell’interazione di una particella (supposta senza massa) con il campo di Higgs minimo H₀, presente in ogni punto dell’Universo.

È interessante notare che tutti gli altri termini si possono interpretare in modo tale che, di fatto, rappresentino il comportamento previsto per un campo di Higgs nel modello standard: c’è, tra essi, un’interazione tra i bosoni di Higgs e le particelle di materia, un termine di massa per il campo (la massa del bosone di Higgs) e un autoaccoppiamento del campo di Higgs. Se volete saperne di più, potete leggere uno degli articoli della bibliografia riportata sotto.

Il modello chiarisce anche come le interazioni forti all’interno di un nucleone diano origine a un termine di massa. Il meccanismo è lo stesso: il campo forte (rappresentato, in meccanica quantistica, dai gluoni) interagisce con i quark in un volume molto piccolo, tanto che l’energia d’interazione è βG’=β (G₀+G). Il termine “costante” (tra virgolette perché dipende dalle particelle che interagiscono), βG₀, ci appare come mc², con m pari alla massa del nucleone (un protone o un neutrone).


BIBLIOGRAFIA
¹ G. Organtini, ”Unveiling the Higgs mechanism to students”, Eur. J. Phys. 33 (2012) 1397–1406 (arXiv:1207.2146v2)
² G. Organtini, “An introduction to the Higgs mechanism based on classical physics secondary school curriculum”, PoS EPS-HEP2017 (2017) 563.
³ G. Organtini, “The Higgs mechanism for undergraduate students”, Nuclear and Particle Physics Proceedings 273–275:2572–2574

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.

Come si affronta un esercizio di fisica

Praticamente tutti i libri di esercizi di fisica che ho (gli editori me ne mandano ogni tanto in visione) sono tutti uguali: cambia solo l’insieme degli esercizi. Lo stesso esercizio, in effetti, si può vestire in modo diverso e dunque anche loro non sono poi così diversi: che so, in un esercizio di cinematica a muoversi può essere un treno, una pallina, una tartaruga, un’astronave, etc., ma fondamentalmente l’esercizio è lo stesso. Uno si aspetterebbe di trovarci qualche dritta per trovare la strategia risolutiva, ma non è così. Di solito i capitoli di questi libri si aprono con un richiamo alle formule fondamentali che riguardano il tema di fisica trattato e poi propongono una serie di esercizi, di complessità crescente, seguiti dalla loro soluzione che si presenta sempre in una forma molto chiara e netta, quasi naturale e ovvia. Le espressioni matematiche corrette sono individuate senza neanche discuterle, si manipolano un po’ algebricamente et voilà, la soluzione è servita. A leggerli sembra tutto molto semplice. A nessuno viene il sospetto che la soluzione di un esercizio di fisica richieda molto più tempo di quanto richiesto dalla lettura della sua soluzione. La strada verso la soluzione è quasi sempre impervia; prima di tutto bisogna individuare la strada maestra, perché spesso se ne aprono diverse davanti a nostri occhi. Poi occorre saper tornare indietro, se necessario, quando ci si rende conto di aver preso la strada sbagliata. È necessario fare il punto di tanto in tanto per capire se si sta andando nella giusta direzione e se non si sono commessi errori grossolani. Nella mia testa, un buon libro di esercizi non dovrebbe limitarsi a illustrare la soluzione; dovrebbe invece suggerire strategie, far vedere come e dove ci si può sbagliare; evidenziare i punti nei quali occorre prestare la massima attenzione, etc. Dovrebbe essere, insomma, più il racconto di un viaggio avventuroso che la placida cronaca di una passeggiata nel parco.

In questo post provo a delineare qualche elemento, tra quelli che ripeto, fino alla nausea, quando svolgo gli esercizi per gli studenti alla lavagna. Lo faccio in modo schematico, per brevità e comodità. Forse un giorno avrò anche la forza di preparare qualche risorsa da mettere a disposizione online: una raccolta di esercizi svolti come la intendo io oppure qualche video. Per ora, accontentatevi.

La prima fase: il testo

Il testo di un esercizio è sempre scritto in modo molto oculato. Questo è, in un certo senso, anche un limite degli esercizi perché nega allo studente di fare le sue proprie ipotesi sull’opportunità o meno di fare certe scelte, ma non voglio aggiungere troppa carne al fuoco, perciò analizziamo il caso tipico.

Ogni singola parola del testo ha un significato nell’economia dell’esercizio. Se però s’inizia subito a cercare di delineare la propria strategia risolutiva si rischia di perdere di vista il quadro generale.

Regola n. 1: leggete il testo dell’esercizio come se steste leggendo un articolo di cronaca su un giornale. Ignorate i dettagli. Non vi soffermate sui particolari. Fatevi un’immagine mentale di quanto descritto in termini molto generali.

In questo modo avrete un’idea abbastanza precisa della situazione descritta nell’esercizio.

Regola n. 2: leggete il testo una seconda volta, lentamente. Questa volta soffermatevi su ogni singola espressione del testo e cercate di capire se vi sono informazioni rilevanti (quasi sempre è così).

Per esempio, consideriamo il seguente esercizio (tratto dal libro di J. Walker e opportunamente modificato dal sottoscritto):

Un treno sta percorrendo in salita un pendio inclinato di 3.73° a una velocità di 11,7 km/h, quando l’ultimo vagone si stacca e inizia a procedere per inerzia senza attrito. [seguono le domande]

Le informazioni rilevanti e implicite sono: a) che il protagonista del problema non è il treno, ma l’ultimo vagone; b) che quest’ultimo è assimilabile a un punto materiale perché non se ne forniscono particolari sulla forma; c) che inizialmente si muove alla stessa velocità (in modulo, direzione e verso) del treno cui è attaccato; d) che a un certo punto viene a mancare il vincolo che lo tiene agganciato al treno e dunque si trova in regime di caduta libera (ma non dimentichiamo che la sua velocità iniziale è rivolta verso l’alto). Il testo menziona esplicitamente l’assenza di forze dissipative.

Regola n. 3: mentre leggete la seconda volta il testo, fate uno schema dei sistemi coinvolti nel problema e assegnate a ciascun dato un simbolo algebrico e attribuitegli il valore fornito dal problema. Fatelo in cima alla pagina e non scrivete nient’altro in questo spazio.

La seconda fase: lo schema e i dati

Nel caso dell’esempio dobbiamo disegnare un piano inclinato su cui disegneremo, in modo stilizzato, il vagone (non il treno, che non c’interessa, perché continuerà a muoversi di moto rettilineo uniforme, dunque il suo stato non cambia).

Sottoregola n. 3A: quando si disegna un piano inclinato (in generale quando si deve disegnare qualcosa che abbia la forma di un triangolo), lo si disegna sempre in modo che i due cateti del triangolo che lo rappresenta siano molto diversi l’uno dall’altro.

Questo aiuta nell’identificare gli angoli. Mediamente gli studenti tendono a disegnare il piano inclinato, e lo schema delle forze e delle relative componenti parallela e perpendicolare al piano, così

In questo modo c’è sempre il dubbio circa quale dei due possibili angoli evidenziati nel disegno sia uguale a θ. Disegnando il triangolo così,

invece, si vede subito che l’angolo è quello indicato.

Sottoregola n. 3B: se l’esercizio richiede di individuare un sistema di riferimento, sceglietene uno in cui uno degli assi è parallelo alla velocità iniziale o finale del sistema.

In tal modo si semplificano le equazioni del moto e, nei casi più fortunati, se ne possono eliminare anche due.

Regola n. 3C: quando scrivete il valore di un dato fornito dal problema, trasformatelo immediatamente nelle unità del SI. Magari non serve, ma male non fa e vi può salvare da errori grossolani dovuti a distrazione o fretta.

Nel caso dell’esempio scriveremmo v = 11,7 km/h = 3,25 m/s. Se la nostra calcolatrice è impostata per usare gli angoli in radianti, trasformiamo subito anche questa quantità: 3.73°=0.0651 rad. Qualora uno dei dati forniti dal problema sia un diametro, calcolate e scrivete subito il raggio corrispondente.

La terza fase: la scelta della strategia risolutiva

A questo punto viene la parte più difficile. Individuare la strategia risolutiva. Potete seguire i seguenti consigli.

Regola n. 4: individuate il tema tra quelli possibili cercando di identificare i capitoli del libro in cui si parla di situazioni analoghe.

Nel caso in esame si può pensare che i temi rilevanti siano quelli relativi alle Leggi di Newton, perché si parla del moto di qualcosa soggetto all’azione di una o più forze (la forza peso nell’esempio).

Regola n. 5: scrivete subito le leggi fisiche più importanti e generali sul tema che vi vengono in mente. Evidenziate quelle nelle quali compaiono le grandezze fisiche presenti nel testo o emerse dallo schema che avete disegnato.

In questo caso scriveremmo a=F/m, individuando in F la somma vettoriale della forza peso e della reazione vincolare del piano. Questa seconda forza ci deve venire in mente perché in sua assenza il corpo seguirebbe una traiettoria definita dalla direzione dell’unica forza presente (quella verticale). Questa è una relazione importante perché contiene l’espressione della forza che abbiamo disegnato nello schema. In questo caso non compare la velocità, che però si ricava sapendo che il moto sarà accelerato con accelerazione uniforme, pertanto v=v(0)+at.

Il problema prosegue con due domande:

a) Dopo quanto tempo il vagone si ferma temporaneamente?
b) Quale distanza percorre il vagone prima di fermarsi tempraneamente?

La prima domanda suggerisce che il vagone, a un certo istante, si deve fermare. Pertanto la sua velocità deve diventare nulla. Avendo scritto che v=v(0)+at si capisce che dobbiamo sfruttare questa relazione imponendo che v=0. Basterà individuare correttamente l’espressione di a che si ricava dalla relazione che abbiamo scritto che è a=F/m, essendo F, la componente della forza peso che agisce nella direzione del piano e che, guardando il disegno, è mg·sin(θ). La massa scompare così dalle equazioni, il che segnala che siamo sulla strada giusta perché non la conosciamo. Il risultato è un’equazione del tipo v(0)+g·sin(θ)t = 0 che si può facilmente risolvere in t.

La quarta fase: il calcolo dei valori delle soluzioni

Regola n. 6: sostituite i numeri ai simboli soltanto alla fine, quando sulla destra del segno = compaiono solo quantità il cui valore è noto.

Non trascurate, prima di passare a sostituire i numeri, di fare un controllo dimensionale. Se siete arrivati alla soluzione usando solo i simboli delle grandezze e non il loro valore questo si può fare, altrimenti risulta impossibile.

Regola n. 7: prima di sostituire i numeri nella soluzione controllatene le dimensioni fisiche. Se non sono corrette avete sicuramente sbagliato qualcosa.

Se, come nell’esempio, le dimensioni fisiche sono corrette, possiamo passare alla soluzione numerica. Se avete seguito la Regola 3C non avrete bisogno di indicare le unità di misura di ogni dato: saranno per forza coerenti ed espresse nello stesso sistema di unità di misura. Pertanto, anche il risultato sarà espresso nelle unità che nel SI si usano per esprimere la grandezza fisica in questione.

Regola n. 8: sostituite in numeri ai simboli, senza bisogno di indicare le unità di misura (se avete seguito la Regola 3C). Indicate le unità del risultato secondo quelle che spettano alla grandezza fisica in questione nello stesso sistema di unità.

Nel caso in esame il tempo sarà espresso in s.

Regola n. 9: approssimate il risultato, se necessario, usando un numero di cifre significative coerente con quello con il quale sono forniti i dati del problema

Le velocità, per esempio, sono date con tre cifre, come gli angoli: il risultato si scrive dunque usando tre cifre.

La distanza percorsa dal vagone si può calcolare ricordando l’espressione del moto uniformemente accelerato. In effetti, in questo caso, il vagone si muove con velocità iniziale, ma soggetto a un’accelerazione costante diretta in verso opposto.

Bonus track: qualche altro consiglio

Regola n. 10: quando il problema si presenta in modo da descrivere uno stato iniziale e uno finale, dovrebbe subito venirvi in mente di usare il principio di conservazione dell’energia.

Nel caso della prima domanda questo non era possibile perché il problema menzionava esplicitamente un tempo. In questo caso l’energia non aiuta. Nel caso della seconda domanda però sappiamo che inizialmente il vagone si muove a velocità v ed è a una certa quota. Nello stato finale, invece, è a una quota più elevata, ma la sua velocità è nulla. Quindi possiamo scrivere che l’energia iniziale è interamente cinetica, assegnando alla sua energia potenziale gravitazionale il valore nullo: Emv2. Nello stato finale l’energia è tutta potenziale e E=mgh. Dovendo essere uguali avremo che h=v2/2g. Chiaramente, h è la differenza di quota e quindi è uguale allo spazio percorso lungo il piano inclinato (l’ipotenusa del triangolo) per il seno dell’angolo. Troveremo così la risposta alla domanda.

Sfruttando la conservazione dell’energia si deve sempre risolvere soltanto un’equazione di primo grado molto semplice. Al contrario, nel caso in cui si utilizzasse la legge del moto si deve risolvere (almeno) un’equazione di secondo grado, che può anche essere relativamente complicata e può quindi portare facilmente a errori.

Se dunque potete chiaramente individuare lo stato iniziale e quello finale, non dovrebbe neanche venirvi in mente di usare una soluzione diversa. Questo è vero in qualunque situazione: non solo nel caso della dinamica del punto materiale, ma in generale in tutti i problemi di fisica.

Regola n. 11: Valutate sempre se il risultato numerico ottenuto è ragionevole. Se non lo fosse, ricontrollate i conti.

Nel nostro caso il tempo necessario al vagone per fermarsi prima di scivolare giù dal piano inclinato è di poco più di 5 s. Se avessimo ottenuto 5 ms oppure 510 s ci saremmo dovuti preoccupare perché un tempo troppo piccolo o troppo lungo è in contrasto con la nostra esperienza. Se i dati del problema appaiono ragionevoli, devono esserlo anche le soluzioni.

Post scriptum

Quelle indicate sotto sono le “regole” che abbiamo individuato nel corso delle esercitazioni svolte in classe, aggiunte in un secondo momento a questo post.

Regola n. 12: quando in un esercizio si dice che una qualche azione è svolta lentamente, s’intende che in ogni fase dell’azione descritta il sistema è da considerarsi in equilibrio.

Nel caso di un esercizio in cui siano presenti molee, ad esempio, significa che istante per istante la molla, che viene allungata o compressa, si deve considerare ferma e perciò, se la si lascia andare, parte con velocità iniziale nulla. In un esercizio sulla fisica dei gas (che molti direbbero “di termodinamica”, ma la termodinamica è molto più di questo e si applica a qualsiasi sistema, incluse le molle), significa che la trasformazione cui va incontro il gas è reversibile (cioè, è una successione di stati di equilibrio per cui vale pV=nRT).

Regola n. 13: quando leggete che una superficie è liscia, significa che l’attrito si può trascurare. Viceversa, “superficie ruvida” si traduce con “ricordatevi di includere le forze d’attrito”.

Questa regola è così semplice da non richiedere commenti, direi.

La distribuzione di Fermi-Dirac

Enrico Fermi divenne famoso, nella comunità dei fisici del tempo, per aver pubblicato, nel 1926, un articolo nel quale calcolava la distribuzione in energia delle particelle identiche con spin semintero. Nello stesso anno, ma poco più tardi, anche Paul Dirac arrivò indipendentemente allo stesso risultato e per questo la distribuzione si chiama oggi di Fermi-Dirac.

Gli elettroni, i neutroni e i protoni di cui è fatta la materia che conosciamo, sono particelle con spin semintero, cioè particelle con un momento angolare intrinseco pari alla metà di un numero intero (nella fattispecie pari a 1/2).

Il momento angolare intrinseco (o spin) è spesso descritto, in analogia col momento angolare classico, come una misura della velocità di rotazione di una particella attorno al proprio asse. Ma questa immagine è completamente fuorviante. Non esiste un analogo classico dello spin. Le particelle sono puntiformi e di certo non ruotano attorno ad alcun asse. Molto meglio pensare a questa grandezza come a qualcosa che è possibile misurare per queste particelle, in modo che si possano etichettare con il valore +1/2 o -1/2, che ne determina, insieme ad altre grandezze, lo stato. Le particelle di questo tipo sono collettivamente chiamate “fermioni” e si comportano in modo da rispettare il Principio di Pauli: due fermioni non possono stare nello stesso stato.

Classicamente, lo stato è la condizione nella quale si trova il sistema in esame. Per esempio: lo stato cinematico di una pallina è noto quando ne conosciamo posizione e velocità. Conoscere lo stato di qualcosa permette di prevederne l’evoluzione se si conoscono le interazioni cui va incontro. Sapere posizione e velocità di una pallina ci permette di prevederne posizione e velocità in ogni istante, se conosciamo le forze che agiscono su di essa.

Quantisticamente, lo stato di un elettrone non può essere determinato dalle stesse quantità, perché in meccanica quantistica posizione e velocità sono due grandezze prive di senso. Energia e momento angolare, invece, sono grandezze che caratterizzano perfettamente il modo di essere di un elettrone in un atomo e sono dunque buone variabili di stato. La loro conoscenza ci permette di prevedere il loro stato futuro in seguito a un’interazione.

Anche se in linea di principio la meccanica classica non lo proibisce, è un fatto evidente a tutti che due palline non possono stare nello stesso stato. Se in una posizione c’è una pallina, l’altra può stare in una posizione molto simile, ma non sarà nello stesso identico stato. Allo stesso modo, due elettroni in un atomo non possono condividere lo stesso stato. Per la meccanica quantistica possono occupare il medesimo volume, ma non possono avere la stessa energia.

L’articolo di Fermi permette di prevedere come si distribuisce l’energia degli elettroni in un atomo o in sistemi più complessi come i cristalli. Per capire come funziona immaginiamo di prendere il nucleo di un atomo e di avvicinare un elettrone alla volta a questo nucleo. Il primo elettrone si dispone in modo da minimizzare la sua energia. Un secondo elettrone, per il Principio di Pauli, non può assumere la stessa energia. Di conseguenza si dispone in modo da avere un’energia leggermente più grande. Lo stesso fa il terzo elettrone, la cui energia sarà maggiore di quella del secondo, e così via.

È un po’ quel che succede quando si inserisce una serie di biglie in un vaso lungo e stretto, il cui diametro è appena sufficiente per contenere una pallina. La prima pallina a esservi introdotta assume la minima energia possibile piazzandosi sul fondo del vaso. La seconda, non potendo questa assumere lo stesso stato, si dispone sopra la prima, a una posizione corrispondente a un’altezza maggiore. Una terza pallina si dispone sopra la seconda, e così via.

Se si fa un grafico della probabilità di trovare una pallina a una certa quota si trova quella che si chiama una distribuzione uniforme: la probabilità è la stessa per tutte le palline fino alla quota dell’ultima pallina, dopo di che è nulla.

Un tubo di palline da tennis parzialmente riempito rappresenta un sistema in cui ogni pallina si trova in un diverso stato. La probabilità P(h) di trovare una pallina alla quota h è costante per hhM e zero per h maggiori.

Allo stesso modo la probabilità di trovare un elettrone in uno stato di energia E in un atomo o in un cristallo è costante per le energie minori o uguali a quella assunta dall’elettrone di energia massima e nulla per energie maggiori. La distribuzione di energia appare così: a temperatura T0 nulla, la distribuzione ha forma rettangolare, come quella delle palline sopra.

5 Fermi-Dirac distribution function at different temperatures: T3>... |  Download Scientific Diagram

Al crescere della temperatura però la distribuzione cambia forma e diventa più dolce e smussata in prossimità dell’energia EF detta Energia di Fermi. Questo significa che la probabilità di trovare un elettrone in uno stato di energia molto basso continua a essere pari a 1 o quasi. Man mano che l’energia cresce, la probabilità di trovare un elettrone nel cristallo con quell’energia diminuisce, ma aumenta la probabilità di trovare elettroni con energia maggiore di quella di Fermi. Più è alta la temperatura e maggiore è questa probabilità.

Immaginate ora di prendere il tubo delle palline da tennis che abbiamo visto sopra e di scuoterlo. In sostanza non state facendo altro che fornire energia dall’esterno, che è la stessa cosa che fate quando scaldate un materiale e lo portate a una temperatura maggiore.

Le palline più in alto cominceranno a saltare raggiungendo quote più alte. Lo faranno anche quelle immediatamente sotto, ma queste non potranno saltare oltre quelle che stanno sopra di esse. Quelle più in fondo, invece, non riusciranno proprio a muoversi, a meno che non forniate talmente tanta energia al tubo (lo portiate a una temperatura estremamente alta) da farle saltare tutte.

La distribuzione di probabilità di trovare le palline a certe quote sarà del tutto simile a quella di Fermi.

Conoscere la distribuzione di Fermi è fondamentale nella scienza dei materiali. È grazie alla sua conoscenza che possiamo sapere come funzionano (e di conseguenza, progettare) diodi e transistor, senza i quali l’elettronica come la conosciamo oggi non esisterebbe.

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.

Il campo magnetico di una linea ferroviaria

Con Arturo Martì e Martín Monteiro, dell’Università di Montevideo, abbiamo eseguito un semplice esperimento per studiare il campo magnetico prodotto da una linea ferroviaria, confrontandolo con un semplice modello i cui parametri sono stati stimati utilizzando informazioni reperite in rete. È un interessante esempio di come si possa fare scienza con poche risorse in qualunque situazione, che vi proponiamo di ripetere, se ne avete l’opportunità.

Camminando su un cavalcavia sopra una linea ferroviaria abbiamo registrato le componenti del campo magnetico con il magnetometro interno di uno smartphone, usando phyphox. L’esperimento comporta lo sviluppo di diverse competenze, come la capacità di modellare il campo magnetico prodotto da una linea elettrica, la ricerca di informazioni affidabili e la stima di quantità non facilmente accessibili.

Alcuni sistemi di elettrificazione ferroviaria funzionano con correnti continue (DC) e quindi il campo magnetico prodotto dalle linee aeree (note anche come catenarie) si può misurare e prevedere facilmente. In questo caso abbiamo analizzato il campo magnetico prodotto da una ferrovia a Roma. Specificatamente, abbiamo sfruttato la linea che passa nelle vicinanze di Via del Quadraro, dove si trova la Fondazione Mondo Digitale nei cui laboratori stavamo conducendo una delle nostre Scuole di Fisica con Arduino e Smartphone.

Fig1-esp.png (2048×966)
Figura 1: La misurazione del campo magnetico è stata effettuata da un pedone che camminava su un cavalcavia sopra i binari (foto a sinistra) mostrato nella vista satellitare (a destra). L’asse x punta in direzione delle correnti che scorrono sui binari, opposte a quella attraverso la catenaria (evidenziata in giallo a sinistra). L’asse y è orientato secondo il percorso dello smartphone, e l’asse z punta verticalmente verso l’alto. Dal sito NOAAA abbiamo ottenuto la componente orizzontale del campo magnetico terrestre, il cui modulo è 24,6μT, la declinazione magnetica, δ=3,45º e la componente verticale del campo magnetico terrestre che è di -39,6μT. L’angolo dell’asse y con il nord è stato misurato sulla mappa, θ=61,9º.

Nell’esperimento, un pedone camminava a velocità praticamente costante (~ 1 m/s) su un cavalcavia sopra i binari della ferrovia (Figura 1) e registrava le componenti del campo magnetico con il suo smartphone. Durante le misure non passavano né treni né altri veicoli nelle vicinanze, e lo smartphone era tenuto in orizzontale con lo schermo rivolto verso l’alto.

Il campo magnetico misurato, riportato è la somma dei contributi dei campi magnetici della rotaia destra (RD), della rotaia sinistra (RI), della catenaria (C) e di quello terrestre (T).

Figura 2: le posizioni relative dei binari, della catenaria e dello sperimentatore

Le correnti e le distanze sono riportate nella figura sopra. Secondo Ferrovie dello Stato, la potenza tipica dei motori di un treno è di 2,2 MW e la tensione delle linee è di 3,0 kV (DC), con una corrente di circa I = 0,73 kA. Ovviamente, questo valore può variare secondo il numero dei treni nelle vicinanze e delle loro accelerazioni. Assumiamo che la corrente nella catenaria abbia verso opposto a quella distribuita uniformemente tra le due rotaie.

Tenendo conto delle componenti del campo magnetico terrestre, ricavate dal sito del NOAA, e facendo riferimento alla figura sopra riportata, con la Legge di Biot-Savart, si trova che

dove l’ultimo addendo rappresenta la componente orizzontale del campo magnetico terrestre proiettata sull’asse y dello smartphone, a è la distanza tra i binari, h l’altezza della catenaria e z quella dello smartphone. Per la componente verticale

Non fatevi spaventare dall’apparente complicazione: i conti sono piuttosto facili da fare e richiedono unicamente un po’ di geometria e la conoscenza della Legge di Biot-Savart.

La figura sotto mostra, a sinistra, i risultati sperimentali e, a destra, il grafico del campo magnetico corrispondente al modello sopra descritto. L’accordo tra le misure in campo e il modello è evidente.

Nonostante l’accuratezza dei magnetometri per smartphone non sia delle migliori, la misura può essere abbastanza precisa, anche se richiede alcune precauzioni. In particolare, la corrente che attraversa una linea ferroviaria non è costante. La misura, quindi, si deve compiere in tempi relativamente brevi per evitare di rilevare cambiamenti improvvisi della corrente. Inoltre, la misura si deve fare lontano da oggetti ferromagnetici di dimensioni significative, come vagoni ferroviari o altri veicoli di passaggio.

Tradotto dal post di Martín Monteiro, che riassume un articolo in corso di pubblicazione su “The Physics Teacher“. Nel post originale trovate anche tutte le informazioni per riprodurre le curve.

Il galateo del programmatore

Scrivere software non è un’attività puramente tecnica, così come scrivere un articolo per un giornale non è una mera elencazione di fatti. È anche un esercizio di stile, del tutto simile a quello che si mette in atto quando si scrive un romanzo.

I linguaggi di programmazione, sempre molto rigidi nel rispetto delle regole sintattiche (molto più rigidi di quanto non sia un correttore di bozze), ma lasciano spesso, al programmatore, alcune libertà che, se mal utilizzate, come tutte le libertà, si rivelano deleterie e, quasi sempre, si ritorcono contro l’autore.

Attraverso le scelte “di stile” il programmatore può veicolare messaggi ulteriori rispetto al contenuto dei propri lavori. Scegliendo una forma piuttosto che un’altra, in una certa misura si comunicano informazioni che, spesso, aiutano chi legge (spesso lo stesso autore) a decifrare il contenuto di un programma.

I nomi delle variabili
La scelta dei nomi da assegnare alle variabili riveste grande importanza nella scrittura di un programma. A ogni variabile si deve sempre dare un nome sensato, che ne richiama il significato e l’utilizzo che se ne fa nel programma. Anche il tipo di dato contenuto nelle variabili può essere suggerito dal nome che, comunque, non deve mai essere troppo lungo.

Ad esempio, le variabili intere avranno nomi che iniziano con una lettera compresa tra “i” e “n”. Per variabili ausiliarie e indici si tenderà a usare nomi composti di una sola lettera, mentre, di norma il nome evocherà la quantità che rappresenta. Per esempio x, y e z sono nomi sensati per coordinate di un punto, così come t e T possono rappresentare, rispettivamente, un tempo e una temperatura. Se si usano variabili composte di più parole si può usare la convenzione secondo la quale la prima lettera di ogni parola, esclusa la prima, va scritta in maiuscolo. Per esempio: gasPressure, totalCrossSection, etc.

Il ruolo delle funzioni
Specialmente all’inizio della loro carriera di programmatori, molti tendono a scrivere funzioni che includono la stampa di messaggi relativi al risultato delle operazioni che la funzione deve svolgere. Questo è un errore.

Le funzioni, a meno che non siano state pensate proprio allo scopo di stampare un risultato (nel qual caso, devono occuparsi esclusivamente di questo aspetto), devono sempre limitarsi a calcolare e a restituire il risultato richiesto, che poi sarà stampato a cura del programma che userà la funzione.

La scelta degli operatori
In alcuni casi, i linguaggi di programmazione permettono di usare operatori diversi per giungere allo stesso risultato. Per esempio, in C esiste l’operatore di autoincremento che serve per aggiungere al valore corrente di una variabile una certa quantità. Quello che, anche in C, si potrebbe scrivere come

a = a + 3;

nel C si scrive più propriamente come

a += 3;

Premesso che anche la prima forma è corretta e che il compilatore C la processa senza alcun problema, quest’ultima notazione rende molto più evidente il significato dell’operazione che si sta compiendo, e non si rischia di confondere la notazione con quella equivalente di un’equazione matematica che non ha una soluzione. Se poi, invece di 3, si vuole sommare alla variabile di sinistra il valore intero 1, allora si preferirà scrivere

a++;

invece di

a += 1; 

Anche in questo caso non cambia nulla nella sostanza, ma il registro col quale si comunica si adatta alle circostanze. In fondo, anche quando scrivete un’email scegliete opportunamente la forma secondo che il destinatario sia un conoscente o un’Autorità. Il messaggio può essere lo stesso, ma la forma cambia secondo i casi. Per annunciare la disdetta di un appuntamento, per esempio, potete dire

Ciao. Mi spiace, ma stasera non posso più venire

se state comunicando con un amico, mentre scriverete

Spiace comunicare che, per cause di forza maggiore, non mi sarà possibile essere presente all’incontro previsto per la prossima settimana

se invece dovete disdire un appuntamento di lavoro. Quando si scrive un programma occorre pensare negli stessi termini, cercando di comunicare più di quanto non sia strettamente necessario per una sua corretta esecuzione.

La programmazione strutturata
I programmi strutturati sono quelli composti unicamente di “strutture”: moduli che rappresentano tutti i possibili gruppi di istruzioni che hanno la proprietà di avere un solo punto d’entrata e un solo punto d’uscita. Furono introdotte da Bohm e Jacopini nel 1966. I due matematici identificarono tre tipi di strutture: sequenziale, di selezione e di iterazione.

La struttura sequenziale rappresenta una qualunque sequenza di operazioni eseguite nell’ordine in cui sono scritte. Le strutture di selezione sono quelle in cui si controlla il risultato di un’espressione logica e si esegue l’uno o l’altro gruppo di istruzioni secondo il risultato. Le strutture di iterazione, infine, sono quelle che permettono di ripetere le operazioni più volte.

Un programma strutturato garantisce un controllo maggiore sul flusso delle operazioni, grazie proprio alla presenza di un unico punto d’entrata e un unico punto d’uscita dalle strutture.

Per realizzare un programma strutturato basta seguire poche semplici regole: evitare di usare istruzioni tipo break e scrivere funzioni che hanno un solo return. Va da sé che l’istruzione goto dovrebbe essere bandita da ogni programma degno di tale nome.

I programmi strutturati sono più leggibili, più facili da manutenere e più solidi dal punto di vista della possibilità che includano errori (bug) di programmazione.

Questioni di efficienza
Quando vi si chiede di scrivere il codice necessario per decidere se si sia o meno verificata una determinata condizione, fatevi sempre la domanda: “faccio prima a individuare la situazione secondo cui la condizione è vera o quando questa è falsa?”.

Per verificare, ad esempio, se una stringa sia palindroma, si potrebbe costruire una stringa i cui caratteri siano disposti al contrario e confrontare questa con quella originale; oppure ancora confrontare tutte le coppie di caratteri (str[i], str[N-1-i]), dove N rappresenta la lunghezza della stringa e i va da zero a N/2.

Per verificare, al contrario, che la stringa NON sia palindroma, basta scrivere un codice che esegue i confronti carattere per carattere e abbandona l’iterazione non appena uno di questi confronti dia esito negativo. Basta quindi negare la risposta per fornire la funzione richiesta.

La scelta del costrutto per le iterazioni
Quando si sceglie il costrutto da usare per compiere iterativamente una serie di istruzioni, solitamente si può scegliere tra almeno due alternative: il for e il while. Quest’ultima forma è spesso disponibile nelle varianti while (...) do {...} o nella forma do {...} while (...) (secondo i linguaggi di programmazione). Naturalmente i costrutti sono tutti equivalenti dal punto di vista del risultato che si può ottenere ed è quasi sempre facile trasformare un ciclo in un altro. Ma adottando i criteri sotto riportati si scriverà codice irreprensibile, facile da comprendere e da manutenere.

Il costrutto for si sceglie quando il numero di passi da compiere è noto o si può calcolare immediatamente prima di entrare nel ciclo. Quando invece il numero di passi che saranno compiuti dall’algoritmo non è noto a priori si preferisce usare il while in una delle due forme. Se disponibili entrambe, il costrutto do {...} while (...) si usa per sottolineare che il ciclo sarà percorso almeno una volta.

Per esempio, nell’esempio della stringa palindroma, l’approccio di “forza bruta” consistente nel testare tutte le coppie di caratteri si eseguirebbe attraverso un ciclo for. Se invece optiamo per la soluzione più efficiente non possiamo sapere quante volte percorreremo il ciclo prima di entrarvi, pertanto sceglieremo il costrutto while.

L’International Obfuscated C Code Contest
Quanto sopra permette di scrivere codice facilmente interpretabile, il che ne permette una manutenzione semplice anche a distanza di tempo. Vi qualifica anche come programmatori accurati e attenti. Garantisce che, qualora la vostra libreria di funzioni cresca enormemente, il controllo del codice si possa mantenere senza sforzi.

Se imparerete ad adottare queste regole di certo non ve ne pentirete, a meno che non abbiate intenzione di partecipare a un curioso concorso denominato The International Obfuscated C Code Contest. Potete consultarne le regole sul sito ioccc.org. A proposito: uno dei miei preferiti è https://www.ioccc.org/2018/yang/prog.c.

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.

La seconda Legge di Newton

Del perché è sbagliato scriverla come F=ma

La maggior parte dei libri di testo riporta la seconda legge di Newton come F=ma (le lettere in grassetto rappresentano i vettori). In questo post sostengo che questo non è il modo corretto di scriverla.


La maggior parte degli studenti percepisce la fisica come una disciplina molto simile alla matematica. È colpa dei libri di testo che, infatti, insegnano la fisica nello stesso modo in cui insegnano la matematica: attraverso l’enunciazione di assiomi (le leggi fisiche), seguita da una serie di dimostrazioni di teoremi e manipolazioni matematiche. Le leggi fisiche appaiono come assiomi perché spesso non sono giustificate da alcuna evidenza sperimentale. Per la maggior parte di esse si dice che “si può dimostrare che…” o che “Newton osservò che…” o anche “Faraday scoprì che…”. Raramente c’è un’analisi dettagliata delle prove sperimentali che porta lo studioso a formulare le leggi fisiche e, per chi non è abituato a lavorare secondo il metodo scientifico, tali leggi appaiono tanto arbitrarie quanto ineludibili, come il Teorema di Pitagora.

In effetti, questa maniera d’insegnare la fisica viene da lontano. Lo stesso Newton introduce la seconda legge in un capitolo intitolato “Axiomata sive leges motus” (Assiomi o leggi del moto).

In realtà, le leggi fisiche non sono affatto equazioni, per lo meno per come le intende un matematico. In matematica un’equazione è un’affermazione sulla completa equivalenza tra i due membri. La quantità rappresentata a sinistra del segno uguale è (deve essere) uguale (esattamente uguale) a quella a destra del segno. Di conseguenza, si può manipolare l’equazione spostando pezzi da sinistra a destra e viceversa (il che corrisponde a sommare o sottrarre la stessa quantità su entrambi i lati) o scambiandoli tra il numeratore e il denominatore di una frazione (il che equivale a moltiplicare o dividere entrambi i membri per la stessa quantità), seguendo le ben note “regole” dell’algebra.

In matematica F=ma è completamente equivalente ad a=F/m o a m=F/a (d’ora in poi, senza perdita di generalità, passiamo a una versione unidimensionale della Legge di Newton).

Scritta in questo modo l’equazione dice che l’accelerazione di un corpo (a sinistra del segno uguale) si può calcolare come (dipende da) la forza F applicata divisa per la sua massa m. La forma F=ma, invece, si può leggere come se la forza F dipendesse dalla massa e dall’accelerazione del corpo, oppure, peggio, come se F fosse definita come il prodotto di m e a. Le due forme non sono dunque per niente equivalenti, in fisica. D’altra parte, matematicamente anche m=F/a è corretta, ma nessuno si azzarda a scrivere questa legge in questo modo.

Naturalmente, una volta stabilito che l’accelerazione di un corpo dipende dal rapporto tra queste due grandezze, il valore numerico dell’accelerazione, così come è stato ottenuto in seguito a una misura, dev’essere uguale all’intensità della forza, misurata con un dinamometro, divisa per la massa del corpo ottenuta con una bilancia. Interpretate come relazioni tra misure, F=ma e m=F/a sono entrambe perfettamente coerenti: rappresentano l’equivalenza tra i corrispondenti valori misurati.

Tuttavia, anche in questo caso occorre fare attenzione. Infatti, le misure sono sempre affette da incertezze, quindi l’equivalenza è valida solo in media. I numeri effettivamente ottenuti possono non essere uguali, tuttavia l’equazione resta valida. Quando si risolve un esercizio, gli studenti trovano sempre valori “esatti”. Se devono approssimare il risultato, lo fanno solo perché è spesso impossibile scriverlo con precisione. In realtà, i risultati sono approssimati per definizione. Al contrario, quando si fanno misurazioni nelle attività di laboratorio, gli studenti cercano affannosamente (anche con modi poco leciti) di ottenere esattamente le quantità previste: non perché non capiscano che le misure possono fluttuare, ma perché sono abituati a risolvere esercizi il cui risultato è corretto solo se corrisponde esattamente alla soluzione stampata sul libro.

Per un nuovo modo d’insegnare la meccanica quantistica

episodio 5: il collasso della funzione d’onda

La funzione d’onda fu introdotta nei primi anni dello sviluppo della meccanica quantistica come soluzione dell’equazione di Schrödinger. I fisici hanno faticato un po’ a trovarne il significato, ma alla fine hanno accettato di interpretarla come l’ampiezza di probabilità di trovare una particella a una data coordinata.

I problemi sorgono quando la funzione d’onda collassa: secondo la meccanica quantistica, un sistema può essere in una sovrapposizione di stati, cioè la sua funzione d’onda può essere la somma di più di uno stato fisicamente osservabile. Si scopre che, ogni volta che misuriamo lo stato di un tale sistema, solo uno degli stati della sovrapposizione si manifesta, mentre l’altro scompare. Tale processo si chiama “collasso della funzione d’onda” e dà luogo a problemi di interpretazione non banali (uno dei grattacapi cui ha dato origine è il cosiddetto entanglement quantistico).


In breve, possiamo descrivere il collasso di una funzione d’onda nel modo seguente: si consideri un elettrone in un atomo. Come abbiamo visto nei post precedenti, non ha senso parlare della posizione dell’elettrone nella meccanica quantistica a certe scale, quindi l’elettrone dev’essere descritto come una sorta di nuvola distribuita intorno al nucleo. La maggior parte delle persone è tentata d’interpretare questa nuvola come una nuvola di probabilità, seguendo l’interpretazione originale della funzione d’onda: in sostanza, le persone credono che l’elettrone sia in realtà puntiforme e che SIA in qualche luogo, anche se noi non lo sappiamo ed è la nostra ignoranza a riflettersi nella descrizione di cui sopra. In realtà, quest’interpretazione è sbagliata: un elettrone È in realtà un oggetto distribuito. Se così non fosse, non potremmo spiegare fenomeni come la diffrazione degli elettroni.

Anche quando le persone accettano questo modo di pensare (cioè che un elettrone è un oggetto distribuito), tendono a visualizzare tale oggetto come immaginano una normale nuvola nel cielo: più forse come a una sorta di atmosfera (enormemente estesa) attorno a un pianeta oppure a un oceano che copre il 100% della sua superficie (in questo caso dovremmo immaginare un pianeta davvero minuscolo sommerso da un enorme oceano la cui profondità è centinaia di volte il raggio del pianeta).

Benché questo sia certamente un modo più corretto d’immaginare un elettrone attorno al nucleo, anche in questo caso rischiamo d’immaginarlo nel modo sbagliato. Sappiamo tutti che una nuvola è composta da minuscole gocce d’acqua sospese nell’aria, mentre un oceano è certamente composto da molecole d’acqua, ognuna con la sua individualità. In altre parole, questi oggetti sono discreti e composti di parti.

Gli elettroni no, non sono fatti di parti: l’elettrone È la nuvola; NON è composto da pezzi più piccoli risolvibili come le gocce che formano una nuvola.

Quando cerchiamo di localizzare una particella descritta da una funzione d’onda, accade che di fatto si manifesta in un punto nello spazio, anche se la sua funzione d’onda è distribuita su un ampio intervallo di coordinate. È il caso della diffrazione degli elettroni in un esperimento di doppia fenditura. La funzione d’onda degli elettroni è più ampia della distanza tra le fenditure e interferisce con sé stessa nell’attraversarle. Chiaramente l’elettrone (singolo) passa attraverso entrambe le fenditure allo stesso tempo. D’altra parte, se cerchiamo di rivelare l’elettrone che passa attraverso una sola delle due fenditure (cioè lo costringiamo a interagire con qualcos’altro), possiamo osservare soltanto un elettrone che passa attraverso una sola di esse e non si forma più la figura di diffrazione. Prima d’interagire con lo strumento l’elettrone si trova in una sovrapposizione di stati │e〉=a│D〉+b│S〉, dove │D〉 rappresenta un elettrone che passa attraverso la fessura destra e │S〉 un elettrone che passa attraverso quella sinistra. a e b sono costanti tali che a²+b²=1. Quando il sistema interagisce con un rivelatore posto sulla fessura destra, solo │D〉 sopravvive e la funzione d’onda collassa in un processo che istantaneamente trasforma│e〉 in │D〉.

Un tale processo è visto con sospetto dalla maggior parte delle persone e considerato (probabilmente giustamente) difficile da capire. È interessante osservare che, tuttavia, un decadimento beta, in cui un neutrone scompare istantaneamente per far posto a un protone, un elettrone e un neutrino creati dal vuoto, non turba le menti nello stesso modo. In realtà, entrambi i processi sono piuttosto simili tra loro: qualcosa scompare mentre qualcos’altro appare come risultato di un’interazione. Possiamo pensare al collasso della funzione d’onda come a un processo in cui il campo di elettroni viene distrutto dall’interazione con lo schermo con le fenditure mentre, sul lato opposto, un nuovo campo di elettroni è creato e irradiato da entrambe le fessure o solo dalla fessura destra.

Il collasso ci sembra strano perché la nostra mente tende a interpretare la funzione d’onda proprio come una nuvola: composta di parti. Perché il collasso avvenga, in questo modello, le parti di cui è fatta la nuvola devono correre verso la giusta fenditura e concentrarsi in un punto ricostituendo la natura puntiforme dell’elettrone che ci piace tanto. Evidentemente una tale “corsa” richiede un certo tempo per accadere e questo è in contrasto con le osservazioni secondo le quali il collasso è istantaneo.

Proviamo però a metterci nei panni di qualcuno che non ha mai studiato fisica o che sia vissuto prima che Fizeau misurasse la velocità della luce e immaginiamo di trovarci in una grande stanza senza finestre. Se accendiamo la luce vediamo che la stanza si riempie istantaneamente di luce. Oggi sappiamo che non è così, ma non ci sorprenderebbe più di tanto sapere che la luce appare istantaneamente in ogni punto della stanza nello stesso momento se la sua velocità fosse infinita come si credeva fino a qualche secolo fa. In fondo, un tale modello, sembra persino più ragionevole rispetto a quel che ci racconta la relatività speciale. Immaginando che la luce appaia immediatamente e contemporaneamente in tutti i punti di una stanza, dovremmo provare a pensare a un elettrone come a qualcosa distribuito su un volume che appare istantaneamente in tutti i punti dello spazio nel momento nella sua creazione (produzione). Allo stesso modo, quando si distrugge, un elettrone scompare istantaneamente da ogni parte. Se ci si pensa un po’ ci si può facilmente convincere che non è poi così strano. Il processo è simile a quel che ci s’immaginava facesse la luce quando si era bambini, prima di sapere come si propaga.

Personalmente considero ormai obsoleto il concetto di funzione d’onda e il suo collasso. Preferisco pensare in termini di campi, che non sono né particelle, né onde, ma qualcosa che si estende su volumi (potenzialmente anche molto grandi) e che può manifestarsi istantaneamente e allo stesso tempo (come, d’altra parte, i campi classici erano stati immaginati prima di Maxwell)¹. Così come si possono creare istantaneamente in un grande volume, i campi si possono anche distruggere. L’interazione con qualcosa consiste nella distruzione del campo incidente e nella creazione di un nuovo campo. Il campo emergente può essere distribuito come una figura di diffrazione o concentrato vicino a una delle fenditure, secondo l’interazione, così come, nella fisica classica, la traiettoria di un corpo che cade dipende dalle circostanze: per esempio, se l’oggetto è posto su un piano inclinato scivola seguendo una traiettoria obliqua; se no cade verticalmente.

La MQ non è deterministica: i risultati di un esperimento sono casuali e seguono una distribuzione. Le leggi della fisica possono solo prevedere la forma di queste distribuzioni, non quale dei possibili eventi si realizzerà. Anche questo non è poi così diverso da quanto avviene nella meccanica classica. Se si lancia un dado, con la meccanica classica non sappiamo prevedere esattamente che punteggio si otterrà (in linea di principio si può, ma in pratica è impossibile). L’unica differenza rispetto alla meccanica classica è che nella MQ la previsione del punteggio è impossibile anche solo in linea di principio: questa cosa, a mio modesto avviso, è persino più rassicurante rispetto a quanto previsto dalla meccanica classica. Se questa fosse vera, il destino di tutto l’Universo, comprese le nostre storie, sarebbe già scritto dall’inizio dei tempi.


¹ Va detto che la propagazione del campo avviene secondo quanto previsto dalla relatività e la relatività della simultaneità non è violata da questo.