SimplifiedSquareRoots
Jump to navigation
Jump to search
Simplified Square Roots in Student Answers
This PG code shows how to require student answers to be completely reduced square roots.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "contextLimitedPowers.pl" ); TEXT(beginproblem()); |
Initialization:
We need to include the macros file |
########################### # # Subclass the numeric functions # package my::Function::numeric; our @ISA = ('Parser::Function::numeric'); # # Override sqrt() to return a special value (usually 1) when evaluated # effectively eliminating it from the product. # sub sqrt { my $self = shift; my $value = $self->context->flag("setSqrt"); return $value+1 if $value && $_[0] == 1; # force sqrt(1) to be incorrect return $value if $value; return $self->SUPER::sqrt(@_); } # # end of subclass # package main; ########################### Context("Numeric")->variables->are( x => ["Real", limits => [0,2]], # only needed if x is used in the square roots ); # # make sqrt() use our subclass # Context()->functions->set(sqrt=>{class=>'my::Function::numeric'}); Context()->flags->set(reduceConstantFunctions=>0); # # Don't allow fractional powers (avoids 1/2 power) # [Could subclass exponentiation to handle that as well] # LimitedPowers::OnlyPositiveIntegers(); $expr = "\sqrt{12 x^2}"; $f = Compute("x*sqrt(6)"); |
Setup: This code is from Davide Cervone (4/25/10). See the discussion simplifying radical expressions for more information. |
BEGIN_TEXT Simplify \( $expr \) assuming that \( x \geq 0 \). Do not enter fractional exponents. $BR $BR \( $expr \) = \{ans_rule(20)\} END_TEXT |
Main Text: The problem text section of the file is as we'd expect. |
$showPartialCorrectAnswers = 1; ANS( $f-> cmp( checker => sub { my ($correct,$student,$ans) = @_; return 0 if $ans->{isPreview} || $correct != $student; # # Get parsed formula for student and correct answers # $student = $ans->{student_formula}; $correct = $correct->{original_formula} if defined $correct->{original_formula}; # # check if equal when sqrt's are replaced by 1 # Context()->flags->set(setSqrt => 1); delete $correct->{test_values}, $student->{test_values}; my $OK = ($correct == $student); Context()->flags->set(setSqrt => 0); # Value::Error("Check to see if your answer is simplified.") unless $OK; return $OK; }, formatStudentAnswer=>"reduced" ) ); ENDDOCUMENT(); |
Answer Evaluation: Use a custom checker to check that the answers are equivalent and that they are still equivalent when sqrt() is replaced by 1 (so the stuff outside the sqrt() is equal in both). |
- POD documentation: contextLimitedPowers.pl
- PG macro: contextLimitedPowers.pl