Difference between revisions of "VectorValuedFunctions"

From WeBWorK_wiki
Jump to navigation Jump to search
(11 intermediate revisions by 2 users not shown)
Line 7: Line 7:
 
</p>
 
</p>
 
<ul>
 
<ul>
<li><b>Example 1:</b> A vector parametric line without endpoints where the student chooses the parametrization</li>
+
<li><b>Example 1:</b> A vector parametric line where the student chooses the parametrization</li>
<li><b>Example 2:</b> A vector parametric line with endpoints where the student chooses the parametrization and the endpoints</li>
+
<li><b>Example 2:</b> A vector parametric line segment where the student chooses the parametrization and the starting and ending times</li>
<li><b>Example 3:</b> A vector parametric line with endpoints where the student must enter a particular parametrization and particular endpoints</li>
+
<li><b>Example 3:</b> A vector parametric line segment where the student must enter a particular parametrization and use particular starting and ending times</li>
 
</ul>
 
</ul>
   
Line 16: Line 16:
   
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
<em><b>Example 1:</b> A vector parametric line without endpoints where the student chooses the parametrization</em>
+
<em><b>Example 1:</b> A vector parametric line where the student chooses the parametrization</em>
 
</p>
 
</p>
   
Line 66: Line 66:
 
$disp = non_zero_vector3D();
 
$disp = non_zero_vector3D();
 
$Q = Point($P + $disp);
 
$Q = Point($P + $disp);
$speed = random(3,9,1);
 
 
</pre>
 
</pre>
 
</td>
 
</td>
Line 87: Line 86:
 
line through points \( P = $P \) and \( Q = $Q \).
 
line through points \( P = $P \) and \( Q = $Q \).
 
$BR
 
$BR
\( L(t) = \) \{ ans_rule(40) \}
+
\( \vec{r}(t) = \) \{ ans_rule(40) \}
 
END_TEXT
 
END_TEXT
 
Context()->normalStrings;
 
Context()->normalStrings;
Line 131: Line 130:
   
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
<em><b>Example 2:</b> A vector parametric line with endpoints where the student chooses the parametrization and the endpoints</em>
+
<em><b>Example 2:</b> A vector parametric line segment where the student chooses the parametrization and the starting and ending times</em>
 
</p>
 
</p>
   
Line 194: Line 193:
   
 
if ( (ParametricLine("$line") == $linestu) &&
 
if ( (ParametricLine("$line") == $linestu) &&
($linestu->eval(t=>"$astu") == $line->eval(t=>"0")) &&
+
($linestu->eval(t=>$astu) == $line->eval(t=>"0")) &&
($linestu->eval(t=>"$bstu") == $line->eval(t=>"1")) )
+
($linestu->eval(t=>$bstu) == $line->eval(t=>"1")) )
 
{
 
{
 
return [1,1,1];
 
return [1,1,1];
   
 
} elsif ( (ParametricLine("$line") == $linestu) &&
 
} elsif ( (ParametricLine("$line") == $linestu) &&
($linestu->eval(t=>"$astu") == $line->eval(t=>"0")) )
+
($linestu->eval(t=>$astu) == $line->eval(t=>"0")) )
 
{
 
{
 
return [1,1,0];
 
return [1,1,0];
   
 
} elsif ( (ParametricLine("$line") == $linestu) &&
 
} elsif ( (ParametricLine("$line") == $linestu) &&
($linestu->eval(t=>"$bstu") == $line->eval(t=>"1")) )
+
($linestu->eval(t=>$bstu) == $line->eval(t=>"1")) )
 
