← Back to CoursesStemExpert
StemExpert
Expert · Handboek · 36. Numerieke methoden en wetenschappelijk rekenen
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
E36. Numerieke methoden en wetenschappelijk rekenen
EExpert · deel E7 · Informatica

Handboek · hoofdstuk 36Numerieke methoden en wetenschappelijk rekenen

Een getal is pas een resultaat als je ook zijn fout en gevoeligheid kent

De digitale tweeling bevat onbekende parameters en differentiaalvergelijkingen. Je gebruikt arrays, nulpuntsmethoden en gecontroleerde integratie om uit data een model te maken. Je onderscheidt afronding, discretisatie, meetruis en een ontoereikend model.

9× uitleg3× uitgewerkt voorbeeld1× verhaal1× het geheel1× code9 opdrachten in het werkboek± 12 lestijden
Twee gemeten temperaturen helpen de snelle lucht en trage buffer van elkaar onderscheiden.
Twee gemeten temperaturen helpen de snelle lucht en trage buffer van elkaar onderscheiden.
Na dit hoofdstuk
Uitleg · 36.1

Arrays zijn meer dan kortere lussen

1/15

Een NumPy-array heeft een vaste dtype, vorm (shape) en geheugenindeling. t=np.arange(0,3601,60) geeft 61 tijdstippen in seconde. T=5+20*np.exp(-t/10800) evalueert dezelfde formule over alle punten. NumPy voert veel elementbewerkingen in gecompileerde code uit; de uitdrukking maakt ook zichtbaar dat alle samples dezelfde regel volgen.

Een tabel met n tijden en twee temperaturen heeft vorm (n,2). De vector met twee capaciteiten heeft vorm (2,); broadcasting deelt elke kolom door de bijbehorende capaciteit. Vorm (n,1) naast (n,) kan onbedoeld een (n, n)-array maken. Controleer vormen, eenheden en assen voordat een snelle berekening een groot verkeerd resultaat produceert. Gebruik @ voor matrixproducten, * voor elementgewijze producten.

uitdrukkingbetekenis
y[:,0]luchtkolom
y.mean(axis=0)gemiddelde per sensor
A @ xmatrix-vectorproduct
np.isfinite(y)masker van eindige waarden
Uitleg · 36.2

Een wortel insluiten: bisectie

2/15

Een nulpunt voldoet aan . Als f continu is en , ligt minstens één nulpunt tussen a en b. Bereken het midden en behoud de helft met tekenwisseling. De invariant is dus een continu interval met een ingesloten wortel. Bij een sprong kan tekenwisseling zonder nulpunt bestaan; continuïteit is essentieel.

Na k stappen is de intervalbreedte . Geef je het midden terug, dan is de fout hoogstens . Dit levert een echte garantie zonder afgeleide. Stop zowel op een absolute als relatieve breedte in praktische code; een kleine functiewaarde alleen is onvoldoende bij een vlakke functie.

aantal halveringen voor middenfout ε
Uitgewerkt voorbeeld · 36.3

Een tolerantie plannen

3/15
Voor is het startinterval [1,2].
Gegeven
  • vereiste fout ≤ 10⁻⁶
Gevraagd
  • Minimum aantal bisectiestappen
Oplossing
  1. 1
    , en f is continu.
  2. 2
    geeft .
  3. 3
    Na 19 halveringen is de middenfout maximaal .
Antwoord
19 stappen zijn genoeg voor deze absolute foutgarantie.
Klopt dit? De werkelijke fout kan kleiner zijn; de intervalgrens is een bovengrens.
Uitleg · 36.4

Newton: de raaklijn voorspelt de wortel

4/15

Lineariseer bij : . Zet dit gelijk aan nul:

Newton-Raphson

Bij een eenvoudige wortel, gladde f en een goede start is de convergentie lokaal kwadratisch: het aantal goede cijfers kan ongeveer verdubbelen. De methode heeft geen algemene globale garantie. Een kleine afgeleide geeft een enorme sprong; een slecht startpunt kan naar een andere wortel leiden of blijven slingeren. Voor gaat start 0 naar 1 en weer naar 0.

Een safeguarded methode bewaart een betrouwbaar bracket en aanvaardt Newton alleen als de stap daarbinnen ligt en voldoende voortgang maakt; anders volgt bisectie. In meerdere dimensies wordt de afgeleide een Jacobiaan en los je een lineair stelsel op. Dat vraagt goed geschaalde variabelen en een controle op singulariteit.

