Föreläsning 5
Föreläsning 5
Föreläsning 5
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Lektion 5<br />
Ordinära differentialekvationer<br />
En ordinär differentialekvation av första ordningen kan skrivas i<br />
formen , där är någon given funktion. Lösningen till<br />
ekvationen är funktionen , som kan bestämmas entydigt, om man<br />
har ett randvillkor, t.ex. .<br />
En ekvation av den här typen kan lösas med Eulers metod:<br />
Man startar alltså i med (randvillkoret). Sedan<br />
beräknar man approximativa värden på i punkterna ,<br />
osv. Då steglängden blir det här en allt<br />
noggrannare approximation av .<br />
Exempelprogram. Löser x(t) med Eulers metod, då<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Differentialekvationer av högre ordning<br />
Differentialekvationer av högre ordning är viktiga i fysiken, t.ex.<br />
Newtons lagar kan skrivas som andra ordningens differentialekvationer.<br />
Differentialekvationer av högre ordning kan skrivas om som ett<br />
13<br />
system av kopplade första ordningens ekvationer.<br />
Exempel: Rörelse i en dimension<br />
Programmering för fysiker. Lektion 5.<br />
En partikel med massan m som påverkas av en kraft F accelererar med<br />
accelerationen a, enligt Newtons andra lag . Accelerationen<br />
är positionens andra derivata:<br />
Det här kan skrivas om som två första ordningens ekvationer:<br />
, ,<br />
där v är partikelns hastighet.<br />
Ekvationerna skrivs alltså som derivatan av en funktion uttryckt med<br />
funktionerna utan derivator. Ett ekvationssystem av den här typen kan<br />
lösas med Eulers metod, se nedan.<br />
Kopplade differentialekvationer<br />
Betrakta ett system av kopplade första ordningens differentialekvationer:<br />
, , osv,<br />
där , , ... är givna funktioner, och kan bero av och alla .<br />
Det här systemet kan lösas med Eulers metod på samma sätt som en<br />
ensam ekvation:<br />
I ett program beräknar man alltså derivatan för alla och adderar<br />
sedan till varje dess derivata gånger .<br />
Ekvationerna för ett tidssteg för rörelseekvationen i exemplet ovan<br />
blir:<br />
där kan bero av t, x och v, beroende på problemet som studeras.<br />
En pendel<br />
Differentialekvationen för pendelns rörelse är<br />
.<br />
För att kunna lösa ekvationen analytiskt, antar man att vinkeln är<br />
liten, och att . Lösningen blir då , där
. Exempelprogrammet nedan löser numeriskt, utan<br />
approximationen att vinkeln är liten.<br />
Exempelprogram. En pendel.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Differentialekvationen skrivs om till två kopplade första ordningens<br />
ekvationer. Variablerna lagras i arrayen , så att vinkeln finns i <br />
och vinkelhastigheten i Ekvationerna har nu formen<br />
, .<br />
Derivatorna beräknas i funktionen Tidssteget utförs<br />
i funktionen . Variablerna är placerade i en array på det här sättet<br />
för att programmet ska vara mer allmänt. Om man vill lösa ett annat<br />
problem måste man skriva in ekvationerna för det nya problemet i<br />
funktionen och möjligen ändra längden på arrayen i<br />
, men funktionen kan användas som den är. En array är också<br />
praktisk om man har många likadana variabler, t.ex. ett system av<br />
kopplade pendlar. I det här exemplet kunde man istället ha använt två<br />
skilda variabler för vinkeln och dess derivata, men då hade också<br />
funktionen för tidssteget blivit specifik för just det här problemet.<br />
För varje tidssteg skriver programmet ut t, och . Värdena skrivs<br />
till skärmen, men kan fås i en fil om man kör programmet såhär:<br />
<br />
Resultatet kan plottas med gnuplot:<br />
<br />
Fler exempel finns på kurshemsidan.<br />
14<br />
Programmering för fysiker. Lektion 5.<br />
Mer information om lösning av differentialekvationer finns i<br />
W. H. Press et al.: Numerical Recipes in C - The art of scientific com-<br />
puting, 2:nd edition (Cambridge university press 1992)<br />
Gnu Scientific Library (GSL) innehåller funktioner för lösning av<br />
ODE:r: http://www.gnu.org/software/gsl/