Python in de klas – les 8

Dit is alweer de laatste les van deze lessenserie. De leerlingen hebben hopelijk veel ervaring opgedaan met programmeren in Python. Ook is er veel natuurkunde aan bod gekomen. We gaan deze les proberen om ons model van Felix Baumgartner’s val te vergelijken met de opgenomen gegevens tijdens de val. We gaan daarna de grootste onbekende, namelijk de wrijvingscoëfficiënt, optimaliseren om een zo klein mogelijk verschil te krijgen tussen de echte waarden en ons model.

Opgenomen valgegevens inladen

HandiHow heeft de valgegevens al verwerkt in een csv bestand, en dit csv bestand gepubliceerd op Github in een openbare repo. Dit is gelijk een handige manier om ook in de toekomst andere bestanden in te kunnen laden. Er zijn ook andere manieren, zoals het bestand in je Google Drive zetten en het daar uitlezen, of het bestand van een locale computer inladen. Meer informatie hierover kun je vinden in deze blog over 3 manieren van inladen van csv bestanden in Google Colab.

import pandas as pd

url = 'https://raw.githubusercontent.com/handihow/felixbaumgartnerjumpdata/main/jumpdata.csv'
df1 = pd.read_csv(url)

jump_times = df1['Time (s)']
jump_altitudes = df1['Altitude (m)']
jump_speeds_kmh = df1['Speed (Km/h)']

jump_positions = []
jump_velocities = []

i = 0

for time in jump_times:
  jump_positions.append(total_height - jump_altitudes[i])
  jump_velocities.append(jump_speeds_kmh[i]/3.6)
  i += 1

print(jump_positions)
print(jump_velocities)

Om het csv bestand in te laden, gebruiken we de Python library “pandas”. We importeren eerst “pandas”. Daarna geven we het online adres van het csv bestand op Github. Met behulp van de “read_csv” functie van pandas kunnen we deze url inladen. De gegevens staan nu in een zogenaamd “Pandas Dataframe”. De verschillende kolommen kunnen we vervolgens in lijsten opslaan. Deze kolommen krijgen door pandas automatisch de index van de eerste regel van het bestand. Als je het bestand via de url bekijkt, zie je namelijk dat de kolomhoofden ‘Time (s)’, ‘Altitude (m)’ en ‘Speed (Km/h)’ zijn. We slaan deze lijsten op in de variabelen ‘jump_times’, ‘jump_altitudes’ en ‘jump_speeds_kmh’.

Daarna maken we een “for-loop” om de gegevens te transformeren zodat we ze in onze grafieken kunnen zetten. We moeten daarom de hoogte omzetten in verplaatsing en de snelheden omzetten naar meter per seconde. Dit is ook een goede oefening voor leerlingen! Laat ze dit dus eerst zelf proberen.

Met het print statement controleren we of onze twee nieuwe lijsten compleet zijn en aan onze verwachtingen voldoen.

Model en waarnemingen plotten

We willen nu ons model kunnen vergelijken met de waarnemingen. We gaan daarom de waargenomen snelheden en verplaatsingen in de grafieken zetten van ons model.

import matplotlib.pyplot as plt

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

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

Eigenlijk voegen we slechts de twee vetgedrukte regels toe. Het is echt niet zo moeilijk! We krijgen nu het volgende beeld.

Mooi! We zien dat ons model aardig in de goede richting zit. Toch is de snelheid iets te hoog waardoor ook de verplaatsing scheef loopt. Het probleem begint vooral als luchtwrijving een grotere rol begint te spelen. Discussieer met de leerlingen of dit enigszins logisch is!

Beginwaarden aanpassen

We hebben in eerste instantie aangenomen dat de waarde van de wrijvingscoëfficiënt 0,6 is. Laten we eerst eens proberen om een iets betere waarde hiervoor te kiezen. Aangezien ons model vrijwel overal een te hoge snelheid geeft, moet deze waarde omhoog. Op Wikipedia pagina van wrijvingscoëfficiënt staat dat een skispringer gemiddeld tussen 1,1 en 1,3 ligt. Laten we daarom 1,2 proberen. Dit levert de volgende grafieken op van (v,t) en (x,t)-diagrammen op:

