I might try to write a version of these in PTX source.
But I'm stuck on how to deal with things like answer checkers.
E.g. this problem, which is Library/NAU/setLinearAlgebra/
span.pg (source
below) has two custom answer checkers.
In ptx source I want to put something like <var name="$answer" width="20"/>
but in the PG source, we have first:
$answer->ans_array(5)
and later, after END_TEXT,
ANS( $answer->cmp( checker=>~~&mycheck ) );
I think the ans_array brings in a 2x2 array of answer boxes, which I
don't think we support.
So this would probably have to be redone from scratch?
## DBsubject(Linear algebra)
## DBchapter(Abstract vector spaces)
## DBsection(Span)
## Date(10/5/2013)
## Institution(NAU)
## Author(Nandor Sieben)
## Level(2)
## MO(1)
## KEYWORDS('linear algebra','span')
DOCUMENT();
loadMacros(
 "PGstandard.pl",
 "MathObjects.pl",
 "parserMultiAnswer.pl",
 "AnswerFormatHelp.pl",
 "MatrixReduce.pl",
 "
rank.pl",
 "PGcourse.pl"
);
$showPartialCorrectAnswers = 1;
TEXT(beginproblem());
Context("Fraction");
Context() -> parens -> set ("[" => {formMatrix => 1});
{
$a11= random(-5,5,1);
$a12= random(-5,5,1);
$a22= random(-5,5,1);
$b11= random(-5,5,1);
$b12= random(-5,5,1);
$b22= random(-5,5,1);
Context() -> parens -> set ("[" => {formMatrix => 1});
$A = Matrix([[$a11,$a12],[$a12,$a22]]);
$B = Matrix([[$b11,$b12],[$b12,$b22]]);
redo if(rank(Matrix([[$a11,$a12,$a22],[$b11,$b12,$b22],[0,0,0]]))<2);
}
$answer = $A+$B;
$answer = $A-$B if (rank($answer) == 0);
{
$c1 = Compute(random(-2,2,1));
$c2 = Compute(random(-2,2,1));
$c3 = Compute(1);
Context() -> parens -> set ("[" => {formMatrix => 1});
$answer2=Matrix([[$c1,$c3],[$c3,$c2]]);
redo if (rank(Matrix([$a11,$a12,$a22],[$b11,$b12,$b22],
[$answer2->element(1,1),$answer2->element(1,2),$answer2->element(2,2)]))
== 2);
}
sub mycheck {
 my ($correct, $student, $ansHash) = @_;
 if ( ! $student->is_symmetric )
   { return 0; }
 if ( rank(Matrix($student)) == 0 )
   { return 0; }
 if (rank(Matrix([$a11,$a12,$a22],[$b11,$b12,$b22],
[$student->element(1,1),$student->element(1,2),$student->element(2,2)]))
== 2) {
   return 1;
 }
 return 0;
}
sub mycheck2 {
 my ($correct, $student, $ansHash) = @_;
 if ( ! $student->is_symmetric )
   { return 0; }
 if (rank(Matrix([$a11,$a12,$a22],[$b11,$b12,$b22],
[$student->element(1,1),$student->element(1,2),$student->element(2,2)]))==3)
{
   return 1;
 }
 return 0;
}
Context()->texStrings;
BEGIN_TEXT
Let \(V\) be the vector space of symmetric \(2\times 2\) matrices and
\(W\) be the subspace \[W=\operatorname{span}\left\{ $A,$B \right\} .\]
a. Find a nonzero element \(X\) in \( W \).
$BR
\( X = \)
\{ $answer->ans_array(5) \}
$BR
$BR
b. Find an element \(Y\) in \( V \) that is not in \( W \).
$BR
\( Y = \)
\{ $answer2->ans_array(5) \}
END_TEXT
Context()->normalStrings;
ANS( $answer->cmp( checker=>~~&mycheck ) );
ANS( $answer2->cmp( checker=>~~&mycheck2 ) );
ENDDOCUMENT();