Handboek · hoofdstuk 4Differentiaalvergelijkingen en simulatie
Wie weet hoe snel iets verandert, kan uitrekenen hoe het verder gaat: exact of stap voor stap
Bijna elk natuurkundig of biologisch model zegt niet wat een grootheid is, maar hoe snel ze verandert: de kas warmt op met de zon en verliest warmte naar buiten, algen groeien tot hun licht op is, een condensator laadt tot de bron. Zo'n model is een differentiaalvergelijking. Je leert ze opstellen als balans, lezen in een richtingsveld, oplossen door veranderlijken te scheiden, en, als dat niet lukt, simuleren met de methode van Euler, met oog voor stapgrootte, fout en stabiliteit. Het hoofdstuk eindigt met de eerste simulatie van de meetkas, naast haar echte uurwaarden.

- Je kan een veranderingsproces vertalen in een differentiaalvergelijking dy/dt = f(y, t) met een beginwaarde, als balans van wat erin komt en eruit gaat, en de eenheden en evenwichten ervan interpreteren.
- Je kan een richtingsveld lezen en schetsen en er oplossingskrommen in tekenen.
- Je kan een oplossing controleren door ze in te vullen, en exponentiële groei en verval, de afkoelingswet van Newton, de RC-kring en de logistische vergelijking oplossen door scheiden van veranderlijken.
- Je kan tijdconstante, halverings- en verdubbelingstijd, groeisnelheid en draagkracht berekenen en uit metingen schatten.
- Je kan de methode van Euler afleiden uit de raaklijn en toepassen, met de hand en in Python, ook op een stelsel.
- Je kan de fout van Euler tegenover de stapgrootte verklaren (orde 1) en de stabiliteitsgrens h < 2τ afleiden en gebruiken.
- Je kan een simulatie vergelijken met metingen en uit de residuen afleiden of een parameter slecht gekozen is of een mechanisme ontbreekt.
- Je kan een eerste warmtemodel van de meetkas simuleren en er een onderbouwde ontwerpbeslissing mee nemen.
Rekenen in stapjes: van Euler tot het weerbericht
In 1768 verscheen in Sint-Petersburg het eerste deel van de Institutiones calculi integralis, het leerboek integraalrekening van Leonhard Euler. Euler wist dat de meeste vergelijkingen die zeggen hoe iets verandert, geen oplossing in een formule hebben. Hij beschreef een eenvoudige uitweg: zet een klein stapje langs de raaklijn, reken op de nieuwe plaats de nieuwe helling uit, zet het volgende stapje, en zo verder. Hoe kleiner de stapjes, hoe dichter de gebroken lijn bij de echte oplossing ligt. In de jaren 1820 bewees Augustin-Louis Cauchy in zijn lessen aan de École polytechnique in Parijs dat dat klopt als de stap naar nul gaat. Die gebroken lijn heet vandaag de methode van Euler.
Rekenen in stapjes was toen al ernst. In 1757 en 1758 rekenden de wiskundige Alexis Clairaut, de astronoom Joseph Jérôme Lalande en de rekenaarster Nicole-Reine Lepaute maandenlang met de hand uit hoe Jupiter en Saturnus de komeet van Halley zouden vertragen. In november 1758 kondigden ze aan dat de komeet rond half april 1759 het dichtst bij de zon zou komen, met een marge van een maand. Het werd 13 maart: net binnen de marge, en een triomf voor de mechanica van Newton.
Tijdens de Eerste Wereldoorlog probeerde de Britse natuurkundige Lewis Fry Richardson, als vrijwilliger bij een ambulancedienst in Frankrijk, het weer van zes uur verder uit te rekenen met de vergelijkingen van de atmosfeer, opgedeeld in cellen en tijdstappen. Na weken rekenwerk kwam er voor één punt een drukstijging van 145 hPa in zes uur uit: onmogelijk. Toch publiceerde hij zijn methode in 1922, met de droom van een zaal met 64 000 rekenaars die het weer sneller zouden uitrekenen dan het zelf veranderde. Veel later bleek uit een reconstructie dat niet zijn methode de schuldige was, maar de begintoestand: kleine onevenwichten in de gemeten wind en druk. In 1928 toonden Richard Courant, Kurt Friedrichs en Hans Lewy aan dat een tijdstap ook te groot kan zijn: dan explodeert de berekening, hoe goed de vergelijkingen ook zijn. In 1950 lukte de eerste weersvoorspelling met een computer, op de ENIAC, door Jule Charney, Ragnar Fjørtoft en John von Neumann.
Beginwaarde, stapgrootte, stabiliteit: de drie struikelblokken uit dit verhaal zijn precies de onderwerpen van dit hoofdstuk.
Het brein van het station moet vooruitkijken: hoe warm wordt de kas vanmiddag, hoe lang houdt de batterij het, wanneer wordt het reservoir groen? Dat kan alleen met een model dat zegt hoe snel iets verandert, en een computer die dat stap voor stap uitrekent. De digitale tweeling van hoofdstuk 49 is een groot stelsel zulke vergelijkingen, opgelost met de methoden van dit hoofdstuk en hoofdstuk 36.

