________________________________________________________________________________
Inhalt....: Polynome in MuPAD
Kategorie.: Handwerkskasten
Mathematik: Zahlentheorie, Kryptographie, Lineare Algebra, Analysis, Numerik
MuPAD.....: 3.0.0
Datum.....: 2002-08-14
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: poly, divide, Dom::Integer
________________________________________________________________________________
Elementare MuPAD-Funktionen:
Polynome in MuPAD
Eine der elementarsten Familien von Funktionen in einer Unbestimmten ist die Familie der
Polynomfunktionen (oder kurz Polynome). Der Umgang mit Polynomen soll hier am Beispiel
des MuPAD Befehls 'poly' demonstriert werden.
Es gibt im wesentlichen zwei Möglichkeiten, in MuPAD mit Polynomen zu rechnen.
Die erste Möglichkeit besteht darin, dass man Polynome als MuPAD Expressions
(MuPAD Ausdrücke) definiert. So kann z.B. das Polynom p = x^2 + 1 mittels
p:= x^2 + 1
![]()
definiert werden. Diese Vorgehensweise ist durchaus sinnvoll, wenn man sich
ausschließlich im Bereich der Analysis bewegt und derartige Polynomfunktionen
mit Mitteln der Differenzial- und Integralrechnung diskutiert. Möchte man jedoch
Polynome eher als algebraische Struktur ("Ring der Polynome") betrachten
und algebraische oder zahlentheoretische Methoden wie z.B. die Berechnung des
größten gemeinsamen Teilers zweier Polynome anwenden, so ist es sinnvoller,
die Funktion poly zur Definition von Polynomen in MuPAD zu benutzen.
Die Funktion poly erhält stets zwei oder drei Argumente:
1. Argument: Ein polynomialer Ausdruck in einer Unbestimmten, z.B. in x
2. Argument: Eine einelementige Liste, die die Unbestimmte enthält, die
in dem polynomialen Ausdruck vorkommt, d.h. hier [ x ]
3. Argument: Als drittes, optionales Argument kann man einen Koeffizienten-
bereich angeben, aus dem die Koeffizienten des Polynoms
stammen sollen - wird dieser nicht angegeben, so wird der
größtmögliche Koeffizientenbereich von MuPAD gewählt
(d.h. Dom::ExpressionField - der Bereich, der alle Zahlen
und Variablen umfaßt).
Ein Aufruf der Funktion ist also in der Regel entweder von der Form
poly( polynomialer Ausdruck z.B. in x, [ x ] )
oder, falls explizit ein bestimmter Koeffizientenbereich R gewünscht ist, von der Form
poly( polynomialer Ausdruck z.B. in x, [ x ], R )
Als Rückgabewert liefert uns poly im ersten Fall ein Polynom in x über dem
größtmöglichen in MuPAD verfügbaren Koeffizientenbereich Dom::ExpressionField().
Im zweiten Fall wird das Polynom so erzeugt, dass seine Koeffizienten aus dem
explizit angegebenen Koeffizientenbereich R stammen. Für den interessierten
Leser weisen wir darauf hin, dass im Handwerkskasten einige wichtige mögliche
Koeffizientenbereiche in dem Notebook "Zahlbereiche_in_MuPAD" vorgestellt
werden.
Wir betrachten einige Beispiele:
p:= poly(x^2 - 5*x + 6, [x])
![]()
q:= poly(x^3 - 2*x^2 - x + 2, [x])
![]()
Wir können nun mit den beiden Polynomen die üblichen arithmetischen
Operationen wie Addition und Multiplikation durchführen. Ein Vorteil besteht
darin, dass wir stets wieder ein Polynom erhalten:
Summe:= p + q
![]()
Differenz:= p - q
![]()
Produkt:= p * q
![]()
p * poly(1/3, [x])
![]()
Das einizige, womit wir vorsichtig sein müssen, ist die Division. Als algebraische
Struktur betrachtet, bildet die Menge der Polynome in einer Unbestimmten über
einem speziellen Koeffizientenbereich einen Ring, aber keinen Körper. Elemente
sind also (abgesehen von konstanten Polynomen, die in dem zugrundeliegenden
Koeffizientenbereich invertierbar sind) nicht invertierbar. Dies teilt uns MuPAD auch
ganz unverblümt mit:
Quotient:= p / q
![]()
Ähnlich wie bei ganzen Zahlen können wir auch "ganzzahlige Division" durchführen
und Reste betrachten. Die Funktion divide bestimmt den Quotienten zweier
Polynome nach dem Euklidischen Algorithmus.
Die Funktion divide erhält stets zwei Argumente:
1. Argument: Ein Polynom p in einer Unbestimmten, z.B. in x
2. Argument: Ein Polynom q in derselben Unbestimmten wie p, hier z.B. in x
d.h. also ein Aufruf ist immer von der Form divide ( p, q, ).
Als Rückgabewert liefert uns die Funktion eine Sequenz von zwei Polynomen
s und r. Dabei ist s der Quotient von p und q und r der Rest bei Division von p durch q,
so dass gilt:
p = s * q + r
Die Handhabung der Funktion ist also denkbar einfach. Wir erproben sie am Beispiel
unserer Polynome:
divide(p, q)
![]()
Wir machen die Probe: Auf das erste Polynom der Sequenz (d.h. auf den Quotienten
unserer beiden Polynome) greifen wir wie auf die Elemente einer Liste mit dem
Indexoperator [ ] zu:
s:= divide(p, q)[1]
![]()
Der Rest, d.h. das Polynom r, ist gegeben durch
r:= divide(p, q)[2]
![]()
Die Probe ergibt:
p = s * q + r
![]()
Das Ergebnis ist also korrekt. Wir vertauschen noch einmal die Rollen von p und q:
divide(q, p)
![]()
s:= divide(q, p)[1]
![]()
r:= divide(q, p)[2]
![]()
q = s * p + r
![]()
Wir führen nun die gleichen Rechnungen noch einmal durch - diesmal wollen wir
aber explizit Polynome mit ganzzahligen Koeffizienten betrachten. Der Bereich
der ganzen Zahlen ist in MuPAD durch Dom::Integer gegeben.
R:= Dom::Integer
![]()
Wir können jetzt p und q als Polynome über R definieren und alle obigen Rechnungen
erneut durchführen:
p:= poly(x^2 - 5*x + 6, [x], R)
![]()
q:= poly(x^3 - 2*x^2 - x + 2, [x], R)
![]()
Summe:= p + q
![]()
Differenz:= p - q
![]()
Produkt:= p * q
![]()
divide(p, q)
![]()
divide(q, p)
![]()
Wo liegt nun der Unterschied zu den Polynomen p und q, die wir zuerst
betrachtet haben? Nun, wir haben eine Rechnung von oben bisher aus gutem
Grund nicht wiederholt: Die Multiplikation von p mit dem konstanten Polynom 1/3.
Da 1/3 keine ganze Zahl ist, können wir das konstante Polynom 1/3 über R erst
gar nicht definieren:
poly(1/3, [x], R)
![]()
MuPAD hält sich also strikt daran, dass alle Koeffizienten tatsächlich ganzzahlig
sein müssen. Dieses Konzept ist vor allem dann wichtig, wenn man sicherstellen
möchte, dass man bei bestimmten Rechnungen nicht aus einem fest vorgegebenen
Koeffizietenbereich "herausfällt".
Die Funktionen gcd und gcdex zur Berechnung des größten gemeinsamen
Teilers sowie die Funktion lcm zur Berechnung des kleinsten gemeinsamen
Vielfaches sind auch für Polynome verwendbar. Wir verzichten hier auf eine
genaue Beschreibung der Funktionen - sie lassen sich ganz analog beschreiben
wie die in dem Notebook "ggT_und_kgV" angegebenen entsprechenden
Funktionen igcd, igcdex und ilcm für ganzen Zahlen.
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie in der Buchreihe Mathematik 1 x anders. In dieser Reihe
wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gelöst. Die
Bücher können unter www.schule.mupad.de/literatur kostenfrei kopiert werden.
_______________________________________________________________________________