I have been trying to get an answer submitted as a list of implicit equations, (i.e. a linear system of equations).
Here's a snippet of the problem:
DOCUMENT(); # This should be the first executable line in the problem.
loadMacros("PGstandard.pl",
"MathObjects.pl",
"parserImplicitEquation.pl"
);
Context("ImplicitEquation");
# Do not show which answers are incorrect.
$showPartialCorrectAnswers = 0;
$f1=ImplicitEquation("x+y=1");
$f2=ImplicitEquation("2x+3y=3");
$ans = List($f1,$f2);
.
.
\{ans_rule(60)\}
.
ANS($ans->cmp);
However, the correct answer is not accepted. I would like either:
x+y=1,2x+3y=3
OR
2x+3y=3,x+y=1
to be accepted. The only acceptable answers seem to be
x+y-1,2x+3y-3 or 2x+3y-3,2x+3y-3
Or is there an alternative way to check for such an answer.
The ImplicitEquation object is not the best choice for this problem. It isn't as reliable as I'd like it to be, and the tolerances have to be set just right for it to work properly. See
http://webwork.maa.org/doc/cvs/pg_HEAD/macros/parserImplicitEquation.pl.htmlfor more details. It also appears that it doesn't interact well with the List object. I'll need to look into that.
You would be better off using parserImplicitPlane.pl and ImplicitPlane objects. These work in any dimension, and so in 2D they will be the implicit lines that you use in your example. Simply replace ImplictEquation by ImplicitPlane throughout and you should be in business. I did check that they work with List objects. You may also want to do
Context("ImplicitPlane")->variables->are(x=>'Real',y=>'Real');to force the context into 2D (it defaults to 3D) so that error messages will talk about implicit lines rather than implicit planes.
Davide
Thanks for pointing out this. I'm having an error running the code listed on the documentation page,
http://webwork.maa.org/doc/cvs/pg_HEAD/macros/parserImplicitPlane.pl.html
The top of the code is now:
DOCUMENT(); # This should be the first executable line in the problem.
loadMacros("PGstandard.pl",
"MathObjects.pl",
"parserImplicitPlane.pl"
);
Context("Numeric");
# Do not show which answers are incorrect.
$showPartialCorrectAnswers = 0;
Context()->variables->are(x=>'Real',y=>'Real',z=>'Real',w=>'Real');
$P = ImplicitPlane([1,0,2,-1],10); # w+2y-z = 10 (alphabetical order)
and the results are:
(line 33 is the $P= line)
http://webwork.maa.org/doc/cvs/pg_HEAD/macros/parserImplicitPlane.pl.html
The top of the code is now:
DOCUMENT(); # This should be the first executable line in the problem.
loadMacros("PGstandard.pl",
"MathObjects.pl",
"parserImplicitPlane.pl"
);
Context("Numeric");
# Do not show which answers are incorrect.
$showPartialCorrectAnswers = 0;
Context()->variables->are(x=>'Real',y=>'Real',z=>'Real',w=>'Real');
$P = ImplicitPlane([1,0,2,-1],10); # w+2y-z = 10 (alphabetical order)
and the results are:
Unexpected character '='; see position 20 of formula at line 2 of (eval 5468) Died within ImplicitPlane::new called at line 2 of (eval 5468) from within main::ImplicitPlane called at line 33 of [TMPL]/tmpEdit/FSCproblems/ch02/test.pg.pstaab.tmp
(line 33 is the $P= line)
You need to set the context to "ImplicitPlane", not "Numeric". It is the context that defines what operators are allowed, and the equal sign is not in the Numeric context.
Also, you can don't have to use the coefficients-value approach to defining the plane (though that might be easier if your coefficients are being computed randomly), and could just use
$P = ImplicitPlane("w + 2y - z = 10");if that is clearer to you. Or
($a,$b,$c,$d) = (0,2,-1,1); $P = ImplicitPlane("$a x + $b y + $c z + $d w = 10");would also work.
Davide
Thanks Davide,
This worked great.
Peter
This worked great.
Peter