FactoringAndExpanding: Difference between revisions
m (FactoredAnswers moved to FactoringAndExpanding) |
No edit summary |
||
Line 1: | Line 1: | ||
<h2> | <h2>Factoring and Expanding in Student Answers</h2> | ||
<!-- Header for these sections -- no modification needed --> | <!-- Header for these sections -- no modification needed --> | ||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> | <p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> | ||
<em>This is the PG code to check answers that require students to factor | <em>This is the PG code to check answers that require students to factor or expand a polynomial expression.</em> | ||
</p> | </p> | ||
<ul type="square"> | |||
<li><b>Example 1:</b> (Recommended) Using the LimitedPowers context for factoring and the LimitedPolynomial context for expanding.</li> | |||
<li><b>Example 2:</b> Using adaptive parameters and a MultiAnswer for factoring and the LimitedPolynomial context for expanding.</li> | |||
</ul> | |||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> | |||
<b>Example 1:</b> (Recommended) Using the LimitedPowers context for factoring and the LimitedPolynomial context for expanding. | |||
</p> | |||
<p style="text-align:center;"> | |||
[[IndexOfProblemTechniques|Problem Techniques Index]] | |||
</p> | |||
<table cellspacing="0" cellpadding="2" border="0"> | |||
<tr valign="top"> | |||
<th> PG problem file </th> | |||
<th> Explanation </th> | |||
</tr> | |||
<!-- Load specialized macro files section --> | |||
<tr valign="top"> | |||
<td style="background-color:#ddffdd;border:black 1px dashed;"> | |||
<pre> | |||
DOCUMENT(); | |||
loadMacros( | |||
"PGstandard.pl", | |||
"MathObjects.pl", | |||
"contextLimitedPolynomial.pl", | |||
"contextLimitedPowers.pl", | |||
); | |||
TEXT(beginproblem()); | |||
</pre> | |||
</td> | |||
<td style="background-color:#ccffcc;padding:7px;"> | |||
<p> | |||
<b>Initialization:</b> | |||
We need all of these macros. | |||
</p> | |||
</td> | |||
</tr> | |||
<!-- Setup section --> | |||
<tr valign="top"> | |||
<td style="background-color:#ffffdd;border:black 1px dashed;"> | |||
<pre> | |||
Context("LimitedPolynomial-Strict"); | |||
# | |||
# vertex form of quadratic | |||
# | |||
$n = list_random(4,6); | |||
$a = random(2,4,1); | |||
$b = ($a+$n); | |||
$h = $n/2; | |||
$k = $h**2+$a*$b; | |||
$vertexform = Compute("(x-$h)^2-$k"); | |||
# | |||
# standard form of quadratic | |||
# | |||
$p[0] = $h**2 - $k; | |||
$p[1] = 2*$h; | |||
$standardform = Compute("x^2 - $p[1] x + $p[0]"); | |||
# | |||
# factored form of quadratic | |||
# | |||
Context("Numeric"); | |||
LimitedPowers::OnlyIntegers( | |||
minPower => 0, maxPower => 1, | |||
message => "either 0 or 1", | |||
); | |||
$factoredform = Compute("(x+$a)(x-$b)"); | |||
</pre> | |||
</td> | |||
<td style="background-color:#ffffcc;padding:7px;"> | |||
<p> | |||
<b>Setup:</b> | |||
To construct this quadratic, we choose a nice factored form <code>(x+$a)(x-$b)</code> and from this we construct its vertex form (a(x-h)^2+k) and standard form (ax^2+bx+c). For the expanded form we change to the <code>LimitedPolynomial-Strict</code> context, construct the coefficients <code>$p[0]</code> and <code>$p[1]</code> as Perl reals, and then construct <code>$standardform</code> using these pre-computed coefficients. This is because the LimitedPolynomial-Strict context balks at answers that are not already simplified completely. For the factored form we have restricted the allowed powers to either 0 or 1 using the <code>LimitedPowers::OnlyIntegers</code> block of code. | |||
</p> | |||
</td> | |||
</tr> | |||
<!-- Question text section --> | |||
<tr valign="top"> | |||
<td style="background-color:#ffdddd;border:black 1px dashed;"> | |||
<pre> | |||
Context()->texStrings; | |||
BEGIN_TEXT | |||
The quadratic expression \( $vertexform \) | |||
is written in vertex form. | |||
$BR | |||
$BR | |||
(a) Write the expression in standard form | |||
\( ax^2 + bx + c \). | |||
$BR | |||
\{ ans_rule(30) \} | |||
$BR | |||
$BR | |||
(a) Write the expression in factored form | |||
\( k(ax+b)(cx+d) \). | |||
$BR | |||
\{ ans_rule(30)\} | |||
END_TEXT | |||
Context()->normalStrings; | |||
</pre> | |||
<td style="background-color:#ffcccc;padding:7px;"> | |||
<p> | |||
<b>Main Text:</b> | |||
Everything here is as usual. | |||
</p> | |||
</td> | |||
</tr> | |||
<!-- Answer section --> | |||
<tr valign="top"> | |||
<td style="background-color:#eeddff;border:black 1px dashed;"> | |||
<pre> | |||
$showPartialCorrectAnswers = 1; | |||
ANS( $standardform->cmp() ); | |||
ANS( $factoredform->cmp() ); | |||
ENDDOCUMENT(); | |||
</pre> | |||
<td style="background-color:#eeccff;padding:7px;"> | |||
<p> | |||
<b>Answer Evaluation:</b> | |||
Everything is as expected. | |||
</p> | |||
</td> | |||
</tr> | |||
</table> | |||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> | |||
<b>Example 2:</b> Using adaptive parameters and a MultiAnswer for factoring and the LimitedPolynomial context for expanding. | |||
</p> | |||
<p style="text-align:center;"> | <p style="text-align:center;"> | ||
Line 108: | Line 268: | ||
<p> | <p> | ||
The <code>MultiAnswer</code> makes sure that neither factor is constant. Then, it creates a copy of the current context as a local context, and creates an adaptive parameter in this local context. The adaptive parameter will allow us to determine whether each factor in the student's answer is equal to a constant multiple of some factor of the correct answer. | The <code>MultiAnswer</code> makes sure that neither factor is constant. Then, it creates a copy of the current context as a local context, and creates an adaptive parameter in this local context. The adaptive parameter will allow us to determine whether each factor in the student's answer is equal to a constant multiple of some factor of the correct answer. | ||
</p> | |||
<p> | |||
For more details on adaptive parameters and MultiAnswer, please see [http://webwork.maa.org/wiki/AdaptiveParameters AdaptiveParameters] and [http://webwork.maa.org/wiki/MultiAnswerProblems MultiAnswerProblems]. | |||
</p> | </p> | ||
</td> | </td> |
Revision as of 04:38, 14 April 2010
Factoring and Expanding in Student Answers
This is the PG code to check answers that require students to factor or expand a polynomial expression.
- Example 1: (Recommended) Using the LimitedPowers context for factoring and the LimitedPolynomial context for expanding.
- Example 2: Using adaptive parameters and a MultiAnswer for factoring and the LimitedPolynomial context for expanding.
Example 1: (Recommended) Using the LimitedPowers context for factoring and the LimitedPolynomial context for expanding.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "contextLimitedPolynomial.pl", "contextLimitedPowers.pl", ); TEXT(beginproblem()); |
Initialization: We need all of these macros. |
Context("LimitedPolynomial-Strict"); # # vertex form of quadratic # $n = list_random(4,6); $a = random(2,4,1); $b = ($a+$n); $h = $n/2; $k = $h**2+$a*$b; $vertexform = Compute("(x-$h)^2-$k"); # # standard form of quadratic # $p[0] = $h**2 - $k; $p[1] = 2*$h; $standardform = Compute("x^2 - $p[1] x + $p[0]"); # # factored form of quadratic # Context("Numeric"); LimitedPowers::OnlyIntegers( minPower => 0, maxPower => 1, message => "either 0 or 1", ); $factoredform = Compute("(x+$a)(x-$b)"); |
Setup:
To construct this quadratic, we choose a nice factored form |
Context()->texStrings; BEGIN_TEXT The quadratic expression \( $vertexform \) is written in vertex form. $BR $BR (a) Write the expression in standard form \( ax^2 + bx + c \). $BR \{ ans_rule(30) \} $BR $BR (a) Write the expression in factored form \( k(ax+b)(cx+d) \). $BR \{ ans_rule(30)\} END_TEXT Context()->normalStrings; |
Main Text: Everything here is as usual. |
$showPartialCorrectAnswers = 1; ANS( $standardform->cmp() ); ANS( $factoredform->cmp() ); ENDDOCUMENT(); |
Answer Evaluation: Everything is as expected. |
Example 2: Using adaptive parameters and a MultiAnswer for factoring and the LimitedPolynomial context for expanding.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "parserMultiAnswer.pl", ); TEXT(beginproblem()); |
Initialization:
We need to include the |
Context("Numeric"); $fac1 = Compute("(2 x + 3)"); $fac2 = Compute("(8 x + 12)"); $multians = MultiAnswer($fac1,$fac2)->with( singleResult => 0, allowBlankAnswers => 0, # singleResult => 1, # separator => " * ", # tex_separator => " \cdot ", checker => sub { my $correct = shift; my $student = shift; my $ansHash = shift; my ($F,$G) = @{$correct}; my ($f,$g) = @{$student}; $ansHash->setMessage(1,"Neither factor can be constant") unless $f->isFormula; $ansHash->setMessage(2,"Neither factor can be constant") unless $g->isFormula; # use an adaptive parameter 'a' my $context = Context()->copy; $context->flags->set(no_parameters=>0); $context->variables->add('a'=>'Parameter'); my $a = Formula($context,'a'); $f = Formula($context,$f); $g = Formula($context,$g); $F = Formula($context,$F); $G = Formula($context,$G); if ( (($a*$F == $f) && ($F*$G == $f*$g)) || (($a*$G == $f) && ($F*$G == $f*$g)) ) { return [1,1]; } elsif (($a*$F == $f) || ($a*$G == $f)) { return [1,0]; } elsif (($a*$F == $g) || ($a*$G == $g)) { return [0,1]; } else { return [0,0]; } } ); |
Setup:
This is a standard factoring problem for a non-monic polynomial (where the leading coefficient is not 1 or -1). Since it is possible to factor
The For more details on adaptive parameters and MultiAnswer, please see AdaptiveParameters and MultiAnswerProblems. |
Context()->texStrings; BEGIN_TEXT Factor the following expression. $BR $BR \( 16 t^2 + 48 t + 36 = \big( \) \{$multians->ans_rule(10)\} \( \big) \big( \) \{$multians->ans_rule(10)\} \( \big) \) END_TEXT Context()->normalStrings; |
Main Text:
Each answer blank must be a method of the |
$showPartialCorrectAnswers = 1; install_problem_grader(~~&std_problem_grader); ANS( $multians->cmp() ); ENDDOCUMENT(); |
Answer Evaluation:
Everything is as expected. We give students feedback on whether their answers are correct by using |
- POD documentation: parserMultiAnswer.pl.html
- PG macro: parserMultiAnswer.pl