Nullstellen von Polynomen bestimmen
Wenn man alle Nullstellen eines Polynoms bestimmen will, benötigt man Einiges an Handwerkszeug. Der Lösungsweg baut auf einer Reihe von Funktionen, Datenstrukturen und Methoden auf, die bereits definiert wurden:
- Quadratwurzeln mit dem Halley-Verfahren berechnen
- Newton-Verfahren
- Pascalsches Dreieck
- Polynomring
- Komplexe Zahlen
- Polarkoordinaten
- Weitere Methoden für Polynome
- Casus Irreducibilis
Auf bestehenden Arbeiten anderer aufzubauen, ist ein wichtiges Prinzip sowohl in der Wissenschaft als auch in der Technik. "Wenn ich weiter sehen konnte, so deshalb, weil ich auf den Schultern von Riesen stand." schreibt Isaac Newton in einem Brief, und meint genau diesen Punkt.
Hier werden die Arbeiten von Scipione del Ferro und Gerolamo Cardano über die Reduktion von Polynomen und die Lösungen kubischer Gleichungen (aus dem Jahr 1545), Blaise Pascal über das Pascalsche Dreieck (1655), Isaac Newton und Joseph Raphson über das Newton-Verfahren (1669 und 1690), Edmond Halley über das Halley-Verfahren (1694), John Machin über die Berechnung von Pi mit dem Arkustangens (1706), Abraham de Moivre (1707), Leonhard Euler über die Beziehung der Exponentialfunktion zu Cosinus und Sinus (1748), Carl Friedrich Gauß über die gaußsche Zahlenebene (1811) und W. M. Faucette über die Lösung quartischer Gleichungen (1996) benutzt.
Aus Sicht der Softwaretechnik handelt es sich dabei um kleinere und größere Algorithmen, die in den zurückliegenden 450 Jahren der Algebra entwickelt wurden. Um diese in eine ausführbare Form zu bringen, definiert man zunächst einige Hilfsmethoden (normalize, find-normalized-zeros, find-reduced-zeros, translate, binomial-expansion), dann Methoden für die verschiedenen Verfahren je nach Grad des Polynoms (ferro, quadratic-resolvent, gives-ferro-zero?, faucette, cubic-resolvent, gives-faucette-zero?) und führt schließlich die verschiedenen Lösungsverfahren zusammen (find-zeros).
Die Hilfsmethoden dienen dazu, Polynome umzuformen und sie so auf die Berechnung der Nullstellen vorzubereiten.
Die Methode normalize dividiert die Koeffizienten des Polynoms durch den führenden Koeffizienten. Dieser wird dadurch Eins. Für die Normalisierung greift man auf die Multiplikation vom Polynomen, konkret die Multiplikation mit einem konstanten Polynom, zurück.
(defmethod normalize ((this polynomial))
(not (zero? (leading-coefficient this)))
(* this (linear-polynomial 0 (/ (leading-coefficient this)))))
Die Methode find-normalized-zeros normalisiert das Polynom und sucht dann seine Nullstellen. Die Nullstellen des normalisierten Polynoms entsprechen denen des ursprünglichen.
(defmethod find-normalized-zeros ((this polynomial) precision)
t
(find-zeros (normalize this) precision))
Bei der Reduktion eines Polynoms geht es um eine Verschiebung entlang der x-Achse. Es wird so verschoben, dass der zweite Koeffizient Null wird. Es gibt immer eine Verschiebung, die das möglich macht. Der Grund für dieses Vorgehen erschließt sich anhand der Satzgruppe von Vièta: Ist der zweite Koeffizient Null, ist die Summe der Nullstellen ebenfalls Null.
Die Methode find-reduced-zeros verschiebt das Polynom, findet die Nullstellen des verschobenen Polynoms und verschiebt dann die Nullstellen in umgekehrter Richtung. So erhält man die Nullstellen des ursprünglichen Polynoms.
(defmethod find-reduced-zeros ((this polynomial) precision)
t
(let
((dx
(/ (second-coefficient this)
-1
(leading-coefficient this)
(degree this))))
(map-with
(curry (+ dx _))
(find-zeros (translate this dx) precision))))
Die Methode translate arbeitet so, wie man die Verschiebung auch mit Bleistift und Papier bewerkstelligen würde: Man setzt z = x + dx und rechnet die Potenzen von z mit den binomischen Formeln aus. Die Faktoren der binomischen Formeln bestimmt man anhand des Pascalschen Dreiecks.
(defmethod translate ((this polynomial) dx)
(number? dx)
(to-polynomial
(apply append
(map-with
(lambda (pair)
(binomial-expansion
(degree pair)
(coefficient pair)
dx))
(to-degree-coefficient-pairs this)))
(degree this)))
(defproc binomial-expansion (polynomial-degree polynomial-coefficient dx)
(zip-with
(lambda (pascal-factor pascal-degree)
(list
pascal-degree
(* pascal-factor
(expt dx (- polynomial-degree pascal-degree))
polynomial-coefficient)))
(pascal polynomial-degree)
(range 0 (+ 1 polynomial-degree))))
So vorbereitet kann man die Nullstellen eines normalisierten und reduzierten Polynoms dritten Grades nach dem Verfahren von Ferro finden. Bei diesem Lösungsweg wird aus dem kubischen Polynom x³ + p x + q ein quadratisches Polynom abgeleitet - die sogenannte quadratische Resolvente x² + q x - p³ / 27.
(defmethod quadratic-resolvent ((this polynomial))
(and
(cubic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(quadratic-resolvent
(third-coefficient this)
(last-coefficient this)))
(defmethod quadratic-resolvent (p q)
(and
(number? p)
(number? q))
(new polynomial
(list
1
q
(/ (* p p p) -27))))
Dann bestimmt man die beiden Nullstellen der quadratischen Resolvente. Von jeder dieser beiden Nullstellen werden die drei dritten Wurzeln bestimmt. Eine mögliche Nullstelle des ursprünglichen Polynoms dritten Grades ergibt sich aus der Summe einer dritten Wurzel der ersten Nullstelle der Resolvente und einer dritten Wurzel der zweiten Nullstelle.
(defmethod ferro ((this polynomial) precision)
(and
(cubic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(let
((resolvent-zeros (find-zeros (quadratic-resolvent this) (* precision 1e-3))))
(let
((pairs
(select-if
(lambda (pair)
(gives-ferro-zero?
(first pair)
(second pair)
(third-coefficient this)
precision))
(cartesian-product
(all-cubic-roots (first resolvent-zeros) (* precision 1e-3))
(all-cubic-roots (second resolvent-zeros) (* precision 1e-3))))))
(if
(not (= 3 (length pairs)))
(throw (quote error) "not three zeros found")
(map-with
(lambda (pair)
(approximate
(+ (first pair)
(second pair))
precision))
pairs)))))
Für die Summe der beiden dritten Wurzeln gibt es insgesamt neun Kombinationsmöglichkeiten. Nur drei der Möglichkeiten führen tatsächlich zu einer Nullstelle des ursprünglichen reduzierten Polynoms, und zwar die, bei denen das Produkt der dritten Wurzeln -3 p ergibt.
(defproc nearly-equal? (x y precision)
(<
(abs (- x y) precision)
precision))
(defproc gives-ferro-zero? (u v p precision)
(nearly-equal? (* -3 u v) p precision))
Das Verfahren von Faucette für quartische Gleichungen arbeitet nach einem ähnlichen Grundprinzip wie das Verfahren von Ferro:
- Aufstellen einer Resolvente,
- Finden der Nullstellen der Resolvente,
- Bestimmen aller Wurzeln dieser Nullstellen,
- Kombinieren der Wurzeln in einer Summe und
- Herausfiltern der passenden Kombinationen.
Die Resolvente ist ein Polynom dritten Grades. x³ + 2 p x² + (p² - 4 r) x - q² ist die Resolvente für das reduzierte Polynom x⁴ + p x² + q x + r.
(defmethod cubic-resolvent ((this polynomial))
(and
(quartic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(cubic-resolvent
(third-coefficient this)
(fourth-coefficient this)
(last-coefficient this)))
(defmethod cubic-resolvent (p q r)
(and
(number? p)
(number? q)
(number? r))
(new polynomial
(list
1
(* 2 p)
(- (* p p) (* 4 r))
(* -1 q q))))
Es ergeben sich drei Nullstellen der Resolvente. Von diesen drei Nullstellen werden jeweils beide Quadratwurzeln bestimmt. Eine mögliche Nullstelle des ursprünglichen Polynoms vierten Grades ergibt sich aus der Hälfte der Summe einer Quadratwurzel der ersten Nullstelle der Resolvente und einer Quadratwurzel der zweiten Nullstelle und einer Quadratwurzel der dritten Nullstelle.
(defmethod faucette ((this polynomial) precision)
(and
(quartic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(let
((resolvent-zeros (find-zeros (cubic-resolvent this) (* precision 1e-3))))
(let
((triples
(select-if
(lambda (triple)
(gives-faucette-zero?
(first triple)
(second triple)
(third triple)
(fourth-coefficient this)
precision))
(cartesian-product-of-3
(all-square-roots (first resolvent-zeros) (* precision 1e-3))
(all-square-roots (second resolvent-zeros) (* precision 1e-3))
(all-square-roots (third resolvent-zeros) (* precision 1e-3))))))
(if
(not (= 4 (length triples)))
(throw (quote error) "not four zeros found")
(map-with
(lambda (triple)
(approximate
(* 1/2
(+ (first triple)
(second triple)
(third triple)))
precision))
triples)))))
(defproc cartesian-product-of-3 (a b c)
(map-with
(lambda (pair)
(cons (first pair) (second pair)))
(cartesian-product
a
(cartesian-product b c))))
Für die Summe der drei Quadratwurzeln gibt es insgesamt acht Kombinationsmöglichkeiten. Nur vier der Möglichkeiten führen tatsächlich zu einer Nullstelle des ursprünglichen reduzierten Polynoms, und zwar die, bei denen das Produkt der Quadratwurzeln -q ergibt.
(defproc gives-faucette-zero? (u v w q precision)
(nearly-equal? (* -1 u v w) q precision))
Die Methode find-zeros fasst alle Verfahren zusammen.
(defmethod find-zeros ((this polynomial) precision)
t
(cond
((zero? this)
(throw (quote error) "undefined"))
((constant-polynomial? this)
nil)
((zero? (last-coefficient this))
(cons 0 (find-zeros (/ this (linear-polynomial 1 0)) precision)))
((not (equal? (leading-coefficient this) 1))
(find-normalized-zeros this precision))
((not (zero? (second-coefficient this)))
(find-reduced-zeros this precision))
((linear-polynomial? this)
(quote (0)))
((quadratic-polynomial? this)
(all-square-roots (- (last-coefficient this)) precision))
((cubic-polynomial? this)
(ferro this precision))
((quartic-polynomial? this)
(faucette this precision))
(t
(throw (quote error) "not implemented"))))
Abhängig von den Eigenschaften des Polynoms werden zehn verschiedene Fälle unterschieden: 1. Konstante Polynome, deren (einziger) Koeffizient Null ist, lösen eine Ausnahme aus, denn die Gleichung 0 = 0 ist unbestimmt. 2. Andere konstante Polynome haben keine Lösung. 3. Wenn das Absolutglied des Polynoms Null ist, dann ist Null eine Lösung und wird aus dem Polynom heraus dividiert. Der Quotient wird durch einen rekursiven Aufruf auf weitere Nullstellen untersucht. 4. Wenn der führende Koeffizient nicht Eins ist, wird das normalisierte Polynom auf Nullstellen untersucht (find-normalized-zeros). 5. Wenn der zweite Koeffizient nicht Null ist, wird das reduzierte Polynom auf Nullstellen untersucht (find-reduced-zeros). 6. Wenn es sich um ein lineares, normalisiertes und reduziertes Polynom handelt (also x + 0), ist die einzige Nullstelle Null. 7. Wenn es sich um ein quadratisches, normalisiertes und reduziertes Polynom handelt (also x² + q), dann sind die Quadratwurzeln von -q die beiden Nullstellen. 8. Wenn es sich um ein kubisches, normalisiertes und reduziertes Polynom handelt, wird das Verfahren von Ferro (ferro) angewendet. 9. Wenn es sich um ein quartisches, normalisiertes und reduziertes Polynom handelt, wird das Verfahren von Faucette (faucette) angewendet. 10. In allen anderen Fällen wird eine Ausnahme ausgelöst.
Die hier beschriebenen Methoden sind in dem unten verlinkten Kalkulationsblatt zeros-of-polynomials.sheet.xml enthalten. Das Kalkulationsblatt kann mit dem Programm Calc ausgeführt werden.
Quellen
https://de.wikipedia.org/wiki/Kubische_Gleichung
https://de.wikipedia.org/wiki/Pascalsches_Dreieck
https://de.wikipedia.org/wiki/Newton-Verfahren
https://de.wikipedia.org/wiki/Halley-Verfahren
https://de.wikipedia.org/wiki/John_Machin
https://de.wikipedia.org/wiki/Moivrescher_Satz
https://de.wikipedia.org/wiki/Eulersche_Formel
https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Zahlenebene
Faucette, W. M.
"A Geometric Interpretation of the Solution of the General Quartic Polynomial"
Amer. Math. Monthly 103, p. 51-57, 1996
- Quadratwurzeln mit dem Halley-Verfahren berechnen
- Newton-Verfahren
- Pascalsches Dreieck
- Polynomring
- Komplexe Zahlen
- Polarkoordinaten
- Weitere Methoden für Polynome
- Casus Irreducibilis
Auf bestehenden Arbeiten anderer aufzubauen, ist ein wichtiges Prinzip sowohl in der Wissenschaft als auch in der Technik. "Wenn ich weiter sehen konnte, so deshalb, weil ich auf den Schultern von Riesen stand." schreibt Isaac Newton in einem Brief, und meint genau diesen Punkt.
Hier werden die Arbeiten von Scipione del Ferro und Gerolamo Cardano über die Reduktion von Polynomen und die Lösungen kubischer Gleichungen (aus dem Jahr 1545), Blaise Pascal über das Pascalsche Dreieck (1655), Isaac Newton und Joseph Raphson über das Newton-Verfahren (1669 und 1690), Edmond Halley über das Halley-Verfahren (1694), John Machin über die Berechnung von Pi mit dem Arkustangens (1706), Abraham de Moivre (1707), Leonhard Euler über die Beziehung der Exponentialfunktion zu Cosinus und Sinus (1748), Carl Friedrich Gauß über die gaußsche Zahlenebene (1811) und W. M. Faucette über die Lösung quartischer Gleichungen (1996) benutzt.
Aus Sicht der Softwaretechnik handelt es sich dabei um kleinere und größere Algorithmen, die in den zurückliegenden 450 Jahren der Algebra entwickelt wurden. Um diese in eine ausführbare Form zu bringen, definiert man zunächst einige Hilfsmethoden (normalize, find-normalized-zeros, find-reduced-zeros, translate, binomial-expansion), dann Methoden für die verschiedenen Verfahren je nach Grad des Polynoms (ferro, quadratic-resolvent, gives-ferro-zero?, faucette, cubic-resolvent, gives-faucette-zero?) und führt schließlich die verschiedenen Lösungsverfahren zusammen (find-zeros).
Die Hilfsmethoden dienen dazu, Polynome umzuformen und sie so auf die Berechnung der Nullstellen vorzubereiten.
Die Methode normalize dividiert die Koeffizienten des Polynoms durch den führenden Koeffizienten. Dieser wird dadurch Eins. Für die Normalisierung greift man auf die Multiplikation vom Polynomen, konkret die Multiplikation mit einem konstanten Polynom, zurück.
(defmethod normalize ((this polynomial))
(not (zero? (leading-coefficient this)))
(* this (linear-polynomial 0 (/ (leading-coefficient this)))))
Die Methode find-normalized-zeros normalisiert das Polynom und sucht dann seine Nullstellen. Die Nullstellen des normalisierten Polynoms entsprechen denen des ursprünglichen.
(defmethod find-normalized-zeros ((this polynomial) precision)
t
(find-zeros (normalize this) precision))
Bei der Reduktion eines Polynoms geht es um eine Verschiebung entlang der x-Achse. Es wird so verschoben, dass der zweite Koeffizient Null wird. Es gibt immer eine Verschiebung, die das möglich macht. Der Grund für dieses Vorgehen erschließt sich anhand der Satzgruppe von Vièta: Ist der zweite Koeffizient Null, ist die Summe der Nullstellen ebenfalls Null.
Die Methode find-reduced-zeros verschiebt das Polynom, findet die Nullstellen des verschobenen Polynoms und verschiebt dann die Nullstellen in umgekehrter Richtung. So erhält man die Nullstellen des ursprünglichen Polynoms.
(defmethod find-reduced-zeros ((this polynomial) precision)
t
(let
((dx
(/ (second-coefficient this)
-1
(leading-coefficient this)
(degree this))))
(map-with
(curry (+ dx _))
(find-zeros (translate this dx) precision))))
Die Methode translate arbeitet so, wie man die Verschiebung auch mit Bleistift und Papier bewerkstelligen würde: Man setzt z = x + dx und rechnet die Potenzen von z mit den binomischen Formeln aus. Die Faktoren der binomischen Formeln bestimmt man anhand des Pascalschen Dreiecks.
(defmethod translate ((this polynomial) dx)
(number? dx)
(to-polynomial
(apply append
(map-with
(lambda (pair)
(binomial-expansion
(degree pair)
(coefficient pair)
dx))
(to-degree-coefficient-pairs this)))
(degree this)))
(defproc binomial-expansion (polynomial-degree polynomial-coefficient dx)
(zip-with
(lambda (pascal-factor pascal-degree)
(list
pascal-degree
(* pascal-factor
(expt dx (- polynomial-degree pascal-degree))
polynomial-coefficient)))
(pascal polynomial-degree)
(range 0 (+ 1 polynomial-degree))))
So vorbereitet kann man die Nullstellen eines normalisierten und reduzierten Polynoms dritten Grades nach dem Verfahren von Ferro finden. Bei diesem Lösungsweg wird aus dem kubischen Polynom x³ + p x + q ein quadratisches Polynom abgeleitet - die sogenannte quadratische Resolvente x² + q x - p³ / 27.
(defmethod quadratic-resolvent ((this polynomial))
(and
(cubic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(quadratic-resolvent
(third-coefficient this)
(last-coefficient this)))
(defmethod quadratic-resolvent (p q)
(and
(number? p)
(number? q))
(new polynomial
(list
1
q
(/ (* p p p) -27))))
Dann bestimmt man die beiden Nullstellen der quadratischen Resolvente. Von jeder dieser beiden Nullstellen werden die drei dritten Wurzeln bestimmt. Eine mögliche Nullstelle des ursprünglichen Polynoms dritten Grades ergibt sich aus der Summe einer dritten Wurzel der ersten Nullstelle der Resolvente und einer dritten Wurzel der zweiten Nullstelle.
(defmethod ferro ((this polynomial) precision)
(and
(cubic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(let
((resolvent-zeros (find-zeros (quadratic-resolvent this) (* precision 1e-3))))
(let
((pairs
(select-if
(lambda (pair)
(gives-ferro-zero?
(first pair)
(second pair)
(third-coefficient this)
precision))
(cartesian-product
(all-cubic-roots (first resolvent-zeros) (* precision 1e-3))
(all-cubic-roots (second resolvent-zeros) (* precision 1e-3))))))
(if
(not (= 3 (length pairs)))
(throw (quote error) "not three zeros found")
(map-with
(lambda (pair)
(approximate
(+ (first pair)
(second pair))
precision))
pairs)))))
Für die Summe der beiden dritten Wurzeln gibt es insgesamt neun Kombinationsmöglichkeiten. Nur drei der Möglichkeiten führen tatsächlich zu einer Nullstelle des ursprünglichen reduzierten Polynoms, und zwar die, bei denen das Produkt der dritten Wurzeln -3 p ergibt.
(defproc nearly-equal? (x y precision)
(<
(abs (- x y) precision)
precision))
(defproc gives-ferro-zero? (u v p precision)
(nearly-equal? (* -3 u v) p precision))
Das Verfahren von Faucette für quartische Gleichungen arbeitet nach einem ähnlichen Grundprinzip wie das Verfahren von Ferro:
- Aufstellen einer Resolvente,
- Finden der Nullstellen der Resolvente,
- Bestimmen aller Wurzeln dieser Nullstellen,
- Kombinieren der Wurzeln in einer Summe und
- Herausfiltern der passenden Kombinationen.
Die Resolvente ist ein Polynom dritten Grades. x³ + 2 p x² + (p² - 4 r) x - q² ist die Resolvente für das reduzierte Polynom x⁴ + p x² + q x + r.
(defmethod cubic-resolvent ((this polynomial))
(and
(quartic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(cubic-resolvent
(third-coefficient this)
(fourth-coefficient this)
(last-coefficient this)))
(defmethod cubic-resolvent (p q r)
(and
(number? p)
(number? q)
(number? r))
(new polynomial
(list
1
(* 2 p)
(- (* p p) (* 4 r))
(* -1 q q))))
Es ergeben sich drei Nullstellen der Resolvente. Von diesen drei Nullstellen werden jeweils beide Quadratwurzeln bestimmt. Eine mögliche Nullstelle des ursprünglichen Polynoms vierten Grades ergibt sich aus der Hälfte der Summe einer Quadratwurzel der ersten Nullstelle der Resolvente und einer Quadratwurzel der zweiten Nullstelle und einer Quadratwurzel der dritten Nullstelle.
(defmethod faucette ((this polynomial) precision)
(and
(quartic-polynomial? this)
(= 1 (leading-coefficient this))
(zero? (second-coefficient this)))
(let
((resolvent-zeros (find-zeros (cubic-resolvent this) (* precision 1e-3))))
(let
((triples
(select-if
(lambda (triple)
(gives-faucette-zero?
(first triple)
(second triple)
(third triple)
(fourth-coefficient this)
precision))
(cartesian-product-of-3
(all-square-roots (first resolvent-zeros) (* precision 1e-3))
(all-square-roots (second resolvent-zeros) (* precision 1e-3))
(all-square-roots (third resolvent-zeros) (* precision 1e-3))))))
(if
(not (= 4 (length triples)))
(throw (quote error) "not four zeros found")
(map-with
(lambda (triple)
(approximate
(* 1/2
(+ (first triple)
(second triple)
(third triple)))
precision))
triples)))))
(defproc cartesian-product-of-3 (a b c)
(map-with
(lambda (pair)
(cons (first pair) (second pair)))
(cartesian-product
a
(cartesian-product b c))))
Für die Summe der drei Quadratwurzeln gibt es insgesamt acht Kombinationsmöglichkeiten. Nur vier der Möglichkeiten führen tatsächlich zu einer Nullstelle des ursprünglichen reduzierten Polynoms, und zwar die, bei denen das Produkt der Quadratwurzeln -q ergibt.
(defproc gives-faucette-zero? (u v w q precision)
(nearly-equal? (* -1 u v w) q precision))
Die Methode find-zeros fasst alle Verfahren zusammen.
(defmethod find-zeros ((this polynomial) precision)
t
(cond
((zero? this)
(throw (quote error) "undefined"))
((constant-polynomial? this)
nil)
((zero? (last-coefficient this))
(cons 0 (find-zeros (/ this (linear-polynomial 1 0)) precision)))
((not (equal? (leading-coefficient this) 1))
(find-normalized-zeros this precision))
((not (zero? (second-coefficient this)))
(find-reduced-zeros this precision))
((linear-polynomial? this)
(quote (0)))
((quadratic-polynomial? this)
(all-square-roots (- (last-coefficient this)) precision))
((cubic-polynomial? this)
(ferro this precision))
((quartic-polynomial? this)
(faucette this precision))
(t
(throw (quote error) "not implemented"))))
Abhängig von den Eigenschaften des Polynoms werden zehn verschiedene Fälle unterschieden: 1. Konstante Polynome, deren (einziger) Koeffizient Null ist, lösen eine Ausnahme aus, denn die Gleichung 0 = 0 ist unbestimmt. 2. Andere konstante Polynome haben keine Lösung. 3. Wenn das Absolutglied des Polynoms Null ist, dann ist Null eine Lösung und wird aus dem Polynom heraus dividiert. Der Quotient wird durch einen rekursiven Aufruf auf weitere Nullstellen untersucht. 4. Wenn der führende Koeffizient nicht Eins ist, wird das normalisierte Polynom auf Nullstellen untersucht (find-normalized-zeros). 5. Wenn der zweite Koeffizient nicht Null ist, wird das reduzierte Polynom auf Nullstellen untersucht (find-reduced-zeros). 6. Wenn es sich um ein lineares, normalisiertes und reduziertes Polynom handelt (also x + 0), ist die einzige Nullstelle Null. 7. Wenn es sich um ein quadratisches, normalisiertes und reduziertes Polynom handelt (also x² + q), dann sind die Quadratwurzeln von -q die beiden Nullstellen. 8. Wenn es sich um ein kubisches, normalisiertes und reduziertes Polynom handelt, wird das Verfahren von Ferro (ferro) angewendet. 9. Wenn es sich um ein quartisches, normalisiertes und reduziertes Polynom handelt, wird das Verfahren von Faucette (faucette) angewendet. 10. In allen anderen Fällen wird eine Ausnahme ausgelöst.
Die hier beschriebenen Methoden sind in dem unten verlinkten Kalkulationsblatt zeros-of-polynomials.sheet.xml enthalten. Das Kalkulationsblatt kann mit dem Programm Calc ausgeführt werden.
Quellen
https://de.wikipedia.org/wiki/Kubische_Gleichung
https://de.wikipedia.org/wiki/Pascalsches_Dreieck
https://de.wikipedia.org/wiki/Newton-Verfahren
https://de.wikipedia.org/wiki/Halley-Verfahren
https://de.wikipedia.org/wiki/John_Machin
https://de.wikipedia.org/wiki/Moivrescher_Satz
https://de.wikipedia.org/wiki/Eulersche_Formel
https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Zahlenebene
Faucette, W. M.
"A Geometric Interpretation of the Solution of the General Quartic Polynomial"
Amer. Math. Monthly 103, p. 51-57, 1996