We zijn aanbeland bij alweer de vijfde les over Kracht en beweging modelleren met Python. Nu we de basisprincipes van het programmeren onder de knie hebben en we weten hoe we grafieken kunnen maken, moeten we gaan toewerken naar het modelleren van Kracht en Beweging.

Docenten die Python willen geven binnen de context van een ander van dan natuurkunde willen wij aanraden om binnen de lesmethodes aansluiting proberen te vinden. Bij natuurkunde staan er vaak oefeningen over modelleren in de handboeken. Probeer dan ook de theorie en het Python model met elkaar te combineren. De leerlingen worden zo ook sterker in het vak en hebben diepgaandere kennis al ze ook een computermodel ervan hebben gemaakt. Wellicht is het mogelijk om marktwerking te modelleren binnen economie, en kansberekening binnen wiskunde.

We werken we aan een computermodel voor vrije val. Het doel is om een (x,t)-diagram en een (v,t)-diagram te maken van vrije val gedurende de eerste 5 seconden. We nemen aan dat het voorwerp begint te vallen vanuit stilstand.

Model bedenken

Laten we het geval van vrije val eens bekijken. Deze beweging kenmerkt zich door een constante valversnelling van 9,81 m/s2. We negeren hierbij de luchtwrijving. We beginnen vanuit stilstand, dus laten we voor de eenvoud de beginwaarden als volgt kiezen:

  • t = 0 s
  • v = 0 m / s
  • x = 0 m

Op tijdstip 0 (het begin) is de snelheid 0 (m/s) en de plaats is 0 (m).

We willen daarna telkens een klein tijdstapje nemen en dan de volgende berekeningen doen:

  1. Er is, aangezien we luchtwrijving negeren, een constante versnelling van 9,81 m/s2
  2. De nieuwe snelheid volgt uit de oude snelheid plus de verandering van snelheid
  3. Met de nieuwe snelheid kun je de verplaatsing berekenen
  4. De nieuwe plaats volgt uit de oude plaats plus de verplaatsing

Zodra we de nieuwe snelheid en plaats hebben berekend, willen we deze berekeningen herhalen voor het volgende tijdstapje. Als tijdstapje nemen we 0,01 seconden. Zo nemen we in totaal 500 stapjes in de tijd, zodat we uiteindelijk 5 seconden hebben gemodelleerd.

Het is goed om hier klassikaal uitleg over te geven, zodat de leerlingen deze theorie goed begrijpen voordat ze het model gaan programmeren. Dit model breiden we in de volgende lessen uit met een berekening van de resulterende kracht, waarbij de versnelling niet meer constant is, maar afhankelijk van de resulterende kracht op het voorwerp. Het stappenplan wordt dan uitgebreid maar de laatste stapjes blijven gelijk.

Beginwaarden van het model

We definiëren nu de volgende beginwaarden:

#initial time is 0 seconds
t = 0

#initial velocity is 0 m/s
v = 0

#initial position is 0 m
x = 0

#delta t time step for each iteration
dt = 0.01

#total time of the simulation is 5 s
total_time = 5

#start with an empty list of times, velocities and positions
times = []
velocities = []
positions = []

We hebben het al gehad over de beginwaarden t = 0 (s), v = 0 (m/s) en x = 0 (m). Ook nemen we telkens een klein stapje dt van 0,01 s.

We moeten echter ook de totale tijd van de simulatie in onze beginwaarden opnemen. Deze kunnen we zo later gemakkelijk aanpassen om de simulatie langer of korter te laten duren.

Tenslotte moeten we voor het maken van de (x,t)- en (v,t)-diagrammen lijsten hebben van tijd, plaats en snelheid, zodat we weer de plot functie kunnen gebruiken van Matplotlib. We beginnen met een lege lijst voor elke parameter en gaan deze in iedere tijdstap vullen.

Kleine tijdstapjes in een loop

Voor deze simulatie kiezen we voor de while loop. Het idee is, dat de simulatie moet stoppen als de tijd gelijk is aan de totale tijd van de simulatie. Als we dit gedaan hebben, dan gaan we door naar het maken van grafieken. We beginnen met het maken van de while loop zonder alle berekeningen ertussen. Zo kunnen we kijken of de while loop werkt.

while t <= total_time:
  print(t)
  t += dt

print('done')

We tellen dus steeds het tijdstapje dt op bij de tijd t. We blijven de code herhalen zolang de tijd kleiner of gelijk is aan de totale tijd van de simulatie. We zien aan de hand van de print statements dat de loop telkens herhaalt, de actuele tijd print (in stapjes van 0,01 s) en stopt op 5 seconden. Wat je wel zult zien, is dat de getallen soms erg veel cijfers achter de komma bevatten, en alleen afgerond kloppen. Dit komt door “floating-point representation error”. Geïnteresseerde leerlingen kunnen hier op internet meer informatie over vinden.

We gaan de loop nu uitbreiden met de stappen om de snelheid en plaats te berekenen:

while t <= total_time:
  t += dt
  v += 9.81 * dt
  x += v * dt
  times.append(t)
  velocities.append(v)
  positions.append(x)

print(times)
print(velocities)
print(positions)

De verandering van snelheid is de versnelling maal delta t. Dit tellen we op bij de oude snelheid. Herinner je dat v += 9.81 * dt hetzelfde is als v = v + 9.81 * dt. Hierbij is de v aan de rechterkant van het is-gelijk-teken de oude snelheid.

De verplaatsing is gelijk aan de snelheid maal delta t. Oplettende leerlingen zullen (hopelijk) opmerken dat de snelheid over delta t niet constant was. Echter, hoe kleiner delta t genomen wordt, hoe nauwkeuriger het resultaat. Je kunt eventueel ook de verplaatsing berekenen met het gemiddelde van oude en nieuwe snelheid. Leuke (extra) taak voor de snelle en oplettende leerling.

Aan het einde van de loop voegen we de tijd, snelheid en positie toe aan de lijsten, zodat we deze klaar hebben om mooie grafieken mee te maken.

Grafieken maken

We willen van deze vrije val het (x,t)-diagram en het (v,t)-diagram maken. We gebruiken hiervoor Matplotlib.

import matplotlib.pyplot as plt

plt.plot(times, velocities)
plt.ylabel('v (m/s)')
plt.xlabel('t (s)')
plt.title('(v,t)-diagram')
plt.show()

plt.plot(times, positions)
plt.ylabel('x (m)')
plt.xlabel('t (s)')
plt.title('(x,t)-diagram')
plt.show()

We maken eerst het (v,t)-diagram. Hiervoor gebruiken we de lijsten “times” en “velocities” die we al gevuld hebben in onze code. Zoals we al eerder hebben gezien, kunnen we labels toevoegen aan de x- en y-as en de grafiek een titel geven.

Hetzelfde doen we voor het (x,t)-diagram. Aan het einde krijgen we twee mooie grafieken van vrije val:

Hier vind je het Python Colab Notebook van dit model.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *