Difference between revisions of "ParametricEquationAnswers"

From WeBWorK_wiki
Jump to navigation Jump to search
m (3 revisions: import all default namespace pages from old wiki)
(Update documentation links)
Line 169: Line 169:
   
 
<ul>
 
<ul>
<li>POD documentation: [http://webwork.maa.org/doc/cvs/pg_CURRENT/ nameOfMacro.pl.html]</li>
+
<li>POD documentation: [http://webwork.maa.org/pod/pg_TRUNK/macros/parserMultiAnswer.pl.html parserMultiAnswer.pl.html]</li>
<li>PG macro: [http://cvs.webwork.rochester.edu/viewcvs.cgi/pg/macros/#dirlist nameOfMacro.pl]</li>
+
<li>PG macro: [http://webwork.maa.org/viewvc/system/trunk/pg/macros/parserMultiAnswer.pl?view=log parserMultiAnswer.pl]</li>
 
</ul>
 
</ul>

Revision as of 02:00, 27 November 2010

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 ≤ t ≤ pi/3 and x = cos(2t), y = sin(2t), 0 ≤ t ≤ pi/6 will be marked correct.

When evaluating student's answers, it is important not to use quotes. For example, if the code were $xstu->eval(t=>"$t1stu") with quotes, then if a student enters pi the answer checker will interpret it as the string "pi" which will need to be converted to a MathObject Real and numerical error will be introduced in the conversion. The correct code to use is $xstu->eval(t=>$t1stu) without quotes so that the answer is interpreted without a conversion that may introduce error.

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