## WeBWorK Problems

### 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();