# Created by Nikola Kuzmanovski ######################################################################## DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "PGinfo.pl", ); TEXT(beginproblem()); $showPartialCorrectAnswers = 1; ############################################################## # # Setup # # Context("Numeric"); Context()->variables->add(u => "Real"); Context()->variables->add(X => "Real");$f = Formula("e^x"); $F = Formula("e^x");$g = Formula("sin(x)"); $gD =$g->D('x'); $integrand =$f->substitute(x => $g) *$gD; $integral =$F->substitute(x => $g);$fu = $f->substitute(x => "u");$Fu = $F->substitute(x => "u");$lowerLimit = random(10, 19, 1); $upperLimit = random(20, 29, 1);$area = $integral->eval(x =>$upperLimit) - $integral->eval(x =>$lowerLimit); ############################################################## # # Text # # Context()->texStrings; BEGIN_TEXT This problem deals with the following integral $\int integrand dx .$ Your job is to evaluate it using substitution. We are going to use the variable $$u$$ as the substitution variable. Give a choice for $$u$$ below. $BR$BCENTER $$\displaystyle u =$$ \{ans_rule\}. $ECENTER$BR Then $BCENTER $$\displaystyle du =$$ \{ans_rule\} $$dx$$.$ECENTER $BR With this we can change the integral $$\displaystyle \int integrand dx$$ to an integral of the form $$\displaystyle \int g(u) du$$ for some function $$g(u)$$. Input this function in the line below$BBOLD (note that the $$+C$$ is included at the end, so you don't need to input it). $EBOLD.$BR $BCENTER $$\displaystyle \int integrand dx = \int$$ \{ans_rule\} $$du$$.$ECENTER $BR Next, find the general antiderivative$BBOLD (note that the $$+C$$ is included at the end, so you don't need to input it). $EBOLD$BR $BCENTER $$\displaystyle \int integrand dx =$$ \{ans_rule\} $$+C$$.$ECENTER $BR Finally, compute$BR $BCENTER $$\displaystyle \int_{lowerLimit}^{upperLimit} integrand dx =$$ \{ans_rule\}.$ECENTER END_TEXT Context()->normalStrings; ############################################################## # # Answers # # sub checkMult{ my ( $correct,$student ) = @_; if($student->isConstant){ return 0 } my$context = Context()->copy; return 0 if $student == 0;$context->flags->set(no_parameters=>0); $context->variables->add('C0'=>'Parameter'); my$c0 = Formula($context,'C0');$student = Formula($context,$student); $correct = Formula($context,"$c0 *$correct"); return $correct ==$student; } sub checkAdd{ my ( $correct,$student ) = @_; if($student->isConstant){ return 0 } my$context = Context()->copy; return 0 if $student == 0;$context->flags->set(no_parameters=>0); $context->variables->add('C0'=>'Parameter'); my$c0 = Formula($context,'C0');$student = Formula($context,$student); $correct = Formula($context,"$c0 +$correct"); return $correct ==$student; } sub checkMultAdd{ my ( $correct,$student ) = @_; if($student->isConstant){ return 0 } my$context = Context()->copy; return 0 if $student == 0;$context->flags->set(no_parameters=>0); $context->variables->add('C0'=>'Parameter');$context->variables->add('C1'=>'Parameter'); my $c0 = Formula($context,'C0'); my $c1 = Formula($context,'C1'); $student = Formula($context,$student);$correct = Formula($context,"$c1 + $c0 *$correct"); return $correct ==$student; } $studentU = Formula("");$scoreU = 0.0; $checkU = sub{ if($inputs_ref->{previewAnswers}){ return 0.0; } my ($correctAns,$studentAns, $ansHash) = @_; my$score = 0.0; $studentAns = Formula("$studentAns"); $studentAns =$studentAns->substitute(X => "x"); $studentU =$studentAns; my $studentSub =$f->substitute(x => $studentAns) *$gD; if($integrand ==$studentSub){ $ansHash->{ans_message} = "This substitution will work!";$score = 1.0; }elsif(checkMult($integrand,$studentSub)){ $ansHash->{ans_message} = "This substitution will almost work. The final antiderivative will have an extra multiplicative constant";$score = 0.9; }elsif(checkMult($correctAns,$studentAns)){ $ansHash->{ans_message} = "Your answer is close to the correct one. You have an extra multiplicative constant.";$score = 0.8; }elsif(checkAdd($correctAns,$studentAns)){ $ansHash->{ans_message} = "Your answer is close to the correct one. You have added an extra constant.";$score = 0.8; }elsif(checkMultAdd($correctAns,$studentAns)){ $ansHash->{ans_message} = "Your answer is close to the correct one. You have added an extra constant and you have an extra multiplicative constant.";$score = 0.7; }else{ $ansHash->{ans_message} = "Your answer won't work. Try reviewing the section on integration by substitution."; }$scoreU = $score; return$score; }; ANS($g->cmp(checker =>$checkU)); $studentDiv = Formula("");$scoreDiv = 0.0; $checkDiv = sub{ if($inputs_ref->{previewAnswers}){ return 0.0; } my ($correctAns,$studentAns, $ansHash) = @_; my$score = 0.0; $studentAns = Formula("$studentAns"); $studentAns =$studentAns->substitute(X => "x"); $studentDiv =$studentAns; if($studentU == Formula("")){$ansHash->{ans_message} = "This answer depends on the previous answer. You don't get any points for it because you didn't enter anything for the previous answer."; return $score; } my$studentDerivative = $studentU->D('x'); if($studentDerivative == $studentAns){$ansHash->{ans_message} = "You differentiated correctly!"; $score = 1.0; }elsif(checkAdd($studentDerivative, $studentAns)){$ansHash->{ans_message} = "It seems like you made some mistake while differentiating. You have some extra additive constant."; $score = 0.9; }elsif(checkMult($studentDerivative, $studentAns)){$ansHash->{ans_message} = "It seems like you made some mistake while differentiating. You have some extra multiplicative constant."; $score = 0.9; }elsif(checkMultAdd($studentDerivative, $studentAns)){$ansHash->{ans_message} = "It seems like you made some mistake while differentiating. You have some extra additive constant and an extra multiplicative constant."; $score = 0.8; }else{$ansHash->{ans_message} = "It seems that you didn't differentiate correctly. Try reviewing differentiation from Calculus I."; } return $score; }; ANS($gD->cmp(checker => $checkDiv));$studentSub = Formula(""); $scoreSub = 0.0;$checkSub = sub{ if($inputs_ref->{previewAnswers}){ return 0.0; } my ($correctAns, $studentAns,$ansHash) = @_; my $score = 0.0;$studentAns = Formula("$studentAns");$studentSub = $studentAns; if($studentU == Formula("") || $studentDiv == Formula("")){$ansHash->{ans_message} = "This answer depends on the previous two answers. You don't get any points for it because you didn't enter anything for the previous answers."; return $score; } if($correctAns == $studentAns){$ansHash->{ans_message} = "Good work substituting!"; $score = 1.0; }elsif(checkAdd($correctAns, $studentAns)){$ansHash->{ans_message} = "It seems like you made some mistake while substituting. You have some extra additive constant."; $score = 0.9; }elsif(checkMult($correctAns, $studentAns)){$ansHash->{ans_message} = "It seems like you made some mistake while substituting. You have some extra multiplicative constant."; $score = 0.9; }elsif(checkMultAdd($correctAns, $studentAns)){$ansHash->{ans_message} = "It seems like you made some mistake while substituting. You have some extra additive constant and an extra multiplicative constant."; $score = 0.8; }else{$ansHash->{ans_message} = "It seems that your answer is not correct. Try reviewing integration by substitution."; } return $score; }; ANS($fu->cmp(checker => $checkSub));$studentIntegral = Formula(""); $scoreIntegral = 0.0;$checkIntegral = sub{ if($inputs_ref->{previewAnswers}){ return 0.0; } my ($correctAns, $studentAns,$ansHash) = @_; my $score = 0.0;$studentAns = Formula("$studentAns");$studentAns = $studentAns->substitute(X => "x");$studentIntegral = $studentAns; if(checkAdd($correctAns, $studentAns)){$ansHash->{ans_message} = "Great Job!"; $score = 1.0; }elsif(checkMultAdd($correctAns, $studentAns)){$ansHash->{ans_message} = "It seems like you made some mistake while integrating. You have some extra multiplicative constant."; $score = 0.9; }elsif(checkAdd($Fu, $studentAns)){$ansHash->{ans_message} = "You forgot to switch the u at the end."; $score = 0.8; }elsif(checkMultAdd($Fu, $studentAns)){$ansHash->{ans_message} = "You forgot to switch the u at the end and you have an extra multiplicative constant."; $score = 0.7; }else{$ansHash->{ans_message} = "It seems that your answer is not correct. Try reviewing integration by substitution."; } $scoreIntegral =$score; return $score; }; ANS($integral->cmp(checker => $checkIntegral));$studentFTC = Formula(""); $scoreFTC = 0.0;$checkFTC = sub { if($inputs_ref->{previewAnswers}){ return 0.0; } my ($correctAns, $studentAns,$ansHash) = @_; my $score = 0.0;$studentAns = Formula("$studentAns");$studentIntegral = $studentIntegral->substitute(u => "x"); if($studentU == Formula("") || $studentDiv == Formula("") ||$studentSub == Formula("")){ $ansHash->{ans_message} = "This answer depends on the previous three answers. You don't get any points for it because you didn't enter anything for the previous answers.";$scoreFTC = 0.0; return $score; } if($scoreIntegral == 1.0 && $correctAns ==$studentAns){ $score = 1.0;$scoreFTC = $score;$ansHash->{ans_message} = "You computed the antiderivative correctly and used the Fundamental Theorem of Calculus correctly!"; return $score; } eval{ my$lowerEval = $studentIntegral->eval(x =>$lowerLimit); my $upperEval =$studentIntegral->eval(x => $upperLimit); if ($upperEval - $lowerEval ==$studentAns){ $ansHash->{ans_message} = "You didn't compute the antiderivative correctly. However, you used the Fundamental Theorem of Calculus correctly.";$score = 1.0; }elsif($lowerEval -$upperEval == $studentAns){$ansHash->{ans_message} = "You switched the bounds of integration."; $score = 0.9; }elsif($upperEval + $lowerEval ==$studentAns){ $ansHash->{ans_message} = "You need to subtract the lower bound, not add it.";$score = 0.9; }else{ $ansHash->{ans_message} = "It seems that your answer is not correct. Try reviewing the Fundamental Theorem of Calculus."; } 1; } or do{$ansHash->{ans_message} = "It seems that the answer you gave for the antiderivative doesn't evaluate at the bounds of the definite integral"; $ansHash->{ans_message} =$ansHash->{ans_message} . " Try double checking your work for the antiderivative."; $ansHash->{ans_message} =$ansHash->{ans_message} . " Check for things like division by 0 or negatives under a square root."; }; return $score; }; ANS($area->cmp(checker => \$checkFTC)); ENDDOCUMENT();