We have some local problems that were written by summer students a couple of years ago.

One is not working properly. My problem authoring skills are minimal at the best of times, and this one appears to use a custom answer checker (possibly in Perl?).

The question asks for a non-diagonal matrix with a given determinant. If done correctly, it is marked as such. If a student enters a diagonal matrix with the requested determinant, it gets marked wrong. (Good, though it's too bad they didn't put in a feedback message pointing out what's wrong.)

The main problem: anything with the wrong determinant gets marked correct! So the only way you get this wrong is if you have a diagonal matrix with the correct determinant. Is there an easy way to modify the answer checker to verify the determinant? Here's the code:

DOCUMENT();

loadMacros(

"PGstandard.pl",

"MathObjects.pl",

# Used to provide contextual help for how to type answers.

"AnswerFormatHelp.pl",

# Provides greater control over the layout of the problem.

"PGML.pl",

# Used for course-specific initializations.

"PGcourse.pl",

);

TEXT(beginproblem());

#############################

# Setup

# Used for handling matrix problems.

Context("Matrix");

#-ULETH-#

# ans : the random value of the determinant for the question.

# M : A solution matrix used to verify a student answer or act as a solution set.

$ans = non_zero_random(-10,10,1);

$M = Matrix([

[$ans,6,1,9],

[0,1,3,4],

[0,0,1,6],

[0,0,0,1],

]);

#-ENDULETH-#

#############################

# Main text

#-ULETH-#

BEGIN_PGML

###Enter a non-diagonal 4x4 matrix with a determinant of [$ans].

[`A =`] [@ $M->ans_array(5) @]* [@ AnswerFormatHelp("matrices") @]*

END_PGML

#-ENDULETH-#

#-ULETH-#

$showPartialCorrectAnswers = 0;

ANS( $M->cmp(

checker => sub {

my ($M,$student,$ansHash) = @_;

my ($sdet)=$student->det();

return ($sdet != $ans or $student->is_symmetric ? 0 : 1);

}

));

#-ENDULETH-#

#############################

# Solution

#-ULETH-#

BEGIN_PGML_SOLUTION

SOLUTION:

One possible solution is [`A = [$M]`].

We know that the determinant of any upper triangular matrix is the product of the element along the diagonal. So by placing [`[$ans]`] anywhere on the diagonal and filling the upper half of the matrix with any numbers (since they do not effect the determinant).

END_PGML_SOLUTION

COMMENT('

Randomization provides 19 different possible versions of this question.<BR>

Includes a solution set.<BR>

Recommended Settings:<BR>

- Weight: 2<BR>

- Max attempts: Unlimited<BR>

- Show me another: -2<BR>

- Rerandomize after: Default<BR>

Made from a ULETH template.<BR>

');

#-ENDULETH-#

ENDDOCUMENT();