Uitleg · 36.5

Fitten: parameters moeten de proef verklaren

5/15

Het model voorspelt ; de data geven . Kleinste kwadraten kiest parameters die minimaliseren. Gewichten passen bij de meetonzekerheid. Ze maken een grof instrument niet belangrijker doordat het veel samples levert. Gecorreleerde samples vragen een covariantiemodel of passende subsampling.

Een warmteproef moet input en beginvoorwaarden kennen. De proef hier gebruikt de modulecapaciteiten , , buiten 5 °C, koppeling 30 W/K en verlies 20,2 W/K. De capaciteiten worden vastgehouden; de fit schat alleen verlies UA en koppeling H. Twee sensoren en opwarm- én afkoelfase maken die parameters beter onderscheidbaar. Dit model hoort bij de module; de 540 kJ/K van e39 is een afzonderlijke snelle stationsknoop.

012345678510152025303540t (h)T (°C)lucht, model metingenlucht, fitbuffer
Synthetische proef vanaf 08:00 UTC+1: vier uur 800 W, daarna vier uur afkoelen; elke tien minuten beide temperaturen.
Uitgewerkt voorbeeld · 36.6

Het begin van de warmteproef

6/15
Lucht en buffer starten beide op 18 °C, buiten 5 °C; het vermogen is 800 W.
Gegeven
  • Ca=80000 J/K, UA=20,2 W/K
  • Ta=Tb=18 °C
Gevraagd
  • De beginhellingen van beide knopen
Oplossing
  1. 1
    De lucht-bufferstroom is 30×(18−18)=0 W.
  2. 2
    Buitenverlies is 20,2×(18−5)=262,6 W; netto naar de lucht 537,4 W.
  3. 3
    dTa/dt=537,4/80000=0,0067175 K/s=24,183 K/h. De bufferhelling is op dit eerste ogenblik nul; zodra de lucht warmer is, begint de buffer te volgen.
Antwoord
Een snelle beginhelling bewijst niet dat de hele module 24 K per uur blijft opwarmen.
Klopt dit? De evenwichtshelling wordt nul; de stijging vertraagt door buitenverlies en bufferopname.
Uitleg · 36.7

De balans wordt een numerieke functie

7/15

De lucht ontvangt vermogen P, verliest warmte naar buiten en wisselt warmte uit met de buffer. De buffer ontvangt precies die laatste stroom. Daarom:

snelle knoop
trage knoop

Optellen schrapt de interne uitwisseling: . Dat is een controle op energiebewaring. Een fout in het teken van H zou bij twee gelijke temperaturen onzichtbaar kunnen blijven maar later energie creëren. Integratie en residuen worden met dezelfde modelroutine berekend, zodat grafiek en fit niet uiteenlopen.

Uitleg · 36.8

Euler en RK4 afleiden

8/15

Euler gebruikt de helling aan het begin: . De lokale fout per stap is , de globale fout over een vaste tijd . RK4 gebruikt hellingen aan begin, twee middenpunten en einde: , , , . De combinatie is:

klassieke Runge-Kutta van orde vier

De gewichten vallen niet uit een gemiddelde-intuïtie alleen af te leiden; ze zijn gekozen om de Taylorontwikkeling tot en met h⁴ te laten overeenkomen. De globale fout is bij voldoende gladheid . Bij een inputschakelaar is het proces niet glad over de stap: laat de integrator precies op het schakelmoment eindigen. Adaptieve methoden schatten de fout en verkleinen de stap waar nodig.

Code · 36.9

Fit en integratie uit één modelroutine

9/15

Alle model metingen zijn synthetisch: startwaarde 36 geeft reproduceerbare Gaussruis met σ = 0,05 K. De least_squares-fit werkt op logparameters en positieve grenzen. De getoonde rms is trainingsresidu, geen onafhankelijke voorspellingsfout.

