GDV.nb Differentiaalvergelijkingen Andr Heck 00 AMSTEL Instituut, Universiteit van Amsterdam Differentaalvergelijkingen beschrijven continue veranderende processen. In dergelijke vergelijkingen komen afgeleides voor. Twee voorbeelden uit resp. "Simuleren en Moduleren" en "Klassieke Natuurkunde: Golven en Trillingen": Í Logistische groei van een populatie: de verandering van de populatie wordt beschreven door een kwadratische uitdrukking in de populatie. De differentiaalvergelijking is: P t = K - P t Pmax þþþþþþþþþþþþþ P t Í Harmonische trilling: de uitwijking x(t) van een harmonische trilling wordt beschreven door de differentiaalvergelijking x t + w x t = 0 Mathematica biedt mogelijkheden om dergelijke vergelijkingen op te lossen en de probleemstelling plus oplossingen grafisch weer te geven. Uit de cursus "Simuleren en Moduleren", notebook "Population Dynamics" lenen we de volgende code: In[]:= << "Graphics PlotField "; Clear K, f, P, Pmax ; Pmax = ; K = ; P f t_, P_ := K - þþþþþþþþþþþþ Pmax P; PlotVectorField, f t, P, t, 0, 4, P, 0,, Axes True, AxesLabel "t", "P" ; P.5 3 4 t
GDV.nb In[7]:= solution = Table P t DSolve P t == K - þþþþþþþþþþþþ P t, P 0 ç a, P t, t, a,.,.7,. ; Pmax Plot Evaluate P t. Flatten solution,, t, 0, 4 ; Solve::ifun : Inverse functions are being used by Solve, so some solutions may not be found. Solve::ifun : Inverse functions are being used by Solve, so some solutions may not be found. Solve::ifun : Inverse functions are being used by Solve, so some solutions may not be found. General::stop : Further output of Solve::ifun will be suppressed during this calculation..5.5 0.75 3 4 Wellicht imponeert bovenstaande Mathematica code je dusdanig dat je je afvraagt "Moet ik dit allemaal kennen en kunnen?" Welnu, doel van deze les is om vertrouwd te raken met het gebruik van Mathematica bij differentiaalvergelijkingen, zodat bovenstaande code begrijpelijk wordt. De wiskundige theorie van differentiaalvergelijkingen komt uitgebreid in "Wiskundige Methoden en Technieken: Calculus " aan bod. Werk dit Mathematica notebook aandachtig door en maak de oefeningen. Succes! Å Telkens opnieuw beginnen met In[9]:= Clear "ë" Dit commando maakt toegewezen waarden en definities van alle gebruikte symbolem die alleen uit kleine letters bestaan ongedaan. Vandaar dat je symbolen met hoofdletters nog apart moet doen. In ons geval doen we: In[0]:= Clear K, P, Pmax ; Å Een voorbeeld: afkoelingswet van Newton We beginnen met een eenvoudiger voorbeeld, afkomstig uit "Calculus ": de afkoelingswet van Newton. Deze wet zegt dat de snelheid waarmee de temperatuur van een voorwerp verandert evenredig is met het temperatuursverschil tussen voorwerp en omgeving. De temperatuur T(t) van het voorwerp op tijdstip t voldoet dus aan een vergelijking van de vorm
GDV.nb 3 T t = -c T t - A De functie T(t) is onbekend, maar weten wel het verband tussen afgeleide en de functie. De "differentiaalvergelijking oplossen" wil zeggen "meer te weten komen over de onbekende functie". Meestal betekent dit dat je een expliciete formule bepaalt. In Mathematica voer je deze vergelijking in als In[]:= T t ç -c * T t - A Out[]= T t == -c -A + T t Handiger is het om de vergelijking meteen een naam te geven: In[]:= vgl = T t ç -c * T t - A Out[]= T t == -c -A + T t Je kunt de vergelijking oplossen met DSolve. Dit kan op twee manieren: Oplossingsmethode : de formule voor T[t] In[3]:= opl = DSolve vgl, T t, t Out[3]= T t A + È -c t C Mathematica schrijft de oplossing in de vorm van substitutieregels in een lijst. In dit geval is er maar n oplossing en die kiezen we uit de lijst: In[4]:= opl = First opl Out[4]= T t A + È -c t C Overal waar T[t] staat kun je dit vervangen door de formule. Bijvoorbeeld: In[5]:= vgl. opl Out[5]= T t == -c È -c t C Je ziet dat de afgeleide niet wordt vervangen. Verklaring: hoewel Mathematica een formule voor T[t] heeft, kent Mathematica T nog niet als functie in t. We kunnen wel zo'n functie maken m.b.v. de substitutieregel: In[6]:= T t_ = T t. opl; In[7]:= T 3 Out[7]= A + È -3 c C Sneller gaat dit met de tweede oplossingsmethode.
GDV.nb 4 Oplossingmethode : de functie T In[8]:= opl = DSolve vgl, T, t Out[8]= T Function t, A + È -c t C In[9]:= opl = First opl Out[9]= T Function t, A + È -c t C Het verschil zit in het tweede argument van DSolve: T of T[t]. Ook nu schrift Mathematica de oplossing in de vorm van substitutieregels in een lijst. Verschil is dat de substitutieregel een functie beschrijft. We kunnen dus als volgt verder gaan: Controle van de correctheid van de oplossing: In[0]:= vgl. opl Out[0]= True De eerste (en enige) oplossing als functie T: In[]:= T = T. opl; In[]:= T 3 Out[]= A + È -3 c C We geven de voorkeur an de laatste methode van oplossen omdat deze zich richt op functies, daardoor wat gemakkelijk in gebruik is en tevens wat gemakkelijker te onthouden is: Tussen de rechte haken na DSolve vermeld je dus achtereenvolgens: ) de differentiaalvergelijking die je wilt oplossen. ) de naam van de onafhankelijke functie. 3) de naam van de onafhankelijke variabele. Gebruik van beginwaarden In de oplossing van de differentiaalvergelijking is een constante C[] tevoorschijn gekomen. Er is dus eigenlijk sprake van een familie van oplossingen. Als je meer over de functie meedeelt kan C[] vast komen te liggen. Een veel voorkomende mededeling is een randvoorwaarde zoals de functiewaarde op een begin-tijdstip, een afgeleide op een bepaald tijdstip, e.d. Een beginvoorwaarde kun je meteen opgeven in het DSolve commando In[3]:= opl = DSolve vgl, T 0 == a, T, t ; T = T. First opl ; In[5]:= T t Out[5]= È -c t a - A + A È c t We kunnen dit resultaat vereenvoudigen:
GDV.nb 5 In[6]:= FullSimplify % Out[6]= A + a - A È -c t We bekijken een speciaal geval: A = 0, c = ln(). In[7]:= A = 0; c = Log ; vgl Out[9]= T t == -Log -0 + T t Tekenen van het richtingsveld We tekenen het richtingsveld bij deze differentiaalvergelijking: m.a.w., bij het punt (t,t) hoort de vector (, T ), waarbij T geschreven wordt als functie in T. Hiervoor laden we eerst een pakket dat de procedure PlotVectorField bevat: In[30]:= << Graphics PlotField ; In[3]:= PlotVectorField, -Log T - 0, t, -0, 0, T, 0, 30, Axes True, AxesLabel "t", "T" ; 30 T 5 0 5-0 -5 5 0 t We geven deze grafiek een naam: In[3]:= richtingsveld = %; We losssen de differentiaalvergelijking op voor de beginwaarde T(0)=6 In[33]:= opl = DSolve vgl, T 0 == 6, T, t ; T = T. First opl ; We tekenen de grafiek van de oplossing
GDV.nb 6 In[35]:= Plot T t, t, 0, 0 ; 6 5 4 3 En samen met het richtingsveld in n figuur: 4 6 8 0 In[36]:= grafiek = %; Show grafiek, richtingsveld ; 30 5 0 5-0 -5 5 0 Oefeningen. (i) Teken het richtingsveld bij de differentiaalvergelijk y = y. (ii) Los de vergelijking op met Mathematica. (iii) Kies een beginwaarde y(0) en teken hiervoor de oplossingskromme in het richtingsveld.. (i) Los het beginwaardeprobleem y''(x) + 4y(x) = 0, y(0) =, y'(0) = op en teken de grafiek van de oplossing. (ii) Laat zien dat y(x) = cos x - p 4 een andere schrijfwijze voor de oplossing is. 3. Los de differentiaalvergelijking y t + y t + y t = 0 met beginwaarden y 0 = 0, y 0 = - þþþþþ op en teken de 0 grafiek van de oplossing. Å Stelsels van differentiaalvergelijkingen We bekijken een bekend stelsel van differentiaalvergelijkingen en voeren het als volgt in Mathematica in:
GDV.nb 7 In[38]:= Clear "ë" ; Clear T, T, A ; vgl = x t ç v t, v t ç -x t Out[40]= x t == v t, v t == -x t We nemen de volgende beginwaarden: In[4]:= beginwaarden = x 0 ç, v 0 ç 0 Out[4]= x 0 ==, v 0 == 0 Het beginwaardenprobleem krijg je door de differentiaalvergelijking en de beginwaarden samen te nemen: In[4]:= bwp = Join vgl, beginwaarden Out[4]= x t == v t, v t == -x t, x 0 ==, v 0 == 0 De functies geven we een naam en we lossen het stelsel met DSolve op: In[43]:= fcns = x, v ; opl = DSolve bwp, fcns, t Out[44]= x Function t, Cos t, v Function t, -Sin t We schrijven de functies van de enige oplossing op: In[45]:= x = x. First opl ; v = v. First opl ; We tekenen de grafieken van deze functies in n figuur in verschillende kleuren. In[47]:= Plot x t, v t, t, 0, 0, PlotStyle RGBColor, 0, 0, RGBColor 0, 0, ; 4 6 8 0 - - Vergelijk dit met de grafiek van de geparametriseeerde kromme t # x t, v t
GDV.nb 8 In[48]:= ParametricPlot x t, v t, t, 0, 0 ; - - - - Een gelijke schaal langs de assen stel je in met de optie AspectRatio. In[49]:= ParametricPlot x t, v t, t, 0, 0, AspectRatio Automatic ; - - - - Oefening 4. (i) Los het stelsel differentiaalvergelijkingen x t + x t = 0, 4 y t + y t = 0 met beginwaarden x 0 = þþþþ, 0 x =, y 0 =, y 0 = 0 op. (ii) Teken de grafieken van x(t) en y(t) in n figuur. (iii) Teken de grafiek van de kromme t # x t, y t Å Numerieke oplossingen In[50]:= Clear "ë"
GDV.nb 9 We bekijken nu de differentiaalvergelijking van een slinger: In[5]:= vgl = u t + Sin u t ç 0 Out[5]= Sin u t + u t == 0 We nemen als beginwaarden u(0) =, u (0) = 0 enbekijken dus het volgende beginwaardenprobleem In[5]:= bwp = vgl, u 0 ç, u 0 ç 0 ; Mathematica kan deze niet-lineaire differentiaalvergelijking niet exact oplossen In[53]:= DSolve bwp, u, t Solve::ifun : Inverse functions are being used by Solve, so some solutions may not be found. Solve::dinv : The expression JacobiAmplitudeA-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C@D + C@D C@D, + C@D E involves unknowns in more than one argument, so inverse functions cannot be used. þþþþ 4 þþþþþþþþþþþþþþþþ þþ DSolve::bvfail : For some branches of the general solution, unable to solve the conditions. Solve::dinv : The expression JacobiAmplitudeA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C@D + C@D C@D, + C@D E involves unknowns in more than one argument, so inverse functions cannot be used. þþþþ 4 þþþþþþþþþþþþþþþþ þþ DSolve::bvfail : For some branches of the general solution, unable to solve the conditions. Out[53]= Met NDSolve kun je om een numerieke oplossing vragen over een gegeven tijdsdomein: In[54]:= opl = NDSolve bwp, u, t, 0, 0 Out[54]= u InterpolatingFunction 0., 0., <> In[55]:= opl = First opl ; u = u. opl; Je hebt als oplossing een interpolatiefunctie, waarvan je bijvoorbeeld functiewaarden kunt uitrekenen of waarvan je de grafiek kunt tekenen In[57]:= u 0, u, u 5, u 0 Out[57]=., 0.600086, -0.039384, -0.998948 In[58]:= Table u t, t, 0, 0, Out[58]=., 0.89603, 0.600086, 0.66936, -0.306, -0.706664, -0.948758, -0.99054, -0.85763, -0.480835, -0.039384, 0.43873, 0.798646, 0.98309, 0.968, 0.738983, 0.35, -0.9588, -668, -0.874538, -0.998948
GDV.nb 0 In[59]:= Plot u t, t, 0, 0 ; 4 6 8 0 - - Oefening 5. Los de van der Pol vergelijking y - - y y + y = 0 met beginwaarden y(0) = 0 en y (0) = -0. op en teken de grafiek van de oplossing. Å Oplossingen bij meerdere beginwaarden In[60]:= Clear "ë" We bekijken opnieuw de differentiaalvergelijking van een harmonische trilling: In[6]:= vgl = u t + u t ç 0 Out[6]= u t + u t == 0 We bekijken bekijken nu het volgende beginwaardeprobleem: In[6]:= bwp = vgl, u 0 ç a, u 0 ç 0 ; Hier komt nog een parameter a in voor en we gaan het beginwaardeprobleem voor verschillende waarden oplossen: In[63]:= opl = Table DSolve bwp, u, t, a, 0,, Out[63]= u Function t, 0, u Function u Function t, Cos t þþþþþþþþþþþþþþþþ t, 3 Cos t þþþþþþþþþþþþþþþþþþþ þ, u Function t, Cos t,, u Function t, Cos t Er staan wel erg veel accolades. Met Flatten poetsen we weg: In[64]:= opl = Flatten opl, Out[64]= u Function t, 0, u Function t, Cos t þþþþþþþþþþþþþþþþ, u Function t, Cos t, u Function t, 3 Cos t þþþþþþþþþþþþþþþþþþþ þ, u Function t, Cos t De oplossingen bij de verschillende parameterwaarden zijn:
GDV.nb In[65]:= formules = u t. opl Out[65]= 0, Cos t þþþþþþþþþþþþþþþþ, Cos t, 3 Cos t þþþþþþþþþþþþþþþþ þþþþþ þ, Cos t In[66]:= Plot Evaluate formules, t, 0, 0 ; 4 6 8 0 - - Evaluate is hier verplicht want voor Plot gelden speciale evaluatieregels. Het eerste argument wordt niet geevalueerd en daarom ziet Mathematica zonder Evaluate geen formules in t, maar slechts de naam 'formules'. Het systeem denkt dan dat er bij elke t-waarde n functiewaarde berekend gaat worden en verwacht geen 5-tal, zoals in ons voorbeeld. Met deze uitleg is nu ook de laatste opdracht in het voorbeeld van de introductie toegelicht. Oefening 6. Kijk nog eens opnieuw naar de code van het voorbeeld over logistische groei in de inleiding. Begrijp je nu meer van deze code?