# Maple (Software)

Maple (mathematical manipulation language) ist ein proprietäres Computeralgebrasystem (CAS) für Algebra, Analysis, Diskrete Mathematik, Numerik und viele andere Teilgebiete der Mathematik in englischer Sprache. Es stellt ferner eine Umgebung für die Entwicklung mathematischer Programme zur Verfügung und ermöglicht die Visualisierung mathematischer Strukturen.

## Geschichte

Die erste Version von Maple wurde 1980 von Keith O. Geddes, Gaston H. Gonnet und deren Mitarbeitern von der Symbolic Computation Group an der Universität von Waterloo in der kanadischen Stadt Waterloo (Ontario) programmiert. Ende 1987 gab es Maple bereits in der Version 4.2.
Seit 1988 wird Maple von Maplesoft, einer Abteilung der Firma Waterloo Maple, weiterentwickelt und vermarktet. Waterloo Maple gehört seit September 2009 zur in Japan ansässigen Firma Cybernet Systems Co., Ltd.
Bei der wissenschaftlichen Unterstützung des Maple-Projektes ging und geht es darum, schnelle und effiziente Algorithmen für symbolische Berechnungen zu entwickeln und in das Programm zu integrieren. An diesen Arbeiten sind bzw. waren neben dem Ontario Research Centre for Computer Algebra (ORCCA), bestehend aus der Maple Symbolic Computation Group (Universität von Waterloo) und dem Symbolic Computation Laboratory (Universität von Western Ontario), auch Wissenschaftler an der ETH Zürich, dem Institut national de recherche en informatique et en automatique (INRIA) und vielen anderen Labors weltweit beteiligt.
Seit 1998 gibt es eine Zusammenarbeit zwischen Maplesoft und der Numerical Algorithms Group (NAG). NAG-Komponenten fanden sich erstmals in Maple Release 6 aus dem Jahre 2000. Diese Komponenten führten insbesondere zu einer erheblichen Verbesserung der Rechengeschwindigkeit und der Rechengenauigkeit auf dem Gebiet der Linearen Algebra.
2003 gab es Maple für Windows CE 2.0 für den mobilen Einsatz auf dem Handheld Cassiopeia A-23g. Dieser wurde oft in diversen Oberstufen eingesetzt.
2005 wurde mit Maple 10 ein neuer Dokument-Modus („document mode“) innerhalb der Standardversion von Maple eingeführt. Seither ist es möglich, Maple-Inputs in normaler mathematischer Schreibweise zu editieren. Hierbei lassen sich Texte und mathematische Symbole in derselben Eingabezeile miteinander kombinieren.
Maple 13 bot unter anderem erhebliche Verbesserungen bei der Ausgabe von 3D-Grafiken, neue Prozeduren und neue interaktive Tutoren.
Ab der Version 14 von Maple ist es möglich, zusammen mit anderen Maple-Nutzern auf Worksheets gemeinsam zuzugreifen (MapleCloud). Hierbei kann man eigene Ressourcen allen Maple-Nutzern weltweit oder aber nur den Mitgliedern bestimmter Arbeitsgruppen zur Verfügung stellen.
Maple 15 unterschied sich von den Vorgängerversionen insbesondere durch eine erhebliche Vergrößerung der Rechengeschwindigkeit bei Rechnern, die mit mehreren Prozessoren ausgestattet sind.
Neben neuen Packages (wie zum Beispiel GroupTheory), neuen Rechenbefehlen sowie zahlreichen Verbesserungen bietet Maple ab der Version 17 einen Editor, der die Entwicklung von Quelltext mit Syntax Highlighting und weiteren Funktionalitäten unterstützt. Außerdem werden Funktionsaufrufe jetzt durch die Verwendung von hardwareunterstützten Algorithmen erheblich schneller abgearbeitet als früher.

## Benutzeroberfläche

Hauptkomponente der grafischen Benutzeroberfläche von Maple ist das jeweilige Worksheet, in dem interaktiv gearbeitet wird. Es erscheint als Fenster, in das Rechenanweisungen (Maple-Inputs) eingetragen werden. Die Maple-Engine interpretiert diese Anweisungen und liefert entsprechende Ausgaben (Maple-Outputs) zurück.
Typische Maple-Outputs sind Zahlenwerte, Terme, Funktionen, Tabellen, 2- und 3-dimensionale Grafiken, Animationsobjekte und Diagramme. Es ist möglich, die von Maple erzeugten Objekte bzw. Ausdrücke über kontextsensitive Menüs zu bearbeiten.
Das Einfügen mathematischer Symbole, Ausdrücke, Vektoren und Matrizen in Rechenanweisungen wird erleichtert durch die Benutzung von Paletten. Diese bestehen aus für verschiedene Aufgaben vorgefertigten Code-Schnipseln, die per Mausklick dem Worksheet hinzugefügt werden können.
Von der Version 9 an gibt es neben dem Classic Worksheet Maple eine Java-basierte Version Maple Standard. Die Standardversion von Maple bietet eine komfortablere Oberfläche, ist aber andererseits deutlich langsamer als die klassische Variante. Aufgrund dieser zwei Varianten gibt es auch zwei unterschiedliche Arten, Worksheets zu speichern. Man unterscheidet Standard-Worksheets (Dateiendung: mw) und Classic-Worksheets (Dateiendung: mws; kompatibel zu älteren Maple-Versionen).
Ein fertig bearbeitetes Worksheet kann man bei Bedarf exportieren als PDF-, HTML-, LaTeX- oder als RTF-Dokument.

