WeBWorK Problems

Fractional and decimal input evaluate differently

Fractional and decimal input evaluate differently

by John Curran -
Number of replies: 0
I am appending the code for the assigned problem below. I cannot find the fix.

If students enter in a correct answer involving expressions like 1/sqrt(2), they are told their answer is incorrect, but if they enter answers as explicit decimal numbers, the answer is scored as correct. (In fact, if you submit an expression-based answer, you can cut-and-paste the decimals that are displayed as the wrong answer, resubmit, and the answer scores correctly.)

The problem sets the context "Fraction." I tried to replace it with something else but there is a call to MatrixReduce.pl, which requires the Fraction context.

How can I go about treating any reasonable entries on equal footing?




##DESCRIPTION
## DBsubject(Linear algebra)
## DBchapter(Matrix factorizations)
## DBsection(Diagonalization)
## Institution(NAU)
## Author(Nandor Sieben)
## Date(11/27/2016)
## Level(3)
## MO(1)

##ENDDESCRIPTION

DOCUMENT();

loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"parserMultiAnswer.pl",
"AnswerFormatHelp.pl",
"MatrixReduce.pl",
"PGchoicemacros.pl",
"PGcourse.pl"
);

TEXT(beginproblem());

Context("Matrix");
Context("Fraction");
Context() -> parens -> set ("[" => {formMatrix => 1});
Context()->flags->set(
tolerance => 0.0001,
tolType => "absolute",
);

$showPartialCorrectAnswers = 1;

do {
$e1 = 9*non_zero_random(-2,2);
$e2 = 9*non_zero_random(-3,3);
$e3 = $e2;
} while ($e1 == $e2);

$D = Matrix([[$e1,0,0],[0,$e2,0],[0,0,$e3]]);

$I=Matrix([[1,0,0],[0,1,0],[0,0,1]]);
@values = ([2,-2,1],[1,2,2],[2,1,-2]);
@pvalues = @values [shuffle(3)];
$P = apply_fraction_to_matrix_entries(Matrix([@pvalues]))/3;
$P = $P->transpose if (random(0,1)==1);
# $P = apply_fraction_to_matrix_entries(Matrix([[2,-2,1],[1,2,2],[2,1,-2]]))/3;
# $P = Matrix([[2,-2,1],[1,2,2],[2,1,-2]])/3;
$PT = $P->transpose;

$A= $P*$D*$PT;

$multians = MultiAnswer($P, $D)->with(
singleResult => 1,
checker => sub {
my ( $correct, $student, $self ) = @_;
my @s = @{$student};
my @c = @{$correct};
$sP = Matrix($s[0]);
$sPT = $sP->transpose;
#if ($sP*$sPT != $I) {
# $self->setMessage(1,"Not orthogonal.");
# return 0;
#}

$sD = Matrix($s[1]);
if ($sD->element(1,2)!=0 or
$sD->element(1,3)!=0 or
$sD->element(2,1)!=0 or
$sD->element(2,3)!=0 or
$sD->element(3,1)!=0 or
$sD->element(3,2)!=0
) {
$self->setMessage(2,"Not diagonal.");
return 0;
}
return 0 if ($sD != $sPT*$A*$sP);
return 1;
}
);

Context()->texStrings;
BEGIN_TEXT
Let \(A = $A \). Find an orthogonal matrix \( P \) and a diagonal matrix \( D \) such that \( D = P^TAP \).

$BR

Note on terminology: an orthogonal \(P\) matrix has ortho\(normal\) columns. This ensures that \(P^{-1}=P^T\).
$BR
\(P=\) \{$multians->ans_array(5)\}, \(D=\) \{$multians->ans_array(5)\}
END_TEXT

ANS($multians->cmp());

COMMENT('Eigenvalues are small integers, lambda1 != lambda2 = lambda3 ');
ENDDOCUMENT();