Difference between revisions of "ParametricLineAnswers"

From WeBWorK_wiki
Jump to navigation Jump to search
(New page: <h2>Parametric Lines as Answers</h2> <!-- Header for these sections -- no modification needed --> <p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> <em>This sho...)
 
(Removing all content from page)
Line 1: Line 1:
<h2>Parametric Lines as Answers</h2>
 
 
<!-- Header for these sections -- no modification needed -->
 
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
 
<em>This shows the PG code to check student answers that are vectors whose components are formulas.</em>
 
</p>
 
<ul>
 
<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 segment where the student chooses the parametrization and the starting and ending times</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>
 
 
 
 
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
 
<em><b>Example 1:</b> A vector parametric line where the student chooses the parametrization</em>
 
</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",
 
"parserVectorUtils.pl",
 
"parserParametricLine.pl",
 
"PGcourse.pl",
 
);
 
TEXT(beginproblem());
 
</pre>
 
</td>
 
<td style="background-color:#ccffcc;padding:7px;">
 
<p>
 
<b>Initialization:</b>
 
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 <code>parserParametricLine.pl</code>.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Setup section -->
 
 
<tr valign="top">
 
<td style="background-color:#ffffdd;border:black 1px dashed;">
 
<pre>
 
Context("Vector");
 
Context()->variables->are(t=>"Real");
 
 
$P = non_zero_point3D();
 
$disp = non_zero_vector3D();
 
$Q = Point($P + $disp);
 
</pre>
 
</td>
 
<td style="background-color:#ffffcc;padding:7px;">
 
<p>
 
<b>Setup:</b>
 
We randomize two points in three-dimensional space, P and Q, a displacement vector between them, and a speed to travel between them.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Question text section -->
 
 
<tr valign="top">
 
<td style="background-color:#ffdddd;border:black 1px dashed;">
 
<pre>
 
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;
 
</pre>
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<b>Main Text:</b>
 
The problem text section of the file is as we'd expect.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Answer section -->
 
 
<tr valign="top">
 
<td style="background-color:#eeddff;border:black 1px dashed;">
 
<pre>
 
$showPartialCorrectAnswers = 1;
 
 
ANS( ParametricLine("$P + t * $disp")->cmp() );
 
 
ENDDOCUMENT();
 
</pre>
 
<td style="background-color:#eeccff;padding:7px;">
 
<p>
 
<b>Answer Evaluation:</b>
 
The answer can be any vector parametric line through the points P and Q, so we use <code>ParametricLine("$P + t * $disp")</code> provided by <code>parserParametricLine.pl</code> to allow student answers that use a different parametrization, such as <code>$Q - 2*t * $disp</code>, to be marked correct.
 
</p>
 
</td>
 
</tr>
 
</table>
 
 
<p style="text-align:center;">
 
[[IndexOfProblemTechniques|Problem Techniques Index]]
 
</p>
 
 
[[Category:Problem Techniques]]
 
 
 
 
 
 
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
 
<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 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",
 
"parserVectorUtils.pl",
 
"parserParametricLine.pl",
 
"parserMultiAnswer.pl",
 
"PGcourse.pl",
 
);
 
TEXT(beginproblem());
 
</pre>
 
</td>
 
<td style="background-color:#ccffcc;padding:7px;">
 
<p>
 
<b>Initialization:</b>
 
The first three macros should always be loaded for questions whose answers are vector valued functions.
 
We need to load <code>parserParametricLine.pl</code> and <code>parserMultiAnswer.pl</code> since we will want to evaluate the student's answer at the starting and ending times provided by the student.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Setup section -->
 
 
<tr valign="top">
 
<td style="background-color:#ffffdd;border:black 1px dashed;">
 
<pre>
 
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];
 
}
 
 
}
 
);
 
</pre>
 
</td>
 
<td style="background-color:#ffffcc;padding:7px;">
 
<p>
 
<b>Setup:</b>
 
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>
 
