Enhet 3 / 11

Simulering av fysiske systemer

Gevinster:

  • Evne til å simulere et dynamisk fysisk system med løsere som solve_ivp og verifisere gyldigheten av simuleringen ved å overvåke total energi- eller momentumbevaring
  • Evne til å skille numeriske artefakter fra ekte fysikk ved å velge trinnstørrelsen med en konvergenstest
  • Evne til å teste simuleringsresultatet ved å sammenligne det med kjente analytiske situasjoner og fysiske grensetilstander

Mye av fysikken omhandler tidsvarierende systemer: en oscillerende pendel, en planet i bane, et avkjølende legeme, en forplantende bølge. De fleste av disse systemene er beskrevet av differensialligninger - det vil si ligninger som relaterer endringshastigheten til en mengde (posisjon, temperatur) til selve mengden. Disse ligningene har ofte ikke en analytisk (formeleksakt) løsning; i stedet simulerer vi: å flytte systemet fremover i små tidstrinn og numerisk overvåke dets oppførsel. I denne enheten vil du lære hvordan du bruker kunstig intelligens (AI) til å bygge simuleringskode og – viktigst av alt – hvordan du kan verifisere med bevaringslover om simuleringen nøyaktig gjenspeiler fysikk.

Den grunnleggende ideen om simulering og rollen til AI

En simulering består av denne syklusen: ta den nåværende tilstanden, bruk endringsligningen, gå fremover med en liten Δt, gjenta. AI er veldig rask til å bygge denne sløyfen, velge riktig løser - algoritmen som løser differensialligningen trinn for trinn, og redigere koden. Fysikerens standardverktøy er scipy.integrate.solve_ivp (SciPy-funksjonen som løser initialverdiproblemer). Men før du stoler på simuleringen skapt av AI, er spørsmålet du må stille dette: Bevarer denne simuleringen de fysiske mengdene (energi, momentum, vinkelmomentum) som må bevares?

System

Ligningstype

Valideringskriterier

pendel, fjær

Andre grads ODE

Konstans av total energi

planetens bane

Newtonsk gravitasjons-ODE

Vinkelmomentum + bevaring av energi

Avkjøl/varm

Første grads ODE

Konvergens til likevektstemperatur

radioaktivt forfall

Eksponentiell ODE

Halveringstidskontroll

Monte Carlo (tilfeldig)

statistisk

Konvergens til kjent gjennomsnitt/fordeling

Merk: ODE står for "vanlig differensialligning" - en ligning som involverer en derivert med hensyn til en enkelt variabel (vanligvis tid).

Trinn for trinn: en pålitelig simulering

1. Avklar fysikken og startforholdene. Hva er ligningen til systemet? Hva er startposisjon, hastighet, temperatur? Hva er enhetene? Gi disse eksplisitt til AI.

2. Velg passende løser og trinnstørrelse. For stort tidstrinn gjør simuleringen ustabil (resultatet eksploderer eller fysikken går i stykker); Et for lite trinn bremser unødvendig farten. AI kan foreslå, men kontrollere avgjørelsen.

3. Følg fredningsloven i kode. Beregn og skriv ut total energi (eller momentum) gjennom simuleringen. Hvis den driver en størrelse som bør forbli konstant, er simuleringen upålitelig.

4. Sammenlign med en kjent løsning. For eksempel er perioden for en pendel med liten amplitude kjent med formelen T = 2π√(L/g); Sammenlign perioden gitt av simuleringen med dette.

5. Endre parameter, testatferd. Dempes oscillasjonen når friksjon legges til? Endrer banen seg som forventet når massen øker? Test med fysisk intuisjon.

Tips: Legg til en "energisporing" til hver simulering: beregn den totale energien ved hvert trinn og plott den som et forhold til den opprinnelige energien. I et friksjonsfritt system bør dette forholdet holde seg konstant nær 1. Drift på mer enn 1 % er et tegn på at du må redusere trinnstørrelsen eller endre løseren.

tre minisaker

Tilfelle 1 — Utbrudd av energi. En student simulerte en planetarisk bane med en enkel Euler-metode (den mest primitive trinnmetoden) skrevet av AI. Banen utvidet seg gradvis over tid og planeten "fløy bort". Da studenten overvåket den totale energien, så han at den stadig økte – en kjent feil ved Eulers metode. Han ba AI om en løser som sparer energi bedre (en mer egnet metode med solve_ivp) og banen la seg ned i en stabil ellipse.

Tilfelle 2 — Feil enhet, feil periode. En lærer fant at perioden var 0,2 s i en pendelsimulering, men forventet verdi var 2 s. Da han undersøkte det, skjønte han at AI skrev inn lengden i centimeter og brukte den som en meter i formelen. Med enhetskorreksjon stemte simuleringen med den analytiske verdien av T = 2π√(L/g).

Sak 3 – Monte Carlo-verifisering. En forsker spurte AI om en kode som tilfeldig prøver (Monte Carlo - statistisk simulering med tilfeldige tall) partikler som treffer en detektor. For å verifisere resultatet kjørte han en enkel sak kjent analytisk (for eksempel å estimere π ved forholdet mellom arealet av en sirkel) med samme metode; Når koden predikerte π riktig, økte dens tillit til den faktiske simuleringen. Han observerte også at etter hvert som antall prøver økte, ble resultatet redusert og konvergerte til den virkelige verdien.

