Maple-Stolperfallen

… und wie man sie vermeidet

Wolfgang Konen,
FH Köln

Stand 22.12.2007

 

Immer dran denken: Das in mathematischen Formeln unterdrückte Mal-Zeichen muss in Maple stets ausgeschrieben werden: aus  wird in Maple ln(a*c).

 


Nicht den D-Operator verwenden, wenn with(RealDomain) eingeschaltet ist!

Das ist ein echter Bug in Maple, der manchmal auftritt (es ist nicht ganz klar in welchen Maple-Versionen und unter welchen Bedingungen).

 

Abhilfe 1: Wenn man RealDomain nur für einen einzelnen Befehl braucht, z.B. für ein solve, dann kann man mit

use RealDomain in

  solve((x^2+1)*(x-5));

end use;

die Verwendung von RealDomain auf nur diesen Befehl einschränken. Ausserhalb funktioniert dann der D-Operator wie gewohnt.

 

Abhilfe 2: Wenn man unbedingt mit with(RealDomain) rechnen muss, dann nehme man für D den Ersatzoperator

fD:=unapply(diff(f(x),x),x);

 


Nicht with(RealDomain) verwenden, wenn man den DiffTutor benutzen will!

Auch dies ist ein echter Bug, der DiffTutor startet zwar, er wendet auch ChainRule an, aber beim Versuch, die sin-Rule anzuwenden gibt es eine komische Fehlermeldung.

Ein restart; with(Student[Calculus1]): bereinigt die Situation.

 


Das %-Zeichen (Letztes Rechenergebnis) mit Vorsicht verwenden!

Denn: 1) Maple verwendet wirklich immer das zuletzt berechnete Ergebnis, und es kann sein, dass man zuvor einen anderen Befehl als den direkt darüberstehenden ausgeführt hat. Das führt dann häufig zur Verwirrung.

2) Wenn bei einer Berechnung nichts herauskommt, dann bezieht Maple ein „%“ automatisch auf das vorherige Resultat, also das Resultat, bei dem zuletzt etwas herauskam. Das kann zu erheblicher Verwirrung führen!!!

 

Betrachten Sie als Beispiel folgenden Code zur Berechnung von Wendestellen:

 

 

>   

 f:=x^3+1;

df2:=diff(f,x$2);

> 

solve(df2=0);

print("Mögliche Wendestelle bei",%);

 

Sieht alles einfach und gut aus. Nun machen wir aus x^3 ein x^2 und rechnen erneut:

 

>   

 f:=x^2+1;

df2:=diff(f,x$2);

> 

solve(df2=0);

print("Mögliche Wendestelle bei",%);

 

 

 

Wie kommt Maple darauf, dass 2 eine Wendestelle sei, wo die Funktion x2+1 doch keine Wendestelle hat??? – Weil der solve-Befehl keine Lösung brachte, nimmt Maple das letzte Ergebnis davor, und das ist df2:=2. Kaum das gewünschte Resultat.

 

Abhilfe: Man vermeide „%“ und weise das solve-Ergebnis lieber auf eine Variable s zu. (Weil solve auch mal mehrere Ergebnisse liefern kann, nehmen wir mit s[1] von diesen das erste Ergebnis.) Man sieht dann an deutlich, dass hier ein Ergebnis keine Lösung bringt:

 

>   

f:=x^2+1;

df2:=diff(f,x$2);

> 

s:=solve(df2=0);

print("Mögliche Wendestelle bei",s[1]);

Error, invalid subscript selector

 

 

 

In diesem Fall ist ein Error bei print das wohl wünschenswerte Ergebnis. Wäre bei s mindestens eine Lösung herausgekommen, hätte Maple die 1. Lösung ausgegeben.


 

 

 

 

 

 

 


 

 

 

Ein paar Maple-Tricks

Wolfgang Konen,
FH Köln

Stand 22.12.2007

 

 

Wie kann man bei simplify erreichen, dass Vereinfachungen auch tatsächlich gefunden werden? 

Oftmals hilft der Nachsatz assume=positive, denn Maple denkt sonst immer an die kompliziertesten denkbaren Fälle (z.B. komplexe Zahlen u.ä.). Mit assume=positive schränken wir auf die positiven reellen Zahlen ein, die wir bei vielen Umformung auch tatsächlich meinen:


>   

f:=(sqrt(y/x*sqrt(x/y*sqrt(x/y))));
simplify(f,assume=positive);

 

f := (y/x*(x/y*(x/y)^(1/2))^(1/2))^(1/2)

y^(1/8)/x^(1/8)

 

 

>   

h:=ln(a*c/b)-ln(c^4)+ln(b):
h = simplify(h,assume=positive);

 

ln(a*c/b)-ln(c^4)+ln(b) = ln(a)-3*ln(c)

 

 

Oftmals gleichwertig ist simplify(..., symbolic).

 


Wie bringt man Maple bei, dass nur mit reellen Zahlen gerechnet werden soll?

Der Befehl with(RealDomain) bewirkt, dass ab dann nur reelle Lösungen gesucht werden: (-8)1/3 hat dann in R die eindeutige Lösung -2 und (-1)1/2  hat in R keine Lösung (Maple: undefined).

 

 

>   

restart:
(-8)^(1/3); (-1)^(1/2);

(-8)^(1/3)

I

>   

with(RealDomain):
(-8)^(1/3); (-1)^(1/2);

-2

undefined

 

[Ohne RealDomain läßt Maple (-8)1/3 unverändert, weil dies für 3 Lösungen steht (im Komplexen),  und  es formt (-1)1/2 zu I (imaginäre Einheit) um. Aber das bekommen wir erst im 2. Semester!]

Aber Achtung, RealDomain hat den oben beschriebenen Bug in Verbindung mit Operator D !


Wie kann man die Asymptote für  mit Maple ausrechnen?

Indem man erst die Funktion an der y-Achse spiegelt, also statt f(x) die Funktion f(-x) nimmt, dann die Asymptote für   bestimmt, dann diese Asymptote wiederum an der y-Achse spiegelt:

>   

a2:=convert(asympt(f(-x),x,1), polynom):
a2:=subs(x=-x,a2);