</td>
 
</tr>
 
 
<!-- Question text section -->
 
 
<tr valign="top">
 
<td style="background-color:#ffdddd;border:black 1px dashed;">
 
<pre>
 
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;
 
</pre>
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<b>Main Text:</b>
 
The problem text section of the file is as we'd expect.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Answer section -->
 
 
<tr valign="top">
 
<td style="background-color:#eeddff;border:black 1px dashed;">
 
<pre>
 
$showPartialCorrectAnswers = 1;
 
 
ANS( $multians->cmp() );
 
 
ENDDOCUMENT();
 
</pre>
 
<td style="background-color:#eeccff;padding:7px;">
 
<p>
 
<b>Answer Evaluation:</b>
 
This part is easy since we defined <code>$multians</code> above.
 
</p>
 
</td>
 
</tr>
 
</table>
 
 
<p style="text-align:center;">
 
[[IndexOfProblemTechniques|Problem Techniques Index]]
 
</p>
 
 
[[Category:Problem Techniques]]
 
 
 
 
 
 
 
 
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;">
 
<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 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",
 
"parserVectorUtils.pl",
 
"answerCustom.pl",
 
"PGcourse.pl",
 
);
 
TEXT(beginproblem());
 
</pre>
 
</td>
 
<td style="background-color:#ccffcc;padding:7px;">
 
<p>
 
<b>Initialization:</b>
 
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.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Setup section -->
 
 
<tr valign="top">
 
<td style="background-color:#ffffdd;border:black 1px dashed;">
 
<pre>
 
Context("Vector");
 
Context()->variables->are(t=>"Real");
 
 
$P = non_zero_point3D();
 
$disp = non_zero_vector3D();
 
$Q = Point($P + $disp);
 
$speed = random(3,9,1);
 
</pre>
 
</td>
 
<td style="background-color:#ffffcc;padding:7px;">
 
<p>
 
<b>Setup:</b>
 
We randomize two points in three-dimensional space, P and Q, a displacement vector between them, and a speed to travel between them.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Question text section -->
 
 
<tr valign="top">
 
<td style="background-color:#ffdddd;border:black 1px dashed;">
 
<pre>
 
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;
 
</pre>
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<b>Main Text:</b>
 
The problem text section of the file is as we'd expect.
 
</p>
 
</td>
 
</tr>
 
 
<!-- Answer section -->
 
 
<tr valign="top">
 
<td style="background-color:#eeddff;border:black 1px dashed;">
 
<pre>
 
$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( custom_cmp( $r, ~~&mycheck, showCoordinateHints=>1 ) );
 
 
ENDDOCUMENT();
 
</pre>
 
<td style="background-color:#eeccff;padding:7px;">
 
<p>
 
<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.
 
</p>
 
<p>
 
For more on custom answer evaluators, see [http://webwork.maa.org/wiki/CustomAnswerCheckers CustomAnswerCheckers] and
 
[http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/answerCustom.pl.html answerCustom.pl.html]
 
</p>
 
</td>
 
</tr>
 
</table>
 
 
<p style="text-align:center;">
 
[[IndexOfProblemTechniques|Problem Techniques Index]]
 
</p>
 
 
[[Category:Problem Techniques]]
 
 
 
 
 
 
 
<ul>
 
<li>POD documentation: [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserParametricLine.pl.html parserParametricLine.pl.html]</li>
 
<li>PG macro: [http://cvs.webwork.rochester.edu/viewcvs.cgi/pg/macros/parserParametricLine.pl parserParametricLine.pl]</li>
 
</ul>
 
 
 
 
<ul>
 
<li>POD documentation: [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/answerCustom.pl.html answerCustom.pl.html]</li>
 
<li>PG macro: [http://cvs.webwork.rochester.edu/viewcvs.cgi/pg/macros/answerCustom.pl answerCustom.pl]</li>
 
</ul>
 

Revision as of 21:22, 5 March 2010