Quadratische Gleichungen mit Python berechnen

Mathematische Grundlagen

Als quadratische Gleichungen werden Gleichungen bezeichnet, die folgende Form aufweisen:

\[ ax^2 + bx + c = 0 \]

Dabei gilt, dass a, b, c zur Menge der reellen Zahlen gehören und a ungleich Null ist:

\[ (a,b,c ∈ \mathbb{R}; a≠0) \]

Dabei wird zwischen zwei Arten der Darstellung unterschieden, je nach dem, ob der Koeffizient von $ x^2 $ gleich 1 ist.

Koeffizient ungleich 1:

Sofern der Koeffizient (Vorfaktor) von $ x^2 $ — also die Variable a — ungleich 1 ist, wird als Darstellungsform die allgemeine Form verwendet, mithin die bereits oben gezeigte Form:

\[ ax^2 + bx + c = 0 \]

Koeffizient gleich 1:

Sofern der Koeffizient gleich 1 ist, wird als Darstellungsform die Normalform verwendet:

\[ x^2 + px + q = 0 \]

Denn aufgrund des Umstands, dass $ 1 * x^2 = x^2 $ ist, kann der Koeffizient a weggelassen werden.

Eine quadratische Gleichung kann auf unterschiedliche Weise gelöst werden, je nachdem, ob eine allgemeine Form oder eine Normalform gegeben ist. Darüber hinaus, kommt es darauf an, ob das lineare Glied (bx bzw. px) vorhanden ist. Wenn es vorhanden ist, spricht man von einer gemischt-quadratischen Gleichung, also einer Gleichung der Form:

\[ ax^2 + bx + c = 0 \]

Dabei gilt:

\[ (a,b,c ∈ \mathbb{R}; a,b≠0) \]

Eine rein-quadratische Gleichung, also eine Gleichung ohne dem linearen Glied bx, würde hingegen wie folgt aussehen:

\[ ax^2 + c = 0 \]

Lösung mit Python

Nach den mathematischen Grundlagen folgt jetzt die Lösung einer (gemischt-) quadratischen Gleichung

\[ ax^2 + bx + c = 0 \]

mithilfe von Python. Zur Lösung einer solchen Gleichung wird die abc-Formel (auch: Mitternachtsformel) verwendet. Sie ist die allgemeine Formel zur Lösung quadratischer Gleichungen, kann also auf alle Arten quadratischer Gleichungen angewendet werden. Für andere Arten als die der gemischt-quadratischen Gleichung gibt es darüber hinaus jedoch auch andere, einfachere Lösungswege, z.B. die pq-Formel als vereinfachte Variante für die Lösung quadratischer Gleichungen in Normalform.

Eine quadratische Gleichung kann keine, eine, oder zwei Lösungen haben. Hier die abc-Formel mit zwei Fallunterscheidungen:

\[ x{1} = -b – \frac{\sqrt{b^x – 4ac}}{2a} \]

und

\[ x{2} = -b + \frac{\sqrt{b^x – 4ac}}{2a} \]

Wenden wir uns damit dem Code zu. Es beginnt mit einer Import-Anweisung:

import math

Diese Bibliothek wird importiert, damit die zur Berechnung der Wurzel erforderliche Methode sqrt() verwendet werden kann.

Möchte man damit beispielsweise

\[ \sqrt{16} \]

berechnen, könnte das als Python-Code — in der IDLE — folgendermaßen aussehen:

>>> import math
>>> print(math.sqrt(16))
4.0

Der Ausdruck

\[ \sqrt{b^x – 4ac} \]

ließe sich beispielsweise wie folgt berechnen:

result = math.sqrt(b**2 - 4 * a * c)

Definieren wir nun eine Funktion, die die abc-Formel abbildet:

def quadratic_formula(a, b, c):
    pass

Es erfolgt zunächst die Berechnung des Terms unter dem Wurzelzeichen:

disc = b**2 - 4 * a * c

Dieser Term wird als Diskriminante bezeichnet. Deshalb habe ich die Variable disc genannt.

Das Ergebnis dieser Berechnung wird nun verwendet, um die beiden Fallunterscheidungen zu berechnen:

x1 = (-b - math.sqrt(disc)) / (2 * a)
x2 = (-b + math.sqrt(disc)) / (2 * a)

Mit return werden die Ergebnisse zurückgegeben:

return(x1, x2)

Abschließend rufen wird die Funktion quadratic_formula() mit den zu übergebenden Argumenten auf und geben das Ergebnis aus:

result = quadratic_formula(2, -8, 6)
print(result)

Als Ergebnis erhält man für $ a = 2 $, $ b = -8 $ und $ c = 6 $ die Werte 1 und 3. Diese quadratische Gleichung hat also genau zwei Lösungen.

Anders sieht es bei folgenden Argumenten aus:

$ a = 2 $
$ b = -8 $
$ c = 8 $

Das zurückgegebene Tupel hat die Werte (2.0, 2.0). Dies bedeutet, dass es für diese quadratische Gleichung genau eine Lösung gibt.

Und schließlich führen die Werte

$ a = 2 $
$ b = -6 $
$ c = 11 $

zur Fehlermeldung ValueError: math domain error. In diesem Fall gibt es gar keine Lösung.

Hinsichtlich der Frage, ob keine, eine oder zwei Lösungen vorliegen, gilt übrigens folgendes:

  • Diskriminante < 0: keine Lösung
  • Diskriminante = 0: eine Lösung
  • Diskriminante > 0: keine Lösung

Hier der vollständige Code:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import math

def quadratic_formula(a, b, c):

    disc = b**2 - 4 * a * c

    x1 = (-b - math.sqrt(disc)) / (2 * a)
    x2 = (-b + math.sqrt(disc)) / (2 * a)

    return(x1, x2)

result = quadratic_formula(2, -8, 6)
print(result)

Dieser Code ließe sich freilich noch verbessern. So wäre man deutlich flexibler, wenn man nach dem Start des Skripts nach den Werten für a, b und c gefragt werden würde. Sollte keine Lösung vorliegen, wäre darüber hinaus eine verständlichere Rückmeldung wünschenswert. Es sei Euch überlassen, die entsprechenden Anpassungen vorzunehmen.