DifferentiateFunction1
Differentiating and Evaluating a Function
This PG code shows how to create a function using MathObjects, differentiate it, and evaluate it.
 File location in OPL: FortLewis/Authoring/Templates/DiffCalc/DifferentiateFunction1.pg
 PGML location in OPL: FortLewis/Authoring/Templates/DiffCalc/DifferentiateFunction1_PGML.pg
PG problem file  Explanation 

Problem tagging: 

DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "AnswerFormatHelp.pl", "unionLists.pl", ); TEXT(beginproblem()); 
Initialization:
We load 
Context("Numeric")>variables>add(k=>"Real"); Context()>flags>set( reduceConstants=>0, # no decimals reduceConstantFunctions=>1, # combine 4+5*2? formatStudentAnswer=>'parsed', # no decimals ); $a = random(6,9,1); $k = random(3,5,1); $f = Formula("k x^2"); $fx = $f>D('x'); @answer = (); $answer[0] = $fx; $answer[1] = $fx>substitute(k=>$k); $answer[2] = $fx>substitute(x=>$a*pi,k=>$k); 
Setup:
The partial differentiation operator is
The main difference between
$k into the Formula $f returns a Formula $k x , if we had used the eval method $answer[1] = $fx>eval(k=>$k); instead of the substitute method, we would get errors because $k x is a Formula, not a Real. Note: You cannot use eval or substitute to perform function composition, i.e., you can only plug in numbers, not formulas.
When the answer is a constant, we can use either the eval method, in which case the answer would be a Real, or the substitute method, in which case the answer would be a constant Formula. If you use the eval method, For more details, see eval versus substitute, formatting correct answers, and constants in problems. 
Context()>texStrings; BEGIN_TEXT Suppose \( f(x) = $f \) where \( k \) is a constant. \{ BeginList("OL",type=>"a") \} $ITEM \( f'(x) = \) \{ ans_rule(20) \} \{ AnswerFormatHelp("formulas") \} $ITEMSEP $ITEM If \( k = $k \) then \( f'(x) = \) \{ ans_rule(20) \} \{ AnswerFormatHelp("formulas") \} $ITEMSEP $ITEM If \( k = $k \) then \( f'($a\pi) = \) \{ ans_rule(20) \} \{ AnswerFormatHelp("formulas") \} \{ EndList("OL") \} END_TEXT Context()>normalStrings; 
Main Text:
We use an ordered list to display the three parts to this question. The 
$showPartialCorrectAnswers = 1; foreach my $i (0..2) { ANS( $answer[$i]>cmp() ); } 
Answer Evaluation: 
Context()>texStrings; BEGIN_SOLUTION Solution explanation goes here. END_SOLUTION Context()>normalStrings; COMMENT("MathObject version."); ENDDOCUMENT(); 
Solution: 