Kapitel 2 Ein Grundbaukasten für die Mathematik

Werbung
Kapitel 2
Ein Grundbaukasten für die Mathematik
In diesem Abschnitt sammeln wir einige Grundbausteine, die in der Mathematik
oft Verwendung finden. Dieser Teil kann als Nachschlagewerk angesehen
werden, in dem bei Bedarf nach Definitionen und Eigenschaften mathematis−
cher Grundobjekte gesucht werden kann. Wir werden allerdings dieses Grun−
drüstzeug nicht im vorhinein auf Lager legen, sondern nur bei Bedarf hier
nachschlagen.
2.1 Quantoren, Mengen, Tupel
Quantoren, Mengen und Tupel sind die grundlegendsten Bestandteile der
mathematischen Sprache. Wir verweisen auf die Grundvorlesungen úLineare
Algebraø und úAnalysisø für eine Einführung dieser Objekte und werden hier
nicht weiter ins Detail gehen.
2.2 Funktionen
Schon in der ersten Übersicht über Fragestellungen, die in der algorithmischen
Mathematik von Interesse sein könnten (siehe Kapitel úBegriffsbildungø), war
oft von Funktionen die Rede. Was sind nun Funktionen?
54
Kapitel 2: Ein Grundbaukasten für die Mathematik
2.2.1 Funktionen von einer Variablen
Eine Zuordnung f , die jedem Objekt eines Grundbereichs A genau ein Objekt
eines Zielbereichs B zuordnet, nenne ich eine (einstellige) Funktion von A nach
B. Wir führen dafür die Schreibweise f › A ® B ein. Das durch die Funktion f
dem Objekt x zugeordnete Objekt wird úFunktionswert von xø genannt und mit
f @xD bezeichnet. Eine Funktion kann eine úBlackboxø sein, die für jeden Input x
einen Output f @xD liefert, ohne dass úvon aussenø ersichtlich ist, wie der Funk−
tionswert f @xD ermittelt wird. Oft ist es aber so, dass mittels eines Terms tx die
Zuordnungsvorschrift bekannt ist, die jedem x den Funktionswert f @xD zuordnet.
In diesem Fall schreibt man dafür gerne die Funktion in Termdarstellung
f› A® B
x # tx
oder in Fällen, wo der Grund| und Zielbereich nicht von Interesse sind,
f › x # tx
Oft schreiben wir dafür auch
f @xD := tx
Einen konkreten Funktionswert f @aD kann ich aus der Termdarstellung ermitteln,
indem ich im Term tx jedes freie Auftreten von x durch a ersetze, wir schreiben
dafür tx®a .
Oft will ich auch einfach von einer Funktion sprechen, die jedem x das durch
den Term tx beschriebene Objekt zuordnet, ohne dass die Funktion selbst
einen Namen zu tragen braucht. Ich kann dafür x # tx schreiben. Eine andere
gebräuchliche Schreibweise ist die sogenannte Λ|Notation, in der ich eine
derartige Funktion mit Λ tx (oder oft auch Λ x.tx ) bezeichne. Oft wird aber
x
schlampigerweise von Dingen wie der úFunktion x2 ø oder ähnlichen Dingen
gesprochen. Dies ist so lange nicht weiter schlimm, wenn eindeutig klar ist,
welches Symbol die Funktionsvariable bezeichnet, und wenn im Hinterkopf
immer klar ist, dass mit der úFunktion x2 ø die Funktion x # x2 oder Λ x2 gemeint
x
ist. Wenn ich aber Terme wie z.B. k x + d vor mir habe, dann ist das keineswegs
mehr klar, wenn man einmal davon absieht, dass meistens x die Variable ist. Es
sollte aber klar sein, dass ein Computerprogramm solche Annahmen keinesfalls
treffen kann, und man sich daher in der algorithmischen Umsetzung von Lösung−
sideen, bei denen Funktionen involviert sind, einer klaren Ausdrucksweise
bedienen muss.
Viele Operationen auf Funktionen werden derart erweitert, dass anstelle der
gesamten Funktion nur mehr der Funktionsterm bearbeitet wird. Meist bedeutet
dies, dass Funktionsanwendung f @aD durch tx®a ersetzt werden muss. Es soll
uns dann aber nicht mehr überraschen, wenn diese Operationen zusätzlich die
Kapitel 2: Ein Grundbaukasten für die Mathematik
55
uns dann aber nicht mehr überraschen, wenn diese Operationen zusätzlich die
Funktionsvariable als einen weiteren Parameter verlangen, da ansonsten die
Ersetzung nicht richtig durchgeführt werden kann.
Funktionen f › N ® D werden auch D|Folgen genannt. Mit der Abkürzung
Nk := 8n Î N È n ³ 1 ß n £ k<
kann ich Funktionen f › Nk ® D dann endliche D|Folgen der Länge k nennen.
Im Zusammenhang mit Folgen werden die Funktionswerte f @nD auch gerne als
fn angeschrieben und Folgenelemente genannt. Eine endliche Folge f der
Länge k kann in der Form eines Tupels X f1 , f2 , ¼, fk \ angegeben werden.
Das gesamte Verhalten einer Funktion (losgelöst von der konkreten Zuord−
nungsvorschrift) spiegelt sich im Grafen der Funktion wider: Für f › A ® B
definiere ich
Gr1 @ f , AD := 8Xx, f @xD\ È x Î A<
In einem streng Mengenlehre|orientierten Aufbau der Mathematik wird jede
Funktion mit ihrem Grafen identifiziert! Dieser Zugang wird auch extensional
genannt. Extensional betrachtet ist also eine Funktion nichts anderes als eine
Menge von Paaren Xx, f @xD\, völlig unabhängig davon, wie der Funktionswert
f @xD tatsächlich berechnet wird. Für eine algorithmische Mathematik ist der
extensionale Funktionsbegriff aus folgendem Grund nicht so gut geeignet:
Seien zum Beispiel A1 und A2 zwei verschiedene Algorithmen zum Berechnen
ein und derselben úFunktionø, d.h. für alle x Î A gilt: A1 @xD = A2 @xD. Es gilt dann
natürlich Gr1 @A1 , AD = Gr1 @A2 , AD, wodurch in der extensionalen Betrachtungs−
weise auch A1 = A2 wäre. Ich will Funktionen, die durch verschiedene Algorith−
men realisiert werden, aber nicht miteinander identifizieren!
Der Graf einer Funktion eignet sich aber gut zur grafischen Veranschauli−
chung einer Funktion. Die Menge von Paaren Xx, f @xD\ kann ich als Wertetabelle
(vor allem dann, wenn der Grundbereich nur aus endlich vielen (wenigen)
Objekten besteht) oder als Menge von Punkten in einem 2|dimensionalen
kartesischen Koordinatensystem darstellen, siehe auch grafische Darstellung in
Mathematica im nächsten Kapitel.
2.2.1 Funktionen von einer Variablen in Mathematica bzw. Theorema
Funktionsdefinitionen haben in Mathematica die Gestalt
f@x_D := x2 - 3 x + 1
f@4D
5
56
Kapitel 2: Ein Grundbaukasten für die Mathematik
f@3  4D
11
- €€€€€€€€€€
16
f@aD
1 - 3 a + a2
In Theorema verwende ich eine únormaleø Definition:
Definition@"f", any@xD,
f@xD := x2 - 3 x + 1D
Use@Definition@"f"DD
Compute@f@4DD
H42 - 3 * 4L + 1
UseAlso@Built|in@"Numbers"DD
Compute@f@4DD
5
Compute@f@3  4DD
-11
€€€€€€€€€€€€€€€€
16
Compute@f@aDD
H1 + a2 L - 3 * a
Den Funktionsgrafen einer reellen Funktion (d.h. Grund| und Zielbereich sind
Teilmengen von R) visualisiere ich in Mathematica durch den Befehl Plot,
siehe auch úAnhang A: Mathematicaø.
Plot@f@xD, 8x, -2, 3<D;
5
4
3
2
1
-2
-1
1
-1
Clear@fD
2
3
Kapitel 2: Ein Grundbaukasten für die Mathematik
57
Wenn ich den Grundbereich, also die Menge der zulässigen Eingabewerte,
einschränken will, so definiere ich beispielsweise
n2 - 3 n + 1
g@n_IntegerD := €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
€
2 n2 + 3
g@4D
1
€€€€€€
7
g@-4D
29
€€€€€€€€€€
35
g@3  4D
3
gA €€€€€€ E
4
ListPlot@Table@8n, g@nD<, 8n, -30, 30<D,
AxesOrigin ® 8-30, 0<, PlotStyle ® [email protected]<D;
1
0.8
0.6
0.4
0.2
-20
-10
0
-0.2
oder
n2 - 3 n + 1
h@n_Integer ; n ³ 0D := €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
€
2 n2 + 3
h@4D
1
€€€€€€
7
h@-4D
h@-4D
h@3  4D
3
hA €€€€€€ E
4
10
20
30
58
Kapitel 2: Ein Grundbaukasten für die Mathematik
ListPlot@Table@h@nD, 8n, 0, 30<D, PlotStyle ® [email protected]<D;
0.4
0.3
0.2
0.1
5
10
15
20
25
30
-0.1
-0.2
Clear@g, hD
Anmerkung: Den Graf von Funktionen, die nicht die reellen Zahlen als Grund−
bereich haben, darf ich nicht als durchgehende Linie darstellen! Daher soll ich
Plot nur für reelle Funktionen verwenden.
In Theorema:
DefinitionA"h", any@nD, with@is|integer@nD ß n ³ 0D,
n2 - 3 n + 1
h@nD := €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
€E
2 n2 + 3
UseAlso@XDefinition@"h"D, Built|in@"Connectives"D\D
Compute@h@4DD
1
€€€€€€
7
Compute@h@-4DD
h@-4D
Compute@h@3  4DD
3
hA €€€€€€ E
4
Kapitel 2: Ein Grundbaukasten für die Mathematik
59
2.2.2 Funktionen von mehreren Variablen
Oft werden wir aber auch mit Zuordnungen zu tun haben, die jeder Kombination
von Objekten der Grundbereiche A1 , ¼, An genau ein Objekt des Zielbereiches
B zuordnen. Eine solche Zuordnung nenne ich eine mehrstellige Funktion von
A1 , ¼, An nach B. Mittels einer Zuordnungsvorschrift definiere ich derartige
Funktionen üblicherweise in der Form
f @x1 , ¼, xn D := tx1 ,¼,xn
(1)
Einen konkreten Funktionswert f @a1 , ¼, an D kann ich berechnen, indem ich im
Term tx1 ,¼,xn jedes freie Vorkommen einer Variablen xi durch den entsprech−
enden Wert ai ersetze, ich schreibe dafür tx1 ,¼,xn ®a1 ,¼,an .
Ich nenne eine Funktion, die von n Eingabeparametern abhängt, auch gerne
eine n|stellige Funktion. Den Graf einer n|stelligen Funktion von A1 , ¼, An nach
B definiere ich analog zu einstelligen Funktionen als Menge von Tupel der
Länge n + 1
Grn @ f , A1 , ¼, An D := :Xx1 , ¼, xn , f @x1 , ¼, xn D\ Ë
"
i=1,¼,n
xi Î Ai >
Ich kann eine mehrstellige Funktion aber immer als eine einstellige Funktion
betrachten, die jedem Tupel von Objekten aus den Grundbereichen ein Objekt
aus dem Zielbereich zuordnet! In dieser Betrachtungsweise sehe ich eine
mehrstellige Funktion f von A1 , ¼, An nach B als eine (einstellige) Funktion
f›
C
i=1,¼,n
Ai ® B
Dabei nenne ich
C
i=1,¼,n
Ai := :a È a ist Tupel ß a¤ = n í
"
i=1,¼,n
ai Î Ai >
das kartesische Produkt der Mengen A1 , ¼, An . Hier spielt C wieder die Rolle
eines Quantors. Der zu C assoziierte Operator ist ‰, anstelle von A‰ A schreibe
ich auch A2 und analog für das kartesische Produkt von drei oder mehreren
Mengen. C A schreibe ich demnach als An .
i=1,¼,n
Auch bei mehrstelligen Funktionen ist in vielen Fällen die Abbildung durch
eine Zuordnungsvorschrift festgelegt, ich schreibe analog zum Fall einstelliger
Funktionen
f›
C
i=1,¼,n
Ai
®B
Xx1 , ¼, xn \ # tx1 ,¼,xn
60
Kapitel 2: Ein Grundbaukasten für die Mathematik
oder einfach
f › Xx1 , ¼, xn \ # tx1 ,¼,xn
Konsequenterweise sollten wir derartige Funktionen dann in der Form
f @Xx1 , ¼, xn \D := tx1 ,¼,xn
(2)
definieren, jedoch ist es in der Praxis meist üblich, die Tupelklammern úXø und
ú\ø auf der linken Seite der Definition wegzulassen und die Funktion in der Form
(1) anzugeben! Ist x ein Tupel der Länge n und f eine Funktion, so steht f @xD für
f @Xx1 , ¼, xn \D (Standardfunktionsanwendung!), ähnlich dazu schreibe ich €f @xD
für f @x1 , ¼, xn D (Funktionsanwendung auf Argument|Tupel).
Definition@"Function on argument tuple", any@f, 
xD,
\D := f@x
DD
f @Xx
€
Wenn ich mich auf einstellige Funktionen einschränke und mehrstellige Funk−
tionen als einstellige Funktionen auf Tupel betrachte, dann kann ich auf die
€|Notation verzichten. Wenn ich konkrete Beispiele rechne, muss ich dann
aber die Funktionen in der Form (2) definieren. Wenn ich mir die Freiheit lasse,
Funktionen in Rechenbeispielen als mehrstellige Funktionen in der Form (1) zu
definieren, so muss ich auf die €|Notation in Definitionen zurückgreifen!
2.2.2 Funktionen von mehreren Variablen in Mathematica bzw. Theorema
Funktionen in mehreren Variablen definiere ich in Mathematica als
f@x_, y_D := Sin@xD Cos@yD Exp@yD;
f@3, 2D
ã2 Cos@2D Sin@3D
[email protected], 2.0D
-0.433934
f@X3 + t, 2\D
f@X3 + t, 2\D
f @X3 + t, 2\D
€
ã2 Cos@2D Sin@3 + tD
f @83 + t, 2<D
€
ã2 Cos@2D Sin@3 + tD
In Theorema: (Im Unterschied zur Definition in Mathematica oben verwende ich
hier einmal die Möglichkeit, den Anwendungsbereich von Rechenoperationen
unter den Operatoren explizit anzugeben (Funktor|Notation), siehe genauere
Kapitel 2: Ein Grundbaukasten für die Mathematik
61
unter den Operatoren explizit anzugeben (Funktor|Notation), siehe genauere
Ausführungen dazu im Kapitel úPolynomeø später! Wir definieren hier eine
Funktion f , die zur Berechnung der Funktionswerte die Multiplikation für
Maschinenzahlen mit 4 Stellen Genauigkeit aus dem Kapitel úZahlendarstellun−
genú verwendet).
DefinitionA"f", any@x, yD,
f@x, yD := JSin@xD * Cos@yDN * Exp@yDE
M@4D
M@4D
Use@Definition@"f"DD
Compute@f@3, 2DD
JSin@3D * Cos@2DN * ã2
M@4D
M@4D
UseAlso@XDefinition@"Machine Numbers"D,
Definition@"Function on argument tuple"D, Built|in@"All Semantics"D\D
Compute@f@3, 2DD
-0.4338000000000000000
ComputeAfAZ3 + t, 2^EE
M@4D
f@Xt + 3.000000000000000000, 2\D
ComputeA€
f AZ3 + t, 2^EE
M@4D
-3.075000000000000000 * Sin@t + 3.000000000000000000D
Zur Veranschaulichung von mehrstelligen Funktionen verwende ich wieder
den Grafen der Funktion. Die Menge von Tupel der Form
Xx1 , ¼, xn , f @x1 , ¼, xn D\ (oder XXx1 , ¼, xn \, f @x1 , ¼, xn D\ wenn ich die Objekte
aus dem Grundbereich zu Tupeln zusammenfasse, siehe oben) kann ich
wieder als Wertetabelle (im Fall, wo alle Grundbereiche nur aus endlich vielen
(wenigen) Objekten bestehen) oder als Menge von Punkten in einem
Hn + 1L|dimensionalen kartesischen Koordinatensystem darstellen. Wir betra−
chten den Fall n = 2 und R (oder Teilmengen davon) als Grundbereiche: es geht
also um eine 2|stellige Funktion f von R und R nach R. Die Schreibweise
f › R2 ® R erweist sich dafür als sehr kompakte Ausdrucksform, egal, ob wir
nun die Objekte aus den Grundbereichen zu einem Tupel zusammenfassen
oder nicht. Wir verwenden ein 3|dimensionales Koordinatensystem zur grafis−
chen Veranschaulichung (für n > 2 muss ich mir mit Projektionen behelfen). Der
Funktionsgraf von f ist eine Fläche im 3|dimensionalen Raum, die wir in Mathe−
matica mit dem Befehl Plot3D erzeugen können, siehe auch úAnhang A:
Mathematicaø.
62
Kapitel 2: Ein Grundbaukasten für die Mathematik
Plot3D@f@x, yD, 8x, 0, 2 Π<, 8y, 0, 2.5<,
Boxed ® False, PlotPoints ® 40, MeshStyle ® [email protected];
5
2.5
0
-2.5
-5
0
2.5
2
1.5
1
2
0.5
4
6 0
Eine oft hilfreiche Alternative dazu ist ContourPlot, wodurch ich eine Darstel−
lung mit Höhenschichtlinien bekomme:
ContourPlot@f@x, yD, 8x, 0, 2 Π<, 8y, 0, 2.5<, PlotPoints ® 40D;
2.5
2
1.5
1
0.5
0
0
1
2
3
4
5
6
Kapitel 2: Ein Grundbaukasten für die Mathematik
63
Die Zusammenfassung der Objekte aus dem Grundbereich zu einem Tupel
hat speziell im Fall von Teilmengen des Rn als Grundbereich den Vorteil, dass
ich durch die Interpretation von Tupel als Vektoren auf sehr elegente Weise
eine geometrische Bedeutung für Operationen auf den Funktionsargumenten
zur Verfügung habe. Umgekehrt kann ich das gesamte Arsenal der Vektorrech−
nung für Operationen auf den Funktionsargumenten einsetzen! Ein Tupel
(Vektor) der Länge 2 entspricht einem Punkt in der Ebene, ein Tupel (Vektor)
der Länge 3 entspricht einem Punkt im Raum, ein Tupel (Vektor) der Länge n
entspricht einem úPunktø im n|dimensionalen Raum. Auch Addition von Tupel
(Vektoren) und Multiplikation von Tupel (Vektor) mit einem Skalar haben eine
anschauliche geometrische Deutung. Seien beispielsweise a, v Î R2 , so
entspricht a + t v für jedes t Î Reinem Punkt auf der Geraden durch den Punkt a
in Richtung v (im Grundbereich). €f @a + t vD entspricht demnach úder Funktion f
entlang der Geraden a + t v aufgeschnittenø, genauer gesagt: die Funktion
Λ €f @a + t vD entspricht dem Schnitt der Funktion f im Punkt a entlang der Rich−
t
tung v!
64
Kapitel 2: Ein Grundbaukasten für die Mathematik
CutGraph@f, 83, 1<, 83, 2<, 8x, 0, 2 Π<,
8y, 0, 2.5<, 8t, -0.5, 1<, 8s, -3, 9<, PlotRange ® 8-2, 9<D;
7.5
5
2.5
0
3
2
0
1
2
4
6
0
8
6
4
2
-0.4 -0.2
0.2
0.4
0.6
0.8
1
Kapitel 2: Ein Grundbaukasten für die Mathematik
65
CutGraph@f, 82, 1.75<, 81, 0<, 8x, 0, 2 Π<, 8y, 1.5, 2<, 8t, -2, 4.3<, 8s, -3, 6<D;
2
2
0
-2
1.8
0
2
1.6
4
6
1
0.5
-2
-1
1
-0.5
-1
2
3
4
66
Kapitel 2: Ein Grundbaukasten für die Mathematik
CutGraph@f, 85, 0<, 80, 1<, 8x, 0, 2 Π<, 8y, -1, 2<, 8t, -1, 2<, 8s, -2, 4<D;
4
2
2
0
-2
1
0
0
2
4
6
-1
1
0.5
-1
-0.5
0.5
-0.5
-1
-1.5
2.2.2 Organisatorisches
1
1.5
2
Kapitel 2: Ein Grundbaukasten für die Mathematik
67
2.3 Polynome und Polynomfunktionen
Objekte wie x + 2 oder x3 + 2 x + 4 sind gemeinhin als Polynome bekannt. Sehr
häufig tauchen Polynome in Zusammenhang mit Funktionen auf, wenn etwa
von der (Polynom|) Funktion x # x3 + 2 x + 4 gesprochen wird. Wir wollen nun
den Begriff des Polynoms etwas genauer beleuchten, da Polynome und
Polynomfunktionen eine zentrale Rolle in vielen Bereichen der
Mathematik~insbesondere der algorithmischen Mathematik~spielen. Viele
Lösungsmethoden beruhen nämlich letztendlich darauf, dass allgemeine
Funktionen auf Polynomfunktionen zurückgeführt werden, und dass viele
Problemstellungen für Polynomfunktionen (relativ!) einfache Lösungen
besitzen. Insbesondere numerische Verfahren begründen sich oft darin, dass
allgemeine Funktionen durch úpassendeø Polynomfunktionen angenähert
werden, und die exakten Lösungen des úangenäherten Polynomproblemsø als
Näherungslösungen des Originalproblems interpretierten werden können.
2.3.1 Polynome
Der intuitive Polynombegriff, in dem ein Polynom als ein úAusdruck der Gestaltø
a xn + b xn-1 + ¼ betrachtet wird, beginnt schwieriger zu werden, wenn ich
Polynome in einem Computer repräsentieren will. In welcher Form soll ich einen
solchen Ausdruck abspeichern? Was ist eigentlich die genaue Bedeutung von
a xn + b xn-1 + ¼ ? Wie kann ich die gewünschten Rechenoperationen auf
diesen Ausdrücken ausführen? Klar, es hängt vom Programmiersystem ab, wie
ich solche Ausdrücke abspeichern kann. Verwende ich z.B. Mathematica als
Programmierwerkzeug, dann habe ich Datenstrukturen für mathematische
Terme zur Verfügung, fein. Verwende ich aber C oder eine ähnlich grundleg−
ende Programmiersprache, dann habe ich dort keine derartigen Datenstruk−
turen zur Verfügung. Ausserdem muss ich mir vor Augen halten, dass ich
vielleicht einmal ein System wie Mathematica implementieren werde. Dazu
werde ich aber eine Sprache wie C (oder was immer dann zur Verfügung steht)
wählen, und dann muss ich mich darum kümmern, wie ich die Ausdrücke
repräsentiere, die ich dem Benutzer zur Verfügung stellen will.
Definition 21 (Polynom)
Ein Polynom über K ist eine K|Folge, deren Elemente ab einem bestimmten
Index allesamt gleich 0 sind. Die einzelnen Elemente der Folge heissen Koeffi−
zienten des Polynoms.
ã
Ein Polynom wird also durch die (unendliche) Folge seiner Koeffizienten
repräsentiert. Falls alle Koeffizienten gleich 0 sind, so ist der Grad des Polyn−
oms ebenfalls 0. Falls in
nicht alle Koeffizienten 0 sind, so gibt es einen
68
Kapitel 2: Ein Grundbaukasten für die Mathematik
oms ebenfalls 0. Falls in p nicht alle Koeffizienten 0 sind, so gibt es einen
maximalen Index d p eines Koeffizienten verschieden von 0, also pd p ¹ 0 und
" p j = 0. In diesem Fall ist d p - 1 der Grad des Polynoms p. Wir repräsen−
j>d p
tieren die unendliche Koeffizientenfolge von p durch die endliche Folge der
Koeffizienten bis einschliesslich zum Index d p , also p = Xp1 , p2 , ¼, pd p \. In
dieser Form ist die Darstellung sogar eindeutig, ich nenne das eine kanonische
Form. Das vertraute x3 + 2 x + 4 repräsentiere ich daher als unendliche Folge
X4, 2, 0, 1, 0, 0, ¼\. Die kanonische Darstellung bis zum höchsten von 0 ver−
schiedenen Koeffizienten ist X4, 2, 0, 1\, der Grad dieses Polynoms ist 3.
Umgekehrt kann ich X4, 2, 0, 1\ sowohl als x3 + 2 x + 4 als auch als y3 + 2 y + 4
schreiben.
In der Theorema|Sprache kann ich diese Definitionen in einer Form ange−
ben, sodass ich damit sofort Berechnungen durchführen kann:
DefinitionA"Basic Polynomial Operations", any@p, nD,
is|polynomial@pD :• is|tuple@pD
Ü
" Hp j = 0L
l0
o
o
j=1,¼, p¤
o
o
deg@pD := m
o
y
i
o
o
"
Hp j = 0Lzz - 1 Ü otherwise
æ jjHpi ¹ 0L í
o i=1,¼, p¤
j=i+1,¼, p¤
{
k
n
l
p
Ü
n
³
0
ß
n
£
deg@pD
o n+1
coef@p, nD := m
o0
Ü otherwise
n
canonic@pD := [pi
È
i=1,¼,deg@pD+1
_
"is|poly"
"deg"
"coef"
"unique"
E
Das Sprachkonstrukt
æ
i=1,¼,n
Pi steht dabei für úein solches i zwischen 1 und n,
für das die Bedingung Pi erfüllt istø. Wir machen uns mit diesen Begriffen
einmal vertraut:
Use@XBuilt|in@"Tuples"D, Built|in@"Quantifiers"D, Built|in@"Numbers"D,
Built|in@"Connectives"D, Definition@"Basic Polynomial Operations"D\D
Compute@is|polynomial@X4, 2, 0, 1\DD
True
Compute@is|polynomial@X0, 1, 0, 0\DD
True
Compute@deg@X4, 2, 0, 1\DD
3
Compute@deg@X0, 1, 0, 0\DD
1
Kapitel 2: Ein Grundbaukasten für die Mathematik
69
Compute@deg@X0, 0, 0, 0\DD
0
Compute@coef@X4, 2, 0, 1\, -1DD
0
Compute@coef@X4, 2, 0, 1\, 0DD
4
Compute@coef@X4, 2, 0, 1\, 1DD
2
Compute@coef@X4, 2, 0, 1\, 2DD
0
Compute@coef@X4, 2, 0, 1\, 3DD
1
Compute@coef@X4, 2, 0, 1\, 4DD
0
Compute@canonic@X4, 2, 0, 1\DD
X4, 2, 0, 1\
Compute@canonic@X4, 2, 0, 1, 0, 0, 0\DD
X4, 2, 0, 1\
Compute@canonic@X0, 1, 0, 0\DD
X0, 1\
Compute@canonic@X0, 0, 0, 0\DD
X0\
Auf den endlichen Folgen, die Polynome repräsentieren, kann ich nun arithme−
tische Operationen wie Addition, Subtraktion und Multiplikation definieren. Hier
stoße ich auf einen sehr subtilen Punkt in der Computer|Mathematik, genauer
gesagt auf einen sehr subtilen Punkt der Mathematik selbst, der aber in der
Computer|Mathematik spezielle Aufmerksamkeit verdient! Für die Addition,
Subtraktion und Multiplikation von Polynomen möchte ich natürlich gerne die
gewohnten Operationszeichen ú+ø, ú−ø und ú*ø verwenden. In den Definitionen
werden aber in natürlicher Weise die entsprechenden Operationen auf den
Koeffizienten auftreten, die ebenfalls mit ú+ø, ú−ø und ú*ø bezeichnet werden.
Wir betrachten einmal die Polynom|Addition: Polynome werden addiert,
indem an jeder Position die Koeffizienten addiert werden. Das würde zu einer
úDefinitionø der Art
70
Kapitel 2: Ein Grundbaukasten für die Mathematik
p + q := [coef@p, iD + coef@q, iD
­
­
Polynomaddition
Koeffizientenaddition
È
_
i=0,¼,deg@pD+deg@qD
führen. Für das úhändischeø Rechnen mit Polynomen ist das OK, weil ich
davon ausgehe, dass ein Mathematiker úerkenntø, dass mit dem ú+ø in
X4, 2, 0, 1\ + X0, 1\ die Polynomaddition úgemeintø ist, das ú+ø in
X4 + 0, 2 + 1, 0 + 0, 1 + 1\ allerdings für die Addition der Koeffizienten (in diesem
Fall die Addition auf natürlichen Zahlen) steht. Diese Situation tritt übrigens
nicht nur bei Polynomen auf, sondern in allen Situationen in der Mathematik, wo
neue Objekte aus schon bestehenden Objekten konstruiert werden und auf den
neuen Objekten Rechenoperationen definiert werden. Wie wir ~ im Speziellen
in der Algebra ~ sehen werden, ist dies sehr oft der Fall. Beispiele dafür
werden sein: Vektoren, Matrizen, rationale Zahlen, rationale Funktionen, Kreuz−
produkte, Faktorstrukturen (Äquivalenzklassen), etc.
Einem Computer kann ich aber eine solche úDefinitionø nicht zumuten. Es
bedarf einiger Überlegungen, wie ein Computer|System zwischen den ver−
schiedenen Interpretationen von ú+ø unterscheiden könnte. Nicht einmal einem
sorgfältigen Mathematiker kann ich eine solche úDefinitionø unterjubeln, denn
auch Definitionen unterliegen Regeln! Es handelt sich im obigen Fall um eine
explizite Funktionsdefinition, und eine der Regeln für explizite Funktionsdefini−
tionen besagt, dass das Funktionssymbol auf der linken Seite der Definition ein
neues Symbol sein muss, das bisher noch nicht als Funktionssymbol vorko−
mmt. (Mehr über die Regeln des Definierens erfahren wir übrigens in der
Vorlesung úLogik als Arbeitsspracheø, die ich nur empfehlen kann.)
Der springende Punkt ist, dass es sich bei der Polynomaddition und der
Koeffizientenaddition um zwei völlig verschiedene Operationen handelt, das ú+ø
auf der linken Seite kann (und muss) ich somit als neues Funktionssymbol
sehen! Es ist rein eine Sache der úelegantenø optischen Erscheinung, dass ich
das ú+ø doppelt verwenden will. Ich kann also obiges Problem umgehen, indem
ich echt neue Funktionssymbole einführe:
DefinitionA"Polynomial Arithmetic", any@p, qD,
p Å q := [coef@p, iD + coef@q, iD
i=0,¼,deg@pD+deg@qD
È
_
p ž q := [coef@p, iD - coef@q, iD
i=0,¼,deg@pD+deg@qD
È
_
p Ä q := [ â coef@p, jD * coef@q, i - jD
j=0,¼,i
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
Ä
E
_
i=0,¼,deg@pD+deg@qD
Kapitel 2: Ein Grundbaukasten für die Mathematik
Das in dieser Definition auftauchende Sprachkonstrukt
71
Ú
nenne ich den
j=0,¼,i
Summationsquantor. Der Summationsquantor ist in vielen Aspekten mit den
logischen Quantoren ú"ø und ú$ø verwandt.
UseAlso@Definition@"Polynomial Arithmetic"DD
Compute@X4, 2, 0, 1\ Å X0, 1\D
X4, 3, 0, 1, 0\
Compute@X4, 2, 0, 1\ ž X0, 1\D
X4, 1, 0, 1, 0\
Compute@X4, 2, 0, 1\ Ä X0, 1\D
X0, 4, 2, 0, 1\
Compute@X4, 2, 0, 1\ Ä X0, 1, 2, 8\D
X0, 4, 10, 36, 17, 2, 8\
Zum Nachrechnen: die letzte Rechnung entspricht der Polynommultiplikation
H4 + 2 x + x3 L * Hx + 2 x2 + 8 x3 L = 4 x + 10 x2 + 36 x3 + 17 x4 + 2 x5 + 8 x6
Das funktioniert ja soweit ganz gut. Wenn ich mir aber die Definitionen genau
anschaue, ist mir Eines nicht ganz klar: welche Addition ist eigentlich mit dem
ú+ø auf der rechten Seite der Funktionsdefinition gemeint? Es stellen sich einige
Fragen:
è Ist das immer die Addition von natürlichen Zahlen?
è Können auch rationale Zahlen als Koeffizienten auftreten?
è Wie unterscheiden sich Polynome mit natürlichen Zahlen als Koeffizienten
von Polynomen mit rationalen Koeffizienten?
è Welche Koeffizientenbereiche können bei Polynomen auftreten?
Viele Autoren von Mathematik|Büchern gehen an die Sache so heran: Anstelle
von neuen Operationssymbolen wie úÅø, úžø und úÄø verwenden sie die schon
in Verwendung befindlichen Symbole ú+ø, ú−ø und ú*ø und schreiben den
Anwendungsbereich der Operation als Index oder unter dem Symbol. Die
Addition auf den natürlichen Zahlen wird dann mit ú+N ø oder ú+ø bezeichnet,
N
die Addition von rationalen Zahlen mit ú+ø, die Addition von Polynomen mit ú+ø
Q
P
etc. Die Operationssymbole sind somit automatisch unterscheidbar. Vom
Standpunkt einer Implementierung in einem Computerprogramm ist das auch
völlig klar, weil ja das Programm zum Addieren von natürlichen Zahlen ein ganz
anderes ist als jenes, das rationale Zahlen addiert. Für Menschen wird dann die
Erleichterung angeboten, dass die zusätzliche Benennung des Anwendungs−
bereiches weggelassen werden kann, wenn es úaus dem Zusammenhang klar
72
Kapitel 2: Ein Grundbaukasten für die Mathematik
bereiches weggelassen werden kann, wenn es úaus dem Zusammenhang klar
istø, welcher Bereich gemeint ist. Unter dieser Vereinbarung schreibe ich dann
die Definitionen eines Polynombereiches über den natürlichen Zahlen wie folgt:
DefinitionA"Natural Number Polynomial Arithmetic", any@p, q, nD,
l
o
0
Ü
"
Jp j = 0N
o
o
N
j=1,¼, p¤
o
o
deg@pD := m
o
o
i
y
o
o
æ jjJpi ¹ 0N í
"
Jp j = 0Nzz - 1 Ü otherwise
o i=1,¼, p¤
N
N {
j=i+1,¼, p¤
k
n
l
o pn+1 Ü n ³ 0 ß n £ deg@pD
coef@p, nD := m 0
Ü otherwise
o
nN
p + q := [coef@p, iD + coef@q, iD
P
N
pq := [coef@p, iD coef@q, iD
P
N
Ë
_
É
_
i=0,¼,deg@pD+deg@qD
i=0,¼,deg@pD+deg@qD
p * q := [ â coef@p, jD * coef@q, i - jD
P
N
N
j=0,¼,i
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄ
E
_
i=0,¼,deg@pD+deg@qD
(Ich möchte mich an dieser Stelle bewusst nicht um die eindeutige Repräsen−
tierung kümmern, daher fehlt die Funktion úcanonicø. Ausserdem sei extra
erwähnt, dass auf Effizienz in dieser Implementierung kein Wert gelegt wurde.)
Use@XBuilt|in@"Tuples"D, Built|in@"Quantifiers"D, Built|in@"Numbers"D@+, -D,
Built|in@"Number Domains"D, Built|in@"Connectives"D,
Definition@"Natural Number Polynomial Arithmetic"D\D
ComputeAX4, 2, 0, 1\ + X0, 1\E
P
X4, 3, 0, 1, 0\
ComputeAX4, 2, 0, 1\ X0, 1\E
P
X4, 1, 0, 1, 0\
In der Wissensbasis ist die Multiplikation für natürliche Zahlen nicht enthalten.
Ich probiere einmal, wie die Multiplikation von Polynomen, die ja die Multiplika−
tion im Koeffizientenbereich benötigt, darauf reagiert.
ComputeAX4, 2, 0, 1\ * X0, 1\E
P
Z4 * 0, 2 * 0 + 4 * 1, 0 * 0 + 2 * 1 + 4 * 0,
N
N
N
N
N
N
0 * 1 + 1 * 0 + 2 * 0 + 4 * 0, 2 * 0 * 0 + 1 * 1 + 2 * 0 + 4 * 0^
N
N
N
N
N
N
N
N
Kapitel 2: Ein Grundbaukasten für die Mathematik
73
ComputeAX4, 2, 0, 1\ * X0, 1, 2, 8\E
P
Z4 * 0, 2 * 0 + 4 * 1, 0 * 0 + 2 * 1 + 4 * 2, 0 * 1 + 1 * 0 + 2 * 2 + 4 * 8,
N
N
N
N
N
N
N
N
N
N
0 * 0 + 0 * 2 + 1 * 1 + 2 * 8 + 4 * 0, 0 * 0 + 0 * 1 + 0 * 8 + 1 * 2 + 2 * 0 + 4 * 0,
N
N
N
N
N
N
N
N
N
N
N
2 * 0 * 0 + 0 * 1 + 0 * 2 + 1 * 8 + 2 * 0 + 4 * 0^
N
N
N
N
N
N
Mit allen Operationen in der Wissensbasis funktioniert alles wieder wie gewohnt!
UseAlso@Built|in@"Numbers"DD
ComputeAX4, 2, 0, 1\ * X0, 1\E
P
X0, 4, 2, 0, 1\
ComputeAX4, 2, 0, 1\ * X0, 1, 2, 8\E
P
X0, 4, 10, 36, 17, 2, 8\
Die Definitionen der Polynomoperationen sind aber nicht willkürlich gewählt.
Man könnte beweisen, dass die Operationen eine Menge von angenehmen
Eigenschaften erfüllen, wie etwa Kommutativität, Assoziativität, Distributivität,
etc. Insgesamt könnte man zeigen, dass die Polynome über einem Koeffizienten−
bereich K einen Ring bilden, sofern K ein Ring ist.
Noch ein paar praktische Vereinbarungen: Das Polynom x wird also durch
X0, 1\ repräsentiert, x2 ist demnach wegen x2 = x * x durch
ComputeAX0, 1\ * X0, 1\E
P
X0, 0, 1\
repräsentiert. Eine Konstante a ist als Polynom geschrieben Xa\. Ich überzeuge
mich einmal davon, dass sich Konstante wirklich so verhalten wie ich mir das
vorstelle.
ComputeAX4\ * JX0, 1\ * X0, 1\NE
X0, 0, 4\
P
P
ComputeAJX4\ * JX0, 1\ * X0, 1\NN + X3\E
X3, 0, 4\
P
P
P
Passt. Das Polynom x3 + 2 x + 4 steht für x * x * x + 2 * x + 4, wobei ich die auftre−
tenden Konstanten 2 und 4 als konstante Polynome betrachte, somit
ComputeAJJX0, 1\ * JX0, 1\ * X0, 1\NN + X2\ * X0, 1\N + X4\E
X4, 2, 0, 1\
P
P
P
P
P
74
Kapitel 2: Ein Grundbaukasten für die Mathematik
Mit diesen Vereinbarungen, also Konstante a als konstante Polynome der Form
Xa\ und x als X0, 1\ darzustellen, verhalten sich also die oben abstrakt defini−
erten Polynomoperationen genau so, wie wir es von unseren úintuitiv vertrauten
Polynomenø her kennen. Die Operationen sind also nicht nur so, dass sie úin
irgendeiner Weiseø schöne Eigenschaften erfüllen, nämlich die, einen Ring zu
bilden, sie modellieren genau unsere úintuitiv vertrauten Polynomeø. Ich habe
also nun ein exaktes Modell für Polynome, das ich auch auf jedem Computer
implementieren kann! Die gebräuchliche Bezeichnung für den Polynombereich
mit einer úVariablenø x (wobei x das spezielle Polynom X0, 1\ ist) über dem
Koeffizientenbereich K ist K@xD, man nennt diese Polynome auch gerne
univariat.
Ich überlege mir nun noch eine Operation, die ich mit Polynomen gerne
ausführen möchte. Ich will anstelle der úVariablen xø einen konkreten Wert in
ein Polynom einsetzten, ich nenne die Operation Polynomevaluation.
DefinitionA"Polynomial Evaluation", any@p, aD,
eval@p, aD :=
P
(Anstelle von
Ú
â
N
i=0,¼,deg@pD
i=0,¼,n
coef@p, iD * ai E
N
n
kann ich normalerweise auch Ú schreiben. Im Zusammen−
i=0
hang mit dem Index beim Summenzeichenzeichen muss ich es aber so
schreiben, weil ansonsten Mathematica beim Abspeichern des Ausdrucks die
Struktur falsch abspeichert ¼ traurig aber wahr!)
UseAlso@Definition@"Polynomial Evaluation"DD
ComputeAeval@X4, 2, 0, 1\, 3DE
P
37
Wenn ich nun Polynome über den rationalen Zahlen definieren will, so
verändert sich an der vorherigen Definition nicht viel, das N auf der rechten
Seite einer jeden Definition wird durch Q ersetzt:
Kapitel 2: Ein Grundbaukasten für die Mathematik
75
DefinitionA"Rational Number Polynomial Arithmetic", any@p, q, nD,
l
o
jijp j = 0zyz
o
0
Ü
"
o
o
Q{
j=1,¼, p¤ k
o
deg@pD := m
o
o
ii
ij
yy
y
o
o
"
jp j = 0zzzz - 1 Ü otherwise
o æ jjjjpi ¹ 0zz í
Q{{
Q{
j=i+1,¼, p¤ k
n i=1,¼, p¤ kk
p
Ü n ³ 0 ß n £ deg@pD
l
o
o n+1
coef@p, nD := o
m0
Ü otherwise
oQ
n
p + q := [coef@p, iD + coef@q, iD
Ë
_
É
_
p * q := [ â coef@p, jD * coef@q, i - jD
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
P
Q
pq := [coef@p, iD coef@q, iD
P
Q
P
i=0,¼,deg@pD+deg@qD
Q
Q
j=0,¼,i
E
i=0,¼,deg@pD+deg@qD
_
i=0,¼,deg@pD+deg@qD
eval@p, aD :=
P
â
Q
i=0,¼,deg@pD
i
coef@p, iD * a
Q
Use@XBuilt|in@"Tuples"D, Built|in@"Quantifiers"D, Built|in@"Numbers"D,
Built|in@"Number Domains"D, Built|in@"Connectives"D,
Definition@"Rational Number Polynomial Arithmetic"D\D
4 2
1
1
ComputeA[ €€€€€€ , €€€€€€ , 0, €€€€€€ _ + [0, €€€€€€ _E
3 5
3 P
2
4 9
1
[ €€€€€€ , €€€€€€€€€€ , 0, €€€€€€ , 0_
3 10
3
4 2
1
1
ComputeA[ €€€€€€ , €€€€€€ , 0, €€€€€€ _ [0, €€€€€€ _E
3 5
3 P
2
4 -1
1
[ €€€€€€ , €€€€€€€€€€€€ , 0, €€€€€€ , 0_
3 10
3
4 2
1
1
ComputeA[ €€€€€€ , €€€€€€ , 0, €€€€€€ _ * [0, €€€€€€ _E
3 5
3 P
2
2 1
1
[0, €€€€€€ , €€€€€€ , 0, €€€€€€ _
3 5
6
4
ComputeA[ €€€€€€ ,
3
2
71
[0, €€€€€€€€€€ , €€€€€€€€€€€€€€ ,
45 325
2
1
1
2 8
€€€€€€ , 0, €€€€€€ _ * [0, €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _E
P
5
3
30 13 7
2164 59
2
8
€€€€€€€€€€€€€€€€€€ , €€€€€€€€€€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ _
1365 126 39 21
Es gefällt mir nicht sonderlich gut, dass ich jeden Polynombereich extra
definieren muss, wo sich doch im Grunde nichts Gravierendes an den Defini−
tionen ändert. Als ein in klaren Strukturen denkender Mathematiker sehe ich
hier doch ein Muster: Der Bereich der Polynome ist vom jeweils gewählten
Koeffizientenbereich abhängig, in den Definitionen kann ich den Koeffizienten−
bereich als Parameter betrachten. Ich nenne den Bereich der Polynome daher
76
Kapitel 2: Ein Grundbaukasten für die Mathematik
bereich als Parameter betrachten. Ich nenne den Bereich der Polynome daher
einen parametrisierten Bereich. Ich habe also anstelle des fixen Polynombere−
ichs P einen vom Koeffizientenbereich K abhängigen Bereich P@KD. Mit dem
Koeffizientenbereich als Parameter kann ich dann ein für allemal einen parame−
trisierten Polynombereich definieren! Wenn ich Polynome über N brauche,
setze ich N für den Parameter ein, wenn ich Polynome über Q brauche, dann
setze ich Q ein, ich kann in weiterer Folge jeden Bereich, der die erforderlichen
Operationen zur Verfügung stellt, als Koeffizientenbereich verwenden. Opera−
tionen, die im Koeffizientenbereich ausgeführt werden können müssen, sind in
diesem Beispiel: 0, +, −, *. Wenn ich den Polynombereich noch mit weiteren
Funktionen erweitern will (z.B. Polynomdivision etc.), brauche ich vielleicht noch
zusätzliche Operationen aus dem Koeffizientenbereich. Das mache ich jetzt
aber nicht.
Solche Definitionen kann ich sehr elegant mit Hilfe eines Funktors bes−
chreiben! In einem Funktor kann ich festlegen, auf welche Weise ein neuer
Bereich von mathematischen Objekten entsteht. Diese Bereiche können auch,
wie wir es im Fall der Polynome benötigen, parametrisiert sein. Von dieser
Möglichkeit mache ich Gebrauch, wenn ich beschreiben will, wie ein neuer
Bereich aus einem schon bestehenden Bereich gebildet wird.
Kapitel 2: Ein Grundbaukasten für die Mathematik
77
DefinitionA"Polynomial Domain", any@KD,
P@KD := FunctorAP, any@p, q, n, aD,
s = X\
yy
i
i
Î@pD • jjJp = Z0^N ë jjis|tuple@pD í p¤ > 0 í "
Î @pi D í p p¤ ¹ 0zzzz
K
K {{
P
i=1,¼, p¤ K
k
k
0 := Z0^
P
K
1 := Z1^
P
K
x := Z0, 1^
K K
P
l
o
1
Ü
"
Jp j = 0N
o
o
K
j=1,¼, p¤
o
o
index@pD := m
o
o
i
y
P
o
o
æ jjJpi ¹ 0N í
"
Jp j = 0Nzz Ü otherwise
o i=1,¼, p¤
K
K {
j=i+1,¼, p¤
k
n
deg@pD := p¤ - 1
P
l
o
@pD
o
o pn+1 Ü n ³ 0 í n £ deg
P
coef @p, nD := m
o
o
P
o
Ü otherwise
o0
nK
canonic@pD := [pi
P
È
_
i=1,¼,index@pD
P
const@aD := Xa\
P
p + q := canonicA[coef @p, iD + coef @q, iD
P
P
K
P
Ë
P
_E
i=0,¼,MaximumBdeg@pD,deg@qDF
P
pq := canonicA[coef @p, iD coef @q, iD
P
K
P
P
Ë
P
_E
i=0,¼,MaximumBdeg@pD,deg@qDF
P
p * q := canonicA[ â coef @p, jD * coef @q, i - jD
P
P
K
j=0,¼,i
K
P
P
a P× p := canonicA[a * coef @p, iD
K
P
P
K
Ë
_E
i=0,¼,deg@pD
P
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
p  a := [coef @p, iD ’ a
P
_
i=0,¼,deg@pD
P
eval@p, aD :=
P
EE
â
K
i=0,¼,deg@pD
P
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄ
P
_E
i=0,¼,deg@pD+deg@qD
P
P
P
coef @p, iD * a K^ i
P
K
P
78
Kapitel 2: Ein Grundbaukasten für die Mathematik
Diese Definition muss so gelesen werden: Für jedes beliebige K (úany@KDø) ist
der Bereich P@KD jener Bereich P, in dem für beliebige p, q, n, a
(úany@p, q, n, aDø) die Operationen wie folgt definiert sind:
0 := Z0^ H0 im Bereich P ist das Tupel bestehend aus dem Element 0 in KL
P
K
analog für die weiteren Operationen.
Die Angabe einer Signatur des Funktors (s = ¼) ersparen wir uns in diesem
Beispiel, da die Signatur ohnehin im derzeitigen Stadium keinerlei Funktionalität
hat. Prinzipiell wäre die Signatur der Platz, wo ich angeben könnte, welche
neuen Operationen der Funktor definiert, welchen Typ diese Operationen
haben, etc.
Use@XBuilt|in@"Tuples"D, Built|in@"Quantifiers"D,
Built|in@"Numbers"D, Built|in@"Number Domains"D,
Built|in@"Connectives"D, Definition@"Polynomial Domain"D\D
In jedem Polynombereich stelle ich mir eine spezielle Konstante mit dem
Namen x (åscxå) zur Verfügung, die als Abkürzung für das spezielle
Polynom x (siehe oben) über dem jeweiligen Koeffizientenbereich stehen soll.
Es wird in manchen Situationen praktisch sein, diese Konstante x anstelle des
speziellen Polynoms X0, 1\ verwenden zu können.
ComputeA x E
P@ND
X0, 1\
ComputeA x + X0, 1, 0, 0, 3\E
P@ND P@ND
X0, 2, 0, 0, 3\
ComputeAX0, 1\ + X0, 1, 0, 0, 3\E
P@ND
X0, 2, 0, 0, 3\
4 2
1
1
ComputeA[ €€€€€€ , €€€€€€ , 0, €€€€€€ _ + [0, €€€€€€ _E
3 5
3 P@QD
2
4 9
1
[ €€€€€€ , €€€€€€€€€€ , 0, €€€€€€ _
3 10
3
4 2
1
1
ComputeA[ €€€€€€ , €€€€€€ , 0, €€€€€€ _ P@QD
- [0, €€€€€€ _E
3 5
3
2
4
1
1
[ €€€€€€ , - €€€€€€€€€€ , 0, €€€€€€ _
3
10
3
Kapitel 2: Ein Grundbaukasten für die Mathematik
79
4 2
1
4 1
2 8
ComputeA[ €€€€€€ , €€€€€€ , 0, €€€€€€ _ * [ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _E
3 5
3 P@QD 5 30 13 7
16 82
71 2528 59
2
8
[ €€€€€€€€€€ , €€€€€€€€€€€€€€ , €€€€€€€€€€€€€€ , €€€€€€€€€€€€€€€€€€ , €€€€€€€€€€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ _
15 225 325 1365 126 39 21
4 2
1
ComputeA[ €€€€€€ , €€€€€€ , 0, €€€€€€ _ * X0\E
3 5
3 P@QD
X0\
4 1
2 8
ComputeA7 P@QD
× [ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _E
5 30 13 7
28 7 14
[ €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , 8_
5 30 13
4 1
2 8
ComputeA0 P@QD
× [ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _E
5 30 13 7
X0\
4 1
2 8
ComputeA[ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _ “ 7E
5 30 13 7
P@QD
4
1
2
8
[ €€€€€€€€€€ , €€€€€€€€€€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ _
35 210 91 49
4 1
2 8 3
ComputeAevalA[ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _, €€€€€€ EE
P@QD
5 30 13 7 5
25531
€€€€€€€€€€€€€€€€€€€€€€
22750
úFormalø kann ich nun ein Polynom vom Grad n an einer beliebigen Stelle x
evaluieren und erhalte
n
eval@p, xD = â pi+1 xi
P
i=0
Diese úformale Schreibweiseø eines Polynoms vom Grad n wird gerne
verwendet.
4 1
2 8
ComputeAevalA[ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _, xEE
P@QD
5 30 13 7
4
1
2
8
€€€€€€ + €€€€€€€€€€ * x + €€€€€€€€€€ * x2 + €€€€€€ * x3
5
30
13
7
Folgende Konstruktion erweitert den oben definierten Polynombereich:
80
Kapitel 2: Ein Grundbaukasten für die Mathematik
DefinitionA"Extended Polynomial Domain", any@KD,
Poly@KD := FunctorAXG, extends@P@KDD\, any@n, a, pD,
s = X\
shift|and|scale@n, aD := [0
G
K
Ë
_[a
i=1,¼,n
lc@pD := coef Ap, deg@pDE
G
P@KD
P@KD
lm@pD := shift|and|scaleAdeg@pD, lc@pDE
G
G
G
P@KD
rp@pD := p P@KD
- lm@pD
G
G
EE
Diese Definition muss so gelesen werden: Für jedes beliebige K (úany@KDø) ist
der Bereich Poly@KD jener Bereich G, der durch Erweiterung von P@KD entsteht,
indem für beliebige n, a, p (úany@n, a, pDø) die Operationen wie folgt definiert sind:
„ƒ„
€
„

lc@pD := coef  p, deg@pD„„„„
G
P@KD 
„…
P@KD
‚
analog für die weiteren Operationen.
Zusätzlich gilt für jede Operation f : f = f
G
P@KD
HG ist eine Erweiterung von P@KDL.
UseAlso@Definition@"Extended Polynomial Domain"DD
ComputeAshift|and|scale@3, 2DE
Poly@QD
X0, 0, 0, 2\
ComputeAX2, 4, 0, 1\
*
Poly@QD
shift|and|scale@3, 2DE
Poly@QD
X0, 0, 0, 4, 8, 0, 2\
ComputeAX2, 4, 0, 1\
*
Poly@QD
shift|and|scale@5, 2DE
Poly@QD
X0, 0, 0, 0, 0, 4, 8, 0, 2\
4 2
1
ComputeA lm A[ €€€€€€ , €€€€€€ , 0, €€€€€€ _EE
Poly@QD 3 5
3
1
[0, 0, 0, €€€€€€ _
3
4 2
1
ComputeA rp A[ €€€€€€ , €€€€€€ , 0, €€€€€€ _EE
3
5
3
Poly@QD
4 2
[ €€€€€€ , €€€€€€ _
3 5
Kapitel 2: Ein Grundbaukasten für die Mathematik
81
1
ComputeA rp A[ €€€€€€ _EE
Poly@QD 3
X0\
Wie passen nun die Polynome y3 + x - 2 x y2 + 3 x2 + 5 x2 y, an die ich mich auch
noch erinnern kann, in dieses Bild? Ein Polynom mit 2 úVariablenø kann ich
aber auch als ein univariates Polynom mit Polynom|Koeffizienten sehen:
y3 + x - 2 x y2 + 3 x2 + 5 x2 y = y3 + H1 - 2 y2 L x + H3 + 5 yL x2
Der Bereich P@P@QDD ist somit der Polynombereich, in dem die Koeffizienten
Polynome über Q sind, also die Polynome über Q mit 2 úVariablenø. Polynome
mit mehr als einer Variablen nennen sich auch multivariat.
ComputeA coef @XX0, 0, 0, 1\, X1, 0, -2\, X3, 5\\, 0DE
P@P@QDD
X0, 0, 0, 1\
ComputeA coef @XX0, 0, 0, 1\, X1, 0, -2\, X3, 5\\, 2DE
P@P@QDD
X3, 5\
ComputeA coef @XX0, 0, 0, 1\, X1, 0, -2\, X3, 5\\, 3DE
P@P@QDD
X0\
Die 2 úVariablenø sind wieder spezielle Polynome, x = XX0\, X1\\ bzw. y = XX0, 1\\,
für einen Polynombereich mit 2 úVariablenø x und y über einem Koeffizienten−
bereich K liest man gerne K@x, yD.
ComputeA deg @XX0\, X1\\DE
P@P@QDD
1
ComputeA deg @XX0, 1\\DE
P@P@QDD
0
ComputeA coef @XX0\, X1\\, 1DE
P@P@QDD
X1\
ComputeA coef @XX0, 1\\, 1DE
P@P@QDD
X0\
ComputeAXX0\, X1\\
XX0, 1\, X1\\
+
P@P@QDD
XX0, 1\\E
82
Kapitel 2: Ein Grundbaukasten für die Mathematik
ComputeAXX0\, X1\\ P@P@QDD
- XX0, 1\\E
XX0, -1\, X1\\
ComputeAXX0\, X1\\
*
P@P@QDD
XX0, 1\\E
XX0\, X0, 1\\
ComputeAXX0, 0, 0, 1\, X1, 0, -2\, X3, 5\\
*
P@P@QDD
3
1
[X1\, [0, €€€€€€ , 1_, [1, 1, €€€€€€ __E
2
5
3
[X0, 0, 0, 1\, [1, 0, -2, 0, €€€€€€ , 1_,
2
13
1
11 87
2
28
[3, €€€€€€€€€€ , 1, -2, -1, €€€€€€ _, [1, €€€€€€€€€€ , €€€€€€€€€€ , 3, - €€€€€€ _, [3, 8, €€€€€€€€€€ , 1__
2
5
2 10
5
5
Die letzte Multiplikation entspricht der Polynommultiplikation
3
1
Hy3 + H1 - 2 y2 L x + H3 + 5 yL x2 L * J1 + J €€€€€€ y + y2 N x + J1 + y + €€€€€€ y2 N x2 N
2
5
Polynome vom Grad 0 nenne ich konstante Polynome, Polynome vom Grad 1
nenne ich lineare Polynome, Polynome vom Grad 2 nenne ich quadratische
Polynome und Polynome vom Grad 3 nenne ich kubische Polynome.
2.3.2 Polynomfunktionen
Eng mit dem Polynombegriff verwandt ist der Begriff der Polynomfunktion.
Definition 22 (Polynomfunktion)
Sei p ein Polynom über K. Eine Funktion der Gestalt
Λ eval@p, xD
x P@KD
heißt die zu p gehörende Polynomfunktion über K.
ã
Polynome und Polynomfunktionen sind also 2 Paar Schuhe, wenn sie auch viel
miteinander zu tun haben.
Nach den Ausführungen im vorangegangenen Kapitel über Polynome sind die
Polynomfunktionen also gerade diejenigen, deren Termdarstellung die Form
x # â pk+1 xk
k=0,¼,n
hat. Eine Polynomfunktion über K ist immer eine Funktion von K nach K. Viele
interessante Problemstellungen wie z.B. Differenzieren, Integrieren, berechnen
von Funktionswerten etc. kann ich für Polynome bzw. für Polynomfunktionen
Kapitel 2: Ein Grundbaukasten für die Mathematik
83
von Funktionswerten etc. kann ich für Polynome bzw. für Polynomfunktionen
sehr leicht lösen. Es wird daher in vielen Problemstellungen versucht, die
allgemeine Problemstellung auf ein Problem für Polynome oder Polynomfunk−
tionen zu reduzieren.
Zum Berechnen eines konkreten Funktionswertes einer Polynomfunktion
muss also das Polynom p ausgewertet werden. Es stellt sich dabei heraus,
dass ich beim Auswerten eines Polynoms an einer Stelle a unter Verwendung
der Definition viel unnötigen Rechenaufwand betreibe, da ich hintereinander
aufsteigende Potenzen von a berechnen muss. Ich brauche aber a j+1 nicht von
vorne berechnen, wenn ich vorher a j schon berechnet habe! Ich versuchen
daher nun, einen neuen Algorithmus zur Polynom|Evaluation zu entwickeln. Ich
werde versuchen, mittels Reduktion durch Rekursion zu einem Lösungsalgorith−
mus zu kommen. Die Problemstellung lautet also:
Gegeben : p, a, K
sodass :
p Î P@KD.
Eval : Gesucht : y
sodass :
y=
â
K
i=0,¼,deg@pD
coef@p, iD * ai .
K
Ich wähle nun ein Rekursionsschema. Wie wir schon gesehen haben, können
wir verschiedenste Schemata ausprobieren, bei Tupeln bietet sich aber zual−
lererst einmal folgendes an:
EvalXXp\,a,K\,y Þ EvalXXp0,p\,a,K\, f @p0,a,yD
d.h. wir probieren Rekursion über das Tupel p und wir denken uns p durch
einen Konstruktor aus dem ersten Element und den restlichen zusammeng−
esetzt. Wir versuchen nun, diese Aussage zu beweisen und dabei draufzukom−
men, wie f @c, a, yD ausschauen muss. Unter der Voraussetzung EvalXXp\,a,K\,y ,
d.h.
y=
â
K
\D
i=0,¼,deg@Xp
\, iD * ai
coef@Xp
K
versuchen wir EvalXXp0,p\,a,K\, f @p0,a,yD zu beweisen, d.h.
f @p0, a, yD =
â
K
\D
i=0,¼,deg@Xp0,p
coef@Xp0, 
p\, iD * ai
K
= coef@Xp0, 
p\, 0D * a0 +
K
K
â
K
\D
i=1,¼,deg@Xp0,p
coef@Xp0, 
p\, iD * ai
K
84
Kapitel 2: Ein Grundbaukasten für die Mathematik
= p0 +
K
â
K
\D
i=0,¼,deg@Xp
= p0 + a *
K
K
â
coef@Xp0, 
p\, i + 1D * ai+1
K
K
\D
i=0,¼,deg@Xp
\, iD * ai
coef@Xp
K
= p0 + a * y
K
K
Somit kann ich wählen f @p0, a, yD := p0 + a * y. Weiters gilt natürlich der elemen−
tare Fall EvalXXp0\,a,K\,p0 , den wir immer nach endlich vielen rekursiven Reduk−
tionen erreichen. Wir haben damit einen rekursiven Polynom|Evaluationsalgorith−
mus gefunden!
, p0, a, KD,
DefinitionA"Recursive Polynomial Evaluation", any@p
evalRec@Xp0\, aD := p0
\, aD E
evalRec@Xp0, 
p\, aD := p0 + a * evalRec@Xp
P@KD
K
P@KD
K
P@KD
UseAlso@Definition@"Recursive Polynomial Evaluation"DD
4 1
2 8 3
ComputeAevalRecA[ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _, €€€€€€ EE
P@QD
5 30 13 7 5
25531
€€€€€€€€€€€€€€€€€€€€€€
22750
Die rekursive Zerlegung endet immer am elementaren Fall eines Tupels mit nur
einem Element ~ dem letzten Element des Eingabetupels p, d.h. dem
führenden Koeffizienten von p ~ und wir haben nur 1 Konstruktor. Wie wir uns
im Kapitel über Rekursion schon überlegt haben, entspricht die rekursive
Berechnung von evalRec@Xp0 , ¼, pn \, a, KD damit dem Berechnen von
€

f  p0 , a,

‚
€

f  p1 , a, ¼

‚
„ƒ„„ƒ„„ƒ„
€
„„„„„„

„„„„„„

f  pn-1 , a, evalRec@Xp
KD
„„„„„„
n \, ¬a,
«¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
¬¬¬¬¬¬­
¬¬¬¬¬¬¬¬
¬¬¬¬¬¬¬
¬
¬¬¬
®
„„„„„„

„…„…„…
‚
pn
(3)
Diesen Ausdruck berechne ich úvon innen nach außenø, d.h. ich starte mit pn
und wende in einer Schleife wiederholt f an, und zwar genau n−mal, d.h.
deg@pD−mal. Im Gegensatz zur Rekursion, wo wir in der rekursiven Zerlegung
das Tupel p úvon vorne nach hintenø durchlaufen, durchwandern wir in der
Schleife das Tupel p úvon hinten nach vorneø. Ein anderer Weg, zur iterativen
Version des oben entwickelten rekursiven Algorithmus zu gelangen, ist, den
Ausdruck evalRec@p, a, KD für ein konkretes Polynom p zu expandieren.
4 1
2 8
ComputeAevalRecA[ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _, aEE
P@QD
5 30 13 7
8 yy
4
i 2
i 1
€€€€€€ + a * jj €€€€€€€€€€ + a * jj €€€€€€€€€€ + €€€€€€ * azzzz
13
7 {{
30
5
k
k
Kapitel 2: Ein Grundbaukasten für die Mathematik
85
Diese Form entspricht genau der Form (3), und das Auswerten úvon innen nach
außenø bringt mich auch zu einer Schleife. In dieser iterativen Form nennt sich
das Verfahren zum Evaluieren eines Polynoms Horner|Algorithmus oder
Horner|Schema.
Horner@p_, a_, K_D := Module@8y = pP-1T, i<,
Do@y = y * a + pP-iT,
8i, 2, Length@pD<D;
yD
4 1
2 8 3
HornerA[ €€€€€€ , €€€€€€€€€€ , €€€€€€€€€€ , €€€€€€ _, €€€€€€ , QE
5 30 13 7 5
25531
€€€€€€€€€€€€€€€€€€€€€€
22750
Wir haben gesehen, dass das Horner|Schema zum Evaluieren genau jene
Methode ist, die unmittelbar aus einer rekursiven Problemreduktion für Tupel
resultiert! Zusätzlich zur Effizienzsteigerung bei Verwendung des Horner|Sche−
mas ist diese Art der Evaluation auch vom Standpunkt der numerischen Stabil−
ität gegenüber der herkömmlichen Methode zu bevorzugen. Für später werde
ich aber auch die rekursive Realisierung als Horner Schema zur Verfügung
stellen.
, p0, a, KD,
AlgorithmA"Horner Scheme", any@p
evalHorner@Xp0\, aD := p0
\, aDE
evalHorner@Xp0, 
p\, aD := p0 + a * evalHorner@Xp
P@KD
P@KD
K
K
P@KD
UseAlso@Algorithm@"Horner Scheme"DD
Übung
Implementieren wir sowohl die herkömmliche Polynom|Evaluation als auch das
Horner|Schema in Mathematica und experimentieren wir mit Timing und mit
dem ComputerArithmetic Package.
Übung
Beweisen wir die Korrektheit des iterativen Programms úHornerø. Was ist dabei
zu beweisen? (Siehe Abschnitt úReduktion durch Iterationø im Kapitel úBegriffs−
bildungø).
ã
Ich werde den Bereich der Polynomfunktionen über K mit P@KD bezeichnen. In
P@kD gibt es eine Operation pf, die einem Polynom p die zugehörige Polynom−
funktion zuordnet. Die zu p gehörende Polynomfunktion in P@KD erhalte ich also
durch pf @pD. Ich definiere die zu p gehörende Polynomfunktion pf @pD, indem
P@KD
P@KD
ich für jedes x aus K den Wert der Funktion an der Stelle x festlege. Der Wert
der zu gehörenden Polynomfunktion an einer Stelle (also
) ergibt
86
Kapitel 2: Ein Grundbaukasten für die Mathematik
der zu p gehörenden Polynomfunktion an einer Stelle x (also pf @pD@xD) ergibt
P@KD
sich laut Definition 22 durch Evaluation von p an der Stelle x. Ich werde Funktion−
swerte in Zukunft durch Evaluation mittels Horner|Schema ermitteln. Oft wird
auch vom Grad einer Polynomfunktion gesprochen. Der Grad der zu p
gehörenden Polynomfunktion soll einfach der Grad von p sein.
DefinitionA"Polynomial Function Domain", any@KD,
P@KD := FunctorAP, any@p, xD,
s = X\
pf @pD@xD := evalHorner@p, xD
P@KD
P
degApf @pDE := deg@pD
P
P
P@KD
EE
UseAlso@
XDefinition@"Polynomial Function Domain"D, Definition@"Polynomial Domain"D\D
ComputeA pf @X4, 2, 0, 1\D@3DE
P@ND
37
1
ComputeA pf @X4, 2, 0, 1\DA €€€€€€ EE
3
P@QD
127
€€€€€€€€€€€€€€
27
1
ComputeAevalAX4, 2, 0, 1\, €€€€€€ EE
P@QD
3
127
€€€€€€€€€€€€€€
27
ComputeAdegA pf @X4, 2, 0, 1\DEE
P@QD P@QD
3
2.3.2 Organisatorisches
2.4 Matrizen
Besonders bei der Behandlung von linearen Gleichungssystemen werde ich
Matrizen schätzen lernen, aber auch für andere Zwecke, wie z.B. die Repräsen−
tierung einer Drehung von Punkten in der Ebene oder im Raum, lassen sich
Matrizen vorteilhaft einsetzen. Was sind nun Matrizen? Gemeinhin stelle ich mir
unter einer m ´ n|Matrix über D ein rechteckiges Schema
Kapitel 2: Ein Grundbaukasten für die Mathematik
87
l
ij M1,1 M1,2 ¼ M1,n yz
o
o
zz
jj
o
o
o
ojjjj M2,1 M2,2 ¼ M2,n zzzz
m Zeilen m
z
jj
o
o
»
¼
» zzzz
o
jjj »
o
o
z
oj M
M¬¬¬¬¬¬
¼ M
m,2
m,n¬¬¬¬¬{®
n
k m,1¬¬¬¬¬¬¬¬
«¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
¬­¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
¬¬¬¬¬¬¬¬
n Spalten
bestehend aus m Zeilen und n Spalten mit Einträgen aus einem Bereich D vor.
Eine passende mathematische Modellierung dafür kann ich mit Hilfe von Funk−
tionen angeben: Eine m ´ n|Matrix M ist eine Funktion
M › Nm ´ Nn ® D
Xi, j\ # Mi, j
Jedem Paar Xi, j\ wird somit ein Funktionswert M@Xi, j\D aus D zugeordnet. Im
Zusammengang mit Matrizen schreibe ich anstelle von M@Xi, j\D gerne Mi, j . Ich
stelle mir unter Mi, j das Element in der i|ten Zeile und j|ten Spalte im
Rechtecks|Schema vor. Ich kann nun auf diesen Objekten arithmetische
Operationen wie Addition, Subtraktion, Multiplikationen etc. definieren. Das
Resultat z.B. der Addition zweier Matrizen soll wieder eine Matrix sein, also
wieder eine Funktion. Ich definiere diese Funktion, indem ich ihren Wert an
jeder Stelle des Definitionsbereichs angebe.
Bei der Implementierung von Matrizen in einem Computer|System hilft mir
diese Sichtweise aber nicht recht weiter, da ich keine Darstellung für solche
Funktionen zur Verfügung habe. Eine Möglichkeit ist sicher, die m × n Funktion−
swerte Mi, j nach irgendeinem System abzuspeichern, das mir später den
Zugriff auf alle Werte Mi, j wieder ermöglicht. In einem System, wo ich arrays
zur Verfügung habe, bieten sich diese zum Abspeichern der Werte der Matrix
an.
Zu einer Modellierung, die sich näher an der Mathematik befindet, komme
ich, wenn ich das Rechtecks|Schema zeilenweise oder spaltenweise betrachte.
Ich betrachte die gesamte Matrix als endliche Folge von Zeilen (Spalten), die
ich als Tupel der Länge m (n) repräsentieren kann. Jede Zeile (Spalte) ist eine
endliche D|Folge der Länge n (m), die ich somit wieder als Tupel darstellen
kann. Eine Matrix ist demnach ein Tupel von gleichlangen Tupel! Verwende ich
Tupel von Zeilen, so ist der Zugriff auf ganze Zeilen sehr einfach, verwende ich
hingegen Tupel von Spalten, so ist der Zugriff auf ganze Spalten einer Matrix
sehr einfach zu realisieren. Es hängt von der Verwendung ab, welche der
beiden Varianten zu bevorzugen ist.
Wir werden den Bereich der Matrizen über einem Bereich D wieder mittels
eines Funktors definieren, wie wir es schon bei den Polynomen erfolgreich
praktiziert haben. Ich werde die Matrix|Operationen nicht alle selbst definieren
sondern werde auf die in Mathematica zur Verfügung stehenden Operationen
für Matrix|Multiplikation und Matrix|Invertierung und einige andere zurückgre−
ifen. Im Hilfsabschnitt úTheorema|Zugriff auf Mathematica Operationenø stehen
Hilfsfunktionen zur Verfügung, die vorhandene Mathematica Funktionen auf
88
Kapitel 2: Ein Grundbaukasten für die Mathematik
ú
ø
Hilfsfunktionen zur Verfügung, die vorhandene Mathematica Funktionen auf
entsprechende Theorema Objekte anwenden. Durch den bekannten úBuilt|inø
|Mechanismus kann ich auf diese Hilfsfunktionen von Theorema aus zugreifen.
Built|in@"Matrices"D
·bui@Matrices, ·range@D, True,
·flist@·lf@MD, MD = MatrixDeterminantD, ·lf@MI, MI = MatrixInverseD,
·lf@MM, MM = MatrixMultiplicationD, ·lf@MT, MT = MatrixTransposedDDD
Das bedeutet, dass ich durch die Kürzel úMDø, úMIø, úMMø und úMTø zum
Zugriff auf die Hilfsfunktionen úMatrixDeterminantø, úMatrixInverseø, úMatrixMulti−
plicationø und úMatrixTransposedø verwenden kann. Den Bereich der Matrizen
kann ich dann durch folgenden Funktor definieren.
IsInfixOperatorSymbol@"="D = True;
DefinitionA"Matrices from Mathematica", any@DD,
Mat@DD := FunctorAM, any@A, BD,
s = X\
ij
jj
Î@AD • jjjjis|tuple@AD í
jj
M
j
k
"
i=1,¼,rows@AD
j=1,¼,columns@AD
rows@AD := A¤
columns@AD := A1 ¤
IA = BM : •
M
"
D
His|tuple@Ai D ß H Ai ¤ = A1 ¤LL í
yz
zz
Î @Ai,j Dzzzz
zz
D
z
{
i=1,¼,rows@AD
j=1,¼,columns@AD
A + B := [[Ai,j + Bi,j
M
"
i=1,¼, A¤
IAi,j = Bi,j M
D
Ë
_
j=1,¼,columns@AD
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
Ä
EE
_
i=1,¼,rows@AD
AB := [[Ai,j B
M
D i,j
É
_
j=1,¼,columns@AD
ÄÄÄ
ÄÄÄ
ÄÄÄ
ÄÄÄ
_
i=1,¼,rows@AD
A * B := MM@A, BD
M
Inverse@AD := MI@AD
M
T@AD := MT@AD
det@AD := MD@AD
Auf einige Details sei hingewiesen: Manche Matrix|Operationen verlangen
gewisse Bedingungen an die Dimension der beteiligten Matrizen. Die Dimen−
sionen der beteiligten Matrizen bei Addition und Subtraktion müssen identisch
sein, bei der Multiplikation muss A eine m ´ n und B eine n ´ k|Matrix sein,
Inverse und Determinant sind ebenfalls nur im Fall m = n definiert. Ich nehme
auf diese Restriktionen in der Definition keine Rücksicht, ich verlange vom
Kapitel 2: Ein Grundbaukasten für die Mathematik
89
auf diese Restriktionen in der Definition keine Rücksicht, ich verlange vom
Benutzer, dass die entsprechenden Dimensionen passen, andernfalls muss mit
Fehlermeldungen oder sonstigen unvorhersehbaren Effekten gerechnet wer−
den. Ich könnte mich auch auf die quadratischen Matrizen beschränken, d.h.
auf den Fall m = n. In diesem Fall brauche ich obige Dimensionsüberlegungen
nicht anzustellen, andererseits müsste ich dann auf die Matrix|Darstellung für
lineare Gleichungssysteme verzichten. Das ist es mir nicht wert!
Use@XBuilt|in@"All Semantics"D,
Built|in@"Matrices"D, Definition@"Matrices from Mathematica"D\D
ComputeA Î @XX1, 2\, X3, 4\\DE
Mat@QD
True
ComputeA Î @XX1, 2\, X3, 4, 5\\DE
Mat@QD
False
ComputeA Î @XX1, 2\, X3, 4.1\\DE
Mat@QD
False
ComputeAInverse@XX1, 2\, X3, 4\\DE  MatrixShow
Mat@QD
ij -2 1
jjj 3 -1
€
k €€€€2€ €€€€€€€€
2
yz
zzz
{
3 -1
ComputeAXX1, 2\, X3, 4\\ * [X-2, 1\, [ €€€€€€ , €€€€€€€€€€€€ __E  MatrixShow
Mat@QD
2 2
ij 1 0 yz
z
j
k0 1 {
3 -1
ComputeAXX1, 2\, X3, 4\\ + [X-2, 1\, [ €€€€€€ , €€€€€€€€€€€€ __E  MatrixShow
Mat@QD
2 2
ij -1 3 yz
jjj 9 7 zzz
k €€€€2€ €€€€2€ {
3 -1
ComputeAXX1, 2\, X3, 4\\ Mat@QD
- [X-2, 1\, [ €€€€€€ , €€€€€€€€€€€€ __E  MatrixShow
2 2
ij 3 1 yz
jjj 3 9 zzz
k €€€€2€ €€€€2€ {
Compute@det@XX1, 2\, X3, 4\\DD
-2
Compute@T@XX1, 2\, X3, 4\\DD  MatrixShow
1 3y
jij
zz
k2 4 {
90
Kapitel 2: Ein Grundbaukasten für die Mathematik
Für die Definition der Matrix|Multiplikation, der transponierten Matrix, der
Determinante und der inversen Matrix sei auf die lineare Algebra verwiesen. Als
besonders praktisch erweisen sich Matrizen und Vektoren zum Beschreiben
von linearen Gleichungssystemen. Ein lineares Gleichungssystem ist eine
Kollektion von Gleichungen der Form
a1,1 x1 + a1,2 x2 + a1,3 x3 + ¼ + a1,n xn = b1
a2,1 x1 + a2,2 x2 + a2,3 x3 + ¼ + a2,n xn = b2
»
»
»
am,1 x1 + am,2 x2 + am,3 x3
¼
»
»
+ ¼ + am,n xn = bm
(4)
wobei ich die Koeffizienten ai, j und die jeweils rechten Seiten der Gleichungen
bi als gegeben betrachte und alle xi derart zu bestimmen sind, dass alle Glei−
chungen erfüllt sind. Ich kann nun die Koeffizienten ai, j zu einer m ´ n|Matrix
ij a1,1 a1,2 a1,3
jj
jj a2,1 a2,2 a2,3
A = jjjj
»
»
jjj »
j
a
a
a
k m,1 m,2 m,3
¼ a1,n
¼ a2,n
¼ »
¼ am,n
yz
zz
zz
zz,
zz
zz
zz
{
die gesuchten x j zu einem Spaltenvektor (n ´ 1|Matrix) und die rechten Seiten
bi zu einem Spaltenvektor (m ´ 1|Matrix)
ij x1
jj
jj x2
x = jjj
jj »
jj
k xn
yz
ij b1
zz
jj
zz
j
zz bzw. b = jjj b2
zz
jj »
zz
jj
z
j
{
k bm
yz
zz
zz
zz
zz
zz
z
{
zusammenfassen. Die Definition der Matrix|Multiplikation ist nun genau so,
dass A × x ein Spaltenvektor ist, dessen Einträge die jeweils linken Seiten des
Gleichungssystems (4) sind. Die Gleichung A × x = b ist somit eine Gleichheit
von Spaltenvektoren, die als komponentenweise Gleichheit definiert ist. Die i|te
Komponente entspricht dabei genau der i|ten Gleichung in (4). Somit bes−
chreibt A × x = b genau das lineare Gleichungssystem (4).
ComputeAXXa1,1 , a1,2 \, Xa2,1 , a2,2 \\ * XXx1 \, Xx2 \\E  MatrixShow
Mat@QD
ij x1 * a1,1 + x2 * a1,2
j
k x1 * a2,1 + x2 * a2,2
yz
z
{
ComputeAXXa1,1 , a1,2 \, Xa2,1 , a2,2 \\ * XXx1 \, Xx2 \\ = XXb1 \, Xb2 \\E
Mat@QD
Mat@QD
x1 * a1,1 + x2 * a1,2 = b1 í x1 * a2,1 + x2 * a2,2 = b2
Q
Use@D; IsInfixOperatorSymbol@"="D =.
Q
Kapitel 2: Ein Grundbaukasten für die Mathematik
91
2.4.1 Vektoren
Wir werden uns auch einen einfachen Funktor für die grundlegenden Opera−
tionen auf Vektoren zur Verfügung halten:
DefinitionA"Vectors", any@DD,
Vec@DD := FunctorAV, any@A, B, t, j, nD,
s = X\
i
Î@AD • jjis|tuple@AD í
V
k
A + B := [Ai + Bi
V
D
AB := [Ai B
V
D i
t * A := [t * Ai
V
D
Ë
_
É
_
i=1,¼, A¤
EE
i=1,¼, A¤
Ë
_
i=1,¼, A¤
l
o1 Ü i = j
e j,n := [m
o 0 Ü otherwise
n
2.4.1 Organisatorisches
y
Î @Ai Dzz
{
"
i=1,¼, A¤ D
ÄÄÄ
ÄÄÄ
ÄÄÄ
i=1,¼,n
_
Herunterladen