Wat je al weet: veranderingen die van de toestand afhangen
| wat je al kan | wat nu komt |
|---|---|
| groei en verval met een groeifactor per tijdstap, verdubbelings- en halveringstijd (hoofdstuk 5 van I) | dezelfde processen met een verandering per ogenblik: |
| RC-kring: per stapje een vaste fractie van wat ontbreekt; (hoofdstuk 24 van I) | de RC-vergelijking uit de wetten van Kirchhoff, exact en stap voor stap |
| de afgeleide als helling, de raaklijn als benadering (hoofdstuk 1) | een vergelijking die de helling geeft; stappen langs de raaklijn (Euler) |
| integreren als ophopen, de linker Riemann-som (hoofdstuk 3) | een simulatie telt de veranderingen op, stap na stap |
| warmtecapaciteit en warmteverlies (hoofdstuk 18 en 19 van I) | de warmtebalans als differentiaalvergelijking: het eerste model van de meetkas |
In al die voorbeelden hangt de verandering af van de toestand zelf: hoe meer algen, hoe meer er bijkomen; hoe warmer de kas, hoe meer warmte ze verliest. Zo'n verband tussen een grootheid en haar afgeleide is een differentiaalvergelijking. Hier gaat het over de eenvoudigste soort, van de eerste orde: alleen de eerste afgeleide komt voor.
Een model opstellen is bijna altijd een balans: verandering = wat erin komt − wat eruit gaat. Voor de warmte in de meetkas: de zon brengt warmte binnen, een eventuele verwarming ook, en door de wanden lekt er weg (hoofdstuk 19 van I). Wat overblijft, warmt de kas op met (hoofdstuk 18 van I):
Controleer altijd de eenheden: links J/K maal K/s = W, rechts drie vermogens. Twee woorden die terugkomen: een vergelijking is lineair als er alleen in de eerste macht in staat (zoals hierboven), en autonoom als niet expliciet van afhangt. De kas is niet autonoom: de zon en de buitentemperatuur veranderen met de klok. Een evenwicht is een waarde waar : daar staat alles stil.
| model | vergelijking | evenwicht | in Habitat |
|---|---|---|---|
| exponentiële groei | (onstabiel) | algen in de eerste dagen | |
| exponentieel verval | (stabiel) | condensator die ontlaadt | |
| afkoelen (Newton) | station na een stroomuitval | ||
| RC laden | ontdenderfilter, filter op de batterijmeting | ||
| logistische groei | en | algen in het reservoir | |
| warmtebalans | verschuift met | meetkas, station |
Het richtingsveld: de vergelijking tekent haar eigen oplossingen
Een differentiaalvergelijking geeft in elk punt een helling. Teken in een rooster van punten een kort lijnstukje met die helling: dat is het richtingsveld. Een oplossing is een kromme die overal aan de lijnstukjes raakt, zoals een blad dat met de stroming meedrijft.
Het voorbeeld is het station na een stroomuitval (hoofdstuk 39): buiten is het −8 °C, de tijdconstante is :
- De helling hangt alleen van af (autonoom): op elke horizontale lijn staan de lijnstukjes evenwijdig.
- Op °C zijn ze horizontaal: het evenwicht. Erboven dalen ze, eronder stijgen ze, en hoe verder van −8 °C, hoe steiler. Alle oplossingen lopen naar −8 °C: een stabiel evenwicht.
- De oplossing door is het station dat op 20 °C stond; door een station dat al kouder was; door een doos die kouder was dan buiten (wiskundig mag dat) en opwarmt naar −8 °C.
- Twee oplossingen kruisen elkaar nooit. Als netjes is (afleidbaar), gaat door elk punt precies één oplossing: de beginwaarde bepaalt alles wat volgt. Dat is de stelling van Picard en Lindelöf, en de reden dat een simulatie een betrouwbare voorspelling kan zijn.
Ze heeft er oneindig veel: één door elk beginpunt. Wie een model opstelt maar de beginwaarde vergeet (hoe warm was het station toen de stroom uitviel?), kan niets voorspellen.
Klopt deze oplossing?
Toon aan dat de oplossing is van met . Geef ook de algemene oplossing en bereken wanneer het station 10 °C bereikt.
- ,
- voorstel: ( in h)
- controle van vergelijking en beginwaarde
- de algemene oplossing
- het tijdstip waarop T = 10 °C
- 1Linkerlid: afleiden met de kettingregel (hoofdstuk 1): .
- 2Rechterlid: . Beide zijn gelijk voor elke : de functie voldoet aan de vergelijking. En : ook de beginwaarde klopt.
- 3Algemeen: voldoet voor elke constante (dezelfde rekening). De beginwaarde geeft . Dat is de familie krommen in het richtingsveld.
- 410 °C: geeft , dus , ongeveer 80 minuten.
Scheiden van veranderlijken: groei en verval
Waar komt zo'n oplossing vandaan? Neem de eenvoudigste vergelijking, : de verandering is evenredig met wat er is. Breng alle naar links en alle naar rechts, alsof en kleine getallen zijn (Leibniz, hoofdstuk 1), en integreer beide kanten (hoofdstuk 3):
Streng genomen deel je door (dus ; is apart een oplossing, het evenwicht) en gebruik je de kettingregel: . De constante volgt uit de beginwaarde: .
Met één substitutie los je meteen alle modellen met een evenwicht op. Staat er , noem dan : omdat constant is, is , en dus :
Scheiden lukt voor elke vergelijking van de vorm , als je de twee integralen kan uitrekenen. Dat is minder vaak dan je zou willen; daarom de tweede helft van dit hoofdstuk.
De afkoelingswet van Newton, getoetst aan een beker thee
In hoofdstuk 5 van Intermediate koelde een beker thee af in een kamer van 21,0 °C:
| (min) | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| (°C) | 85,0 | 75,0 | 66,1 | 59,2 | 53,0 | 47,9 | 43,9 | 40,1 | 37,0 | 34,6 | 32,5 |
Stel een differentiaalvergelijking op vanuit een warmtebalans, los ze op, bepaal uit alle metingen en schat hoeveel watt de beker per graad verschil verliest (thee en beker samen , een schatting). Hoe goed doet Euler het met een stap van 4 minuten, de stap van de meting?
- metingen om de 4 min,
- de vergelijking en haar oplossing
- en
- Euler met h = 4 min
- 1Balans: de enige warmtestroom gaat naar de kamer, evenredig met het verschil: . Dat is de afkoelingswet van Newton (1701). Dus met .
- 2Oplossing (vorige blad): .
- 3Lineariseren: is een rechte in . De kleinste-kwadratenrechte door de elf punten (hoofdstuk 3 van I, onder in de figuur) heeft helling per minuut, dus , en snijpunt °C (gemeten 64,0).
- 4: bij 50 °C verschil verliest de beker ongeveer 47 W.
- 5Euler met : . Per stap blijft van het verschil over, in plaats van . Na 40 minuten geeft dat 30,7 °C tegenover 32,4 °C exact (gemeten 32,5 °C).
De RC-kring: een vergelijking uit Kirchhoff, getoetst aan een meting
In hoofdstuk 24 van Intermediate laadde een Arduino een condensator (opdruk 100 µF, echt 94 µF) via 10 kΩ op tot 5,0 V en mat om de 0,1 s met de 10-bits ADC. Stel de differentiaalvergelijking op met de wetten van Kirchhoff, los ze op, en simuleer met Euler met de meetstap van 0,1 s. Is die simulatie goed genoeg om met de meting te vergelijken?
- , , ,
- ADC-stap
- de vergelijking en
- Euler met h = 0,1 s en de fout
- 1Maaswet (hoofdstuk 21 van I): . Stroom in een condensator (hoofdstuk 1): . Samen: .
- 2Dezelfde vorm als bij Newton, met en : . De meetpunten liggen op die kromme, op de afronding van de ADC na (minder dan één stap).
- 3Euler: . Met blijft per stap van wat ontbreekt over, exact is dat . Euler laadt dus te snel.
- 4Na 1,0 s: Euler , exact : 102 mV te hoog, 21 ADC-stappen. De grootste afwijking is 102 mV (bij ). Met wordt het 10 mV: tien keer kleiner (orde 1, verderop).
Logistische groei: groeien tot een plafond
Geen groei is eeuwig exponentieel: algen nemen elkaar het licht af, een voedingsstof raakt op (hoofdstuk 5 van I). In 1838 stelde de Brusselse wiskundige Pierre-François Verhulst een eenvoudige correctie voor, om de groei van een bevolking te beschrijven: laat de relatieve groeisnelheid lineair dalen tot nul bij een grens , de draagkracht. In 1845 noemde hij de kromme logistique.
Afleiding. Scheiden: . Splits de breuk in partiële breuken: (tel maar op). Integreren geeft , dus . Los op naar : de formule in het kader.
Het snelste punt. De groeisnelheid is een bergparabool in met top waar : bij , met . Daar heeft een buigpunt: de S-kromme gaat van hol naar bol. De relatieve groeisnelheid is een dalende rechte in : dat is de sleutel om en uit metingen te halen (volgend blad).
In het richtingsveld: onder stijgen de lijnstukjes, boven dalen ze (te veel algen voor het licht: ze sterven af tot ). Van heel dicht bij 0 duurt het lang voor er iets te zien is; dan gaat het snel, en bij vlakt het af.
Habitat: de draagkracht van het testreservoir
In het doorzichtige testreservoir (hoofdstuk 5 van I, opdracht 5.13) groeiden de algen tot dag 6 exponentieel en daarna trager. Bepaal en uit de relatieve groeisnelheid, vergelijk het logistische model met de metingen, en bereken wanneer het alarm ( cellen per mL) afgaat volgens het exponentiële en volgens het logistische model. Hoe goed doet Euler het met een stap van één dag?
- per dag: 0,019; 0,038; 0,082; 0,143; 0,307; 0,540; 1,160; 1,960; 3,300; 4,410; 5,850 ( per mL, dag 0 tot 10)
- alarm bij per mL
- en
- model tegenover meting
- tijdstip van het alarm
- Euler met h = 1 dag
- 1Relatieve groeisnelheid: , met een centrale differentie over twee dagen (hoofdstuk 1): .
dag 1 2 3 4 5 6 7 8 9 (10⁵ /mL) 0,038 0,082 0,143 0,307 0,540 1,16 1,96 3,30 4,41 groei (/dag) 0,73 0,66 0,66 0,66 0,66 0,64 0,52 0,41 0,29 - 2Tot blijft ze rond 0,66 per dag, daarna daalt ze. Een rechte door de negen punten (kleinste kwadraten) geeft per dag en snijdt de -as in per mL.
- 3Model: . Het ligt hoogstens 10 % naast elke meting, over een factor 300 in .
- 4Alarm: geeft dagen. Het exponentiële model met dezelfde zegt dagen. Gemeten: tussen dag 9 en 10.
- 5Euler met dag: in het begin groeit per stap met de factor in plaats van . Op dag 10 geeft Euler in plaats van ; met dag .
De methode van Euler
De meeste vergelijkingen uit de praktijk, zoals die van de meetkas met haar zon en buitentemperatuur die met de klok veranderen, kan je niet scheiden. Dan rekent een computer de oplossing stap voor stap uit. Het idee komt uit hoofdstuk 1: dicht bij een punt valt een kromme bijna samen met haar raaklijn, . En de helling ken je in elk punt: dat is precies wat de differentiaalvergelijking zegt.
In de figuur koelt het station af met stappen van 1,5 h en van 0,5 h. Elk lijnstuk heeft de helling van het richtingsveld in zijn beginpunt. Omdat de kromme bol (naar boven gekromd) daalt, schiet elke stap onder de echte oplossing door: Euler koelt het station te snel af. Met een kleinere stap ligt de gebroken lijn dichter bij de kromme.
Twee manieren om Euler te begrijpen die je al kent:
- Als integraal. , en Euler benadert die integraal met de linker Riemann-som (hoofdstuk 3): in elke strook de hoogte van het beginpunt.
- Als vaste fractie per stap. Voor geeft Euler : per stapje gaat er een vaste fractie af, zoals bij de condensator van hoofdstuk 24 van I. Na stappen is , en voor is dat precies .
Euler met de hand
Simuleer het afkoelende station, met °C, met de methode van Euler en een stap van een half uur tot . Vergelijk met de exacte oplossing en verklaar het teken van de fout.
- (°C/h)
- ,
- tot en de fout
- 1Stap 1: °C/h, dus °C.
- 2Stap 2: , dus °C. Zo verder:
(h) (°C) (°C/h) exact (°C) fout (°C) 0 0,0 20,000 −9,333 20,000 0,000 1 0,5 15,333 −7,778 15,701 −0,368 2 1,0 11,444 −6,481 12,063 −0,618 3 1,5 8,204 −5,401 8,983 −0,779 4 2,0 5,503 −4,501 6,376 −0,873 - 3Handig: elke stap vermenigvuldigt het verschil met buiten met . Na vier stappen: , dus °C. Exact: .
- 4De fout is negatief en groeit: elke stap gebruikt de helling aan het begin van de stap, en die is steiler dan gemiddeld over de stap (de afkoeling vertraagt).
Euler in Python
Een functie euler(f, y0, t0, t1, h) werkt voor elke vergelijking: je geeft mee als Python-functie. Ernaast de verbeterde Euler of methode van Heun: zet eerst een proefstap met Euler, reken ook daar de helling uit, en gebruik het gemiddelde van beide hellingen (de trapeziumregel van hoofdstuk 3 in plaats van de linker Riemann-som). Het programma rekent het station uit tot en deelt de fout door en door .
# euler.py - de methode van Euler, en de verbeterde Euler (Heun) als voorsmaakje van hoofdstuk 36import numpy as np def euler(f, y0, t0, t1, h): """Lost dy/dt = f(y, t) op van t0 tot t1 met stap h; geeft de tijden en de waarden terug.""" n = round((t1 - t0) / h) t = t0 + h * np.arange(n + 1) y = np.empty(n + 1) y[0] = y0 for k in range(n): y[k + 1] = y[k] + h * f(y[k], t[k]) # een stap langs de raaklijn return t, y def heun(f, y0, t0, t1, h): """Gemiddelde van de helling aan het begin en (geschat) aan het eind van elke stap.""" n = round((t1 - t0) / h) t = t0 + h * np.arange(n + 1) y = np.empty(n + 1) y[0] = y0 for k in range(n): k1 = f(y[k], t[k]) k2 = f(y[k] + h * k1, t[k] + h) y[k + 1] = y[k] + h / 2 * (k1 + k2) return t, y def station(T, t): # het station na een stroomuitval: dT/dt in graden per uur return -(T + 8) / 3 exact = -8 + 28 * np.exp(-1) # T(3 h) exactprint(" h Euler T(3) fout fout/h Heun: fout fout/h²")for h in (1.0, 0.5, 0.25, 0.1, 0.01): fe = euler(station, 20, 0, 3, h)[1][-1] - exact fh = heun(station, 20, 0, 3, h)[1][-1] - exact print(f"{h:6.2f} {exact + fe:12.4f} {fe:8.4f} {fe / h:8.3f} {fh:12.2e} {fh / h**2:8.3f}")Uitvoer:
h Euler T(3) fout fout/h Heun: fout fout/h² 1.00 0.2963 -2.0043 -2.004 2.47e-01 0.247 0.50 1.3771 -0.9235 -1.847 5.42e-02 0.217 0.25 1.8559 -0.4447 -1.779 1.27e-02 0.203 0.10 2.1265 -0.1741 -1.741 1.96e-03 0.196 0.01 2.2834 -0.0172 -1.719 1.91e-05 0.191
Bij Euler is fout/h vrijwel constant: de fout is evenredig met . Die constante kan je zelfs voorspellen: per stap is de fout ongeveer , en opgeteld over stappen geeft dat voor dit model (opdracht 4.13). Bij Heun is fout/h² constant: tien keer kleinere stap, honderd keer kleinere fout. Heun rekent twee hellingen per stap, maar dat loont: met (60 hellingen) is de fout 0,0020 °C, kleiner dan die van Euler met (300 hellingen, 0,017 °C).
In de praktijk schrijf je Euler zelden zelf. scipy.integrate.solve_ivp kiest de methode (standaard een Runge-Kutta van orde 4-5) én de stap zelf, zodat de fout onder een tolerantie blijft. Wie begrijpt wat Euler doet, weet wat zo'n functie moet bewaken: de fout per stap en de stabiliteit (hoofdstuk 36).
Stapgrootte en fout: Euler is van orde 1
Waarom halveert de fout als je de stap halveert? De reeks van Taylor (hoofdstuk 1) geeft de echte oplossing over één stap:
Euler houdt alleen de eerste twee termen. De lokale fout per stap is dus ongeveer . Over een vast interval zet je stappen, en die fouten tellen op (en planten zich voort):
Op een log-loggrafiek is een fout een rechte met helling (hoofdstuk 1 deed hetzelfde voor differenties). Euler en Heun op het afkoelende station tonen hellingen 1 en 2. Anders dan bij numeriek differentiëren speelt de afronding hier bijna geen rol: pas bij miljarden stappen tellen de afrondingsfouten van merkbaar op.
Een kleine stap maakt de numerieke fout klein: het verschil tussen de simulatie en de exacte oplossing van het model. Is het model zelf fout (een ontbrekende warmtestroom, een verkeerde ), dan reken je heel precies het verkeerde uit. Beide fouten schat je apart: de numerieke door de stap te halveren, de modelfout door te vergelijken met metingen.
Instabiliteit: als de stap te groot is
Neem opnieuw . Euler geeft , dus . Wat er gebeurt, hangt volledig af van de factor :
- : , een dalende rij zonder tekenwissel (te snel, maar redelijk);
- : , na één stap is alles weg;
- : , de rij springt om beurten boven en onder nul, maar dempt uit: een afkoelend station dat afwisselend kouder en warmer wordt dan buiten;
- : , de rij explodeert, terwijl de echte oplossing naar nul gaat.
Een Habitat-voorbeeld: het station heeft , maar zijn temperatuursensor heeft een tijdconstante van 60 s (hoofdstuk 39). Wie station en sensor samen simuleert met Euler, moet een stap onder 120 s nemen, hoewel het station zelf uren nodig heeft om te veranderen. Zo'n stelsel met sterk verschillende tijdconstanten heet stijf. De simulatie van hoofdstuk 39 rekent daarom met stappen van 10 s. Hoofdstuk 36 toont impliciete methoden die voor stijve stelsels veel grotere stappen toelaten (opdracht 4.14).
Niet noodzakelijk: het model kan perfect zijn en de methode met die stap onstabiel. Halveer de stap: verdwijnt het probleem, dan was het numeriek. Hetzelfde geldt op een microcontroller: het exponentiële filter van hoofdstuk 21 is een Euler-stap met , en is alleen stabiel voor .
Tweede orde en stelsels: dezelfde Euler met vectoren
De tweede wet van Newton is een vergelijking van de tweede orde: . Voer de snelheid in als tweede onbekende, dan heb je twee vergelijkingen van de eerste orde:
Schrijf de toestand als vector ; dan is het stelsel weer en is Euler letterlijk dezelfde regel: . Met numpy werkt dezelfde code voor vectoren.
Voorbeeld. Een pakket van 2,0 kg (een doos van 30 cm) valt uit een bevoorradingsdrone van 40 m hoogte (hoofdstuk 9). De luchtweerstand is met , en : . Naar beneden positief:
De snelheid stopt met stijgen als de weerstand het gewicht opheft: de eindsnelheid . (De vergelijking voor alleen is scheidbaar: , zie de naslag.)
import numpy as np m, g, k = 2.0, 9.81, 0.0567 # massa (kg), zwaarteveld (N/kg), k = ½ · ρ · cd · A (kg/m) def f(y, t): # y = [gevallen afstand x (m), snelheid v (m/s)], naar beneden positief x, v = y return np.array([v, g - k / m * v * abs(v)]) y, t, h = np.array([0.0, 0.0]), 0.0, 0.1while y[0] < 40.0: # tot het pakket 40 m gevallen is y = y + h * f(y, t) # dezelfde Euler-stap, nu met een vector t = t + hprint(f"na {t:.1f} s: {y[0]:.1f} m gevallen, v = {y[1]:.1f} m/s")Uitvoer:
na 3.5 s: 41.1 m gevallen, v = 17.8 m/s
Exact valt het pakket 3,41 s en raakt het de grond met 17,6 m/s; zonder lucht zou het na 2,86 s met 28,0 m/s neerkomen. Euler met zit er een tiende van een seconde naast (de simulatie stopt aan de eerste stap voorbij 40 m). Zo simuleer je in hoofdstuk 8 banen, in hoofdstuk 17 twee warmteknopen en in hoofdstuk 32 prooien en predatoren: telkens een vector en dezelfde stap.
Differentiaalvergelijkingen: formules en werkwijze
Werkwijze: (1) balans opstellen, eenheden controleren; (2) evenwichten zoeken () en het richtingsveld schetsen; (3) exact oplossen als het kan (scheiden), anders simuleren; (4) numerieke fout controleren door de stap te halveren; (5) vergelijken met metingen.
| symbool | betekenis | eenheid |
|---|---|---|
| tijdconstante: C/(UA), RC, V/Q | s | |
| evenwichtswaarde | eenheid van y |
| symbool | betekenis | eenheid |
|---|---|---|
| groeisnelheid | 1/s, 1/dag | |
| draagkracht | eenheid van N |
| symbool | betekenis | eenheid |
|---|---|---|
| tijdstap | s |
| systeem | tijdconstante | waarde in Habitat |
|---|---|---|
| station (één knoop) | 540 kJ/K / 50 W/K = 3 h | |
| meetkas (snelle knoop) | 30 kJ/K / 16,7 W/K ≈ 30 min | |
| klimaatmodule 's nachts | 1,1 MJ/K / 20,2 W/K ≈ 15 h | |
| RC-meting (hoofdstuk 24 van I) | 10 kΩ · 94 µF = 0,94 s | |
| filter op de batterijmeting | 24,8 kΩ · 100 nF = 2,5 ms | |
| temperatuursensor (hoofdstuk 39) | 60 s | |
| CO₂ in de woonmodule | 62 m³ / 50 m³/h ≈ 1,2 h |
Habitat: de kastemperatuur simuleren
Nu het echte werk: het brein van het station moet kunnen voorspellen hoe warm de meetkas wordt. Het model is de warmtebalans van het tweede blad, met één temperatuur voor de hele kas (één knoop):
- : het warmteverlies van de meetkas, nagerekend in hoofdstuk 19 van I.
- : de gemeten buitentemperatuur van de zonnige aprildag (hoofdstuk 4 van F), lineair geïnterpoleerd tussen de uurwaarden.
- : de instraling op een horizontaal vlak bij heldere hemel, met het eenvoudige zonnemodel van hoofdstuk 3 (20 april, Brussel). De klok van het station staat het hele jaar op wintertijd (hoofdstuk 30 van I): de zon staat om 12:42 in het zuiden.
- (m²): de effectieve zonnewinst, alsof m² zonlicht volledig in kaswarmte omgezet wordt. Bovengrens: het dak (0,72 m²) maal de doorlaat van de platen (80 %) is 0,58 m².
- : de warmtecapaciteit. Alles samen (tabel) is ongeveer 248 kJ/K, maar het water onder de tafel en de diepere grond volgen de dag niet. De snelle massa (lucht, platen, frame, bakjes, planten en de bovenste centimeter grond) is ongeveer 29 kJ/K.
| deel van de meetkas | (kJ/K) |
|---|---|
| water in het reservoir (24 kg) | 100,5 |
| vochtige potgrond (21 kg water, 22 kg droog) | 109,9 |
| tafel, hout (15,1 kg) | 24,2 |
| 12 bakjes, PP (3,6 kg) | 6,8 |
| platen, PC (2,9 kg) | 3,5 |
| frame, aluminium (3,1 kg) | 2,8 |
| lucht (0,69 kg) | 0,7 |
| samen | 248 |
Het programma simuleert eerst drie keuzes voor en en zoekt daarna in een raster welke combinatie de uurwaarden het best volgt, met de rms-fout (de wortel uit het gemiddelde kwadraat van de verschillen) als maat.
# kas.py - eerste simulatie van de meetkas op de zonnige aprildag (klok in wintertijd, UTC+1)import mathimport numpy as np # uurwaarden van 0:00 tot 24:00 (hoofdstuk 4 van Fundamental)KAS = [9.5, 9.0, 8.6, 8.2, 7.9, 7.7, 7.7, 8.2, 11.0, 15.5, 20.5, 25.0, 28.5, 31.0, 32.0, 30.5, 27.5, 23.5, 19.5, 16.0, 13.5, 12.0, 11.0, 10.3, 9.8]BUITEN = [8.5, 8.0, 7.6, 7.2, 6.9, 6.7, 6.6, 7.2, 8.6, 10.4, 12.3, 14.0, 15.4, 16.5, 17.3, 17.8, 17.9, 17.3, 16.0, 14.3, 12.6, 11.3, 10.3, 9.5, 8.8]UA = 16.7 # warmteverlies van de meetkas (W/K) def zon(t, dag=110, lat=50.8, lon=4.35): """Instraling op een horizontaal vlak bij heldere hemel (W/m²); t = kloktijd in wintertijd (h).""" d = math.radians(23.44 * math.sin(math.radians(360 / 365 * (284 + dag)))) # declinatie B = math.radians(360 / 365 * (dag - 81)) tv = 9.87 * math.sin(2 * B) - 7.53 * math.cos(B) - 1.5 * math.sin(B) # tijdvereffening (min) w = math.radians(15 * (t - 1 + lon / 15 + tv / 60 - 12)) # uurhoek s = (math.sin(math.radians(lat)) * math.sin(d) + math.cos(math.radians(lat)) * math.cos(d) * math.cos(w)) # sinus van de zonnehoogte if s <= 0: return 0.0 direct = 1361 * 0.7 ** ((1 / max(s, 0.02)) ** 0.678) # loodrecht op de stralen return direct * s + 0.12 * direct * s + 20 * math.sqrt(s) # direct + diffuus def simuleer(C, a, dt=60.0, T0=KAS[0], P_verw=0.0): """Euler voor C dT/dt = a G(t) + P - UA (T - T_buiten(t)), een dag lang.""" n = round(24 * 3600 / dt) t = np.arange(n + 1) * dt / 3600 # tijd in uren T = np.empty(n + 1) T[0] = T0 for k in range(n): T_buiten = np.interp(t[k], range(25), BUITEN) P = a * zon(t[k]) + P_verw - UA * (T[k] - T_buiten) # netto warmtestroom (W) T[k + 1] = T[k] + dt * P / C # Euler-stap return t, T def rms(T, dt=60.0): """Wortel uit het gemiddelde kwadraat van (model - meting) op de hele uren.""" return math.sqrt(np.mean((T[::round(3600 / dt)] - np.array(KAS)) ** 2)) for naam, C, a in (("alle massa, heel het dak ", 248e3, 0.58), ("snelle massa, heel het dak", 30e3, 0.58), ("snelle massa, a = 0,30 ", 30e3, 0.30)): t, T = simuleer(C, a) print(f"{naam}: max {T.max():5.1f} °C om {t[T.argmax()]:5.2f} h, min {T.min():4.1f} °C, rms {rms(T):4.2f} °C") print("\nrms (°C) a = " + " ".join(f"{a:.2f}" for a in (0.20, 0.25, 0.30, 0.35, 0.40)))for C in (20e3, 30e3, 40e3, 60e3, 100e3, 150e3, 250e3): fouten = [rms(simuleer(C, a, dt=120.0)[1], dt=120.0) for a in (0.20, 0.25, 0.30, 0.35, 0.40)] print(f"C = {C / 1000:3.0f} kJ/K " + " ".join(f"{f:4.2f}" for f in fouten))Uitvoer:
alle massa, heel het dak : max 34.8 °C om 16.13 h, min 7.6 °C, rms 6.56 °C snelle massa, heel het dak: max 43.4 °C om 13.67 h, min 6.7 °C, rms 6.42 °C snelle massa, a = 0,30 : max 30.5 °C om 14.03 h, min 6.7 °C, rms 0.82 °C rms (°C) a = 0.20 0.25 0.30 0.35 0.40 C = 20 kJ/K 2.39 1.36 0.81 1.45 2.50 C = 30 kJ/K 2.50 1.47 0.82 1.36 2.38 C = 40 kJ/K 2.67 1.66 1.01 1.38 2.33 C = 60 kJ/K 3.08 2.19 1.61 1.72 2.43 C = 100 kJ/K 4.03 3.31 2.85 2.77 3.09 C = 150 kJ/K 5.06 4.49 4.10 3.95 4.07 C = 250 kJ/K 6.46 6.02 5.70 5.51 5.48
Met alle massa is de kas veel te traag: de top valt om 16:08 in plaats van 14:00 en de fout is 6,5 °C. Met de snelle massa en het hele dak wordt ze 43 °C: veel te warm. Met en zakt de fout onder 1 °C. Het raster toont een lang dal: voor elke tussen 20 en 40 kJ/K is het best, en de fout verandert er nauwelijks. Maar zodra groter wordt, helpt geen enkele nog. We kiezen (de schatting van de snelle massa) en : de tijdconstante van de kas is dan .
Met is Euler stabiel voor stappen onder een uur. Met 45 minuten () schommelt de simulatie al; met 75 minuten () explodeert ze, tot 1010 °C en −1495 °C (figuur). Een minuut is ruim veilig en kost de Pi niets: 1440 stappen per dag.
Habitat: model en meting naast elkaar
Boven: de uurwaarden van de aprildag, de simulatie met en , de simulatie met alle massa en het hele dak, en de buitentemperatuur. Onder: de instraling waarmee het model rekent.
- 1De nacht
Zonder zon zakt het model tot op de buitentemperatuur (gemiddeld 0,8 °C te koud tussen 1 en 6 uur). De echte kas blijft ongeveer 1 °C warmer: de grond en het water geven 's nachts warmte af, en die trage massa zit niet in het model.
- 2Opwarmen
Het model warmt het snelst op om 9:11: 4,7 °C/h. Hoofdstuk 1 haalde uit de uurwaarden 5,0 °C/h om 9:27. De ochtend klopt goed.
- 3De top
Model 30,5 °C om 14:02, meting 32,0 °C om 14:00: het model blijft 1,5 °C onder de top. Mogelijk meet de sensor in de zon iets te hoog (stralingsfout), of krijgt de kas rond de middag meer zon dan een horizontaal vlak.
- 4De avond
Om 18 uur is het model 1,8 °C te warm: de echte kas koelt sneller af. Kandidaten: de verdamping van ongeveer 1,8 L water per dag (gemiddeld 89 W overdag) en de trage massa die 's middags warmte opneemt.
- 5Alle massa: te traag
Met C = 248 kJ/K (τ = 4,1 h) en het hele dak piekt het model pas om 16:08 op 34,7 °C: een kas die de hele massa in één keer moet opwarmen, loopt uren achter.
- 6De zon
Om 12:42 staat de zon in het zuiden: 785 W/m². Zonsopgang 5:46, zonsondergang 19:37 (wintertijd); samen 6,2 kWh per m² op een horizontaal vlak.
Simulatie tegenover meting: wat vertellen de verschillen?
Een model vergelijk je niet op het oog. Drie gereedschappen:
1. Eén getal: de rms-fout. vat de afwijking samen. De niveaulijnen tonen haar over alle combinaties van en (uit dezelfde simulatie). De kleinste fout, 0,80 °C, ligt in een lang, smal dal: een grotere met een iets grotere doet het bijna even goed. Deze meting kan en dus niet goed scheiden. Wie echt wil kennen, meet een avond zonder zon: dan geldt en geeft de afkoeling rechtstreeks (opdracht 4.8).
2. De residuen: model min meting, uur per uur. Ze vertellen meer dan hun rms. Hier hebben ze een patroon: 's nachts te koud, rond de middag te koud, 's avonds te warm. Toevallige meetfouten wisselen willekeurig van teken; een patroon betekent dat er iets in het model ontbreekt, en geen enkele keuze van en haalt het weg (de rms zakt nergens onder 0,8 °C).
3. Fysische verklaringen. Wat ontbreekt er?
- Trage massa. Grond en water nemen overdag warmte op en geven ze 's nachts af: warmere nachten, een koelere namiddag. Dat vraagt een tweede knoop met zijn eigen temperatuur (hoofdstuk 17).
- Verdamping. 1,8 L water per dag kost , overdag gemiddeld 89 W: een flinke extra warmtestroom naar buiten, vooral als het warm is.
- De zon op de wanden. Laag in de ochtend en de avond valt de zon door de zijwanden, rond de middag door het dak; een horizontaal vlak is maar een benadering.
- De sensor. Een temperatuursensor in de zon meet te hoog; de houder van hoofdstuk 32 van F heeft daarom een dakje.
We hebben en gekozen op dezelfde dag waarop we het model beoordelen. Eerlijker is: parameters schatten op één dag en het model testen op een andere (een bewolkte dag, een warme dag). Dat is de kern van hoofdstuk 36 (curve fitting) en hoofdstuk 41 (train en test). De statisticus George Box vatte het samen: alle modellen zijn fout, maar sommige zijn nuttig.
Habitat: halen we eis K7 met watt of met water?
Eis K7 van de meetkas (wens, hoofdstuk 30 van F) vraagt dat de kas 's nachts minstens 1 °C warmer blijft dan buiten. Het model met en haalt dat niet. Vergelijk twee oplossingen: (a) een verwarming die van 21:00 tot 6:00 werkt, (b) extra water in donkere jerrycans in de zon, 20 L of 40 L. Simuleer drie keer dezelfde dag na elkaar en beoordeel de nacht van 22:00 tot 6:00 op de derde dag (dan is de begintoestand vergeten).
- , ,
- water: 4,19 kJ/K per liter
- energie meetkas: 44 tot 63 Wh per dag, batterij ±250 Wh (hoofdstuk 21 en 33 van F)
- verwarming: vermogen en energie
- water: effect volgens het model
- een onderbouwde keuze
- 1Verwarming: 1 °C extra vraagt in evenwicht , negen uur lang: per nacht. Dat is twee à drie keer het hele dagbudget van de meetkas en meer dan de helft van de batterij. Elektrisch verwarmen valt af.
- 2Water: 20 L voegt toe, 40 L . Het model met die grotere :
variant (model) hoogste T overdag 22-6 uur: kleinste T − Tb 22-6 uur: gemiddeld T − Tb zonder buffer 30,5 °C 0,1 °C 0,3 °C 17 W verwarming 's nachts 30,5 °C 1,1 °C 1,3 °C + 20 L water 28,8 °C 0,5 °C 1,5 °C + 40 L water 26,6 °C 1,4 °C 3,4 °C - 3Het water neemt overdag warmte op (de top zakt tot 27 °C met 40 L) en geeft ze 's nachts af: met 40 L blijft de kas de hele nacht minstens 1,4 °C warmer dan buiten. Bonus: minder oververhitting, dus minder raambewegingen.
- 4Maar dit is een bovengrens. Het model met één knoop veronderstelt dat water en lucht altijd dezelfde temperatuur hebben; in werkelijkheid geeft een jerrycan zijn warmte maar traag af (twee knopen, hoofdstuk 17). Het water moet overdag in de zon staan en 's nachts aan de lucht: tussen de plantenbakjes is geen plaats, dus bv. zwarte flessen langs de achterwand.