## Packages

Maple umfasst einen Kern häufig benutzter Standard-Rechenanweisungen (main library) und zusätzliche, zur Laufzeit mit dem with-Befehl ladbare Pakete (packages). Im Folgenden sind einige der wichtigsten dieser insgesamt über hundert Pakete aufgelistet:
* CodeGeneration (Tools für die Übersetzung von Maple-Quelltext in andere Programmiersprachen)
* combinat (zum Lösen kombinatorischer Probleme)
* DEtools (für das Rechnen mit Differentialgleichungen)
* DifferentialGeometry (für die Differentialgeometrie, insbesondere für das Rechnen mit Lie-Algebren und Tensoren)
* DynamicSystems (für das Arbeiten mit linearen Systemen)
* geometry (für die zweidimensionale euklidische Geometrie)
* geom3d (für die dreidimensionale euklidische Geometrie)
* GraphTheory (für Graphentheorie)
* GroupTheory (für das Rechnen mit endlich präsentierten Gruppen)
* LinearAlgebra (für das Rechnen mit Vektoren und Matrizen)
* Logic (für die zweiwertige Logik)
* Maplets (für die Herstellung graphischer Benutzeroberflächen für Maple)
* NumberTheory (für die Zahlentheorie)
* PDEtools (für das Lösen partieller Differentialgleichungen)
* Physics (für Berechnungen in der Theoretischen Physik)
* plots (Grafikpaket)
* plottools (für das Erzeugen und Verändern grafischer Objekte)
* RandomTools (für die Arbeit mit Zufallsobjekten)
* RealDomain (stellt einen reellwertigen Kontext her)
* ScientificConstants (physikalische Konstanten und Eigenschaften chemischer Elemente)
* ScientificErrorAnalysis (für die Fehlerrechnung)
* Statistics (für die Statistik und die Analyse von Daten)
* Units (für das Rechnen mit (insb. physikalischen) Einheiten)
* VectorCalculus (für die Vektoranalysis)

## Schnittstellen

Maple besitzt Schnittstellen zu Matlab, Fortran, C, C#, Java, Visual Basic, Python, Perl, R, JavaScript, Julia und Swift, die Maple-Code in diese Zielsprachen übersetzen. Umgekehrt lassen sich Fortran-, C-, C#- oder Java-Routinen in Maple einbinden, und Maple lässt sich aus C, Java und VisualBasic aufrufen (OpenMaple-API).

### Features (Auswahl)

* Mit diesem Befehl löst Maple Differentialgleichungen: dsolve(...)
* Maple kann Doppelintegral und Tripelintegral lösen.

## Anwendungsbeispiele

Es folgen einfache Beispiele für Rechenanweisungen in der ursprünglichen Maple-typischen Notation. In der aktuellen Version ist ein Programmbefehlabschluss mit dem Semikolon nicht mehr erforderlich und die Eingabe der Rechenanweisungen lässt sich alternativ über einen Formeleditor eingeben und die Ausführung über ein Kontextmenü erwirken.
* Berechnen der Quadratwurzel von 2 mit einer Genauigkeit von 21 signifikanten Stellen:
$RootofTwo\,:=\,1{.}41421356237309504880$
* Lösen einer quadratischen Gleichung:
$-{\frac {b}{6}}+{\frac {\sqrt {b^{2}+84}}{6}},-{\frac {b}{6}}-{\frac {\sqrt {b^{2}+84}}{6}}$
* Berechnen der Ableitung einer Funktion:
$(1+\tan(x)^{2}){\sqrt {x}}+{\frac {1}{2}}{\frac {\tan(x)}{\sqrt {x}}}$
* Berechnen eines unbestimmten und eines bestimmten Integrals:
$-{\frac {1}{2}}\sin(x)\cos(x)+{\frac {x}{2}}$
${\frac {\pi }{4}}$
* Lösen einer linearen Differentialgleichung zweiter Ordnung:
$y(x)=e^{({\sqrt {3}}x)}\left({\frac {7{\sqrt {3}}}{18}}+{\frac {1}{2}}\right)+e^{(-{\sqrt {3}}x)}\left({\frac {1}{2}}-{\frac {7{\sqrt {3}}}{18}}\right)-{\frac {x}{3}}$
* Berechnen der Koordinatengleichung einer Kugel:
${\frac {263}{16}}+x^{2}+y^{2}+z^{2}-4x-6y+4z=0$
* Darstellung einer parametrisierten Fläche:
* Darstellung einer stehenden Welle: