Derive: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
 
(9 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
===Zugehörige Evaluatoren===
*'''MathEvaluator'''
===Beschreibung===
===Beschreibung===
Die Funktion ''derive'' leitet eine Funktion ab. Sie benötigt zwei Strings, den Ausdruck der abgeleitet werden soll und die Variable nach der abgeleitet werden soll. Die Funktion gibt die Ableitung zurück.
Die Funktion ''derive'' leitet eine Funktion ab. Sie benötigt zwei Strings, den Ausdruck der abgeleitet werden soll und die Variable nach der abgeleitet werden soll. Die Funktion gibt die Ableitung zurück.
Zeile 13: Zeile 16:


===Beispiele===
===Beispiele===
derive('x^2+2x+3','x')    --> returns '2x+2'
==== Standardfälle ====
 
'''Jack2:'''
derive('x^2+2x+3','y')    --> returns '0'
derive('x^2+2*x+3','x')   --> returns '2x+2'
 
====JUnit Tests====
derive('x^2+2*x+3','y')   --> returns '0'
<span class="mw-customtoggle-myDivision">[Anzeigen]</span>
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed" id="mw-customcollapsible-myDivision">
@BeforeClass
public static void beforeTest() throws FunctionNotImplementedException, UndefinedFillInVariableException,
UndefinedExerciseVariableException, ParserException, ErroneousFillInVariableException,
ErroneousExerciseVariableException {
deriveFillInVariableMap.put(1, ExpressionParser.parse("x", null, null));
deriveFillInVariableMap.put(2, ExpressionParser.parse("0.5", null, null));
 
deriveExerciseVariableMap.put("a", ExpressionParser.parse("x", null, null));
deriveExerciseVariableMap.put("b", ExpressionParser.parse("0.5", null, null));
}
 
@Test
public void testDerive1() {
assertEquals(ExpressionParser.parse("2*x", null, null),
Evaluator.evaluate("derive('x^2','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDerive2() {
assertEquals(ExpressionParser.parse("0", null, null),
Evaluator.evaluate("derive('x^2','y')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDerive3() {
assertEquals(ExpressionParser.parse("2*x+2", null, null),
Evaluator.evaluate("derive('x^2 + 2x','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDerive4() {
assertEquals(ExpressionParser.parse("x", null, null),
Evaluator.evaluate("derive('0.5*x^2','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDerive5() {
assertEquals(ExpressionParser.parse("x", null, null),
Evaluator.evaluate("derive('.5*x^2','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDerive6() {
assertEquals(ExpressionParser.parse("2*x+1", null, null),
Evaluator.evaluate("derive('x^2+x+3','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDerive7() {
OMOBJ expected = ExpressionParser.parse("2*(y^2*x)", null, null);
assertEquals(expected.getOMA(), Evaluator
.evaluate("derive('(x*y)^2','x')", deriveExerciseVariableMap, deriveFillInVariableMap).getOMA());
}
 
@Test
public void testDeriveWithInput1() {
assertEquals(ExpressionParser.parse("x", null, null),
Evaluator.evaluate("derive('0.5*x^2 + 3','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDeriveWithInput2() {
assertEquals(ExpressionParser.parse("2*x+2", null, null), Evaluator.evaluate(
"derive('[pos=1]^2 + 2*[pos=1] + 4','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDeriveWithExpressions() {
assertEquals(ExpressionParser.parse("x", null, null), Evaluator.evaluate("derive(derive('(1/6)*x^3', 'x'),'x')",
deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDeriveWithVariables1() {
assertEquals(ExpressionParser.parse("x", null, null),
Evaluator.evaluate("derive('0.5*x^2 + 3','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDeriveWithVariables2() {
assertEquals(ExpressionParser.parse("2*x+2", null, null), Evaluator.evaluate(
"derive('[var=a]^2 + 2*[var=a] + 4','x')", deriveExerciseVariableMap, deriveFillInVariableMap));
}
 
@Test
public void testDeriveWithONECharacter() {
assertEquals(ExpressionParser.parse("1", null, null),
Evaluator.evaluate("derive(a, a)", deriveExerciseVariableMap, deriveFillInVariableMap));
}


@Test(expected = FunctionInvalidArgumentTypeException.class)
'''Jack3:'''
public void testDeriveWithEmptyStringArguments() {
derive(x^2+2*x+3, x)   --> returns 2*x+2
Evaluator.evaluate("derive('', '')", deriveExerciseVariableMap, deriveFillInVariableMap);
fail();
derive(x^2+2*x+3, y)   --> returns 0
}


@Test(expected = FunctionInvalidNumberOfArgumentsException.class)
==== Benutzung mit Variablen ====
public void testDeriveWithEmptyArgument() {
derive([var=a], [var=b])
Evaluator.evaluate("derive()", deriveExerciseVariableMap, deriveFillInVariableMap);
fail();
}


@Test(expected = UndefinedExerciseVariableException.class)
==== Benutzung mit studentischen Eingaben ====
public void testDeriveWithoutExerciseVariable() {
'''Jack2:'''
Evaluator.evaluate("derive([var=j], [var=j])", deriveExerciseVariableMap, deriveFillInVariableMap);
derive([pos=1], [pos=2])
fail();
derive('x^2+2*x+3', [pos=1])
}
derive([pos=1], 'x')


@Test(expected = UndefinedFillInVariableException.class)
'''Jack3:'''
public void testDeriveWithoutInput() {
derive([input=field1], [input=field2])
Evaluator.evaluate("derive([pos=42], [pos=42])", deriveExerciseVariableMap, deriveFillInVariableMap);
derive(x^2+2*x+3, [input=field1])
fail();
derive([input=field1], x)
}
</syntaxhighlight>
derive([var=a], [pos=1])
derive([pos=1], [var=a])


===Hinweise===
===Hinweise===
* Bei der Verwendung müssen Mal-Zeichen und ähnliches immer ausgeschrieben werden.
* Wenn Variablen genutzt werden muss darauf geachtet werden, dass diese die Voraussetzung erfüllen.
* Wenn die Eingabe der Studierenden genutzt wird muss auch hier darauf geachtet werden, dass die Voraussetzungen erfüllt sind und ob diese an der Stelle genutzt werden können.
* Die Funktion ''derive'' kann z.B. mit der Funktion [[equalsExpr]] abgefragt werden:
* Die Funktion ''derive'' kann z.B. mit der Funktion [[equalsExpr]] abgefragt werden:
'''Jack2:'''
  equalsExpr(derive('x^2+x+3','x'),'2x+1')
  equalsExpr(derive('x^2+x+3','x'),'2x+1')
'''Jack3:'''
equalsExpr(derive('x^2+x+3',x),2*x+1)


[[Kategorie:Evaluatorfunktion]]
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Ausdruckfunktionen]][[Kategorie:JACK2]][[Kategorie:JACK3]]

Aktuelle Version vom 16. April 2024, 08:07 Uhr

Zugehörige Evaluatoren

  • MathEvaluator

Beschreibung

Die Funktion derive leitet eine Funktion ab. Sie benötigt zwei Strings, den Ausdruck der abgeleitet werden soll und die Variable nach der abgeleitet werden soll. Die Funktion gibt die Ableitung zurück.

Syntax

derive(Ausdruck term, Zeichen variable)

Parameter

  • term - die Funktion die abgeleitet werden soll
  • variable - die Variable nach der abgeleitet werden soll

Return Value

  • Gibt den Wert zurück, der die abgeleitete Funktion darstellt.

Beispiele

Standardfälle

Jack2:
derive('x^2+2*x+3','x')    --> returns '2x+2'

derive('x^2+2*x+3','y')    --> returns '0'
Jack3:
derive(x^2+2*x+3, x)    --> returns 2*x+2

derive(x^2+2*x+3, y)    --> returns 0

Benutzung mit Variablen

derive([var=a], [var=b])

Benutzung mit studentischen Eingaben

Jack2:
derive([pos=1], [pos=2])
derive('x^2+2*x+3', [pos=1])
derive([pos=1], 'x')
Jack3:
derive([input=field1], [input=field2])
derive(x^2+2*x+3, [input=field1])
derive([input=field1], x)

derive([var=a], [pos=1])
derive([pos=1], [var=a])

Hinweise

  • Bei der Verwendung müssen Mal-Zeichen und ähnliches immer ausgeschrieben werden.
  • Wenn Variablen genutzt werden muss darauf geachtet werden, dass diese die Voraussetzung erfüllen.
  • Wenn die Eingabe der Studierenden genutzt wird muss auch hier darauf geachtet werden, dass die Voraussetzungen erfüllt sind und ob diese an der Stelle genutzt werden können.
  • Die Funktion derive kann z.B. mit der Funktion equalsExpr abgefragt werden:
Jack2:
equalsExpr(derive('x^2+x+3','x'),'2x+1')
Jack3:
equalsExpr(derive('x^2+x+3',x),2*x+1)