Difference between revisions of "VectorValuedFunctions"
Line 7: | Line 7: | ||
</p> |
</p> |
||
<ul> |
<ul> |
||
− | <li>Example 1: Vector |
+ | <li><b>Example 1:</b> Vector parametric line without endpoints where student chooses parametrization</li> |
+ | <li><b>Example 2:</b> Vector parametric line with endpoints where student chooses parametrization and endpoints</li> |
||
+ | <li><b>Example 3:</b> Vector parametric line with endpoints where student must enter a particular parametrization and endpoints</li> |
||
</ul> |
</ul> |
||
+ | |||
<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> Vector |
+ | <em><b>Example 1:</b> Vector parametric line without endpoints where student chooses parametrization</em> |
</p> |
</p> |
||
Line 38: | Line 39: | ||
"parserVectorUtils.pl", |
"parserVectorUtils.pl", |
||
"parserParametricLine.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); |
||
+ | $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 |
||
+ | Find a vector parametric equation for the |
||
+ | line through points \( P = $P \) and \( Q = $Q \). |
||
+ | $BR |
||
+ | \( L(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> Vector parametric line with endpoints where student chooses parametrization and endpoints</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 endpoints provided by the student. |
||
+ | </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 between the points \(P = $P\) |
||
+ | and \(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> Vector parametric line with endpoints where student must enter a particular parametrization and endpoints</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", |
"answerCustom.pl", |
||
"PGcourse.pl", |
"PGcourse.pl", |
||
Line 48: | 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 |
+ | 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> |
</p> |
||
</td> |
</td> |
||
Line 89: | Line 363: | ||
$BR |
$BR |
||
$BR |
$BR |
||
− | + | Find the vector parametric equation |
|
− | 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. |
for the position of the object. |
||
$BR |
$BR |
||
Line 110: | Line 384: | ||
<pre> |
<pre> |
||
$showPartialCorrectAnswers = 1; |
$showPartialCorrectAnswers = 1; |
||
− | |||
− | ANS( ParametricLine("$P + t * $disp")->cmp() ); |
||
# for checking a particular vector parametric line |
# for checking a particular vector parametric line |
||
Line 135: | Line 407: | ||
<p> |
<p> |
||
<b>Answer Evaluation:</b> |
<b>Answer Evaluation:</b> |
||
− | The answer to part (a) 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. |
||
+ | 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> |
||
− | In part (b) of the question, 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> |
||
<p> |
<p> |
||
Line 153: | Line 422: | ||
[[Category:Problem Techniques]] |
[[Category:Problem Techniques]] |
||
+ | |||
+ | |||
+ | |||
+ | |||
Revision as of 19:53, 5 March 2010
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 line without endpoints where student chooses parametrization
- Example 2: Vector parametric line with endpoints where student chooses parametrization and endpoints
- Example 3: Vector parametric line with endpoints where student must enter a particular parametrization and endpoints
Example 1: Vector parametric line without endpoints where student chooses parametrization
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 |
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 Find a vector parametric equation for the line through points \( P = $P \) and \( Q = $Q \). $BR \( L(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 |
Example 2: Vector parametric line with endpoints where student chooses parametrization and endpoints
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 |
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 endpoints provided by the student. |
Context()->texStrings; BEGIN_TEXT Find a vector parametric equation for the line segment between the points \(P = $P\) and \(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 |
Example 3: Vector parametric line with endpoints where student must enter a particular parametrization and endpoints
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "parserVectorUtils.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 specific vector parametric line (part (b) in the question below) we need to load |
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( custom_cmp( $r, ~~&mycheck, showCoordinateHints=>1 ) ); 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 For more on custom answer evaluators, see CustomAnswerCheckers and answerCustom.pl.html |
- POD documentation: parserParametricLine.pl.html
- PG macro: parserParametricLine.pl
- POD documentation: answerCustom.pl.html
- PG macro: answerCustom.pl