• Keine Ergebnisse gefunden

Wir wollen dabei die sprachlichen Mittel, welche die einzelnen Interpreter anbieten, zur Formu-lierung von Anfragen intensiver nutzen. So werden wir etwa die in allen Systemen vorhandene Funktionsolveverwenden, mit der man die Nullstellen von Polynomen und allgemeineren Glei-chungen und Gleichungssystemen bestimmen kann. Allerdings ist das Ausgabeformat dieser Funk-tion von System zu System verschieden und differiert selbst zwischen unterschiedlichen Typen von Gleichungen und Gleichungssystemen.

Mapleliefert etwa f¨ur univariate Polynome, die wir in diesem Abschnitt untersuchen, keine Liste, sondern eineAusdruckssequenz zur¨uck, welche die verschiedenen Nullstellen zusammenfasst. Wir wollen sie gleich in eine Liste verwandeln:

sol:=[solve(x^3+x+1,x)];

Wir sehen, dass Maple das Problem der voneinander abh¨angigen Kerne auf eine clevere Art und Weise l¨ost: Das Endergebnis wird unter Verwendung einer neuen Variablen %1 formuliert1, mit der ein gemeinsamer Teilausdruck, welcher in der Formel mehrfach vorkommt, identifiziert wird. Auf diese Information wird bei sp¨ateren Simplifikationen zur¨uckgegriffen, was f¨ur unsere Aufgabenstellung bereits ausreichend ist:

expandist der polynomiale Normalformoperator, d.h. multipliziert Produkte aus und fasst gleich-artige Terme zusammen, wobei xund %1= p3

108 + 12√

93 als Kerne betrachtet werden. Aller-dings wird der zweite Kern vonindets(p)nicht mit ausgegeben.

Der gemeinsame Teilterm u = 108 + 12√

93 kann sogar durch eine Variable ersetzt werden, so dass wir diese Umformungen nachvollziehen k¨onnen. Beachten Sie, dass der Kern%1selbst nicht so einfach zug¨anglich ist, da er im Ausdruck in zwei Formen vorkommt, als u1/3 und als u−1/3, denn Maple stellt den Nenner 1/%1nicht als (u1/3)−1, sondern alsu−1/3 dar.

p2:=subs((108+12*93^(1/2))=u,p);

1Das ist nicht ganz korrekt und in der Terminalversion vonMaple2016 auch anders: In der Dokumentation wird darauf hingewiesen, dass es sich nur um

Pattern“, nicht aber um Variablen handelt. Gleichwohl istMaple aber in der Lage, solche gleichartigen Teile eines Ausdrucks ohne viel Aufwand zu identifizieren, was sicher damit zu tun hat, dass es sich um Referenzen auf dieselben Objekte handelt – die hier entscheidende Eigenschaft einer Variablen.

Durch Rationalmachen, d.h. durch Multiplizieren mit dem zuukonjugierten Wurzelausdruck, kann man das Absolutglied des Polynomsp1weiter vereinfachen. Diese Technik ist jedoch ein spezieller mathematischer Trick, der in der polynomialen Normalformbildung rationaler Ausdr¨ucke nicht enthalten ist. Er wird folglich bei Anwendung von expand auch nicht ausgef¨uhrt. Die folgende Anweisung f¨uhrt schließlich zum gew¨unschten Ergebnis.

simplify(p1);

x3+x+ 1

Alternativ f¨uhrt normal(p1) zum selben Ergebnis, dap1 ein rationaler Ausdruck in den Kernen xundv=√

93 ist.

Experimentieren wir weiter mit den Ausdr¨ucken aus der Listesol. Es stellt sich heraus, dass Po-tenzsummen der drei Wurzeln stets ganzzahlig sind. Wir wollen wiederum pr¨ufen, wieweitMaple in der Lage ist, dies zu erkennen. Dazu sammeln wir in einer Liste die Ergebnisse der Verein-fachung von xk1 +xk2 +xk3 f¨ur k = 2, . . . ,9 auf und versuchen sie danach weiter auszuwerten.

Nach unseren bisherigen Betrachtungen (die Ausdr¨ucke enthalten nur zwei Kerne), sollte f¨ur diese Vereinfachungen das Kommandonormalausreichen.

sums:=[seq(sum(sol[i]^k,i=1 .. 3),k=2 .. 9)];

normal(sums);

Bei gr¨oßeren k ergeben sich Probleme mit faktorisierten Nennern in der Normalform, die sich beheben lassen, wenn man mit expandierten Nennern rechnet (was im Zusammenspiel mit alge-braischen Vereinfachungen zu einer Normalform f¨uhrt, wie wir noch sehen werden).

normal(sums,expanded);

[−2,−3,2,5,1,−7,−6,6]

Ahnlich ist in¨ MuPADvorzugehen, wobei zu ber¨ucksichtigen ist, dass Nullstellen von Polynomen dritten Grades in der RootOf-Notation ausgegeben werden. Wir kommen darauf weiter unten zur¨uck. Mit der OptionMaxDegreewerden die Nullstellen als Wurzelausdr¨ucke dargestellt:

sol=solve(x^3+x+1,x,’MaxDegree’,3)

H.-G. Gr¨abe: Einf¨uhrung in das symbolische Rechnen, Notizen zur Vorlesung 115

