{ "cells": [ { "cell_type": "markdown", "id": "cf36a1fa", "metadata": {}, "source": [ "## Het schrijven van simulaties: Modelleren\n", "\n", "Het notebook voor een simulatie\n", "bestaat uit een aantal blokken. Eerst worden enkele noodzakelijke bibliotheken\n", "geimporteerd:" ] }, { "cell_type": "code", "execution_count": null, "id": "483f5525", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline \n", "# De laatste regel zorgt dat de plots in het notebook komen." ] }, { "cell_type": "markdown", "id": "88566564", "metadata": {}, "source": [ "We maken een eenvoudig model voor een vallend voorwerp. Bij dit model zijn de\n", "volgende startwaarden nodig. Dit blok is in de praktijk beter te vullen nadat\n", "het model geschreven is." ] }, { "cell_type": "code", "execution_count": null, "id": "4f155e97", "metadata": {}, "outputs": [], "source": [ "t=0\n", "dt = 0.001 \n", "m = 0.1\n", "g = -9.8\n", "cw = 1\n", "rho = 1.028 \n", "A = 0.01 \n", "v=0\n", "z = 5" ] }, { "cell_type": "markdown", "id": "fd3ed255", "metadata": {}, "source": [ "Het model is met een 'while' lus te maken. Zolang de tijd kleiner is dan de\n", "eindtijd blijft de lus doorgaan. We willen later een grafieken voor de snelheid\n", "en de plaats als functie van de tijd maken. Hiervoor moeten eerst (lege) lijsten\n", "gemaakt worden. Als dit gebeurd is moeten de startwaarden hierboven worden\n", "aangepast. Begin door alle onbekende grootheden aan de linkerkant van de\n", "opdracht zonodig een waarde te geven." ] }, { "cell_type": "code", "execution_count": null, "id": "962031f0", "metadata": {}, "outputs": [], "source": [ "eindtijd = 1\n", "tijden = [t] # de lijst 'tijden' met een begintijd is gemaakt\n", "snelheden = [v] # en 'snelheden'\n", "plaatsen = [z] # en 'plaatsen' ook\n", "while t < eindtijd:\n", " # begin model\n", " t = t + dt\n", " Fz = m * g\n", " Fw = .5 * cw * rho * A * v ** 2\n", " a=(Fz + Fw) / m\n", " dv = a * dt\n", " v = v + dv\n", " dz = v * dt\n", " z = z + dz\n", " # eind model\n", " # begin van het vullen van de lijsten\n", " snelheden.append(v) # voegt een snelheid toe aan de lijst met snelheden.\n", " plaatsen.append(z) # voegt een plaats toe aan een lijst met plaatsen.\n", " tijden.append(t) # voegt de tijd toe aan een lijst met tijden.\n", " # eind van het vullen van lijsten" ] }, { "cell_type": "markdown", "id": "5988f08a", "metadata": {}, "source": [ "Uiteindelijk zijn er grafieken te maken. Met behulp van de python matplotlib\n", "documentatie zijn de grafieken helemaal aan eigen wensen aan te passen." ] }, { "cell_type": "code", "execution_count": null, "id": "f645d65e", "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,10))\n", "plt.plot(tijden, snelheden)\n", "plt.title('De snelheid als functie van de tijd')\n", "plt.xlabel('tijd [s]')\n", "plt.ylabel('snelheid [m/s]')" ] }, { "cell_type": "code", "execution_count": null, "id": "0b04695f", "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,10))\n", "plt.plot(tijden, plaatsen)\n", "plt.title('De plaats als functie van de tijd')\n", "plt.xlabel('tijd [s]')\n", "plt.ylabel('hoogte [m]')" ] }, { "cell_type": "markdown", "id": "35863bfe", "metadata": {}, "source": [ "Voor gevorderden:" ] }, { "cell_type": "code", "execution_count": null, "id": "c58b3c82", "metadata": {}, "outputs": [], "source": [ "Ekin = 1 / 2 * m * np.array(snelheden) ** 2\n", "Epot = -m * g * np.array(plaatsen)" ] }, { "cell_type": "code", "execution_count": null, "id": "eb1cd5fa", "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,10))\n", "plt.plot(tijden, Ekin, label = 'Kinethisch')\n", "plt.plot(tijden, Epot, label = 'Potentieel')\n", "plt.title('De energie als functie van de tijd')\n", "plt.xlabel('Tijd [s]')\n", "plt.ylabel('Energie [J]')\n", "plt.legend()" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "main_language": "python", "notebook_metadata_filter": "-all" } }, "nbformat": 4, "nbformat_minor": 5 }