RealityModels

Molti mondi interagenti

Simulazione interattiva del modello di Hall, Deckert e Wiseman: N mondi classici, ognuno con la particella in una posizione definita, si respingono e le sole equazioni di Newton riproducono indeterminazione, energia di punto zero, allargamento del pacchetto, interferenza e il collasso di una misura. Non ha dipendenze e funziona offline.

Si apre con un doppio clic su simulations/quantum-mechanics/many-interacting-worlds/index.html (o da un qualsiasi server statico); niente da installare. Teoria e riferimenti: many-interacting-worlds-theory.it.md; versione inglese: many-interacting-worlds-simulation-guide.en.md.

Idea

Ogni mondo n è una particella classica con posizione x[n] e velocità v[n]. I mondi vicini si respingono con una forza che cresce al chiudersi della distanza (il potenziale quantistico discreto, unità ħ = m = 1). Con N = 1 la repulsione è zero e resta la meccanica classica; il comportamento quantistico è una proprietà dell'insieme. Le formule e i risultati esatti sono nel documento di teoria.

Scenari

ScenarioCosa mostra
Oscillatore: stato fondamentaleLa repulsione bilancia la trappola ω: configurazione ferma con energia (N−1)·ħω/2 e Δx·Δp = (1−1/N)·ħ/2, entrambe mostrate accanto ai valori misurati. Con N = 1 entrambe si annullano.
Particella libera: allargamentoTrappola spenta da t = 0. Il ventaglio di mondi si allarga con Δx(t) = Δx(0)·√(1+ω²t²); la lettura confronta il rapporto misurato con la legge.
Due pacchetti: interferenzaDue pacchetti rilassati lanciati uno contro l'altro a ±v₀ senza trappola. I mondi non si incrociano mai: la repulsione li incanala in bande di densità con spaziatura circa πħ/p, le frange di interferenza.
Misura: selezione di un binLo stato fondamentale più una misura di posizione con risoluzione δ. Un mondo estratto in modo uniforme (regola di Born a pesi uguali) fissa l'esito; i mondi entro δ restano un insieme interagente, gli altri bin si disaccoppiano, sbiadiscono ed evolvono per conto loro. Il collasso è selezione, mai fusione.

Parametri e query string

ParametroQueryIntervalloDefault
Scenarioscground, free, collision, measureground
Mondi NN1–8020
Frequenza della trappola ωw0.2–31
Velocità dei pacchetti v₀ (solo interferenza)v00.5–63
Risoluzione della misura δ (solo misura)d0.1–20.4
Lingualangit, enbrowser

Esempio: index.html?sc=collision&N=40&w=0.5&v0=3.

Lingua e tema (Sistema, Chiaro, Scuro) si impostano con il pulsante a ingranaggio in alto a destra. Restano salvati nel browser e valgono anche per le altre simulazioni.

Letture

Dopo una misura il bin tenuto è strizzato a una larghezza dell'ordine di δ con una grande energia di repulsione, quindi Δx prima collassa e poi ricresce in fretta: è il calcio di impulso che una misura netta di posizione deve dare.

Legenda del grafico

Struttura

simulations/quantum-mechanics/many-interacting-worlds/
├── index.html      pagina e pannello di controllo
├── css/style.css   token del tema (chiaro, scuro, sistema) e layout responsive
├── js/i18n.js      dizionari it/en e funzioni di traduzione
├── js/model.js     forze, stato fondamentale, integratore, misura (usabile anche da Node)
├── js/graph.js     renderer Canvas: linee di mondo, istogramma, tooltip
└── js/app.js       controlli, scenari, query string, animazione

Il pulsante delle impostazioni (lingua e tema) è condiviso da tutte le simulazioni e vive in simulations/shared/ (js/settings.js, css/settings.css).

Semplificazioni

Verifica

cd simulations/quantum-mechanics/many-interacting-worlds && node -e 'const M=require("./js/model.js"); const I=require("./js/i18n.js").I18n; const x=M.groundState(11,1); const s=M.statistics(M.createState(x,null,1)); let sq=0; x.forEach(function(p){sq+=p*p}); console.log(sq.toFixed(6), s.energy.toFixed(6), s.product.toFixed(6), I.check().length)'

Atteso: 5.000000 5.000000 0.454545 0 (regola di somma Σx² = (N−1)/(2ω), energia (N−1)·ω/2, prodotto (1−1/N)/2 per N = 11, e nessuna chiave mancante nei dizionari).

cd simulations/quantum-mechanics/many-interacting-worlds && node -e 'const M=require("./js/model.js"); const st=M.createState(M.groundState(21,1),null,0); const d0=M.statistics(st).dx; while(st.t<1-1e-9) M.step(st,0.05,1e6); console.log((M.statistics(st).dx/d0).toFixed(6))'

Atteso: 1.414214 (allargamento libero √(1+t²) = √2 a t = 1).