Pythonwarmte_fit.py59 regelsDownload
import numpy as npfrom scipy.optimize import least_squares def bisectie(f, a, b, tol=1e-8):    fa, fb = f(a), f(b)    if fa == 0: return a    if fb == 0: return b    if fa * fb > 0: raise ValueError("geen tekenwisseling")    while (b-a)/2 > tol:        m = (a+b)/2        fm = f(m)        if fm == 0: return m        if fa*fm < 0: b = m        else: a, fa = m, fm    return (a+b)/2 def rk4(f, y, h):    k1 = f(y)    k2 = f(y+h*k1/2)    k3 = f(y+h*k2/2)    k4 = f(y+h*k3)    return y+h*(k1+2*k2+2*k3+k4)/6 # Twee knopen, dezelfde rekenwaarden als i31/e17. Tijd in seconde.C = np.array([80000.0, 1100000.0])t = np.arange(0, 8*3600+1, 600)def model(logp):    ua, koppeling = np.exp(logp)  # positieve W/K, schaalbaar fitten    y = np.array([18.0,18.0])    waarden = [y.copy()]    for links,rechts in zip(t,t[1:]):        vermogen = 800.0 if links < 4*3600 else 0.0        def f(z):            lucht, buffer = z            q = koppeling*(lucht-buffer)            return np.array([vermogen-ua*(lucht-5)-q,q])/C        for _ in range(10): y = rk4(f,y,60.0)        waarden.append(y.copy())    return np.array(waarden) rng = np.random.default_rng(36)waar = model(np.log([20.2,30.0]))metingen = waar + rng.normal(0,0.05,waar.shape)fit = least_squares(lambda p: (model(p)-metingen).ravel()/0.05,                    np.log([18,26]), bounds=(np.log([5,5]),np.log([80,100])))ua, koppeling = np.exp(fit.x)print("UA, H", *(f"{v:.3f}" for v in (ua,koppeling)), "W/K")print("residu rms", f"{np.sqrt(np.mean((model(fit.x)-metingen)**2)):.4f}", "K")print("nulpunt x^2-2", f"{bisectie(lambda x:x*x-2,1,2):.8f}")for h in (1800,900,450):    euler = 20.0    r = 20.0    for _ in range(int(10800/h)):        euler += h*(-euler/10800)        r = rk4(lambda z:-z/10800,r,h)    exact = 20*np.exp(-1)    print("stap", h, "Eulerfout", f"{abs(euler-exact):.6f}",          "RK4-fout", f"{abs(r-exact):.6f}")assert abs(ua-20.2)<0.2 and abs(koppeling-30)<0.5
UA, H 20.179 30.036 W/K
residu rms 0.0441 K
nulpunt x^2-2 1.41421356
stap 1800 Eulerfout 0.659629 RK4-fout 0.000054
stap 900 Eulerfout 0.317676 RK4-fout 0.000003
stap 450 Eulerfout 0.156001 RK4-fout 0.000000
012345678510152025303540t (h)T (°C)lucht, model metingenlucht, fitbuffer
Synthetische proef vanaf 08:00 UTC+1: vier uur 800 W, daarna vier uur afkoelen; elke tien minuten beide temperaturen.
Uitleg · 36.10

Stabiliteit is een ander criterium dan nauwkeurigheid

10/15

Voor geeft Euler . Een werkelijk uitdovend systeem blijft alleen numeriek uitdoven als . Bij betekent dit . Als wisselt de numerieke oplossing van teken, hoewel echte afkoeling dat niet doet. Voor monotone afkoeling is h≤τ noodzakelijk in deze test; voor nauwkeurigheid kies je veel kleiner.

In het tweeknoopsmodel bepalen beide eigenwaarden van de systeemmatrix de stapgrens. De snelle lucht kan een stap klein maken terwijl de buffer urenlang verandert: een stijve situatie. RK4 heeft een groter maar eindig stabiliteitsgebied. Een impliciete methode kan helpen, maar verplaatst het werk naar stelseloplossingen. Onvoorwaardelijke stabiliteit betekent evenmin automatisch nauwkeurigheid.

Euler-stabiliteit voor de lineaire testvergelijking
Uitgewerkt voorbeeld · 36.11

Een stabiel systeem numeriek laten ontploffen

11/15
De echte afkoeling heeft τ=10800 s; Euler krijgt h=30000 s.
Gegeven
  • y0=20 K
Gevraagd
  • De eerste twee Eulerwaarden en de conclusie
Oplossing
  1. 1
    De factor is 1−30000/10800=−1,77778, met modulus groter dan 1.
  2. 2
    y1=−35,5556 K; y2=63,2099 K. De tekenwisseling en groei komen uit de integrator, niet uit de warmtebalans.
  3. 3
    Een kleinere stap moet eerst de stabiliteitsgrens halen en daarna voldoende nauwkeurig zijn. De fysieke parameters aanpassen om de numerieke explosie weg te werken zou de fout verbergen.
Antwoord
Euler divergeert hoewel het echte systeem naar nul gaat.
Uitleg · 36.12

Afronding, subtractie en conditionering

12/15

