Zum Inhalt springen

Polynomdivision

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 17. April 2007 um 13:35 Uhr durch 88.66.60.165 (Diskussion) (Manueller Ablauf). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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.

Anwendungen

  • Bei der Berechnung von Prüfsummen findet die Polynomdivision über dem Ring der ganzen Zahlen modulo 2 Anwendung. Siehe CRC-Polynom.

Berechnung

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 multiplizieren, denn die höchste Potenz von q ist 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 nicht das Nullpolynom ist, kann man (mit Rest) durch dieses Polynom dividieren.

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 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.

Pseudo-Division

Die oben beschriebene Methode zur Polynomdivision ist nur dann anwendbar, wenn der Leitkoeffizient des Divisors 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 und vorgegeben sind und eine Konstante sowie Polynome und gesucht werden. Auch hier soll wieder der Grad von kleiner als derjenige von sein.

Das Vorgehen ist ähnlich der normalen Polynomdivision. Allerdings werden im Divisionsschritt das Polynom nicht nur sondern auch mit geeigneten Faktoren multipliziert, um zu erreichen, dass die Leitkoeffizienten sich gegenseitig herauslöschen.

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 , der Leitkoeffizienten von , in nicht invertierbar ist. Wir können aber mit multiplizieren. Nun kann man mit multipliziert abziehen und erhält.

Der Grad von ist dabei kleiner als derjenige von aber noch nicht kleiner als der von . Ziehen wir nun von diesem Zwischenergebnis -mal ab, erhalten wir

Da als konstantes Polynom einen kleineren Grad als besitzt, sind wir hier fertig. Rückwärts einsetzen ergibt

oder umgeformt

Eine Probe bestätigt dies.

Algorithmus

Das Vorgehen soll nun noch durch den Algorithmus illustriert werden. Dieser rekursive Algorithmus hat als Argumente zwei Polynome und , wobei nicht das Nullpolynom sein darf, sowie die Variable , bezüglich der die Pseudodivision zu erfolgen hat. Das Ergebnis ist ein Tripel bestehend aus Polynomen und sowie einer Konstanten , so dass 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.

Siehe auch