DynamicImages3
Jump to navigation
Jump to search
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. |