Netzwerk Mathematik/Physik + E-Learning
Ziel dieses Bausteins ist es, eine Liste kurz umrissener Szenarien und UseCases in der Verwendung von MAXIMA in ONYX-Aufgaben zusammenzutragen, für die es lohnenwert erscheint, in einem zweiten Schritt ggf. eine nützliche Dokumentation (Erläuterung / Anwendungsbeispiel) im ONYX Hilfesystem zu erstellen.
Variablen Deklaration
Das Problem
Bei der Überprüfung von Formeleingaben welche von Variablen abhängen ist es oft notwendig den Definitionsbereich dieser Variablen mit anzugeben. Seien zum Beispiel die Koeffizienten \(a_k\), \(k \in \mathbb Z\), $$a_k = \frac{(-1)^k}{5^k}$$ zu bestimmen und eine Nutzerantwort sei $$b_k=\frac{1}{(-5)^k}$$ Dann führt der einfache Test
is(equal(0,(-1)^k/5^k - 1/(-5)^k));
unkown
nicht zum erwünschten Resultat. Der Grund ist, dass für \(k=1/2\) und den natürlichen Wurzelzweig beide Ausdrücke unterschiedliche Werte liefern, nämlich \(a_k=\frac{i}{\sqrt{5}}\) und \(b_k=-\frac{i}{\sqrt{5}}\).
Variablen Deklaration
Um Maxima mitzuteilen, dass \(k\) eine ganze Zahl ist geht man wie folgt vor
block( declare(k,integer), radcan( 1/(-5)^k - (-1)^k/5^k));
0
Die Funktion radcan übernimmt hier die Vereinfachung der Potenzausdrücke.
Persistente Variaben
Ein Problem mit dem obigen Code ist, dass sich Maxima die Zuweisung von \(k\) als integer merkt. Ein weitere Aufruf der ersten Codezeile führt nun zu
is(equal(0,(-1)^k/5^k - 1/(-5)^k));
true
Das kann zu Nebeneffekten bei späteren Maxima Aufrufen anderer Aufgaben führen. Der gespeicherte Kontext zu einer Variablen kann mittels
kill(k);
gelöscht werden. Besser ist jedoch die Deklaration nur lokal vorzunehmen:
block(local(k),declare(k,integer),is(equal(0,radcan( 1/(-5)^k - (-1)^k/5^k))));