Polynomdivision
aus Wikipedia, der freien Enzyklopädie
Die Polynomdivision, auch Partialdivision genannt, ist ein mathematisches Verfahren zur Lösung der Gleichung
bei gegebenen Polynomen p und q über einem Polynomring, also der Bestimmung der Polynome s und r, wobei der Grad von r kleiner als der von q sein soll. Die Situation ist analog zur Division mit Rest bei ganzen Zahlen.
Inhaltsverzeichnis |
[Bearbeiten] Anwendungen
- Eine Anwendung ist das Lösen von Gleichungen höheren Grades. Wenn eine Lösung xn z. B. durch Intervallschachtelung gefunden wurde, findet die Polynomdivision Anwendung, um den Grad der Gleichung um Eins zu senken.
- Eine weitere Anwendung findet die Polynomdivision bei der Bestimmung der Näherungskurven einer rationalen Funktion (siehe Kurvendiskussion).
- Bei der Berechnung von Prüfsummen findet die Polynomdivision über dem Ring der ganzen Zahlen modulo 2 Anwendung. Siehe CRC-Polynom.
[Bearbeiten] Berechnung
[Bearbeiten] Manueller Ablauf
Das Verfahren funktioniert genau so wie die schriftliche Division ganzer Zahlen und kann mit dem gleichen Schema gelöst werden. Hier sind die einzelnen Schritte erläutert:
- So lösen Sie die Aufgabe
- Wie bei der Division ganzer Zahlen kümmern wir uns zuerst nur darum, den höchsten Anteil des Polynoms zu eliminieren. Dazu müssten wir q mit 4x3 multiplizieren, denn die höchste Potenz von q ist x2 und es gilt
.
- Man eliminiert jetzt immer weiter die jeweils höchste Potenz, bis man einen Rest erhält, der nicht mehr weiter eliminiert werden kann, weil der Grad des Rests kleiner als der Grad von q ist.
Ein mögliches Verständnisproblem beim „Herausdividieren einer Nullstelle“ besteht darin, dass man vermeintlich durch 0 dividiert. Dies ist jedoch nicht der Fall, da man nicht Zahlen dividiert, sondern Polynome. Da das Polynom x2 + 1 nicht das Nullpolynom ist, kann man (mit Rest) durch dieses Polynom dividieren.
[Bearbeiten] Algorithmus
Das folgende Code-Fragment in BASIC zeigt den Kern der Berechnung:
For i = GradZ - GradN To 0 Step -1 Quotient(i) = Zähler(i + GradN) / Nenner(GradN) For j = GradN To 0 Step -1 Zähler(i + j) = Zähler(i + j) - Nenner(j) * Quotient(i) Next j Next i For j = GradN - 1 To 0 Step -1 Rest(j) = Zähler(j) Next j
Die Variable Zähler() ist ein Feld (Array), welches die Koeffizienten des Zählerpolynoms enthält, so dass Zähler(i) den Koeffizienten der Potenz xi enthält. Sinngemäß ist Nenner() ein weiteres Feld, welches in gleicher Art die Koeffizienten des Nennerpolynoms enthält. Das Ergebnis ist ein Polynom, welches in Quotient() und Rest() ausgegeben wird. Die Variablen GradN und GradZ enthalten den jeweiligen Polynomgrad von Zähler und Nenner.
In einem optimierten Programm würde man die innere Schleife von 0 bis (GradN-1) laufen lassen und die Ergebnisse in Zähler() zurückschreiben, so dass die Variablen Quotient() und Rest() entfallen würden. Der Einfachheit halber wurde hier darauf verzichtet.
[Bearbeiten] Pseudo-Division
Die oben beschriebene Methode zur Polynomdivision ist nur dann anwendbar, wenn der Leitkoeffizient des Divisors q(x) eine Einheit im Grundring ist. Über allgemeinen Grundringen muss das jedoch nicht immer der Fall sein. Deswegen wird eine sogenannte Pseudo-Division definiert, die über allen Integritätsringen funktioniert. Gelöst wird dabei nicht die obige Gleichung, sondern die leicht variierte Gleichung
wobei die Polynome p und q vorgegeben sind und eine Konstante α sowie Polynome s und r gesucht werden. Auch hier soll wieder der Grad von r kleiner als derjenige von q sein.
Das Vorgehen ist ähnlich der normalen Polynomdivision. Allerdings werden im Divisionsschritt das Polynom nicht nur q sondern auch p mit geeigneten Faktoren multipliziert, um zu erreichen, dass die Leitkoeffizienten sich gegenseitig herauslöschen.
[Bearbeiten] Beispiel
Als Beispiel soll eine Pseudo-Division im Polynomring über den ganzen Zahlen durchgeführt werden. Seien
Eine normale Polynomdivision ist hier nicht möglich, da 5, der Leitkoeffizienten von q, in nicht invertierbar ist. Wir können aber p mit 5 multiplizieren. Nun kann man q mit 2x multipliziert abziehen und erhält.
-
- 5p(x) − 2xq(x) = 10x2 + 5 − 10x2 − 10x = − 10x + 5.
Der Grad von − 10x + 5 ist dabei kleiner als derjenige von p aber noch nicht kleiner als der von q. Ziehen wir nun von diesem Zwischenergebnis − 2-mal q ab, erhalten wir
-
- − 10x + 5 − ( − 2)q(x) = − 10x + 5 + 10x + 10 = 15.
Da 15 als konstantes Polynom einen kleineren Grad als q besitzt, sind wir hier fertig. Rückwärts einsetzen ergibt
-
- 15 = (5p(x) − 2xq(x)) − ( − 2)q = 5p(x) − (2x − 2)q(x)
oder umgeformt
-
- 5p(x) = (2x − 2)q(x) + 15.
Eine Probe bestätigt dies.
[Bearbeiten] Algorithmus
Das Vorgehen soll nun noch durch den Algorithmus illustriert werden. Dieser rekursive Algorithmus hat als Argumente zwei Polynome p und q, wobei q nicht das Nullpolynom sein darf, sowie die Variable x, bezüglich der die Pseudodivision zu erfolgen hat. Das Ergebnis ist ein Tripel (c,s,r) bestehend aus Polynomen s und r sowie einer Konstanten c, so dass cp = sq + r und gelten.
pseudoDivision(p, q, x) = if d < 0 then (1, 0, p) else (c * a, c * t + s, r) where d = grad(p, x) - grad(q, x) a = lcoeff(q, x) b = lcoeff(p, x) t = b*xd (c,q,r) = pseudoDivision(a*p - t*q, q, x)
Hierbei liefert den Grad sowie
den Leitkoeffizienten eines Polynomes. Man kann noch weitere Verbesserungen am Algorithmus vornehmen, indem man etwa wie im Beispiel die Multiplikation mit a unterlässt, wenn sie nicht notwendig ist.
[Bearbeiten] Siehe auch
[Bearbeiten] Weblinks
- Polynomdivision Schritt für Schritt
- Polynomdivision für Casio Taschenrechner - Ein Programm für Casio CFX9850G u.a.
- Ein Rechner für Polynomdivision im Internet (Java Script)
- Eine sehr gute Übungsseite