• Keine Ergebnisse gefunden

Neben den bisher betrachteten Rechenfertigkeiten und der Programmierbarkeit, die ein CAS aus-zeichnen, spielt das

in ihnen gespeicherte mathematische Wissen

f¨ur Anwender die entscheidende Rolle. Dieses deckt, wenigstens insofern wir uns auf die dort vermittelten algorithmischen Fertigkeiten beschr¨anken, weit mehr als den Stoff der gymnasialen Oberstufe ab und umfasst die wichtigsten symbolischen Kalk¨ule der Analysis (Differenzieren und Integrieren, Taylorreihen, Grenzwertberechnung, Trigonometrie, Rechnen mit speziellen Funktio-nen), der Algebra (Matrizen- und Vektorrechnung, L¨osen von linearen und polynomialen Glei-chungssystemen, Rechnen in Restklassenbereichen), der Kombinatorik (Summenformeln, L¨osen von Rekursionsgleichungen, kombinatorische Zahlenfolgen) und vieler anderer Gebiete der Mathe-matik.

F¨ur viele Kalk¨ule aus mathematischen Teildisziplinen, aber zunehmend auch solche aus verwand-ten Bereichen anderer Natur- und Ingenieurwissenschafverwand-ten, ja selbst der Finanzmathematik, gibt es dar¨uber hinaus spezielle Pakete, auf die man bei Bedarf zugreifen kann. Dieses sprunghaft wachsende Expertenwissen ist der eigentliche Kern eines CAS als Expertensystem. Man kann mit gutem Gewissen behaupten, dass heute bereits große Teile der algorithmischen Mathematik in dieser Form verf¨ugbar sind und auch algorithmisches Wissen aus anderen Wissensgebieten zu-nehmend erschlossen wird. In dieser Richtung spielt das System Mathematicaseit Jahren eine Vorreiterrolle.

In dem Zusammenhang ist die im deutschen Sprachraum verbreitete Bezeichnung

” Computeral-gebra“ irref¨uhrend, denn es geht durchaus nicht nur um algebraische Algorithmen, sondern auch um solche aus der Analysis und anderen Gebieten der Mathematik. Entscheidend ist allein der algebraische Charakterder entsprechenden Manipulationen als endliche Kette von Umformungen symbolischer Ausdr¨ucke. Und genau so geht ja etwa der Kalk¨ul der Differentialrechnung vor: die konkrete Berechnung von Ableitungen elementarer Funktionen erfolgt nicht nach der (auf dem Grenzwertbegriff aufbauenden) Definition, sondern wird durch geschicktes Kombinieren verschie-denerRegeln, wie der Ketten-, der Produkt- und der Quotientenregel, auf entsprechende Grunda-bleitungen zur¨uckgef¨uhrt.

Hier einige Beispielrechnungen mitMuPAD2:

2Die Ausgabe der Ergebnisse weicht in verschiedenenMuPAD-Versionen leicht voneinander ab. Sie ist dar¨uber hinaus von mir in einigen F¨allen leicht redigiert worden.

diff(x^2*sin(x)*ln(x+a),x$2); # Zweite Ableitung #

2 sin(x) ln(a+x) + 4xcos(x) ln(a+x) +4xsin(x) (a+x)

−x2 sin(x) ln(a+x) +2x2 cos(x)

(a+x) −x2sin(x) (a+x)2

Beim Integrieren kommen dar¨uber hinaus auch prozedurale Verfahren zum Einsatz, wie etwa die Partialbruchzerlegung, die ihrerseits die Faktorzerlegung des Nennerpolynoms und das L¨osen von (linearen) Gleichungssystemen verwendet, die aus einem Ansatz mit unbestimmten Koeffizienten gewonnen werden. Auf diese Weise, und das ist ein weiteres wichtiges Moment des Einsatzes von CAS,

spielen algorithmische Fertigkeiten aus sehr verschiedenen Bereichen der Mathematik nahtlos miteinander zusammen.

p:=(x^3+x^2+x-2)/(x^4+x^2+1);

x3+x2+x−2 x4+x2+ 1 u:=int(p,x);

ln x2−x+ 1

−1

2 ln x2+x+ 1

− 1

√3arctan

2x+ 1

√3