{
 
{
 
return [1,0,1];
 
return [1,0,1];
Line 224: Line 223:
 
<p>
 
<p>
 
<b>Setup:</b>
 
<b>Setup:</b>
We create a MutiAnswer answer checker that will evaluate the students vector parametric equation at the endpoints provided by the student.
+
We create a MutiAnswer answer checker that will evaluate the students vector parametric equation at the starting and ending times provided by the student. For example, both of the student answers <code>(4,0) + t<-4,2></code> for t between 0 and 1, and <code>(4,0) + t<-2,1></code> for t between 0 and 2 will be marked correct.
 
</p>
 
</p>
 
</td>
 
</td>
Line 237: Line 236:
 
BEGIN_TEXT
 
BEGIN_TEXT
 
Find a vector parametric equation for the line
 
Find a vector parametric equation for the line
segment between the points \(P = $P\)
+
segment from the point \(P = $P\)
and \(Q = $Q\).
+
to \(Q = $Q\).
 
$BR
 
$BR
 
\( \vec{r}(t) = \)
 
\( \vec{r}(t) = \)
Line 290: Line 289:
   
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
<em><b>Example 3:</b> A vector parametric line with endpoints where the student must enter a particular parametrization and particular endpoints</em>
+
<em><b>Example 3:</b> A vector parametric line segment where the student must enter a particular parametrization and use particular starting and ending times</em>
 
</p>
 
</p>
   
Line 314: Line 313:
 
"MathObjects.pl",
 
"MathObjects.pl",
 
"parserVectorUtils.pl",
 
"parserVectorUtils.pl",
"answerCustom.pl",
 
 
"PGcourse.pl",
 
"PGcourse.pl",
 
);
 
);
Line 324: Line 322:
 
<b>Initialization:</b>
 
<b>Initialization:</b>
 
The first three macros should always be loaded for questions whose answers are vector valued functions.
 
The first three macros should always be loaded for questions whose answers are vector valued functions.
For the specific vector parametric line (part (b) in the question below) we need to load <code>answerCustom.pl</code> since we will use a custom answer checker and want to have features like <code>showCoordinateHints</code> enabled.
+
For the specific vector parametric line we will use a custom answer checker.
 
</p>
 
</p>
 
</td>
 
</td>
Line 402: Line 400:
 
$r = $P + $T * $disp;
 
$r = $P + $T * $disp;
   
ANS( custom_cmp( $r, ~~&mycheck, showCoordinateHints=>1 ) );
+
ANS( $answer->cmp( checker=>~~&mycheck ) );
   
 
ENDDOCUMENT();
 
ENDDOCUMENT();
Line 409: Line 407:
 
<p>
 
<p>
 
<b>Answer Evaluation:</b>
 
<b>Answer Evaluation:</b>
There is only one vector parametric equation that describes the position of the object subject to the given conditions, so we want only one answer to be marked correct. We create a custom answer checker <code>mycheck</code>, which is a subroutine that verifies that the student's answer agrees with the correct answer in each component by taking the dot product with the each of the vectors i, j, and k separately. We use <code>custom_cmp( $correct_ans, ~~&custom_checker, %options )</code> provided by the macro <code>answerCustom.pl</code> so that we can enable the <code>showCoordinateHints=>1</code> feature.
+
There is only one vector parametric equation that describes the position of the object subject to the given conditions, so we want only one answer to be marked correct. We create a custom answer checker <code>mycheck</code>, which is a subroutine that verifies that the student's answer agrees with the correct answer in each component by taking the dot product with the each of the vectors i, j, and k separately.
 
</p>
 
</p>
 
<p>
 
<p>
Line 424: Line 422:
   
 
[[Category:Problem Techniques]]
 
[[Category:Problem Techniques]]
 
 
   
   
Line 431: Line 427:
   
 
<ul>
 
