|
25 | 25 | "## Laden van eerdere code\n", |
26 | 26 | "\n", |
27 | 27 | "De pakketten van Python en de constanten voor de simulatie:\n", |
28 | | - "\n" |
| 28 | + "\n", |
| 29 | + "```{exercise}\n", |
| 30 | + "Neem de constanten die je in het vorige werkblad hebt gekozen hieronder over.\n", |
| 31 | + "```\n" |
29 | 32 | ] |
30 | 33 | }, |
31 | 34 | { |
32 | 35 | "cell_type": "code", |
33 | | - "execution_count": 1, |
| 36 | + "execution_count": null, |
| 37 | + "id": "c9e050af", |
| 38 | + "metadata": {}, |
| 39 | + "outputs": [], |
| 40 | + "source": [ |
| 41 | + "# ruimte voor uitwerking\n", |
| 42 | + "\n", |
| 43 | + "import numpy as np\n", |
| 44 | + "import matplotlib.pyplot as plt\n", |
| 45 | + "from matplotlib.animation import FuncAnimation\n", |
| 46 | + "\n", |
| 47 | + "BOX_SIZE_0 = 0 # Hoogte en lengte startvolume\n", |
| 48 | + "N = 40 # Aantal deeltjes\n", |
| 49 | + "V_0 = 0 # Startsnelheid van deeltjes\n", |
| 50 | + "RADIUS = 0 # Straal van moleculen\n", |
| 51 | + "DT = 0 # Tijdstap om geen botsing te missen\n", |
| 52 | + "V_PISTON_0 = -0.1 * V_0 # Startsnelheid van zuiger \n", |
| 53 | + "# (negatief betekent zowel links als rechts naar binnen gericht)" |
| 54 | + ] |
| 55 | + }, |
| 56 | + { |
| 57 | + "cell_type": "code", |
| 58 | + "execution_count": null, |
34 | 59 | "id": "c8dad5ff", |
35 | 60 | "metadata": {}, |
36 | 61 | "outputs": [], |
37 | 62 | "source": [ |
| 63 | + "# voorbeelduitwerking\n", |
| 64 | + "\n", |
38 | 65 | "import numpy as np\n", |
39 | 66 | "import matplotlib.pyplot as plt\n", |
40 | 67 | "from matplotlib.animation import FuncAnimation\n", |
|
263 | 290 | "id": "86b2532d", |
264 | 291 | "metadata": {}, |
265 | 292 | "source": [ |
266 | | - "We zien inderdaad de druk, $P \\propto V^{-k}$, met een exponent $k > 1$, wat verklaard wordt door de toename van de temperatuur tijdens het proces. In dit werkblad gaan we nu proberen de temperatuur van het gas constant te houden. We kunnen dan controleren of de druk inderdaad invers proportioneel is met het volume. " |
| 293 | + "We zien inderdaad de druk, $P \\propto V^{-k}$, met een exponent $k > 1$, wat verklaard wordt door de toename van de temperatuur tijdens het proces. In dit werkblad gaan we nu proberen de temperatuur van het gas constant te houden. We kunnen dan controleren of de druk inderdaad invers proportioneel is met het volume, zoals de gaswet voorschrijft. " |
267 | 294 | ] |
268 | 295 | }, |
269 | 296 | { |
|
273 | 300 | "source": [ |
274 | 301 | "## De thermostaat\n", |
275 | 302 | "\n", |
276 | | - "In de werkelijkheid is de temperatuur van de wand een mate van de amplitude van de trillingen van de deeltjes waaruit de wand bestaat. De wederzijdse overdracht van de energie van die trillingen naar de kinetische energie van de gasmoleculen bepaalt het thermische contact tussen de wanden van het controlevolume en het gas. In ons model bestaat de wand echter helemaal niet uit deeltjes, maar hebben we een denkbeeldige lijn getrokken in de ruimte. We moeten daarom een wiskundige truc toepassen om temperatuur van het gas te beïnvloeden. \n", |
| 303 | + "In de werkelijkheid is de temperatuur van de wand een mate van de amplitude van de trillingen van de deeltjes waaruit de wand bestaat. De wederzijdse overdracht van de energie van die trillingen naar de kinetische energie van de gasmoleculen bepaalt het thermische contact tussen de wanden van het volume en het gas. In ons model bestaat de wand echter helemaal niet uit deeltjes, maar hebben we een denkbeeldige lijn getrokken in de ruimte. We moeten daarom een wiskundige truc toepassen om temperatuur van het gas te beïnvloeden. \n", |
277 | 304 | "\n", |
278 | 305 | "Er zijn in de literatuur verschillende van dit soort trucs bedacht. Ze worden een 'thermostaat' genoemd en hebben allemaal hun voor- en nadelen. In ons geval houden we het simpel: Op het moment dat een gasmolecuul botst met de wand die een thermisch contact voorstelt, dan schalen we de snelheid van dit molecuul met (de wortel van) de verhouding tussen de veronderstelde temperatuur van de wand en de temperatuur die het gas op dat moment heeft. Voor het gemak houden we de zuiger links en rechts van het volume en maken we het thermische contact aan de onder- en bovenwand." |
279 | 306 | ] |
|
289 | 316 | " \"\"\" verzorgen van botsingen met wand boven en onder, die als thermostaat kunnen werken \"\"\"\n", |
290 | 317 | " global box_height, set_temp, impulse_outward, heat\n", |
291 | 318 | " if abs(particle.r[1]) + particle.R > box_height / 2:\n", |
292 | | - " temp_factor = (set_temp/temperature(particles)) if set_temp > 0 else 1.0\n", |
| 319 | + " temp_factor = (set_temp/temperature(particles)) if set_temp > 0 else 1.0 \n", |
293 | 320 | " particle.r[1] = np.sign(particle.r[1]) * (box_height/2 - particle.R)\n", |
294 | 321 | " impulse_outward += abs(particle.momentum[1]) * (1 + temp_factor**0.5) \n", |
295 | 322 | " heat += particle.kin_energy * (temp_factor - 1)\n", |
|
302 | 329 | "id": "dbcfd37d", |
303 | 330 | "metadata": {}, |
304 | 331 | "source": [ |
305 | | - "Met deze nieuwe definitie van de functies, draaien we een simulatie waarin we zowel de temperatuur als de druk plotten als functie van het volume. Let op dat deze simulatie een veel groter aantal tijdstappen bevat. Daarom zal deze simulatie ook langer duren. Maak je geen zorgen als het een minuut duurt om de berekening te voltooien.\n", |
| 332 | + "```{exercise}\n", |
| 333 | + ":label: explain_thermostat\n", |
| 334 | + "Leg bij elke regel na het eerste if-statement uit (in een enkele zin) waarom deze regel zo is gecodeerd.\n", |
| 335 | + "```\n", |
| 336 | + "\n", |
| 337 | + "```{solution} explain_thermostat\n", |
| 338 | + "Jouw antwoord hier...\n", |
| 339 | + "```\n", |
| 340 | + "\n", |
| 341 | + "Met deze nieuwe definitie van de functies, draaien we een simulatie waarin we zowel de temperatuur als de druk plotten als functie van het volume. Let op dat deze simulatie vanwege de tragere zuiger een veel groter aantal tijdstappen bevat. Daarom zal deze simulatie ook langer duren. Maak je geen zorgen als het een minuut duurt om de berekening te voltooien.\n", |
306 | 342 | "\n", |
307 | 343 | "Om verdere belasting van de servers tot een minimum te beperken, berekent deze simulatie ook alvast de totale warmte $Q$ en de totale arbeid $W$ tijdens het proces. Deze worden opgeslagen in de arrays `heats` en `works`. We zullen de resultaten van deze simulatie voor een aantal vervolgstappen gebruiken. " |
308 | 344 | ] |
|
438 | 474 | "Je ziet dat de exponent van dit P,V-diagram net niet overeenkomt met de ideale verwachting. \n", |
439 | 475 | "\n", |
440 | 476 | "```{exercise}\n", |
441 | | - "Het P,V-diagram is niet perfect invers proportioneel door de verandering van de temperatuur. Verklaar dat de temperatuur nooit helemaal terugkeert naar de beginwaarde vanuit de dynamische beweging van de gasmoleculen.\n", |
| 477 | + "Het P,V-diagram is niet perfect invers proportioneel door de verandering van de temperatuur. Verklaar dat de temperatuur nooit helemaal terugkeert naar de beginwaarde vanuit de dynamische beweging van de gasmoleculen. \n", |
442 | 478 | "```\n", |
443 | 479 | "\n", |
444 | 480 | "Als je goed kijkt zie je dat de temperatuur voor kleinere volumes een steeds grotere afwijking vertoont. \n", |
|
456 | 492 | "Al met al lijkt het resultaat van de simulatie er redelijk uit te zien. Maar om een sterke indicatie te hebben dat dit zo is, moeten we weer een goede test verzinnen om de simulatie te verifiëren. In dit geval kunnen we controleren of de simulatie voldoet aan de eerste hoofdwet.\n", |
457 | 493 | "\n", |
458 | 494 | "```{exercise}\n", |
459 | | - "Maak een grafiek die helder zichtbaar maakt dat de simulatie inderdaad voldoet aan de eerste hoofdwet (of niet). Als de code hierboven nog klopt, zijn de tekens in overeenstemming met de definitie van het boek.\n", |
| 495 | + "Maak een grafiek die helder zichtbaar maakt dat de simulatie inderdaad voldoet aan de eerste hoofdwet (of niet). Als de code hierboven nog klopt, zijn de tekens voor arbeid en warmte in overeenstemming met de definitie van het boek.\n", |
460 | 496 | "```" |
461 | 497 | ] |
462 | 498 | }, |
|
0 commit comments