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))));

Diskussion: [Name der Diskussion]