Polynomdivision

mathematisches Rechenverfahren
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