ParametricEquationAnswers

From WeBWorK_wiki
Revision as of 17:01, 23 April 2010 by Pearson (talk | contribs) (New page: <h2>Parametric Equations</h2> <!-- Header for these sections -- no modification needed --> <p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> <em>This PG code sh...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Parametric Equations


This PG code shows how to check student answers that are parametric equations.

Problem Techniques Index

PG problem file Explanation
DOCUMENT();      
loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"parserMultiAnswer.pl",
);
TEXT(beginproblem());

Initialization: We need to include the macros file parserMultiAnswer.pl.

Context("Numeric");
Context()->variables->are(t=>"Real");
Context()->variables->set(t=>{limits=>[-5,5]});

$x = Formula("cos(t)");
$y = Formula("sin(t)");
$t0 = Compute("0");
$t1 = Compute("pi/3");

($x0,$y0) = (1,0);
($x1,$y1) = (1/2,sqrt(3)/2);

$multians = MultiAnswer($x, $y, $t0, $t1)->with(
  singleResult => 0,
  checker => sub {
      my ( $correct, $student, $self ) = @_;
      my ( $xstu, $ystu, $t0stu, $t1stu ) = @{$student};
      if ( 
           ( ($xstu**2 + $ystu**2) == 1 )  &&
           ( ($xstu->eval(t=>$t0stu)) == $x0 ) &&
           ( ($ystu->eval(t=>$t0stu)) == $y0 ) &&
           ( ($xstu->eval(t=>$t1stu)) == $x1 ) &&
           ( ($ystu->eval(t=>$t1stu)) == $y1 )
         ) {
            return [1,1,1,1];

      } elsif (
           ( ($xstu**2 + $ystu**2) == 1 )  &&
           ( ($xstu->eval(t=>$t0stu)) == $x0 ) &&
           ( ($ystu->eval(t=>$t0stu)) == $y0 ) 
         ) { 
            return [1,1,1,0];

      } elsif (
           ( ($xstu**2 + $ystu**2) == 1 )  &&
           ( ($xstu->eval(t=>$t1stu)) == $x1 ) &&
           ( ($ystu->eval(t=>$t1stu)) == $y1 )
         ) { 
            return [1,1,0,1];

      } elsif (
           ( ($xstu**2 + $ystu**2) == 1 ) 
         ) { 
            return [1,1,0,0];

      } else {
            return [0,0,0,0];
      }
  }
);

Setup: We use a MultiAnswer() answer checker that will verify that the students answers satisfy the equation for the circle and have the required starting and ending points. This answer checker will allow students to enter any correct parametrization. For example, both x = cos(t), y = sin(t), 0 &lte; t &lte; pi/3 and x = cos(2t), y = sin(2t), 0 &lte; t &lte; pi/6 will be marked correct.

Context()->texStrings;
BEGIN_TEXT
Find a parametrization of the unit circle from
the point \( \big(1,0\big) \) to 
\( \big(\frac{1}{2},\frac{\sqrt{3}}{2}\big) \).  
Use \( t \) as the parameter for your answers.
$BR
$BR
\( x(t) = \) \{$multians->ans_rule(30)\}
$BR
\( y(t) = \) \{$multians->ans_rule(30)\}
$BR
$BR
for 
\{ $multians->ans_rule(5) \} 
\( \leq t \leq \)
\{ $multians->ans_rule(5) \}
END_TEXT
Context()->normalStrings;

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

$showPartialCorrectAnswers = 1;

ANS( $multians->cmp() );

ENDDOCUMENT();

Answer Evaluation: As is the answer.

Problem Techniques Index