Difference between revisions of "StepFunctions"

From WeBWorK_wiki
Jump to navigation Jump to search
(Correct usage for adding step function as u(x))
(add historical tag and give links to newer problems.)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
  +
{{historical}}
  +
  +
<p style="font-size: 120%;font-weight:bold">This problem has been replaced with [https://openwebwork.github.io/pg-docs/sample-problems/DiffEq/HeavisideStep.html a newer version of this problem]</p>
  +
 
<h2>Step Functions: PG Code Snippet</h2>
 
<h2>Step Functions: PG Code Snippet</h2>
   
Line 86: Line 90:
 
[[IndexOfProblemTechniques|Problem Techniques Index]]
 
[[IndexOfProblemTechniques|Problem Techniques Index]]
 
</p>
 
</p>
  +
  +
[[Category:Problem Techniques]]

Latest revision as of 15:15, 16 July 2023

This article has been retained as a historical document. It is not up-to-date and the formatting may be lacking. Use the information herein with caution.

This problem has been replaced with a newer version of this problem

Step Functions: PG Code Snippet

This code snippet shows the essential PG code to use step functions in a problem. Note that these are insertions, not a complete PG file. This code will have to be incorporated into the problem file on which you are working.

Problem Techniques Index

PG problem file Explanation
  ## this uses the LegacyNumeric Context
  # Context("LegacyNumeric");

  ## alternately, we can just add the step
  ##    function to the Numeric Context
  Context("Numeric");
  Context()->functions->redefine("step",from=>"LegacyNumeric");

  ## then we can define an answer
  $step1 = Compute("step(x-1)");

No changes are necessary in the tagging and description or initialization sections of the problem file. In the problem set-up section, we declare a Context that will include the step function. This can be done in two ways: we can simply declare the Context to be the LegacyNumeric Context, which includes the step function step(x).

Alternately, we can add the step function to the standard Numeric Context. This has the advantage that we can name it step(x) (which is its default moniker) or, if we like, use something like u(x) instead (which is used in some other contexts, especially differential equations).

The code here defines the step function as step(x). To name it u(x), we would need to create our own custom function:

  package myFunction;                          # a new class for our function
  our @ISA = ("Parser::Function::numeric");    # means it is real-valued and takes one real input
  sub u {                                                   # the function itself
    shift; my $x = shift;
    return main::step($x);
  }
  package main;                                # end of our class

  Context()->functions->add(
    u => {class => 'myFunction'},              # add our new function to the context
  );

  sub u {Parser::Function->call('u',@_);       # make it usable in Perl as well.
  BEGIN_TEXT
  What is a function \(f(x)\) that is zero for 
  \(x<1\) and one for \(x\ge1\)?
  $BR
  \(f(x) = \) \{ ans_rule(35) \}
  END_TEXT

The text section of the problem is what we'd expect.

  ANS( $step1->cmp() );

As is the answer and solution section.

Problem Techniques Index