Die Funktion ist eine der wichtigsten Grundelemente der Mathematik. Um dieser Tatsache Rechnung zu tragen, stellt Maple einen eigenen Datentyp Funktion (function) zur Verfügung. Standardfunktionen wie sin oder tan sind schon implementiert. Einen Überblick über die Standardfunktionen liefert ?inifcns.
Wie Sie eigene Funktionen implementieren und mit ihnen umgehen, wird im wesentlichen in diesem Kapitel beschrieben.
|
Der Befehl f(x):= x^2 definiert keine Funktion! Statt dessen wird die Zeichenfolge "f(x)" als Variablenname aufgefaßt. Ein Ausdruck der Form f(2) ist daher undefiniert. |
Für das Definieren von Funktionen gibt es drei Möglichkeiten. In allen Fällen ist die Funktionalbeziehung eindeutig erkennbar, d.h. von welchen Variablen die Funktion abhängt.
1. Mit dem Pfeil-Operator: (der mathematischen Notation am ähnlichsten)
Funktionsname := Variable -> Ausdruck
Beispielsweise definiert f:= x -> 3*x^2 eine Funktion.
Funktionsname := (Variablen-Folge) -> (Ausdruck-Folge)
Beispiele: | g:= (x,y,z) -> (3*x*y, cos(z)); h:= x -> (2*x+1, exp(x)); i:= (x,y) -> 2*x-y*tan(x); |
Das Pfeilsymbol -> besteht aus dem Minus- und dem Größerzeichen. Ausdruck bezeichnet den Funktionsterm. In der Variablen-Folge und der Ausdruck-Folge müssen mindestens je ein Element stehen.
2. Mit dem Befehl unapply:
Die allgemeine Form für unapply lautet:
Funktionsname := unapply (Ausdruck, Variablen)
Durch die Eingabe von j:= unapply(x^3*y, x,y) wird beispielsweise eine Funktion in zwei Veränderlichen x,y erzeugt, deren Funktionsterm x³y lautet.
Die Variablen werden als Folge angegeben. Mit dem unapply-Befehl lassen sich nur skalarwertige Funktionen erzeugen.
![]() |
Bei der Definition von Funktionen sollte man keine belegten Variablen verwenden. Sonst wird bei Abfrage der Funktion mit den gewählten Variablen ein Wert statt des Funktionstermes zurückgegeben. Der Wert wird z.B. durch verzögerte Auswertung gelöscht. |
3. Mittels einer Prozedur: dazu in Kapitel 15 mehr.
![]() |
Der Pfeiloperator und der Befehl unapply |
Funktionen werden in der oben angegeben Schreibweise als Operatoren interpretiert. Sie können daher unter Beachtung der Dimensionen des Urbild- und des Bildraumes beliebig verknüpft werden. Mögliche Verknüpfungsoperatoren sind +,-,* und /.
Funktionen lassen sich auch hintereinanderschalten: Funktion1@Funktion2. Konkret bedeutet das: (f@g)(x) = f(g(x)). Das Ergebnis von g(x) wird als Argument von f benutzt. Die Dimension des Bildraumes von g muß gleich der Dimension des Urbildraumes von f sein.
Funktion@@n bewirkt die n-fache Hintereinanderschaltung der Funktion.
![]() |
Unter Maple lassen sich auch Funktionen f@g hintereinanderschalten, bei denen die Bildraumdimension von g ungleich der Urbildraumdimension von f ist. Das Ergebnis ist grober Unfug (siehe nachfolgendes Beispiel). |
![]() |
Anwendung der Verknüpfungsoperatoren |
Stückweise definierte Funktionen lassen sich mit dem piecewise-
Befehl handhaben. Da piecewise aber keine Standardfunktion ist,
muß es erst mit
readlib(piecewise) eingelesen werden. Der Befehl hat folgende
allgemeine Form:
piecewise( Bedingung_1, Ausdr_1, ... ,Bedingung_n, Ausdr_n, Default_ausdruck)
Die Auswertung ist denkbar einfach: Ist Bedingung_1 wahr, so benutze Ausdr_1. Ist Bedingung_2 wahr, so benutze Ausdr_2, auch wenn Bedingung_1 wahr ist und überschreibe ggf. Ausdr_1, usw. Der Default_ausdruck deckt alle Definitionsbereiche ab, die durch die Bedingungen_1 bis Bedingungen_n nicht erfaßt worden sind. Wird kein Default_ausdruck angegeben, so gilt standardmäßig 0 als Default_ausdruck.
Die Bedingungen können Gleichungen, Ungleichungen und logische Verknüpfungen von solchen sein. Akzeptiert werden als Bedingungen auch polynomiale Ausdrücke wie z.B. 3x³+x²-x < 7 und sogar stückweise Funktionen.
Mit piecewise-definierte Funktionen können differenziert und integriert werden.
![]() |
Die Funktion piecewise |
![]() |
Sindbad, der Seefahrer |
Der D-Operator berechnet Ableitungen von Funktionen:
D(Funktion)
Das Ergebnis ist automatisch wieder eine Funktion. Beispielsweise ergibt f1 := D(f) mit der wie oben definierten Funktion f:= x -> 3*x^2 die Funktion f1 := x -> 6*x.
... mit dem Kommando diff:
diff berechnet die Ableitung eines beliebigen Ausdruckes:
diff(Ausdruck, var)
var sind die Variablen (als Folge), nach denen der Reihenfolge
entsprechend abzuleiten ist.
Dabei gilt: diff(Ausdruck, x, y) = diff(diff (Ausdruck, x), y).
Diff ist die träge Variante von diff. Der Ausdruck wird damit nicht differenziert, sondern in Schönschrift mit dem Differentialoperator vor dem Ausdruck dargestellt.
![]() |
Zusammenhang zwischen dem D-Operator und diff: D(f) = unapply(diff(f(x), x), x) |
Ist f eine Funktion in n Veränderlichen, so wird durch
Der Folgenoperator $ erleichtert das Berechnen höherer Ableitungen.
diff(g(x,y),x$2,y$3) bewirkt das gleiche wie diff(g(x,y),x,x,y,y,y)
D[1$3,2](f) = D[1,1,1,2](f)
![]() |
Differentiation |
Die Funktion int berechnet das eigentliche oder uneigentliche Integral eines Ausdrucks.
symbolische Integration
int(Ausdruck, Variable)
Das Ergebnis von int ist keine Funktion, sondern wieder ein Ausdruck.
Ausdruck ist dabei der nach der Variable zu integrierende Funktionsterm. Im Ergebnis kommen keine Integrationskonstanten vor.
Beispielsweise liefert int(x^2, x) den Ausdruck x³/3.
int(Ausdruck, Variable=a..b)
Beispiel: int(x^2, x = -1..1) berechnet die Fläche unter der Normalparabel im Intervall [-1,1].
Kann Maple das Integral nicht berechnen, wird die träge Form des Ausdrucks zurückgegeben.
Die Variablen der Funktion müssen ohne Wert sein, da Maple sonst eine Fehlermeldung produziert.
Int ist die träge Form von int. Die Ausgabe des trägen Befehls ist das Integral in Schönschrift. Maple gibt das Integral unausgewertet zurück.
![]() |
Befinden sich im Integrationsbereich Unstetigkeitsstellen, über die hinweg integriert werden soll, so muß die Option continuous benutzt werden. Eine andere Möglichkeit ist die Aufsplittung des Integrals in zwei Integrale mit der Unstetigkeitsstelle als neuer Grenze. |
![]() |
Kurvendiskusion |
Integrale, deren Grenzen plus- und/oder minus unendlich sind, werden meist problemlos ausgewertet. Sollten dennoch Probleme auftreten oder wird ein Funktionswert im Integrationsbereich unendlich groß, so ist die Option CauchyPrincipalValue als dritter Parameter ratsam. Unter Maple heißt unendlich infinity.
Beispielsweise kann Maple int(1/x^3, x=-2..infinity) nicht berechnen, da sich im Inneren des Intervalls [-2,1] eine Polstelle befindet. Erst int(1/x^3,x=-2..infinity,'CauchyPrincipalValue') liefert den Wert des Integrals.
Wird ein Integral unausgewertet zurückgegeben, ist Maple nicht in der Lage, eine symbolische Lösung zu finden. Einen Ausweg bietet die numerische Integration. Diese muß mit evalf(int(..)) oder evalf(Int(..)) erzwungen werden.
Der Unterschied besteht darin, daß evalf(int(..)) erst symbolisch integriert und dann das Ergebnis in eine Fließkommazahl umwandelt, und evalf(Int(..)) ein numerisches Integrationsverfahren benutzt. Welche Methode für die numerische Integration verwendet wird, steht in den Hilfeseiten zu evalfint.
![]() |
Numerische Integration mit int |
![]() |
Problemfälle bei der Integration |