1.1. Rekenen met lijsten#

In veel werktuigbouwkundige problemen zullen we series van getallen tegenkomen. Dit kan meetdata zijn, bijvoorbeeld de snelheid van een karretje die gedurende een bepaalde tijd gemeten is, maar het kunnen ook vectoren zijn. Series van getallen kunnen we opslaan in variabelen van het type list.

In de afgelopen drie instructies hebben we al vaker gewerkt met lijsten. Om een list-variabele aan te maken gebruikten we blokhaken ([]), en daarmee dus de ingebouwde lijsten van Python. In de meeste gevallen voldoet dit type, maar wanneer we vlug willen rekenen met de getallen in die lijst wordt het ietsje lastiger.

Stel bijvoorbeeld dat we de snelheid van een karretje hebben opgenomen, en de informatie uit onze metingen opgeslagen staan in twee lijsten.

  • één daarvan, tijd, bevat de tijd waarop metingen gedaan zijn en

  • de tweede, snelheid, bevat de snelheid die toen gemeten is.

tijd = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
snelheid = [0.155, 0.164, 0.262, 0.083, 0.285, 0.137, 0.234, 0.139, 0.063, 0.235]

Als we nu een schatting voor de afgelegde afstand willen uitrekenen moeten we:

  • het verschil tussen de tijdsstappen (\(\Delta t\)) bepalen (en opslaan in de lijst dt),

  • dat voor elke tijdstap vermenigvuldigen met de eerder gevonden tijdsstap om de afgelegde afstand per tijdstap te bepalen

  • en tenslotte hier een cumulatieve som van nemen.

In python code zou dit er ongeveer zo uit zien.

tijd = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
snelheid = [0.155, 0.164, 0.262, 0.083, 0.285, 0.137, 0.234, 0.139, 0.063, 0.235]

dt = []
dx = []
afstand = []

for i in range(len(tijd) - 1):
    dt.append(tijd[i + 1] - tijd[i])
    dx.append(snelheid[i] * dt[i])
    afstand.append(sum(dx))
print(afstand)
[0.0155, 0.0319, 0.05809999999999999, 0.0664, 0.09489999999999998, 0.10859999999999999, 0.13199999999999998, 0.1459, 0.1522, 0.1757]

We eindigen hier met een lijst dt met daarin de tijdstappen, een lijst dx met daarin de afgelegde afstand per tijdstapje en een lijst afstand die de totale afgelegde afstand op dat tijdstip bevat.

Begrijp je goed wat hier gebeurt?

Kijk eens naar deze opgave om dit te toetsen.

Op deze manier zijn er vrij veel regels code nodig om deze berekening te doen. Kan dat niet makkelijker? Eén van de dingen die je zou kunnen bedenken is dat, wanneer je dt berekent hebt, je direct deze lijst met snelheid zou kunnen vermenigvuldigen. Laten we eens kijken wat er dan gebeurt.

dt * snelheid[:-1]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-e2c52b99a94e> in <cell line: 1>()
----> 1 dt * snelheid[:-1]

TypeError: can't multiply sequence by non-int of type 'list'

Zoals je ziet is dit niet mogelijk, we krijgen namelijk een TypeError. Python vertelt ons dat dit type object niet geschikt is om deze operatie mee uit te voeren. Om dit op te lossen hebben we een nieuwe module nodig: NumPy.