diff(u,x);

2x−1

x2−x+ 1− 2 3(2x+1)2

3 + 1− 2x+ 1

2 (x2+x+ 1) normal(%-p);

0 int(1/(x^4-1),x);

ln(x−1)

4 −arctan(x)

2 −ln(x+ 1) 4 Wir k¨onnen die letzte Integrationsaufgabe f¨ur

verschiedene Exponenten untersuchen und da-mit schon einmal die Leistungsf¨ahigkeit eines CAS testen. Eine entsprechende Testprozedur h¨atte f¨ur Maxima etwa diese Gestalt. Die Ergebnisse entsprechen weitgehend denen, die nach der Theorie zu erwarten sind, sofern die Teilintegrale exakt berechnet werden k¨onnen.

intChallenge(n):=(

f:1/(1-x^n), u:integrate(f,x), v:diff(u,x), w:ratsimp(v-f), display(f,u,v,w) );

Expertenwissen wird zum L¨osen von verschiedenen Problemklassen ben¨otigt, wobei der Nutzer in den seltensten F¨allen wissen (und wissen wollen) wird, welche konkreten Algorithmen im jeweili-gen Fall jeweili-genau anzuwenden sind. Deshalb b¨undeln die CAS die algorithmischen F¨ahigkeiten zum Aufl¨osen gewisser Sachverhalte in einem oder mehreren

solve-Operatoren,

die den Typ eines Problems erkennen und geeignete L¨osungsalgorithmen aufrufen.

So b¨undelt der solve-Operator vonMuPADWissen ¨uber Algorithmen zum Auffinden der Null-stellen univariater Polynome, von linearen und polynomialen Gleichungssystemen und selbst Dif-ferentialgleichungen k¨onnen damit gel¨ost werden.

solve(x^2+x+1,x);

Selbst f¨ur kompliziertere Gleichungen, die trigonometrische Funktionen enthalten, werden L¨osun-gen in mittlerweile sch¨oner Form angegeben.

s:=solve(sin(x)=1/2,x);

Eine Spezialit¨at vonMuPAD ist die vollst¨andige und mathematisch weitgehend genaue Angabe der L¨osung als L¨osungsmenge, die sich mit entsprechenden Mengenoperationen nun auch gut weiter verarbeiten l¨asst. Sucht man etwa alle L¨osungen obiger Aufgabe im Intervall−10≤x≤10, so kann man diese als Mengendurchschnitt bestimmen und dazu dann N¨aherungswerte ausgeben lassen. Beachten Sie die unterschiedliche Reihenfolge der Elemente in der Printausgabe. Aber es handelt sich ja auch um Mengen.

u1:=s intersect Dom::Interval(-10,10);

{−9.948376,−5.759586,−3.665191,0.5235987,2.617993,6.806784,8.901179}

Maples L¨osung derselben Aufgabe f¨allt unbe-friedigender aus. Wenn wir uns erinnern, dass die L¨osungsmenge trigonometrischer Gleichun-gen periodisch ist, also mit xauch x+ 2πdie Gleichung erf¨ullt, so haben wir aber immerhin schon die H¨alfte der tats¨achlichen L¨osungsmen-ge L¨osungsmen-gefunden.

solve(sin(x)=1/2);

1 6π

Warum kommt Maple nicht selbst auf die-se Idee? Auch hier hilft erst ein Blick in die (Online-)Dokumentation weiter; setzt man eine spezielle Systemvariable richtig, so erhalten wir das erwartete Ergebnis, allerdings in einer recht verklausulierten Form: B1und Z1sind Hilfs-variablen mit den Wertebereichen B1∈ {0,1} (B wie boolean) und Z1∈Z.

Mathematica(wie auchMaximanoch in ak-tuellen Versionen) antwortet ¨ahnlich, aber bis zur Version 5 gab es keine M¨oglichkeit, die L¨osungsschar in parametrisierter Form auszu-geben. Im Handbuch der Version 3 (S. 794) wurde dies wie folgt begr¨undet:

Solve[Sin[x]==1/2,x]

Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found.

nnx→ π 6

oo

