← RU Pythoncursus

Grafiekjes

Met wiskunde hebben jullie al grafiekjes moeten plotten op je rekenmachine. In deze opgave gaan we Python gebruiken om deze grafiekjes op een mooie manier op je computerscherm te toveren. Om grafieken te tekenen gebruiken we de library matplotlib. Je kunt matplotlib met de aanroep plt.plot(xlijst, ylijst) gebruiken. Hierbij is xlijst een lijstje met $x$-waarden en ylijst een lijstje met $y$-waarden waardoor de grafiek gaat lopen. Natuurlijk moeten de lijstjes even lang zijn: het eerste element uit de $x$-lijst hoort namelijk bij het eerste element uit $y$-lijst, enzovoort... Je kunt de grafiek, zodra je hem geplot hebt, tonen met plt.show().

Hint: Zet eerst onderstaande imports in je programma:

import matplotlib.pyplot as plt
from math import pi, sin
from numpy import arange
  1. Maak de functie genSin(xlijst) die een lijstje met $x$-waarden als argument krijgt en vervolgens een lijstje met $y$-waarden oplevert. Iedere $y$-waarde is dan de sinus van de bijbehorende $x$. Als je vervolgens xlijst en ylijst hebt berekend, kun je deze plotten met plt zoals eerder is uitgelegd.

Hint: Een lijstje met $x$-waarden tussen 0 en 2$\pi$ met stappen van $0.1$ kun je snel genereren met:

xlijst = arange(0, 2*pi, 0.1)
  1. Nu de sinus gelukt is gaan we een parabool plotten. Maak hiervoor de functie calcY(a,b,c,x). Hierin zijn $a$,$b$,$c$ de coëfficienten in de formule $y = ax^2+bx+c$. De functie levert vervolgens de $y$-waarde op die hoort bij de gegeven $x$-waarde.

    Nu hebben we een lijstje met $x$-waarden nodig voor de plot-functie. Genereer nu deze lijst zoals bij de sin.

    Nu we een $x$-lijst hebben en een functie om de bijbehorende $y$-waarden te berkenen kunnen we dit samen voegen in een functie die een ylijst maakt. Maak nu de functie genParabool(a,b,c,xlijst). Deze functie krijgt de $a$, $b$, $c$ en gemaakte $x$-lijst en levert als resultaat een $y$-lijst op. Deze functie moet gebruik maken van calcY(...). Plot vervolgens het resultaat met plt.

  2. Maak nu de functie berekenTopX(a,b,c) die de $x$-coördinaat van de top van de parabool berekent. De $x$-top kan berekend worden met de formule $\frac{-b}{2a}$. Maak vervolgens ook de functie berekenTopY(a,b,c). De $y$-top kan natuurlijk berekend worden door $x$ in de paraboolformule in te vullen.

  3. Omdat de raaklijn van de top altijd een rechte lijn is, kun je hem nu met plt plotten: ylijst bevat hier voor iedere $x$-waarde het $y$-coördinaat van de top. Plot deze raaklijn in dezelfde grafiek als de parabool.

  4. We kunnen nu parabolen plotten, maar het is natuurlijk veel leuker als we functies van iedere graad kunnen plotten (dus bijvoorbeeld $y=3x^3+4x^2+8x+2$). Om dit voor elkaar te krijgen gaan we een functie maken waarin de coëfficienten (dus de $a$,$b$,$c$,$d$ enzovoort) als een lijst worden meegegeven. Maak daarom nu de functie genPolynoom(coeffs, xlijst). coeffs is dan een lijstje van coëfficienten. Dit zou in het eerder genoemde voorbeeld dan zijn: $2, 8, 4, 3$. De index van de rij is dan de graad van de bijbehorende $x$. xlijst is dan weer een lijstje met $x$-waarden. De functie levert dan uiteindelijk een lijstje met $y$-waarden op, waarna je dit kunt gebruiken om de grafiek te plotten.

  5. De afgeleide $f'(x)$ van een polynoom van bovenstaande vorm is vrij eenvoudig te berekenen. Maak de functie genAfgeleide(coeffs) die een lijstje coëfficienten van een polynoom krijgt, en vervolgens de coëfficienten van de afgeleide oplevert. De afgeleide van een polynoom is ook een polynoom, dus met genPolynoom(...) kun je die afgeleide vervolgens weer plotten.

  6. We kunnen nu afgeleiden van polynomen plotten, maar nog niet van andere soorten wiskundige functies. In plaats dat we van elke soort functie een afgeleide uitrekenen, kunnen we ook een algemene functie maken die een afgeleide benadert. Je krijgt dan dus een rij van $x$- en $y$-waarden, en hiervan moet je functie een rijtje $y$-waarden van de afgeleide opleveren. De afgeleide ken je als het goed is al als $\frac{dy}{dx}$. Als $dx$ kunnen we gewoon het verschil in twee opvolgende $x$-waarden nemen, en $dy$ kan op dezelfde manier. Dit is slechts een benadering, hoe goed deze is, hangt af van hoe dicht de punten op elkaar liggen. Als de punten verder uit elkaar liggen wordt de afgeleide ook onnauwkeuriger.