FormattingCorrectAnswers: NumbersAndFormulas
There are a number of ways to affect the way the correct answer is displayed to the student. The interaction between eval()
, substitute()
, reduceConstants
, reduceConstantFunctions
.
Note:PGLabs is an efficient way to check code.
# Context()->flags->set(reduceConstants=>0); $f = Compute("sqrt(5^2+6x)"); $df = $f->D; $dfx = Compute( $df->eval(x=>"pi") ); displays: 0.453042
The correct answer is a number because we used eval()
instead of substitute()
.
Context()->flags->set(reduceConstants=>0); $f = Compute("sqrt(5^2+6x)"); $df = $f->D; $dfx = Compute( $df->eval(x=>"pi") ); displays: 0.453042
Clearly, reduceConstants
has no effect on eval()
.
Context()->flags->set(reduceConstants=>0); $f = Compute("sqrt(5^2+6x)"); $df = $f->D; $dfx = Compute( $df->substitute(x=>"pi") ); displays: (6*1/[2*sqrt(25+6*3.14159)])
Now, the correct answer is an unreduced Formula since substitute()
was used instead of eval()
.
#Context()->flags->set(reduceConstants=>0); $f = Compute("sqrt(5^2+6x)"); $df = $f->D; $dfx = Compute( $df->substitute(x=>"pi")); displays (0.453042)
Now the correct answer is still a formula, but the constants have been reduced since reduceConstants
has been set to 0.
Surprisingly, sqrt(constant) is also reduced in this case.
To explore this further:
Context()->flags->set(reduceConstants=>0); # Context()->flags->set(reduceConstantFunctions=>0); $f = Compute("sqrt(x)"); $df = $f->D; $dfx = Compute( $df->substitute(x=>"5") ); display (1/(2*2.23607))
The correct answer is a Formula because we used substitute()
, but the function sqrt(x)
is simplified.
Context()->flags->set(reduceConstants=>0); Context()->flags->set(reduceConstantFunctions=>0); $f = Compute("sqrt(x)"); $df = $f->D; $dfx = Compute( $df->substitute(x=>"5") ); displays (1/[2*sqrt(5)])
This time the Formula is not simplified because reduceConstantFunctions
has been set to 0.
However:
Context()->flags->set(reduceConstants=>0); # Context()->flags->set(reduceConstantFunctions=>0); $f = Compute("sqrt(5^2+6x)"); $df = $f->D; $dfx = Compute( $df->substitute(x=>"5") ); displays: (6*1/[2*sqrt(25+6*5)])
Surprisingly, this function is not reduced even though reduceConstantFunctions
is 1 (the default). This appears to be because the input to the function is complicated. This might be considered a bug.