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.

Formelvergleich in Experten-Abfrage

In Experten-Abfragen ist der Standard

is(equal(ev(LEARNERRESPONSE),ev(CORRECTRESPONSE)))

equal oder gleich

Wenn man = zum Prüfen auf Gleichheit verwendet, werden nur sehr elementare Vereinfachungen durchgeführt. Mit dem Befehl equal (wie standardmäßig vorgegeben) werden "rationale" Termvereinfachungen durchgefürhrt. Intern wird bei is(equal(a,b)) geprüft, ob ratsimp(a-b) Null liefert. Nachfolgend ein Beispiel, in dem = nicht ausreicht.

(%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
(%o2)                         true
(%i3) is (x^2 - 1 = (x + 1) * (x - 1));
(%o3)                         false

Aber auch die Verwendung von equal kann in bestimmten Situationen problematisch sein. Dies liefert unknown, wenn beide Ausdrücke nur bei bestimmten Variablenbelegungen gleich sind.

(%i2) is(equal(x, 0));
(%o2)                               unknown
(%i3) is(x = 0);
(%o3)                                false

Vereinfachung weiterer Funktionen

Es gibt allerdings Fälle, in denen diese "rationalen" Vereinfachungen nicht ausreichen und weitere Vereinfachungsfunktionen erforderlich sind. Hilfreich sind hier z.B. radcan ziemlich universell, trigsimp für trigonometrische Funktionen oder exponentialize für Exponential- und trigonometrische Funktionen.

(%i1) is(equal(ev(sin(x)^2+cos(x)^2),ev(1)));
(%o1)                               unknown
(%i2) is(equal(trigsimp(sin(x)^2+cos(x)^2 -  1), 0));
(%o2)                                true

Zur Vereinfachung von Potenzen nichtnegativer Zahlen kann außerdem radexpand: all hilfreich sein

(%i2) is(equal(ev(x), ev(sqrt(x^2))));
(%o2)                               unknown
(%i3) radexpand:all$ is(equal(ev(x), ev(sqrt(x^2))));
(%o4)                                true

Für Logarithmen kann man logexpand: super setzen.

(%i1) is(equal(log(a/b), log(a) - log(b)));
(%o1)                               unknown
(%i2) logexpand:super$ is(equal(log(a/b), log(a) - log(b)));
(%o3)                                true

Diskussion: [Name der Diskussion]