• Keine Ergebnisse gefunden

Der prinzipielle Aufbau eines Computeralgebrasystems

Nach dem Start des entsprechenden Systems meldet sich dieInterpreterschleife und erwartet eine Eingabe, typischerweise einen inlinearisierter Formeinzugebenden symbolischen Ausdruck, der vom System ausgewertet wird. Das Ergebnis wird in einer st¨arker an mathematischer Notation orientiertenzweidimensionalen Ausgabe angezeigt.

Neben derartigen Eingaben sowie einem quit-Befehl zum Verlassen der Interpreterschleife gibt es noch eine Reihe von Eingaben, die offensichtlich andere Reaktionen hervorrufen. Dies sind in MuPADzum Beispiel

numerisches

Interface Systemkern Bibliotheken

Schnittstelle zu externen Programmen

Grafik-Interface

Interpreter-schleife

Hilfesystem

Nutzer-schnittstelle Terminal-version

fensterbasierte Version

-? 6

? 6

-QQ QQ Q k

6

PP PP PP

Bild 1: Prinzipieller Aufbau eines Computeralgebra-Systems

• Eingaben zur Aktivierung des Hilfesystems und

• Eingaben der Form plot(...)f¨ur Grafikausgaben.

Offensichtlich werden hierbei andere als die unmittelbaren symbolischen F¨ahigkeiten des CAS herangezogen.

Die Interpreterschleife des CAS bringt also verschiedene Teile des Systems zusammen, wovon nur eines der unmittelbar symbolische Rechnungen ausf¨uhrende Kern ist, den wir als denSystemkern bezeichnen wollen. Neben den beiden Komponenten Hilfesystem und Grafik-Interface sind dies noch die der Ein- und Ausgabe dienendeNutzerschnittstelle(front end) sowie einnumerisches In-terface, das die numerische Auswertung symbolischer Ausdr¨ucke ¨ubernimmt. Letzteres ist oftmals enger in den Systemkern intergriert. Wir wollen es trotzdem an dieser Stelle einordnen, da die entsprechende Funktionalit¨at nicht direkt mit symbolischen Rechnungen zu tun hat.

Ehe wir uns Aufbau und Arbeitsweise des Systemkerns zuwenden, in dem die symbolischen F¨ahig-keiten des jeweiligen Systems konzentriert sind, wollen wir einen kurzen Blick auf die anderen Komponenten werfen.

Das ¨außere Erscheinungsbild des Systems wird in erster Linie durch die Nutzerschnittstelle bestimmt. Genereller Bestandteil derselben ist ein Formatierungssystem zur Herstellung zweidi-mensionaler Ausgaben, das sich st¨arker an der mathematischen Notation orientiert als die System-eingaben. Man unterscheidetTerminalversionen, in denen die Ausgabe im Textmodus erfolgt und die neben Ein- und Ausgabe meist einen rudiment¨aren Zeileneditor besitzen, undfensterbasierte Versionen, in denen die Ausgabe im Grafikmodus erfolgt.

Grafikbasierte Ausgabesystemesind heute meist in der Lage,integrierte Dokumentezu produ-zieren, die Texte, Ergebnisse von Rechnungen und Grafiken verbinden und in g¨angigen Formaten (HTML, LATEX) exportieren k¨onnen. Eine Vorreiterrolle spielten auf diesem Gebiet die Systeme

Mathematica und Maple mit dem Konzept des Arbeitsblatts. Hier trafen sich Entwicklungen aus dem Bereich des wissenschaftlichen Publizierens (mit Produkten wie Scientific Word von MacKichan), der Gestaltung interaktiver Oberfl¨achen und Methoden des symbolischen Rechnens, womit sich zugleich vollkommen neue Horizonte in Richtung der (elektronischen) Publikation in-teraktiver mathematischer Texte er¨offnen. Das Mathematica-Frontend ist dabei auch in der Mathematica-Sprache geschrieben, was symbolische Manipulationen auf ganzen Dokumenten mit sprachlichen Mitteln erlaubt, mit denen die Rechnungen selbst organisiert werden. Andere Systeme (Maple,MuPAD) verwenden standardisierte Dokument-Architekturen oder verf¨ugen in diesem Bereich nur ¨uber rudiment¨are M¨oglichkeiten.

AuchHilfesystemesind bei den einzelnen CAS sehr unterschiedlich entwickelt. Generell ist jedoch auch hier ein Trend hin zur Verwendung g¨angiger Techniken zum Entwurf von Hilfesystemen in Form hypertextbasierter Dokumente und entsprechender Analysewerkzeuge zu versp¨uren. Dabei wird zunehmend, wie im letzten Kapitel bereits f¨ur das Grafik-Interface beschrieben, nicht nur auf entsprechende Ans¨atze, sondern auch auf bereits fertige Software-Komponenten zur¨uckgegriffen.