Waar differentiaalvergelijkingen vandaan komen en waar ze heen gaan
Een differentiaalvergelijking verbindt de afgeleide (hoofdstuk 1) met het integreren (hoofdstuk 3): ze zegt hoe snel iets verandert, en de oplossing telt die veranderingen op. Ze is de taal van elk dynamisch model, van warmte (E) en elektronica (L) tot groei in de biologie (B) en regelen (R). Simuleren is programmeren (P) in dienst van die modellen.
Groeifactor, verdubbelings- en halveringstijd, de thee en de algen: hier als dy/dt = ky.
Warmtecapaciteit C = m · c en de nachtbuffer van de module.
UA van de meetkas (16,7 W/K) en de module (20,2 W/K).
De RC-meting en de vaste fractie per stapje: de voorloper van Euler.
De raaklijn als benadering is de Euler-stap; centrale differenties schatten r uit de algen.
Scheiden van veranderlijken is integreren; Euler is een linker Riemann-som, Heun een trapeziumregel.
Het warmtemodel met twee knopen: de trage massa die hier ontbrak.
Logistische groei en Lotka-Volterra: stelsels van groeivergelijkingen.
Runge-Kutta, stapgrootteregeling, impliciete methoden voor stijve stelsels, parameters fitten.
Eerste- en tweedeordesystemen, tijdconstante en stapresponsie.
De PID-simulatie van het station is een Euler-simulatie met τ = 3 h.
De digitale tweeling: een stelsel differentiaalvergelijkingen dat meeloopt met de metingen.
In het kort
- Een differentiaalvergelijking met een beginwaarde beschrijft een verandering; je stelt ze op als balans (in − uit) en controleert de eenheden.
- Het richtingsveld toont in elk punt de helling; oplossingen raken eraan en kruisen elkaar niet. Evenwichten liggen waar .
- Scheiden van veranderlijken geeft en (Newton, RC, station); .
- Logistische groei vlakt af naar de draagkracht ; de relatieve groei is lineair in , zo vind je en uit metingen.
- Euler: , stappen langs de raaklijn; werkt ook voor stelsels (vectoren).
- De globale fout van Euler is evenredig met (orde 1), die van Heun met . Euler op verval is alleen stabiel voor ; de kleinste tijdconstante beslist.
- Een simulatie vergelijk je met metingen via de rms-fout én de residuen: een patroon in de residuen wijst op een ontbrekend mechanisme.
- De meetkas volgt met , en ; eis K7 haal je met water, niet met watt.
Wat je nu kent
- differentiaalvergelijking
- Een vergelijking tussen een onbekende functie en haar afgeleide(n), bv. : ze zegt hoe snel verandert in elke toestand.
- beginwaardeprobleem
- Een differentiaalvergelijking samen met een beginwaarde ; als netjes is, ligt de oplossing daarmee vast.
- evenwicht
- Een constante oplossing met . Stabiel als oplossingen in de buurt ernaartoe gaan, onstabiel als ze ervan weglopen.
- richtingsveld
- Een tekening met in elk punt een kort lijnstuk met helling ; oplossingen raken overal aan die lijnstukjes.
- scheiden van veranderlijken
- Oplossingsmethode voor : alle naar één kant, alle naar de andere, en beide kanten integreren.
- tijdconstante
- De tijd waarin een exponentieel proces nog 37 % () van zijn afstand tot het evenwicht over heeft.
- logistische groei
- Groei volgens : eerst exponentieel, daarna afremmend naar de draagkracht (Verhulst, 1838).
- methode van Euler
- Numerieke oplossing met stappen langs de raaklijn: .
- orde van een methode
- De macht van waarmee de globale fout daalt: Euler orde 1 (fout ), Heun orde 2 (fout ).
- numerieke stabiliteit
- Een methode is stabiel als fouten niet aangroeien. Euler op is stabiel voor .
- stijf stelsel
- Een stelsel met sterk verschillende tijdconstanten: de snelste bepaalt de toegelaten stap, ook als ze niet interessant is.
- residu
- Het verschil tussen model en meting in één punt. Een patroon in de residuen wijst op een ontbrekend mechanisme.