4 wxMaxima | |
→ | 4.5 Eingabe-Syntax |
Mit dem Operator ":=" werden Funktionen definiert (ähnlich der Makro-Definition mit #define in C).
Name(Parameter):=Ersetzungstext
Wird die Funktion benutzt, wird anstelle des Aufrufes der Ersetzungstext verwendet. Alle Vorkommen der formalen Parameter werden ersetzt durch die entsprechenden Argumente des Funktionsaufrufes.
Im Beispiel (siehe Abb.) wird eine Funktion parallel() definiert. In Anweisung 4 wird diese Funktion benutzt. Anstelle der formalen Parameter a und b stehen hier die Argumente Rx und Ry. Somit ergibt sich zunächst der Term R5+(Rx*Ry)/(Rx+Ry). Da hier Variablen enthalten sind, denen bereits ein Wert zugewiesen wurde, erfolgt gleich die Ersetzung zu R5+((R1+R2)*(R3+R4))/((R1+R2)+(R3+R4)).
Mit
define(Name(Argumente), Ausdruck)
wird eine mathematische Funktion definiert. Der Ausdruck wird ausgewertet, bevor die Definition gespeichert wird.
Bei der Funktionsdefinition mit define() wird der
Ausdruck ausgewertet, bevor die Definition gespeichert
wird.
Bei der Funktionsdefinition mit := wird der Ersetzungstext
ohne sofortige Auswertung für die spätere Ersetzung
gespeichert.
Im Beispiel wird in Anweisung 1 eine Funktion f1(x)=x2 definiert. In Anweisung 2 wird die Funktion f2(x) definiert als Ableitung von f1(x) nach x. Da die Definition mit define() erfolgt, wird diese Ableitung sofort gebildet (Ergebnis: 2*x), dieser Term wird in der Funktionsdefinition gespeichert. In den Anweisungen 3 und 4 werden f1(x) und f2(x) für x=1 berechnet.
In Anweisung 5 wird f3(x) ebenfalls als
x2 definiert. In Anweisung 6 wird
f4(x) definiert als Ableitung von f3(x)
nach x. Da die Definition mit := erfolgt, wird der Ausdruck
nicht sofort ausgewertet, vielmehr wird die Anweisung zum
Differenzieren als Text gespeichert.
In Anweisung 7 wird f3(x) für x=1 berechnet.
Im Ersetzungstext "x^2" wird das x durch die 1 ersetzt, dies
ergibt "1^2" mit dem Ergebnis 1.
In Anweisung 8 wird versucht, f4(x) für x=1 zu
berechnen. Im Ersetzungstext "diff(f3(x), x)" wird x durch
die 1 ersetzt mit dem Ergebnis "diff(f3(1), 1)". Dies führt zu
einer Fehlermeldung, da nicht nach einer Konstante differenziert
werden kann.
Funktionen können auch mit
Name[Argumente]:=Ersetzungstext; define(Name[Argumente], Ausdruck)
definiert werden, also mit eckigen Klammern anstelle der
normalen.
Solche Funktionen speichern berechnete Ergebnisse in einem Cache.
Wird die Funktion erneut mit einer Argumentkombination aufgerufen,
für die ein Cache-Eintrag vorhanden ist, wird das Ergebnis aus dem
Cache zurückgegeben.
Wird ::= anstelle von := benutzt, so werden die in den
Ersetzungstext eingesetzten Aufrufargumente gequoted (es wird ein
einzelnes Anführungszeichen vorangestellt), das Argument wird also
nicht sofort ausgewertet.
Das Beispiel der Abbildung verdeutlicht den Unterschied zwischen :=
und ::=.
Mit
functions;
werden alle selbst definierten Funktionen (define() und :=) angezeigt.
Mit
arrays;
werden alle selbst definierten Array-Funktionen angezeigt.
Mit
macros;
werden alle selbst definierten Makros (::=) angezeigt.
Mit
fundef(Name);
wird die Definition einer Funktion, Array-Funktion oder eines Makros angezeigt.
Mit
kill(Name);
wird das angegebene gebundene Symbol, z.B. eine Funktion gelöscht.
Mit
kill(all);
werden alle gebundenen Symbole (nicht nur Funktionen und Makros, sondern auch Variable...) gelöscht.
Mit
kill(allbut(Name,...));
werden alle gebundenen Symbole mit Ausnahme der aufgeführten gelöscht.
Zusammengehörige Funktionen und sonstige Definitionen können in Packages (Dateien mit der Endung .mac) gebündelt und bei Bedarf geladen werden.
Ein Aufruf von
load("datei");
lädt die Datei datei.mac entweder aus dem angegebenen
Verzeichnis (wenn ein vollständiger Dateiname angegeben wurde) oder
aus dem Verzeichnis, das in der Variable maxima_userdir
angegeben ist.
Standardmäßig ist maxima_userdir auf das Verzeichnis
"maxima" im Homeverzeichnis des aktuellen Nutzers gesetzt.
In Pfadangaben - sowohl beim Setzen der Variable als auch in den
Dateinamen - sollten Sie unter Windows keine Backslashes verwenden
sondern Slashes.
Im maxima_userdir-Verzeichnis kann eine Datei maxima-init.mac angelegt werden. Diese wird beim Start von Maxima automatisch abgearbeitet. Hier können häufig genutzte Funktionen definiert bzw. häufig genutzte Packages geladen werden.
Mit
declare(F, evfun);
wird das evfun-Flag für eine Funktion F gesetzt.
Anstelle von
F(ev(expr));
kann nun die übersichtlichere Schreibweise
ev(expr, F);
bzw. im interaktiven Betrieb
expr, F
genutzt werden.
Mit
declare(f, evflag);
kann für eine Flag-Variable f das evflag-Attribut gesetzt werden.
Anstelle von
ev(expr, f=true);
kann nun die übersichtlichere Schreibweise
ev(expr, f);
bzw. im interaktiven Betrieb
expr, f
genutzt werden.