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