WeBWorK Problems

Spontaneous answer reduction

Spontaneous answer reduction

by Olivia Henders -
Number of replies: 2
What determines whether or not an answer gets reduced when it's displayed? In one problem (shown below), the answer displays as a "full" equation (no simplification), where in others, the answer gets simplified down to a single number. I know that using the reduce function can at least play a part in this, but I'm not using it anywhere. In fact, using it on the answer in the below example doesn't even change the answer, despite there being a coefficient of 1 in one place.


## DESCRIPTION
##
## ENDDESCRIPTION
## DBsubject()
## DBchapter()
## DBsection()

#############################################
# Initialization
DOCUMENT();
loadMacros(
 "PGstandard.pl",
 "MathObjects.pl",
 # Needed to support graph generation.
 "PGgraphmacros.pl",
 "unionTables.pl",
 # Used to provide contextual help for how to type answers.
 "AnswerFormatHelp.pl",
 # Provides greater control over the layout of the problem.
 "PGML.pl",
 # Used for course-specific initializations.
 "PGcourse.pl",
);
TEXT(beginproblem());
# Refreshes the graph image every time the page is loaded, as opposed to
# retrieving a cached version.
$refreshCachedImages = 1;
#############################
# Setup
Context("Numeric");
# Value initialization.
$a = random(0,3,1);
$f = Compute("sqrt(x)+$a");
# Graph values
$minX = -5;
$minY = -5;
$maxX = 5;
$maxY = 5;
$originX = 0;
$originY = 0;
$gridHoriz = $maxX-$minX;
$gridVert = $maxY-$minY;
$shadedMinX = 1;
$shadedMinY = 0;
$shadedMaxX = 4;
$shadedMaxY = $f->eval(x=>$shadedMaxX);
# Converts $f to LaTeX for display later.
$ftex = $f->TeX;
# Calculates the value for the answer.
$answer = Compute("(2/3) * (4^(3/2) - 1) + 3*$a");
# Initialize graph at the required size.
$gr = init_graph($minX,$minY,$maxX,$maxY,grid=>[$gridHoriz,$gridVert],axes=>[$originX,$originY],size=>[300,300]);
$gr->lb('reset');
# Initializes the x-axis positive and negative number labels.
foreach my $i (1..$maxX-1) {
 $gr -> lb(new Label ( $i,-0.25, $i,'black','center','middle'));
}
foreach my $i (1..-$minX-1) {
 $gr -> lb(new Label (-$i,-0.25,-$i,'black','center','middle'));
}
# Initializes the y-axis positive and negative number labels.
foreach my $i (1..$maxY-1) {
 $gr -> lb(new Label (-0.25,$i,$i,'black','center','middle'));
}
foreach my $i (1..-$minY-1) {
 $gr -> lb(new Label (-0.25,-$i,-$i,'black','center','middle'));
}
# Define new graph colors
# Not all of these are used, but they are defined for easier use later.
$gr->new_color("skyblue", 86,180,233); # RGB
$gr->new_color("darkskyblue", 38,79,233);
$gr->new_color("orange", 230,159,0);
$gr->new_color("darkorange", 182, 58, 0);
#
# Choose colors
#
$light = "skyblue";
$dark = "darkskyblue";
# Graph the function and the filled region
add_functions($gr, "$f for x in <0,5> using color:$dark and weight:4");
$gr->moveTo(1,$a+1);

# Draws lines below function line to form boundary of shaded area.
$gr->lineTo($shadedMinX,$shadedMinY,$dark,4);
$gr->lineTo($shadedMaxX,$shadedMinY,$dark,4);
$gr->lineTo($shadedMaxX,$shadedMaxY,$dark,4);
# Fills in area that needs to be shaded.
$gr->fillRegion([$shadedMinX + 0.1, $shadedMinY + 0.1,$light]
);
#############################
# Main Text
# Defines the problem text.
# Places the following information in column1 (the leftmost) of the layout table.
$column1 = PGML::Format(<<END_PGML);
Use the graph to find the area of the shaded
region under [``f(x) = $ftex``].
Area = [______________][@ AnswerFormatHelp("numbers") @]*
END_PGML
# Places graph image in right-hand column.
$column2 = image( insertGraph($gr),height=>300,width=>300,tex_size=>800 ).
$BR.$BCENTER.
$BR.
"Graph of \( y = f(x) \)".
$ECENTER;
TEXT(ColumnTable($column1, $column2, indent => 0, separation => 30, valign => "TOP"));
#############################
# Answer Evaluation

# Setting this to 1 means that students will receive feedback on whether their
# answers are correct.
$showPartialCorrectAnswers = 1;
ANS($answer->cmp());
#############################
# Solution
BEGIN_PGML_SOLUTION
Solution explanation goes here.
END_PGML_SOLUTION
COMMENT('Uses PGML. Looks like pi.');
ENDDOCUMENT();
In reply to Olivia Henders

Re: Spontaneous answer reduction

by Gavin LaRose -

I'm not the expert on this, but here's a first stab at an explanation:

  1. When using Compute("string"), the quoted string is reported verbatim as the correct answer when answer checking. Thus, something like Compute("(2/3) * (4^(3/2) - 1) + 3*$a") will report the string (2/3)*(4^(3/2)-1)+3*[the value of $a] as the correct answer.
  2. However, if we know that the answer is a specific type (here, real), and define the answer as something like Real("(2/3) * (4^(3/2) - 1) + 3*$a"), the answer will be reported as the decimal answer.
  3. Reduce is a method available for MathObject Formulas, and does some reduction of constants, but is not a full computer algebra system. There is a wiki page on what it does here: http://webwork.maa.org/wiki/Reduction_rules_for_MathObject_Formulas.

Gavin