# EquationEvaluators

(Difference between revisions)

## 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.

PG problem file Explanation
```  loadMacros("parserImplicitEquation.pl");
```

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]}
);

\$expr = ImplicitEquation("y = (x-1)^2");
```

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.,

```  \$expr = 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.,

```  \$expr = ImplicitEquation("y = (x-1)^2",
tolerance=>0.0001);
```
```  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
```

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

```  ANS( \$expr->cmp() );
```