We zien nu dat de totale verplaatsing tijdens de vrije val beter overeenkomt met de metingen. Het is interessant om te bespreken met de klas welke ideeën er verder nog zijn om het model nauwkeuriger te maken. Een paar mogelijkheden:

  • De dichtheid van lucht kan nauwkeuriger worden berekend met de gaswet. We hebben dit slechts benaderd door de dichtheid iedere 5500 meter te halveren.
  • Felix kwam na ongeveer 0:40 in een gevaarlijke spin. Dit duurde tot ongeveer 1:10. Wat zou het effect zijn van deze spin op de luchtwrijving? Het lijkt erop dat Felix tijdens deze periode sterker werd afgeremd dan ons model voorspelt.
  • Het is aannemelijk dat het frontale oppervlak varieerde tijdens de val. Felix kon immers zijn positie variëren van recht naar beneden vallen (minimaal frontaal oppervlak) tot plat op zijn buik vallen (maximaal frontaal oppervlak). Kan dit worden meegenomen in het model?
  • Was er sprake van wind? De curve van snelheid wordt wat hobbeliger na ongeveer 2 minuten.

Eindopdrachten

Je kunt deze lessenserie afronden met een eindopdracht. Een aantal ideeën voor modellen zijn, waarbij er telkens wordt gevraagd om het (x,t)-diagram en het (v,t)-diagram van deze beweging. Je kunt extra punten toekennen als wrijving wordt meegenomen in het model:

  • De beweging van een stuiterbal die van een hoogte van 10 meter valt. Als de bal de grond raakt, dan moet de richting van de snelheid van de bal worden omgekeerd. Laat de bal 10 keer stuiteren.
  • De beweging van een massa aan een veer. De veer wordt uitgerekt en daarmee ontstaat er een veerkracht die evenredig is aan de uitrekking. In ieder tijdstapje moet de veerkracht worden berekend, die zorgt voor een versnelling. Laat de massa 10 keer heen en weer bewegen.

Het cijfer voor deze eindopdracht is een 6 zonder wrijving en een 7 met wrijving. Je kunt een extra punt toekennen als de code heel netjes is gestructureerd en er gebruik is gemaakt van functies om de code op te splitsen.

Je zult wellicht leerlingen hebben die de smaak te pakken hebben gekregen en nog meer uitdaging zoeken. Voor deze leerlingen kun je uitdagende opdrachten bedenken, die niet zijn behandeld en veel eigen onderzoekswerk vergen. Je zult versteld staan van sommige leerlingen! Dit zijn ideeën voor twee-dimensionale opdrachten:

  • Het afschieten van een kanon. Zorg ervoor dat de hoek van het kanon kan worden ingesteld.
  • Aarde-maan of zon-aarde-maan. Deze beweging kun je ook heel mooi modelleren.

Er is Python library die het mogelijk maakt bewegingen van planeten visueel te maken: VPython. Dit kan worden geprogrammeerd op de website https://www.glowscript.org/. De twee-dimensionale opdrachten kunnen een 8 opleveren en een 9 met wrijving (kanon), of een 9 (aarde-maan) of 10 (zon-aarde-maan).

Dat was het!

Dit was het einde van deze serie. Je vindt hier nog de link naar de Google Colab Notebook van deze les. HandiHow wil scholen graag helpen om programmeren met Python tot een succes te maken in de klas. Vraag naar de mogelijkheden! En we zijn erg benieuwd naar jullie ervaringen met programmeren in de klas.

Deel

About the author

Roeland is the HandiHow company owner and lead education developer.

Laat een antwoord achter

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

Geïnteresseerd?

Neem contact op met HandiHow voor een vrijblijvend oriënterend gesprek.

nl_NLNederlands