Numerisk simulering
Många förlopp i fysiken saknar en enkel formel som ger svaret direkt. Ett snett kast med luftmotstånd är ett exempel: luftmotståndet växer ungefär med farten i kvadrat, och farten ändras hela tiden, så det finns ingen sluten formel för hela banan. Numerisk simulering löser detta genom att dela upp tiden i många korta steg och räkna ut läge och hastighet steg för steg istället för i ett enda uttryck.
Eulers metod är den enklaste varianten av detta. I varje litet tidssteg Δt räknar du först ut accelerationen från kraften som verkar just då och uppdaterar hastigheten till v_ny = v + a·Δt. I grundvarianten flyttas läget med hastigheten från stegets början, x_ny = x + v·Δt. I varianten Euler–Cromer används i stället den nya hastigheten: x_ny = x + v_ny·Δt. Du upprepar detta tusentals eller miljontals gånger i en dator, och resultatet blir en bild av hela förloppet, punkt för punkt. För en svängande pendel eller fjäder håller Euler–Cromer energin ungefär konstant, medan grundvarianten låter energin växa lite för varje steg så att utslaget sakta ökar.
Valet av tidssteg avgör både noggrannhet och beräkningstid. Ett för stort Δt gör att accelerationen hinner ändras märkbart inom steget, vilket gör simuleringen opålitlig eller till och med instabil. Ett för litet Δt är onödigt tungt att räkna. Den praktiska metoden är att halvera tidssteget och köra om simuleringen: ändras resultatet bara lite är det gamla tidssteget tillräckligt bra, ändras det mycket behöver du ett ännu mindre steg.
En simulering är aldrig bättre än modellen den bygger på. Om luftmotståndet i verkligheten beror på farten i kvadrat men du räknar med att det är proportionellt mot farten, ger ett litet tidssteg bara ett exakt svar på en fel fråga. Jämför därför alltid simuleringen med en analytisk lösning där en sådan finns, till exempel fritt fall utan luftmotstånd, eller med experimentella mätningar, för att veta hur mycket du kan lita på resultatet.
Formler
v_ny = v + a·Δt
Den nya hastigheten v_ny fås genom att lägga accelerationen a (m/s²), beräknad från a = F/m med den resulterande kraften F (N) och massan m (kg), gånger tidssteget Δt (s) till den gamla hastigheten v (m/s).
x_ny = x + v_ny·Δt
Euler–Cromer: det nya läget x_ny fås genom att lägga den nyss uppdaterade hastigheten v_ny (m/s) gånger tidssteget Δt (s) till det gamla läget x (m). I grundvarianten av Euler används i stället hastigheten v från stegets början.
Det här lär du dig
- Förklara varför numerisk simulering behövs när ingen analytisk formel finns
- Tillämpa Eulers metod för att simulera kast med luftmotstånd eller en svängning
- Välja ett tidssteg som balanserar noggrannhet mot beräkningstid, och testa konvergens
- Avgöra om ett avvikande resultat beror på tidssteget eller på den underliggande modellen
Begrepp att kunna
- Eulers metod
- En numerisk metod som uppdaterar hastighet och läge i korta tidssteg utifrån den aktuella accelerationen, istället för att lösa en formel i ett steg. I grundvarianten flyttas läget med hastigheten från stegets början, i varianten Euler–Cromer med den nya hastigheten.
- tidssteg (Δt)
- Längden på varje litet tidsintervall i simuleringen. Ett mindre tidssteg ger högre noggrannhet men kräver fler beräkningar.
- konvergens
- Att simuleringens resultat slutar förändras märkbart när tidssteget görs mindre, vilket visar att steget är tillräckligt litet för ändamålet.
- modellbegränsning
- Det faktum att en simulering bygger på en förenklad beskrivning av krafterna, till exempel luftmotstånd. Ett litet tidssteg botar inte ett fel i den underliggande modellen.
Vanliga svårigheter
Väljer ett tidssteg som är för stort
Med ett stort Δt hinner accelerationen ändras mycket inom ett enda steg, särskilt när en kraft som luftmotstånd eller en fjäderkraft varierar snabbt. Resultatet kan avvika kraftigt från det verkliga förloppet eller till och med svänga iväg orealistiskt. Halvera tidssteget och jämför för att se om resultatet stabiliseras.
Tror att en simulering är exakt bara för att datorn räknar exakt
Datorn utför själva uträkningarna korrekt, men Eulers metod är en approximation och modellen för krafterna är en förenkling av verkligheten. Ett resultat kan se prydligt ut på skärmen och ändå vara fel, om till exempel luftmotståndsformeln eller en materialkonstant inte stämmer med verkligheten.
Använder grundvarianten av Euler på en svängning
Om du räknar x_ny = x + v·Δt med den hastighet som gällde före steget, som i grundvarianten av Eulers metod, växer den totala energin lite för varje steg i en simulering av en svängning, och utslaget ökar sakta. Med Euler–Cromer, där hastigheten uppdateras först och den nya hastigheten används för läget, håller sig energin nära konstant även över lång tid.
I verkligheten
En rymdbyrå simulerar en rakets bana under uppskjutning, där raketens massa minskar när bränslet förbränns och luften blir allt tunnare när raketen stiger
Eftersom massan, farten och luftmotståndet ändras samtidigt på ett sätt som inte går att lösa med en enda formel, delas banan upp i tusentals korta tidssteg där massan och varje kraft räknas om för varje steg.
En bilsäkerhetsingenjör simulerar hur en krockkudde blåses upp och bromsar en docka vid en kollision
Hela händelsen pågår bara under bråkdelar av en sekund, så simuleringen måste använda extremt korta tidssteg för att fånga hur krafterna på dockan förändras snabbt medan krockkudden fylls och trycks ihop.
Tips
- Halvera tidssteget och jämför resultaten. Slutar de ändras märkbart har du hittat ett tidssteg som räcker för ditt problem.
- Plotta läge och hastighet mot tiden för att snabbt upptäcka om något ser orealistiskt ut, till exempel en hastighet som växer utan gräns.
- Testa din simulering mot ett fall där en analytisk formel finns, till exempel fritt fall utan luftmotstånd, för att se hur stort fel Eulers metod ger just för ditt tidssteg.
Testa dig själv
1. Du simulerar ett fall från vila med luftmotstånd. Med Δt = 1 s får du hastigheten 36 m/s efter 5 s. Med Δt = 0,1 s får du 34 m/s. Vad bör du göra?
De två resultaten skiljer sig tydligt, vilket visar att 1 s är ett för stort tidssteg för att ge ett pålitligt svar. Du bör pröva ett ännu mindre tidssteg, till exempel 0,01 s, och se om resultatet då slutar ändras märkbart. Om det stabiliseras nära 34 m/s kan du lita på det värdet, och det är rimligt eftersom det ligger under 9,82 · 5 ≈ 49 m/s, farten efter 5 s utan luftmotstånd.
2. Varför håller Euler–Cromer, där läget flyttas med den nya hastigheten, energin bättre vid en svängning än grundvarianten av Euler, där läget flyttas med den gamla hastigheten?
Genom att använda den redan uppdaterade hastigheten för att flytta läget kompenserar metoden delvis för att accelerationen ändras under steget, vilket gör att rörelsen inte systematiskt vinner eller tappar energi över många tidssteg. Används istället den gamla hastigheten byggs ett litet fel på i samma riktning varje steg, och energin växer sakta.
3. Vad händer om din modell för luftmotstånd är fel, även om du använder ett extremt litet tidssteg?
Ett mindre tidssteg gör bara simuleringen av den modell du faktiskt har mer exakt, det gör inte modellen mer korrekt. Om du antar att luftmotståndet är proportionellt mot farten när det i verkligheten beror på farten i kvadrat, får du ett mycket exakt svar på en fråga som inte stämmer med verkligheten.
Ur kursplanen
- Fysik – fördjupning · Modellering och simulering
Undersökande arbete med datorbaserad numerisk simulering. Avgränsning och studier av problem med hjälp av fysikaliska resonemang och matematisk modellering.
Källa: Skolverket, centralt innehåll.
Hänger ihop med
Fler ämnen: Fysik – fördjupning