Hilfesysteme sind meist hierarchisch oder/und nach Schlagworten sortiert, so dass man relativ genaue Kenntnisse ben¨otigt, wie konkrete Kommandos oder Funktionen heißen bzw. an welcher Stelle in der Hierarchie man relevante Informationen findet. Auch hier hat Mathematica eine Vorreiterstellung inne, denn mit Version 7 steht ein lokal-globales Hilfesystem zur Verf¨ugung, das neben der bisherigen lokalen Hilfekomponente auch auf global verteilte, ¨uber Webschnittstellen zu erreichende Bestandteile wie etwa dasWolfram Demonstration Projecthttp://demonstrations.

wolfram.com und dessen nat¨urliche Fortsetzung in Wolfram Alphahttp://www.wolframalpha.

comsetzt.

Obwohl es auch große und leistungsf¨ahige Programmpakete zur Numerik gibt, treiben die CAS die Entwicklung ihres numerischen Interfacein zwei Richtungen voran. Zum einen ist zu be-denken, dass ein CAS nur dann zu einem n¨utzlichen Instrument, einem computermathematischen Werkzeug in der Hand eines Wissenschaftlers oder Ingenieurs wird, wenn es die volle ”compute power“ bereitstellt, die von dieser Klientel im Alltag ben¨otigt wird. Dazu geh¨oren neben sym-bolischen Rechenfertigkeiten und Visualisierungstools auch die M¨oglichkeit, ohne weitergehenden Aufwand symbolische Ergebnisse numerisch auszuwerten. Deshalb hat jedes der großen CAS eige-ne Routieige-nen f¨ur numerische Berechnungen etwa von Nullstellen oder bestimmten Integralen

”f¨ur den Hausgebrauch“. Dabei wird stark von den speziellen M¨oglichkeiten adaptiver Pr¨azision einer bigfloat-Arithmetik Gebrauch gemacht, die auf der Basis der vorhandenen Langzahlarithmetik leicht implementiert werden kann. Diese F¨ahigkeiten, die etwa beim Bestimmen nahe beieinan-der liegenbeieinan-der Nullstellen von Polynomen obeieinan-der beim Berechnen numerischer N¨aherungswerte hoher Pr¨azision eine Rolle spielen, sind st¨arker in den Systemkern integriert.

Andererseits ist eine wichtige, wenn nicht gar die wichtigste1 Anwendung von Computeralgebra die Aufbereitung symbolischer Daten zu deren nachfolgenden numerischen Weiterverarbeitung.

Deshalb werden neben Codegeneratoren auch zunehmendexplizite Schnittstellen und Proto-kolleentworfen, ¨uber welche die Programme mit externem Sachverstand kommunizieren k¨onnen.

Uber solche Schnittstellen kann insbesondere mit vorhandenen Numerikbibliotheken kommuni-¨ ziert werden. Allerdings kann eine solche Schnittstelle umfangreichere Funktionen erf¨ullen, etwa webbasierte Client-Kommunikation organisieren oder kooperative Prozesse mehrerer CAS oder mehrerer Prozesse eines CAS koordinieren. Auch auf diesem Gebiet nimmt Mathematica mit dem MathLink-Protokoll seit vielen Jahren eine f¨uhrende Stellung ein.

Anforderungen an das Systemkerndesign

Betrachten wir nun die Anforderungen n¨aher, die beim Design des Systemkerns zu ber¨ ucksichti-gen sind, in dem die uns in diesem Kurs interessierenden symbolischen Rechnunucksichti-gen letztendlich ausgef¨uhrt werden. Diese Anforderungen kann man grob folgenden sechs Komplexen zuordnen:

1Nach [17] werden moderne CAS zu 90 % zur Generierung effizienten Codes eingesetzt.

Programmiersprache Simplifikator

Sammlung effizient implementierter Grundalgorithmen Datenrepr¨ asentation

und

Speicherverwaltung

Schnittstelle zu Anwender- und Spezialbibliotheken Schnittstelle zu

anderen Systemkomponenten

Bild 2: Komponenten des Systemkern-Designs