<ul>
<li>POD documentation: [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserParametricLine.pl.html parserParametricLine.pl.html]</li>
+
<li>POD documentation: [http://webwork.maa.org/pod/pg/macros/parserParametricLine.html parserParametricLine.pl]</li>
<li>PG macro: [http://cvs.webwork.rochester.edu/viewcvs.cgi/pg/macros/parserParametricLine.pl parserParametricLine.pl]</li>
+
<li>PG macro: [http://webwork.maa.org/viewvc/system/trunk/pg/macros/parserParametricLine.pl?view=log parserParametricLine.pl]</li>
 
</ul>
 
</ul>
 
 
   
 
<ul>
 
<ul>
<li>POD documentation: [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/answerCustom.pl.html answerCustom.pl.html]</li>
+
<li>POD documentation: [http://webwork.maa.org/viewvc/system/trunk/pg/macros/answerCustom.pl?view=log answerCustom.pl.html]</li>
<li>PG macro: [http://cvs.webwork.rochester.edu/viewcvs.cgi/pg/macros/answerCustom.pl answerCustom.pl]</li>
+
<li>PG macro: [http://webwork.maa.org/pod/pg/macros/answerCustom.html answerCustom.pl]</li>
 
</ul>
 
</ul>

Revision as of 17:41, 7 April 2021

Vector Valued Functions as Answers


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

  • Example 1: A vector parametric line where the student chooses the parametrization
  • Example 2: A vector parametric line segment where the student chooses the parametrization and the starting and ending times
  • Example 3: A vector parametric line segment where the student must enter a particular parametrization and use particular starting and ending times



Example 1: A vector parametric line where the student chooses the parametrization

Problem Techniques Index

PG problem file Explanation
DOCUMENT();
loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"parserVectorUtils.pl",
"parserParametricLine.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 we need to load parserParametricLine.pl.

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

$P = non_zero_point3D();
$disp = non_zero_vector3D();
$Q = Point($P + $disp);

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
Find a vector parametric equation for the 
line through points \( P = $P \) and \( Q = $Q \).
$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() );

ENDDOCUMENT();

Answer Evaluation: The answer can be any vector parametric line through the points P and Q, so we use ParametricLine("$P + t * $disp") provided by parserParametricLine.pl to allow student answers that use a different parametrization, such as $Q - 2*t * $disp, to be marked correct.

Problem Techniques Index




Example 2: A vector parametric line segment where the student chooses the parametrization and the starting and ending times

Problem Techniques Index

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

Initialization: The first three macros should always be loaded for questions whose answers are vector valued functions. We need to load parserParametricLine.pl and parserMultiAnswer.pl since we will want to evaluate the student's answer at the starting and ending times provided by the student.

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

$P = Point(4,0);
$Q = Point(0,2);
$V = Vector(-4,2);

$t = Formula("t");
$line = Vector("$P + $t * $V");

$multians = MultiAnswer( $line, Real("0"), Real("1") )->with(
  singleResult => 0,
  checker => sub {
    my ( $correct, $student, $ansHash ) = @_;
    my ( $linestu, $astu, $bstu ) = @{$student};
    my ( $linecor, $acor, $bcor ) = @{$correct};

    if ( (ParametricLine("$line") == $linestu) &&
         ($linestu->eval(t=>$astu) == $line->eval(t=>"0")) &&
         ($linestu->eval(t=>$bstu) == $line->eval(t=>"1")) ) 
    {  
       return [1,1,1]; 

    } elsif ( (ParametricLine("$line") == $linestu) &&
              ($linestu->eval(t=>$astu) == $line->eval(t=>"0")) )
    {  
       return [1,1,0]; 

    } elsif ( (ParametricLine("$line") == $linestu) &&
              ($linestu->eval(t=>$bstu) == $line->eval(t=>"1")) )
    {  
       return [1,0,1]; 

    } elsif ( (ParametricLine("$line") == $linestu) )
    {
        return [1,0,0];

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

  }
);

Setup: We create a MutiAnswer answer checker that will evaluate the students vector parametric equation at the starting and ending times provided by the student. For example, both of the student answers (4,0) + t<-4,2> for t between 0 and 1, and (4,0) + t<-2,1> for t between 0 and 2 will be marked correct.

Context()->texStrings;
BEGIN_TEXT
Find a vector parametric equation for the line 
segment from the point \(P = $P\) 
to \(Q = $Q\).  
$BR
\( \vec{r}(t) = \) 
\{ $multians->ans_rule(40 )\}
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: This part is easy since we defined $multians above.

Problem Techniques Index




Example 3: A vector parametric line segment where the student must enter a particular parametrization and use particular starting and ending times

Problem Techniques Index

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

Initialization: The first three macros should always be loaded for questions whose answers are vector valued functions. For the specific vector parametric line we will use a custom answer checker.

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
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;

#  for checking a particular vector parametric line
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 + $T * $disp;

ANS( $answer->cmp( checker=>~~&mycheck ) );

ENDDOCUMENT();

Answer Evaluation: There is only one vector parametric equation that describes the position of the object subject to the given conditions, so we want only one answer to be marked correct. We create a custom answer checker mycheck, which is a subroutine that verifies that the student's answer agrees with the correct answer in each component by taking the dot product with the each of the vectors i, j, and k separately.

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

Problem Techniques Index