Float 64 bewaart ongeveer 16 significante decimale cijfers. Ronding ontstaat bij elke niet exact representeerbare operatie. hoeft binair niet exact 0,3 te zijn. Gebruik een tolerantie die uit de toepassing volgt; willekeurig ‘meer decimalen’ tonen is geen onzekerheidsanalyse.

Bij subtractie van bijna gelijke getallen verdwijnt relatieve informatie. is voor klein x nauwkeuriger als . Voor exponentiële kleine veranderingen helpt np.expm 1(x). Numeriek differentiëren verlaagt truncatiefout bij kleiner h, maar versterkt meetruis en afronding door 1/h. Een goede stap is dus een afweging. Conditionering betreft het probleem; stabiliteit betreft het algoritme dat het oplost.

foutbroncontrole
afrondingstabiele algebra, geschikte dtype
tijdstaph halveren en verschil meten
meetruisonzekerheidsmodel en replicatie
modeltekortresiduen tegen tijd/input plotten
Uitleg · 36.13

Een fit beoordelen en weigeren

13/15

Een klein residu kan ontstaan door te veel vrije parameters. Fit niet alle warmtecapaciteiten, koppelingen en sensorvertragingen tegelijk op één korte luchtmeting. Plot residuen tegen tijd, temperatuur en input; een langdurig tekenpatroon wijst op vertraging of een ontbrekende knoop. Valideer op een andere vermogenscyclus en buitenconditie.

Bereken gevoeligheden numeriek: verander één parameter licht en bekijk de verandering van de voorspelling. Bij bijna parallelle gevoeligheidskolommen zijn parameters onderling uitwisselbaar. Een covariance uit lokale linearizatie is dan instabiel. Rapporteer de vastgehouden parameters, grenzen, meetruis, validatiefout en geldigheidsgebied. Een ‘fit’ op synthetische data controleert het programma; ze toont nog niet dat Habitat werkelijk dit model volgt.

acceptatiebewijsafwijzingssignaal
onafhankelijke proefzelfde data voor fit en test
stabiele parameters bij herhalingfit raakt grens
residuen zonder structuurfasefout na iedere schakelaar
voldoende gevoeligheidsterk gecorreleerde parameters
Verhaal · 36.14

Wetenschappelijk rekenen wordt reproduceerbaar

14/15

De NumPy-documentatie beschrijft broadcasting als vormcompatibiliteit vanaf de laatste dimensie: maten zijn gelijk of één. SciPy onderscheidt lokale least-squares-optimalisatie van integratie met fouttoleranties. Deze API-contracten zijn onderdeel van het experiment, naast de fysische vergelijkingen.

Bronnen: NumPy broadcasting, SciPy least_squares en solve_ivp, geraadpleegd 30-09-2026. Een logboek bewaart pakketversies, startwaarde, proefdata, codecommit en fitinstellingen. Dat laat een ander dezelfde uitkomst narekenen en een modelkeuze tegenspreken.

bestandinhoud
data.csvtijd, input, beide sensoren, kwaliteit
model.pybalans en integrator
manifest.jsonversies, grenzen, startwaarde
resultaatparameters, residuen en testfout
Het geheel · 36.15

Van proef naar digitale tweeling

15/15

Het model moet fysica, code en statistiek tegelijk verdragen. De fit levert een onderbouwde parametercombinatie; systeemidentificatie beoordeelt de dynamiek en sensorfusie bewaakt de metingen.

Warmtebalansen en knoopwaarden.

Euler en eerste dynamische modellen.

Eigenwaarden en staprespons.

Validatie en residuen van voorspelmodellen.

Habitat

Habitat fit UA en H op een afzonderlijke warmteproef, met vaste capaciteiten als eerste identificatiestap. Een nieuwe fit mag de stationsdossierwaarden pas vervangen nadat echte data en een onafhankelijke validatie beschikbaar zijn.

Samenvatting

In het kort

Begrippen

Wat je nu kent

vectoriseren
Een bewerking over een array uitdrukken in arrayoperaties in plaats van een Python-lus.
residu
Het verschil tussen waarneming en modelwaarde.
conditionering
Hoe gevoelig de exacte oplossing is voor een kleine wijziging van de invoer.
discretisatiefout
Afwijking door een continue vergelijking met eindige stappen te benaderen.
identificeerbaarheid
De mogelijkheid om parameters afzonderlijk uit de beschikbare proef te bepalen.
Aan de slag in het werkboek9 opdrachten, van oefenen tot uitdagen