• Es ist ein Konzept f¨ur eine Datenrepr¨asentation zu entwickeln, das es erlaubt, heterogen strukturierte Daten, wie sie typischerweise im symbolischen Rechnen auftreten, mit der not-wendigen Flexibilit¨at, aber doch nach einheitlichen Gesichtspunkten zu verwalten und zu verarbeiten. Damit verbunden ist die Frage nach einer entsprechend leistungsf¨ahigen Spei-cherverwaltung.

Dabei ist zu ber¨ucksichtigen, dass symbolische Ausdr¨ucke sehr unterschiedlicher und im Vor-aus nicht bekannter Gr¨oße auftreten, also alsdynamische Datentypenmit einer ebensolchen dynamischenSpeicherverwaltung anzulegen sind.

• Es wird eineProgrammiersprache ben¨otigt, mit der man den Ablauf der Rechnungen steu-ern kann. Bekanntlich reicht ein kleines Instrumentarium an Befehlskonstrukten aus, um die g¨angigen Programmablaufkonstrukte (Schleifen, Verzweigungen, Anweisungsverb¨unde) zu formulieren. Weiterhin sollte die Sprache Methoden des strukturierten Programmierens (Prozeduren und Funktionen, Modularisierung) unterst¨utzen, vermehrt um Instrumente, die sich aus der Spezifik des symbolischen Rechnens ergeben.

• Es ist ein Konzept f¨ur denSimplifikatorzu entwickeln, mit dessen Hilfe Ausdr¨ucke gezielt in zueinander ¨aquivalente Formen nach unterschiedlichen Gesichtspunkten umgeformt werden k¨onnen. Als Minimalanforderung muss dieser Simplifikator wenigstens in der Lage sein, in gewissem Umfang die semantische Gleichwertigkeit syntaktisch unterschiedlicher Ausdr¨ucke festzustellen.

Dabei handelt es sich meist um ein zweistufiges System, das aus einer effizient im Kern implementiertenPolynomarithmetikbesteht, die in der Lage ist, rationale Ausdr¨ucke umzu-formen, und einem (vom Nutzer erweiterbaren)Simplifikationssystem, das die Navigation in der transitiven H¨ulle der dem System bekannten elementaren Umformungsregeln gestattet.

• Es werden effiziente Implementierungen grundlegender Algorithmen (Langzahl- und Poly-nomarithmetik, Rechnen in modularen Bereichen, zahlentheoretische Algorithmen, Faktori-sierung von Polynomen, Bigfloat-Arithmetik, Numerikroutinen, Differenzieren, Integrieren, Rechnen mit Reihen und Summen, Grenzwerte, L¨osen von Gleichungssystemen, spezielle

Funktionen . . . ) ben¨otigt, die in verschiedenen Kontexten des symbolischen Rechnens im-mer wieder auftreten.

Diese in Form von black-box-Wissen vorhandene Kompetenz ist die Kernkompetenz des Systems. Die Implementierung dieser Algorithmen baut wesentlich auf anderen Teilen des Designkonzepts auf, die damit dar¨uber entscheiden, wie effektiv Implementierungen ¨ uber-haupt sein k¨onnen. Gew¨ohnlich sind Teile dieser Sammlung von Funktionen aus Gr¨unden der Performance nicht in der Programmiersprache des jeweiligen Systems, sondern maschi-nenn¨aher ausgef¨uhrt.

Die Anzahl und die Komplexit¨at der eingebauten Funktionen ist mit klassischen Program-miersprachen nicht vergleichbar.

• Es ist ein Konzept f¨ur das Zusammenwirken der verschiedenen Spezial- und Anwenderbi-bliothekenmit dem Systemkern zu entwickeln, um das in ihnen gespeicherte mathematisch-algorithmische Wissen zu aktivieren.

Spezialbibliothekensind Sammlungen von Implementierungen algorithmischer Verfahren aus mathematischen Teildisziplinen, die in der Sprache des jeweiligen Systems geschrieben sind und speziellere Kalk¨ule (Tensorrechnung, Gruppentheorie) zur Verf¨ugung stellen. Derartige Spezialbibliotheken werden oftmals von der jeweiligen mathematischen Community als Ge-meineigentum entwickelt und gepflegt und von den CAS nur gesammelt und weitergegeben.

Anwenderbibliothekensind Sammlungen von Anwendungen mathematischer Methoden in an-deren Wissenschaften, die auf den symbolischen M¨oglichkeiten des jeweiligen CAS aufsetzen.

Solche Anwendungsbibliotheken, insbesondere im ingenieur-technischen und business-¨okono-mischen Bereich, werden oft kommerziell vertrieben.

• Schließlich ist ein Konzept f¨ur dasZusammenwirken des Systemkern mit den anderen Sy-stemkomponenten zu entwickeln.