Difference between revisions of "EquationEvaluators"

From WeBWorK_wiki
Jump to navigation Jump to search
m
m
Line 37: Line 37:
 
);
 
);
   
$expr = ImplicitEquation("y = (x-1)^2");
+
$eqn = ImplicitEquation("y = (x-1)^2");
 
</pre>
 
</pre>
 
</td>
 
</td>
 
<td style="background-color:#ffffcc;padding:7px;">
 
<td style="background-color:#ffffcc;padding:7px;">
 
<p>
 
<p>
  +
<b>Setup:</b>
 
In the problem set-up section of the file, we specify that the Context should be <code>ImplicitEquation</code>, and define the answer to be an equation. It's worth noting that there are a number of Context settings that may be specifying for equation answers. In particular, it's often important to pay attention to the [[FormulaTestPoints|limits used by the answer checker]].
 
In the problem set-up section of the file, we specify that the Context should be <code>ImplicitEquation</code>, and define the answer to be an equation. It's worth noting that there are a number of Context settings that may be specifying for equation answers. In particular, it's often important to pay attention to the [[FormulaTestPoints|limits used by the answer checker]].
 
</p>
 
</p>
Line 51: Line 52:
 
</p>
 
</p>
 
<pre>
 
<pre>
$expr = ImplicitEquation("y = (x-1)^2",
+
$eqn = ImplicitEquation("y = (x-1)^2",
 
solutions=&gt;[[0,0],[1,1],[-1,1],
 
solutions=&gt;[[0,0],[1,1],[-1,1],
 
[2,4],[-2,4]]);
 
[2,4],[-2,4]]);
Line 59: Line 60:
 
</p>
 
</p>
 
<pre>
 
<pre>
$expr = ImplicitEquation("y = (x-1)^2",
+
$eqn = ImplicitEquation("y = (x-1)^2",
 
tolerance=&gt;0.0001);
 
tolerance=&gt;0.0001);
 
</pre>
 
</pre>
Line 67: Line 68:
 
Context()->{error}{msg}{"Can't find any solutions to your equation"} = " ";
 
Context()->{error}{msg}{"Can't find any solutions to your equation"} = " ";
 
</pre>
 
</pre>
This will eliminate the error message (though the "messages" column will be displayed in the answer table at the top of the problem, but no message will be there). Another approach would be to use a post-filter to remove the message after the answer has been graded. The <code>answerHints.pl</code> file provides one way to do this, but it is probably just as easy to do one by hand, as in:
+
This will eliminate the error message (though the "messages" column will be displayed in the answer table at the top of the problem, but no message will be there).
<pre>
 
ANS($f->cmp->withPostFilter(sub {
 
my $ans = shift;
 
$ans->{ans_message} = "" if $ans->{ans_message} eq
 
"Can't find any solutions to your equation"; return $ans;
 
}));
 
</pre>
 
 
</p>
 
</p>
 
</td>
 
</td>
Line 84: Line 85:
 
<td style="background-color:#ffcccc;padding:7px;">
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<p>
The problem text section of the file is as we'd expect.
+
<b>Main Text:</b> The problem text section of the file is as we'd expect.
 
</p>
 
</p>
 
</td>
 
</td>
Line 91: Line 92:
 
<td style="background-color:#eeddff;border:black 1px dashed;">
 
<td style="background-color:#eeddff;border:black 1px dashed;">
 
<pre>
 
<pre>
ANS( $expr->cmp() );
+
ANS( $eqn->cmp() );
   
 
ENDDOCUMENT();
 
ENDDOCUMENT();
Line 97: Line 98:
 
<td style="background-color:#eeccff;padding:7px;">
 
<td style="background-color:#eeccff;padding:7px;">
 
<p>
 
<p>
As is the answer.
 
  +
<b>Answer Evaluation:</p>
  +
Another way to remove the error message "Can't find any solutions to your equation" would be to use a post-filter to remove the message after the answer has been graded. The <code>answerHints.pl</code> file provides one way to do this, but it is probably just as easy to do it manually, as in:
  +
<pre>
  +
ANS($eqn->cmp->withPostFilter(sub {
  +
my $ans = shift;
  +
$ans->{ans_message} = "" if $ans->{ans_message} eq
  +
"Can't find any solutions to your equation"; return $ans;
  +
}));
  +
</pre>
 
</p>
 
</p>
 
</td>
 
</td>

Revision as of 17:47, 22 January 2010

Equation Answer Evaluation: PG Code Snippet

This code snippet shows the essential PG code to check student answers that are equations. Note that these are insertions, not a complete PG file. This code will have to be incorporated into the problem file on which you are working.

Problem Techniques Index

PG problem file Explanation
DOCUMENT();
loadMacros("parserImplicitEquation.pl");
TEXT(beginproblem());

To check equations given as answers, we don't have to change the tagging and documentation section of the problem file. In the initialization section, we need to include the macros file parserImplicitEquation.pl.

Context("ImplicitEquation");
Context()->variables->set(
x=>{limits=>[-2,2]},
y=>{limits=>[0,4]}
);

$eqn = ImplicitEquation("y = (x-1)^2");

Setup: In the problem set-up section of the file, we specify that the Context should be ImplicitEquation, and define the answer to be an equation. It's worth noting that there are a number of Context settings that may be specifying for equation answers. In particular, it's often important to pay attention to the limits used by the answer checker.

By default, the ImplicitEquation context defines the variables x and y. To include other variables, it may be necessary to modify the context.

Two other notes: if it's possible that a student's solution may evaluate to true for the test points that are used in the answer checker, it may be a good idea to specify what (x,y) solution values are used to check the answer. This can be done in the ImplicitEquation initialization call, e.g.,

$eqn = ImplicitEquation("y = (x-1)^2",
solutions=>[[0,0],[1,1],[-1,1],
[2,4],[-2,4]]);

And, for this type of answer checking it is more likely than for regular formulas that the student will represent the function in a form that exceeds the default problem checking tolerances, and so be marked as incorrect. To correct this, it may be necessary to specify a tolerance; an absolute tolerance can be set in the ImplicitEquation call, e.g.,

$eqn = ImplicitEquation("y = (x-1)^2",
tolerance=>0.0001);

It is possible to remove the error message "Can't find any solutions to your equation" by remapping it to another error message. The message has to be non-empty, but it can be just a blank " ", as in

Context()->{error}{msg}{"Can't find any solutions to your equation"} = " ";

This will eliminate the error message (though the "messages" column will be displayed in the answer table at the top of the problem, but no message will be there).

BEGIN_TEXT
Give the equation of a shift of the
parabola \(y = x^2\) which is upward
opening and has its vertex at (1,0).
$PAR
equation: \{ ans_rule(35) \}
END_TEXT

Main Text: The problem text section of the file is as we'd expect.

ANS( $eqn->cmp() );

ENDDOCUMENT();

Answer Evaluation:

Another way to remove the error message "Can't find any solutions to your equation" would be to use a post-filter to remove the message after the answer has been graded. The answerHints.pl file provides one way to do this, but it is probably just as easy to do it manually, as in:

ANS($eqn->cmp->withPostFilter(sub { 
  my $ans = shift; 
  $ans->{ans_message} = "" if $ans->{ans_message} eq 
  "Can't find any solutions to your equation"; return $ans; 
}));

Problem Techniques Index