← RU Pythoncursus

ABC-formule

De ABC-formule kennen jullie natuurlijk allemaal; hiermee kan je eenvoudig de oplossingen van een kwadratische vergelijking vinden. We gaan er voor deze opdracht even vanuit dat de discriminant altijd positief is ($D > 0$), omdat we nog niet geleerd hebben hoe we gevallen kunnen onderscheiden.

Mocht je het inmiddels vergeten zijn, hier nog even de formules. Voor een vergelijking van de vorm $ax^2 + bx + c = 0$ geldt dat $D = b^2 - 4ac$ en $x = \dfrac{-b \pm \sqrt{D}}{2a}$.

Neem nu de vergelijking $3x^2 + 3x - 5 = 0$. We gaan een paar regels Pythoncode schrijven om de oplossingen te vinden. Misschien zie je nu de oplossing al, of kan je het veel sneller op papier oplossen. Als je echter meerdere vergelijkingen wil oplossen is het een stuk makkelijker om je programmaatje aan te passen dan je berekening helemaal opnieuw uit te voeren.

  1. Sla de waarden van de vergelijking op in een paar Python-variabelen. Zorg ervoor dat je de variabelen goede namen geeft, zodat het overzichtelijk blijft. In dit geval zijn de namen letters (a, b, c, etc.), maar over het algemeen wil je variabelenamen meer beschrijvend maken (price, time, image, etc.).

  2. Maak nu een stukje Pythoncode om de oplossing van de vergelijking uit te rekenen met de ABC-formule. Het is handig om dit in twee stappen te doen, zoals je in de formule gewend bent: reken eerst $D$ uit, en daarna de beide oplossingen voor $x_0$ en $x_1$. Zorg ervoor dat je programma de oplossingen op het scherm toont.

Tip: Voor het uitrekenen van de wortel kun je een ingebouwde functie in Python gebruiken: sqrt(a). Zet hiervoor aan het begin van je programma from math import sqrt. Zie ook de sectie Toelichting: Imports onderaan deze pagina.

Nog een paar vergelijkingen

Eén vergelijking kon je natuurlijk ook wel op papier, maar wat nu als je de volgende vergelijkingen allemaal wilt oplossen?

$$x^2 + 7x - 18 = 0$$ $$x^2 + 6.28318x - 9.86959 = 0$$ $$3x^2 - 12x = 0$$ $$2x^2 - 37x + 1 = 0$$

  1. Pas je programma zo aan dat het de antwoorden van de bovenstaande vergelijkingen na elkaar print. Denk eraan dat, wanneer je variabelenamen hergebruikt, je de oude waarde overschrijft. Dit kan je op allerlei manieren voorkomen of oplossen. Kies zelf een oplossing die je het meest geschikt lijkt.
  2. Kijk ook eens wat er gebeurt wanneer je de onderstaande vergelijking probeert op te lossen. Kan je verklaren waarom dit gebeurt?

$$ x^2 + 5x + 7 = 0 $$

Toelichting: imports

Je hebt bij de vorige opdrachten gezien dat we een paar functies nodig hadden die niet standaard toegankelijk zijn. We moesten ze eerst importeren uit andere modules. Zo kwamen de functies sqrt en gcd uit de math-module.

Met import kan je functies of variabelen uit een andere module importeren in het huidige programma. Dit is hoe in principe alle modules in Python zijn opgebouwd. Dit zorgt ervoor dat de code makkelijk herbruikbaar is. In een later stadium zullen we bespreken hoe je zelf een module kunt maken die anderen kunnen importeren.

Je kunt op twee manieren functies importeren. Zoals je hierboven zag kan je de constructie from modulenaam import functienaam gebruiken. Dan kan je de functie meteen gebruiken. Soms heb je meerdere functies met dezelfde naam uit verschillende modules. In dat geval kan je de module in z'n geheel importeren met import modulenaam, en een functie gebruiken door eerst de modulenaam te noemen. De gcd-functie uit de math-module zou je dan importeren met import math. Vervolgens kun je de gcd-functie dan als volgt gebruiken: math.gcd(12, 32).

Als je een bepaalde functie zoekt is het handig om de Python-documentatie te bekijken, maar als je al ongeveer weet waar je moet zoeken kan het ook sneller. Na de module te importeren met import modulenaam, kun je met de functie dir(modulenaam) bekijken wat je er zoal uit kan gebruiken. Voor de bekendste modules is zelfs een handleiding ingebouwd. Deze kun je aanroepen met de help-functie (bij de math module zou dat help(math) worden). Probeer bijvoorbeeld eens de math-module te importeren en met dir te printen wat er allemaal voor functies inzitten.