Fire kopierbare maler

1) Bevaringsovervåket simulering:

Skriv Python-kode som simulerer følgende fysiske system med solve_ivp: [system, likning, startbetingelser, enheter]. Gjennom simuleringen, beregne den totale energien (og momentum, hvis noen) ved hvert trinn og plott forholdet til dens opprinnelige verdi over tid. Merk at i det friksjonsfrie tilfellet bør dette forholdet forbli konstant ~1.

2) Analytisk sammenligning:

Legg til kode som sammenligner resultatet av følgende simulering med den kjente analytiske løsningen til dette systemet ([formel]). Plott dem begge på samme graf og skriv ut den maksimale forskjellen mellom numerisk og analytisk. Simuleringskode: [her]

3) Trinnstørrelse / stabilitetstest:

Skriv kode som kjører følgende simulering med forskjellige tidstrinn (f.eks. dt = 0,1, 0,01, 0,001) og viser hvordan resultatene endres. Spesifiser etter hvilken trinnstørrelse resultatet stabiliserer (konvergerer). Kode: [her]

4) Testing av fysisk grensetilstand:

Foreslå 3 fysiske grensetilstandstester for følgende simulering: (f.eks. energi skal spares når friksjonen er null, stoppe raskt når friksjonen er stor, hvordan perioden bør endres når massen dobles). Skriv det forventede resultatet av hver test i én setning. Kode: [her]

Svak forespørsel / Sterk forespørsel

Svak: "Skriv en pendelsimulering."
Resultat: kode uten enheter, ingen validering, ingen bevaringssjekker; Det er uklart om det gjenspeiler fysikk eller ikke.
Sterk: "Skriv en solve_ivp-kode som simulerer en enkel pendel med lengde L = 1 m, startvinkel 10°, med g = 9,81 m/s² i 10 sekunder. Overvåk den totale energien ved hvert trinn og plott forholdet til starten. Sammenlign den målte perioden med formelen med liten amplitude T = 2πg) og skriv ut forskjellen (L/."
Resultat: En pålitelig simulering med enheter, bevaringsovervåking og sammenligning med analytisk verdi.

Vanlige feil

  • Følger ikke bevaringsloven. Hvis energi eller momentum driver, er simuleringen feil; Å stole på resultatet uten å se dette er den vanligste feilen.
  • Valg av trinnstørrelse vilkårlig. For stort skritt skaper ubesluttsomhet, for lite skritt skaper unødvendige kostnader; Konvergenstesting er viktig.
  • Ikke gjør analytiske sammenligninger. Uten å sammenligne det med et kjent spesialtilfelle (liten amplitude, friksjonsfri tilstand), forblir simuleringen uten tilsyn.
  • Tar feil av en numerisk feil for fysikk. Atferd som orbital ekspansjon er ofte en feil ved metoden, ikke ekte fysikk.
  • Fastsettelse av antall prøver i tilfeldig simulering. Det er misvisende å øke antall prøver i Monte Carlo og stole på et enkelt resultat uten å se konvergens.
Forsiktig: Bare fordi en simulering produserer en "fin graf", betyr det ikke at den er riktig. Det visuelle er overbevisende, men villedende. Før du stoler på simuleringen, sørg for å følge en fredningslov og sammenligne den med en kjent situasjon. En ubekreftet simulering er ikke fysisk bevis.

Oppsummert

Simulering er en kraftig måte å forstå dynamiske fysiske systemer som mangler analytiske løsninger og raskt bygger AI-simuleringskode. Men verdien av simuleringen avhenger av om den reflekterer fysikken nøyaktig. Måten å sikre dette på er å følge lover om bevaring, velge passende trinnstørrelse ved konvergenstesting, sammenligne resultatet med kjente analytiske tilfeller og teste fysiske grensetilfeller. I neste enhet vil vi flytte fokus fra genererte data til analyse av faktiske eksperimentelle data.

Søknadsoppgave

Velg et enkelt dynamisk system (pendel, fritt fall + luftmotstand eller kjøling). Med mal 1 kan du skrive ut og kjøre en simuleringskode som inkluderer en bevarings- eller balansesjekk i AI. Sjekk om den overvåkede mengden (energi eller temperatur) oppfører seg som forventet. Endre deretter en parameter (friksjon, masse, trinnstørrelse) og se om endringen i atferd stemmer overens med din fysiske intuisjon. Skriv det ned i 5-6 setninger.

sjekkliste

  • [ ] Jeg klargjorde likningen, startbetingelsene og enhetene til systemet.
  • [ ] Jeg fulgte en bevaringslov (energi/momentum) i simuleringen.
  • [ ] Jeg bekreftet trinnstørrelsen med en konvergenstest.
  • [ ] Jeg sammenlignet resultatet med en kjent analytisk situasjon.
  • [ ] Jeg har utført minst én fysisk grensetilstandstest.
  • [ ] Jeg skilte numeriske defekter fra ekte fysikk.