Programmeren met spreadsheets/Voorbeeld: groeiprocessen: verschil tussen versies

Uit Lab
Naar navigatie springen Naar zoeken springen
Regel 54: Regel 54:
Veel processen in de natuur kun je beschrijven met een stelsel differentiaalvergelijkingen.
Veel processen in de natuur kun je beschrijven met een stelsel differentiaalvergelijkingen.
Als je de stapjes in de tijd maar voldoende klein maakt ten opzichte van de snelheid van het proces, dan is deze differentievergelijking een bruikbare benadering van de differentiaalvergelijking.
Als je de stapjes in de tijd maar voldoende klein maakt ten opzichte van de snelheid van het proces, dan is deze differentievergelijking een bruikbare benadering van de differentiaalvergelijking.
== Tabellen uitrekenen via optellen en aftrekken ==
De tabel van een groeifunctie maken we door de volgende waarde steeds uit de vorige uit te rekenen. We kunnen dit principe (o.a. voor polynomen) consequent zo doorvoeren dat we voor het uitrekenen van een volgende waarde alleen hoeven op te tellen en af te trekken. We geven hiervan voorbeelden voor <math>y(n)=n^2</math> en <math>y(n)=n^3</math>.
Afleiding voor <math>y(n)=n^2</math>:
<code>
y(n) = n^2
y(n+1) = (n+1)^2
            = n^2 + 2.n + 1
            = y(n) + 2.n + 1
            = y(n) + dy(n)
dy(n) = 2.n + 1
dy(n+1) = 2.(n+1) + 1
              = 2.n + 2 + 1
              = dy(n) + 2
</code>
Afleiding voor <math>y(n)=n^3</math>:
<code>
y(n) = n^3
y(n+1) = (n+1)^3
            = n^3 + 3.n^2 + 3.n + 1
            = y(n) + 3.n^2 + 3.n + 1
dy(n) = 3.n^2 + 3.n + 1
dy(n+1) = 3.(n+1)^2 + 3.(n+1) + 1
              = 3.n^2 + 6.n + 3 + 3.n + 3 + 1
              = dy(n) + 6.n + 6
ddy(n) = 6.n + 6
ddy(n+1) = 6.(n+1) + 6
                = 6.n + 6 + 6
                = ddy(n) + 6
</code>

Versie van 13 mrt 2019 13:49

Voorbeeld: groeiprocessen

Processen met groei (of krimp) kom je overal tegen:

  • de hoeveelheid geld op een bankrekening
  • de groei van bacteriën op een voedingsbodem
  • de groei van het aantal (mogelijke) verbindingen in een netwerk
  • het vollopen van een emmer water onder een kraan
  • het leeglopen van een vat met water via een kraan onderin
  • en veel andere vergelijkbare voorbeelden.

Deze groei hoeft niet altijd een functie van de tijd te zijn: in de informatica gebruik je het begrip complexiteit om aan te geven hoe de hoeveelheid rekenwerk afhangt van de omvang van het probleem. Voor verschillende algoritmen groeit de hoeveelheid rekenwerk verschillend bij eenzelfde toenamen van de omvang van het probleem.

Het triviale model is *nulgroei*: de hoeveelheid H blijft gelijk.

Lineaire groei

Het eenvoudigste niet-triviale model is lineaire groei: de hoeveelheid H neemt elke stap met een constante toe: . Of ook wel:

We kunnen dit groeiproces eenvoudig in een spreadsheet weergeven:

  • de eerste kolom (A) geeft de tijd (of het nummer van de stap) weer: ; we beginnen, zoals gebruikelijk in de informatica, bij 0.
  • de eerste rij beschrijft de begintoestand: , in kolom B
    • C1 bevat de constante </math>K</math>
  • elke volgende rij heeft dezelfde formule: =B1 + $C$1

Voorbeelden:

  • lineair zoeken

Kwadratische groei

Voorbeelden:

  • netwerken (van internet tot Facebook etc.): het aantal mogelijke (directe) verbindingen; wet van Metcalfe (over de waarde van een netwerk)
  • (minder slimme) sorteeralgoritmen


Exponentiële groei

Voorbeelden:

  • rente (samengestelde interest, "rente op rente")
  • sommige rekenprocessen (algoritmen): bijvoorbeeld Traveling Salesman, SAT (voor welke waarden van de logische variabelen levert een bepaalde logische uitdrukking true op?)

Logaritmische groei

Voorbeelden:

Simulatie van processen uit de natuur

De manier van werken die we hiervoor gebruikt hebben lijkt sterk op het werken met differentievergelijkingen. Dit zijn de discrete varianten van differentiaalvergelijkingen. Veel processen in de natuur kun je beschrijven met een stelsel differentiaalvergelijkingen. Als je de stapjes in de tijd maar voldoende klein maakt ten opzichte van de snelheid van het proces, dan is deze differentievergelijking een bruikbare benadering van de differentiaalvergelijking.

Tabellen uitrekenen via optellen en aftrekken

De tabel van een groeifunctie maken we door de volgende waarde steeds uit de vorige uit te rekenen. We kunnen dit principe (o.a. voor polynomen) consequent zo doorvoeren dat we voor het uitrekenen van een volgende waarde alleen hoeven op te tellen en af te trekken. We geven hiervan voorbeelden voor en .

Afleiding voor : y(n) = n^2

y(n+1) = (n+1)^2

           = n^2 + 2.n + 1
           = y(n) + 2.n + 1
           = y(n) + dy(n)

dy(n) = 2.n + 1

dy(n+1) = 2.(n+1) + 1

             = 2.n + 2 + 1
             = dy(n) + 2

Afleiding voor :

y(n) = n^3

y(n+1) = (n+1)^3

           = n^3 + 3.n^2 + 3.n + 1
           = y(n) + 3.n^2 + 3.n + 1

dy(n) = 3.n^2 + 3.n + 1

dy(n+1) = 3.(n+1)^2 + 3.(n+1) + 1

             = 3.n^2 + 6.n + 3 + 3.n + 3 + 1
             = dy(n) + 6.n + 6

ddy(n) = 6.n + 6

ddy(n+1) = 6.(n+1) + 6

               = 6.n + 6 + 6
               = ddy(n) + 6