VectorValuedFunctions

From WeBWorK_wiki
Revision as of 19:26, 4 March 2010 by Pearson (talk | contribs)
Jump to navigation Jump to search

Vector Valued Functions as Answers


This shows the PG code to check student answers that are vectors whose components are formulas.

  • Example 1: Vector Parametric Lines


Example 1: Vector Parametric Lines

Problem Techniques Index

PG problem file Explanation
DOCUMENT();
loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"parserVectorUtils.pl",
"parserParametricLine.pl",
"answerCustom.pl",
"PGcourse.pl",
);
TEXT(beginproblem());

Initialization: The first three macros should always be loaded for questions whose answers are vector valued functions. For the general vector parametric line (part (a) in the question below) we need to load parserParametricLine.pl, and for the specific vector parametric line (part (b) in the question below) we need to load answerCustom.pl since we will use a custom answer checker and want to have features like showCoordinateHints enabled.

Context("Vector");
Context()->variables->are(t=>"Real");

$P = non_zero_point3D();
$disp = non_zero_vector3D();
$Q = Point($P + $disp);
$speed = random(3,9,1);

Setup: We randomize two points in three-dimensional space, P and Q, a displacement vector between them, and a speed to travel between them.

Context()->texStrings;
BEGIN_TEXT
A particle starts at the point \( P = $P \)
when \( t = 0 \) and moves along a straight line
toward \( Q = $Q \) at a speed of \( $speed \) 
cm/sec.  Assume that x, y, and z are measured
in cm.  Do not enter units with your answers.
$BR
$BR
(a) Find a vector parametric equation for the 
line through points \( P \) and \( Q \).
$BR
\( L(t) = \) \{ ans_rule(40) \}
$BR
$BR
(b) Find the vector parametric equation
for the position of the object.
$BR
\( \vec{r}(t) = \) \{ans_rule(40)\}
END_TEXT
Context()->normalStrings;

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

$showPartialCorrectAnswers = 1;


ANS( ParametricLine("$P + t * $disp")->cmp() );


sub mycheck {
  my ($correct, $student, $ansHash) = @_;

  if ( 
       ($correct . i == $student . i) && 
       ($correct . j == $student . j) && 
       ($correct . k == $student . k) 
     ) 
  { return 1; } else { return 0; }

}


#$T = Formula("$speed * t / norm($disp)");

$r = $P + $speed * t * $disp / norm($disp);

ANS( custom_cmp( $r, ~~&mycheck, showCoordinateHints=>1 ) );

ENDDOCUMENT();

Answer Evaluation: The answer to part (a) can be any vector parametric line through the points P and Q, so we use ParametricLine("$P + $T * $disp") to allow student answers that use a different parametrization to be marked correct.

For more on custom answer evaluators, see CustomAnswerCheckers and answerCustom.pl.html

Problem Techniques Index