phat eine ¨ahnlich komplizierte Gestalt wie dasMaple-Ergebnis. Der Ausdruck enth¨alt die vier Kerne√

3,i, u1/3undu−1/3, von denen in der expandierten Formp1nochu¨ubrig ist, das seinerseits die Kernek1 =√

31 und k2 =√

108 in der Konstellation k1·k2 enth¨alt. Ein weiteres simplify liefert dann bereitsx3+x+ 1 zur¨uck.

In der Version 1.4.2 wurde als Resultat vonexpand(p)der Ausdruck

x3+ 3x3

als Ergebnis ausgegeben, was offensichtlich damit zusammenhing, dass bereits in p neben dem Kern u = rationale Beziehungu0 = 1

27uzwischen beiden

”vergessen“ wurde. Da√3 x√3

ynicht ohne Weiteres zu √3

x y zusammengefasst werden darf, kann diese Beziehung nicht rekonstruiert werden.

Mathematicaliefert f¨ur unsere Gleichung dritten Grades folgende Antwort:

sol=Solve[x^3+x+1==0,x]

Das Ergebnis desSolve-Operators ist keine Liste oder Menge von L¨osungen, sondern eine Substi-tutionsliste, wie wir sie im Abschnitt 2.6 kennengelernt haben. Solche Substitutionslisten werden auch vonMaplef¨ur Gleichungssysteme in mehreren Ver¨anderlichen verwendet, wo man die ein-zelnen L¨osungskomponenten verschiedenen Variablen zuordnen muss.Mathematicas Ausgabe-format ist in dieser Hinsicht also, wie auch das vonAxiom, MaximaundReduce, konsistenter.

Die einzelnen Komponenten der L¨osung k¨onnen wir durch die Aufrufe x /. sol[[i]]erzeugen, welche jeweils die in der L¨osungsliste aufgesammelten Substitutionen ausf¨uhren. Diese darf sich im ProduktQ3

i=1(x−xi) nat¨urlich nur auf die Berechnung vonxi ausdehnen. Durch entsprechende Klammerung erreichen wir, dass im Ausdruckx-(x /. sol[[i]])das erstexals Symbol erhalten bleibt, w¨ahrend f¨ur das zweitexdie entsprechende Ersetzungx7→xi ausgef¨uhrt wird.

p=Product[x-(x /. sol[[i]]),{i,1,3}]

Expand vereinfacht wieder im Sinne der polynomialen Normalform in einen Ausdruck der Form x3+x+U, wobeiU selbst wieder ein rationaler Ausdruck in im Wesentlichen dem Kern√

93 ist, welcher mitTogetherzux3+x+ 1 vereinfacht wird.

F¨ur die Potenzsummen der Nullstellen, die man mit dem SequenzierungsoperatorTable aufsam-meln kann. Fr¨uher bekam man bereits mitSimplifyeine Liste von ganzen Zahlen. In Mathema-tica11 muss man noch einExpanddazwischenschieben:

sums=Table[Sum[(x/.sol[[i]])^k,{i,1,3}],{k,2,9}];

sums//Expand//Simplify

{−2,−3,2,5,1,−7,−6,6}

Togetherreicht ebenfalls nicht aus und operiert auf einer Reihe von Listenelementen nicht idem-potent.

Ahnlich gehen die Systeme¨ AxiomundMaximavor, wobei hier oft eine genauere Kenntnis spe-ziellerer Designmomente notwendig ist. So liefert etwaAxiommit

solve(x^3+x+1)

das etwas verwunderliche Ergebnis [x3+x+ 1 = 0]. Erst die explizite Aufforderung nach einer L¨osung in Radikalen

wartet mit einem Ergebnis auf, welches dem der anderen Systeme ¨ahnelt. Die Vereinfachung des Produkts sowie die Berechnung der Potenzsummen geschieht ¨ahnlich wie in Maple ¨uber die Konversion von Listen in Produkte bzw. Summen (mit reduce) und bedarf keiner zus¨atzlichen Simplifikationsaufrufe, da in diesem CAS der 3. Generation alle Operationen

”wissen, was zu tun ist“.

p:=reduce(*,[x-subst(x,sol.i) for i in 1..3]) x3+x+ 1

[reduce(+,[subst(x^k,sol.i) for i in 1..3]) for k in 2..9]

[−2,−3,2,5,1,−7,−6,6]

Maximaliefert als Ergebnis dessolve-Operators die L¨osungsmenge in Form einer Substitutions-liste in ¨ahnlicher Form wieMathematica.

sol:solve(x^3+x+1,x);

Auch hier kann (z.B.) durch geeignete Listenoperationen das Produktpgebildet werden.

H.-G. Gr¨abe: Einf¨uhrung in das symbolische Rechnen, Notizen zur Vorlesung 117

p:apply("*",map(lambda([u],x-subst(u,x)),sol));

Wie in Maple reicht die Berechnung der rationalen Normalform mit ratsimpaus, umx3+x+ 1 zur¨uckzugewinnen.

Auf dieselbe Weise lassen sich die Potenzsummen berechnen:

sums:makelist(apply("+",map(lambda([u],subst(u,x^k)),sol)),k,2,9);

ratsimp(sums);

[−2,−3,2,5,1,−7,−6,6]

4.2 Die allgemeine L¨ osung einer Gleichungen dritten