DynamicImages3
Dynamic Graphic Images, with Filled Regions
This code snippet shows the essential PG code to check student answers that are equations. Note that these are insertions, not a complete PG file. This code will have to be incorporated into the problem file on which you are working.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros("PGbasicmacros.pl", "PGchoicemacros.pl", "PGanswermacros.pl", "PGgraphmacros.pl", "PGnumericalmacros.pl", "extraAnswerEvaluators.pl", "weightedGrader.pl" ); TEXT(beginproblem()); install_weighted_grader(); $showPartialCorrectAnswers = 1; |
Initialization:
To do ..(what you are doing)........., we don't have to change the
tagging and documentation section of the problem file.
In the initialization section, we need to include the macros file |
# Construct a graph for the left endpoint Riemann sum, # define the function to be graphed, and add it to the graph $graphL = init_graph(-1,-1,9,9,ticks=>[10,10],axes=>[0,0],pixels=>[400,400]); $c = random(8,12,1); # a constant for scaling the function $f = FEQ("x**2/$c for x in <-1,9> using color:blue and weight:2"); $ftex = "\frac{x^2}{$c}"; # the parentheses around $fRefL are necessary ($fRefL) = plot_functions( $graphL, $f ); # Generate arrays of x and y values for the Riemann sum. # There are n+1 entries in each array so that we can use # only one pair of arrays for both the left and the right # endpoint Riemann sums. $a = random(2,4,1); # left endpoint of interval $b = $a+4; # right endpoint of interval $n = 8; # number of rectangles $deltax = ($b - $a)/$n; foreach $k (0..$n) { $x[$k] = $a + $k * $deltax; } foreach $k (0..$n) { $y[$k] = &{$fRefL->rule}($x[$k]); } # Graph the left endpoint Riemann sum $lightblue = $graphL->im->colorAllocate(148,201,255); $darkblue = $graphL->im->colorAllocate(100,100,255); # Create arrays of pixel references for x and y values foreach $k (0..8) { $xpixL[$k] = $graphL->ii($x[$k]); $ypixL[$k] = $graphL->jj($y[$k]); } $xaxisL = $graphL->jj(0); # Plot the rectangles in the Riemann sum foreach $k (0..$n-1) { $graphL->im->filledRectangle($xpixL[$k],$ypixL[$k],$xpixL[$k+1],$xaxisL,$lightblue); $graphL->im->rectangle($xpixL[$k],$ypixL[$k],$xpixL[$k+1],$xaxisL,$darkblue); } $graphL->lb(new Label ( 8.5,0,'x','black','right','top')); $graphL->lb(new Label ( -0.25,8.5,'y','black','right','top')); # Construct a graph for the right endpoint Riemann sum $graphR = init_graph(-1,-1,9,9,ticks=>[10,10],axes=>[0,0],pixels=>[400,400]); # the parentheses around $fRefR are necessary ($fRefR) = plot_functions( $graphR, $f ); # Graph the right endpoint Riemann sum $lightblue = $graphR->im->colorAllocate(148,201,255); $darkblue = $graphR->im->colorAllocate(100,100,255); # Create arrays of pixel references for x and y values foreach $k (0..8) { $xpixR[$k] = $graphR->ii($x[$k]); $ypixR[$k] = $graphR->jj($y[$k]); } $xaxisR = $graphR->jj(0); # Plot the rectangles in the Riemann sum foreach $k (1..$n) { $graphR->im->filledRectangle($xpixR[$k-1],$ypixR[$k],$xpixR[$k],$xaxisR,$lightblue); $graphR->im->rectangle($xpixR[$k-1],$ypixR[$k],$xpixR[$k],$xaxisR,$darkblue); } $graphR->lb(new Label ( 8.5,0,'x','black','right','top')); $graphR->lb(new Label ( -0.25,8.5,'y','black','right','top')); |
Setup:
We specify that the Context should be Notes: on using this and related Contexts. |
BEGIN_TEXT The rectangles in the graph below illustrate a left endpoint Riemann sum for \( \displaystyle f(x) = $ftex \) on the interval \( \lbrack $a, $b \rbrack \). $BR The value of this left endpoint Riemann sum is \{NAMED_ANS_RULE('optional1',30)\}, and this Riemann sum is an \{ NAMED_POP_UP_LIST('optional2',['?','overestimate of','equal to','underestimate of','there is ambiguity']) \} the area of the region enclosed by \(\displaystyle y = f(x) \), the x-axis, and the vertical lines x = $a and x = $b. $BR $BR $BCENTER \{ begintable(1) \} \{ row( image( insertGraph($graphL), height=>400, width=>400, tex_size=>800 ) ) \} \{ row("Left endpoint Riemann sum for \( y = $ftex \) on \( \lbrack $a, $b \rbrack \)") \} \{ endtable() \} $ECENTER $BR $HR $BR The rectangles in the graph below illustrate a right endpoint Riemann sum for \( \displaystyle f(x) = $ftex \) on the interval \( \lbrack $a, $b \rbrack \). $BR The value of this right endpoint Riemann sum is \{NAMED_ANS_RULE('optional3',30)\}, and this Riemann sum is an \{ NAMED_POP_UP_LIST('optional4',['?','overestimate of','equal to','underestimate of','there is ambiguity']) \} the area of the region enclosed by \(\displaystyle y = f(x) \), the x-axis, and the vertical lines x = $a and x = $b. $BR $BR $BCENTER \{ begintable(1) \} \{ row( image( insertGraph($graphR), height=>400, width=>400, tex_size=>800 ) ) \} \{ row("Right endpoint Riemann sum for \( y = $ftex \) on \( \lbrack $a, $b \rbrack \)") \} \{ endtable() \} $ECENTER END_TEXT |
Main Text: The problem text section of the file is as we'd expect. |
$LeftRiemannSum = 0; foreach $k (0..$n-1) { $LeftRiemannSum = $LeftRiemannSum + $y[$k]; } $LeftRiemannSum = $deltax * $LeftRiemannSum; NAMED_WEIGHTED_ANS('optional1',num_cmp($LeftRiemannSum),45); NAMED_WEIGHTED_ANS('optional2',str_cmp("underestimate of"),5); $RightRiemannSum = 0; foreach $k (1..$n) { $RightRiemannSum = $RightRiemannSum + $y[$k]; } $RightRiemannSum = $deltax * $RightRiemannSum; NAMED_WEIGHTED_ANS('optional3',num_cmp($RightRiemannSum),45); NAMED_WEIGHTED_ANS('optional4',str_cmp("overestimate of"),5); ENDDOCUMENT(); |
Answer Evaluation: As is the answer. |