Obwohl sich alle L¨osungen dieser speziellen Gleichung einfach parametrisieren lassen, f¨uhren die meisten derartigen Gleichungen auf schwierig darzustellende L¨osungsmen-gen. Betrachtet man Systeme trigonometrischer Gleichungen, so sind f¨ur eine Para-meterdarstellung diophantische Gleichungssysteme zu l¨osen, was im allgemeinen Fall als algorithmisch nicht l¨osbar bekannt ist.

Wir stoßen mit unserer einfachen Frage also unvermutet an prinzipielle Grenzen der Mathematik, die im betrachteten Beispiel allerdings noch nicht erreicht sind.

Seit Version 5 kann das KommandoReduceverwendet werden, um einen zur Eingabe ¨aquivalenten logischen Ausdruck ¨ahnlicher Qualit¨at wie die Antworten vonMuPADzu generieren.

s=Reduce[Sin[x]==1/2,x]

Die Mathematica-Entwickler st¨utzen sich dabei auf eine andere Philosophie als die MuPAD -Entwickler. W¨ahrend letztere konsequent die MengennotationL ={f(t)|t∈G∧H(t)} verwen-den, welche die L¨osungsmenge durch eine parameterabh¨angige Vorschrift f konstruieren, wobei f¨ur die Parametert∈Gzus¨atzliche NebenbedingungenH(t) aufgestellt sein k¨onnen, st¨utzen sich die ersteren auf die gezielte Umformung dieser Eigenschaften selbst.

s=Reduce[Sin[x]==1/2 ∧ −8<x<8,x]

x=−11π

Aus dieser Antwort k¨onnen gegebenenfalls durchSolvedie L¨osungen in der traditionellen Notation extrahiert werden.

Solve[s,x]

Oft haben wir nicht nur mit der Frage der Vollst¨andigkeit der angegebenen L¨osungsmenge zu k¨ampfen, sondern auch mit unterschiedlichen Darstellungen ein und desselben Ergebnisses, die sich aus unterschiedlichen L¨osungswegen ergeben. Betrachten wir etwa die Aufgabe

solve(sin(x)+cos(x)=1/2,x);

Eine m¨ogliche Umformung, die uns die vollst¨andige L¨osungsmenge liefert, w¨are sin(x) + cos(x) = sin(x) + sinπ

w¨ahrendMaplefolgende Antwort liefert:

EnvAllSolutions:=true:

s=Reduce[Sin[x]+Cos[x]==1/2,{x}]

c1Z

Hier wird eine zentrale Fragestellung deutlich, welche in der praktischen Arbeit mit einem CAS st¨andig auftritt:

Wie weit sind syntaktisch verschiedene Ausdr¨ucke sematisch ¨aquivalent, stellen also ein und denselben mathematischen Ausdruck dar?

In obigem Beispiel wurden die L¨osungen von den verschiedenen CAS in sehr unterschiedlichen Formen pr¨asentiert, die sich durch einfache (im Sinne von”offensichtliche“) Umformungen weder ineinander noch in das von uns erwartete Ergebnis ¨uberf¨uhren lassen.

Versuchen wir wenigstens die n¨aherungsweise Auswertung einiger Elemente beider L¨osungsmengen:

float(s intersect Dom::Interval(-10,10)); # MuPAD #

{−6.707216347,−4.288357941,−0.4240310395,1.994827366,5.859154268,8.278012674} seq(op(subs( Z3=i,evalf(s))), i=-1..1); # Maple

−6.707216348,−4.288357941,−0.4240310395,1.994827367,5.859154268,8.278012675 s//N (* Mathematica *)

{{x→1.99483},{x→ −0.424031}}

Die Ergebnisse gleichen sich, was es plausibel macht, dass es sich in der Tat um verschiedene syntaktische Formen desselben mathematischen Inhalts handelt. Nat¨urlich sind solche n¨aherungs-weisen Auswertungen keinBeweisder sematischen ¨Aquivalenz und verlassen außerdem den Bereich der exakten Rechnungen.

An dieser Stelle wird bereits deutlich, dass die Komplexit¨at eines CAS es oftmals notwendig macht, Ergebnisse in einem gegen¨uber dem Taschenrechnereinsatz vollkommen neuen Umfang nach- und umzuinterpretieren, um sie an die eigenen Erwartungen an deren Gestalt anzupassen.