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 ak, k∈Z, ak=(−1)k5k zu bestimmen und eine Nutzerantwort sei bk=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 ak=i√5 und bk=−i√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))));