HeavisideStep1
Using the Heaviside Step Function
This PG code shows how to add a the Heaviside step function step(x)
, which takes the value 1 if x > 0, and the value 0 if x ≤ 0, to the context. It also shows how to add a named function u(x)
to the context that has a reliable answer checker and can stand in for the Heaviside step function when the student answer is a function.
 File location in OPL: FortLewis/Authoring/Templates/DiffEq/HeavisideStep1.pg
 PGML location in OPL: FortLewis/Authoring/Templates/DiffEq/HeavisideStep1_PGML.pg
PG problem file  Explanation 

Problem tagging: 

DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "AnswerFormatHelp.pl", "parserFunction.pl", ); TEXT(beginproblem()); 
Initialization:
We load 
Context("Numeric"); Context()>variables>are(t=>"Real"); Context()>functions>add( step => { class => 'Parser::Legacy::Numeric', perl => 'Parser::Legacy::Numeric::do_step' }, ); $a = 3; $ftex = "5 u(t$a)"; $fstep = Formula("5*step(t$a)"); $answer1 = List($fstep>eval(t=>2),$fstep>eval(t=>3),$fstep>eval(t=>4)); 
Setup 1:
We add the step function to the context with the name For more details on adding the Heaviside function to the context, see the forum discussion on the Heaviside step function 
Context()>texStrings; BEGIN_TEXT Let \( u(t) \) be the Heaviside step function defined by \( \displaystyle u(t) = \left\lbrace \begin{array}{lcl} 0 && \mbox{ if } x \leq 0, \\ 1 && \mbox{ if } x > 0. \end{array} \right. \) $BR $BR (a) Evaluate the function \( $ftex \) when \( t \) is \(2\), \(3\), and \(4\) and enter your answers as a comma separated list. $BR \{ ans_rule(20) \} \{ AnswerFormatHelp("numbers") \} END_TEXT Context()>normalStrings; 
Main Text 1: 
$showPartialCorrectAnswers=1; ANS( $answer1>cmp(ordered=>1) ); 
Answer Evaluation 1: 
Context("Numeric"); Context()>variables>are(t=>"Real"); Context()>functions>add( step => { class => 'Parser::Legacy::Numeric', perl => 'Parser::Legacy::Numeric::do_step' }, ); parserFunction("u(t)" => "step(t)"); $f = Formula("5 u(t$a)"); $answer2 = $f>with( limits=>[$a5,$a+5], test_at => [[$a1],[$a],[$a+0.0000001],[$a+1]], num_points=>10, ); 
Setup 2:
We reset the context using
Using a different method for adding functions to the context, we add the named function
Since answers are checked numerically by comparing the student answer to the correct answer at several randomly points in the domain (the default is 5 points) in an interval (the default is [1,1]), the function
To make the answer checking robust, in
In part (b), since the students never actually see the values of the function parserFunction("u(t)" => "1.5 * sin(e*t) + 5*pi/3 + arctan(t)" ); If we had defined 
Context()>texStrings; BEGIN_TEXT $BR $BR (b) Suppose the answer is the function \( $ftex \). $BR \{ ans_rule(20) \} \{ AnswerFormatHelp("formulas") \} END_TEXT Context()>normalStrings; 
Main Text 2: 
ANS( $answer2>cmp() ); 
Answer Evaluation 2: 
Context()>texStrings; BEGIN_SOLUTION Solution explanation goes here. END_SOLUTION Context()>normalStrings; COMMENT('MathObject version.'); ENDDOCUMENT(); 
Solution: 