Package edu.hws.jcm.functions

# Class TableFunction

java.lang.Object
edu.hws.jcm.functions.FunctionParserExtension
edu.hws.jcm.functions.TableFunction

All Implemented Interfaces:
  `ExpressionCommand`, `Function`, `MathObject`, `ParserExtension`, `Serializable`

public class TableFunction extends FunctionParserExtension
A TableFunction is a function that is specified by a table of (x,y)-points. Values are interpolated between the specified x-values. This can be done in several differnt ways; the method that is used is controlled by the "Style" property. Since a TableFunction extends FunctionParserExtension, a TableFunction can be added to a Parser (provided it has a name), and it can then be used in expressions parsed by that parser. Note that this class is meant to be used for functions that are defined by a fairly small number of points, since each function evaluation involves a linear search through the list of x-values of the defining points.

See Also:
  - Serialized Form

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`PIECEWISE_LINEAR`
If the style of the function is set to PIECEWISE_LINEAR, then linear interpolation is used to find the value of the functions for x-values between the points that define the function.
`static final int`
`SMOOTH`
If the style of the function is set to SMOOTH, then cubic interpolation is used to find the value of the functions for x-values between the points that define the function.
`static final int`
`STEP`
If the style of the function is set to STEP, then the function is piecewise constant, and the value of the function at x is taken from the nearest point in the list of points that define the function.
`static final int`
`STEP_LEFT`
If the style of the function is set to STEP_LEFT, then the function is piecewise constant, and the value of the function at x is taken from the nearest point to the left in the list of points that define the function.
`static final int`
`STEP_RIGHT`
If the style of the function is set to STEP_RIGHT, then the function is piecewise constant, and the value of the function at x is taken from the nearest point to the right in the list of points that define the function.

### Fields inherited from class edu.hws.jcm.functions.FunctionParserExtension

`name`

## Constructor Summary

Constructors
Constructor
Description
`TableFunction()`
Create a TableFunction with SMOOTH style and no points.
`TableFunction(int sytle)`
Create a TableFunction with specified style and no points.

## Method Summary

Modifier and Type
Method
Description
`void`
`addIntervals(int intervals, double xmin, double xmax)`
Add points to the table.
`int`
`addPoint(double x, double y)`
Add a point with the specified x and y coordinates.
`void`
`addPoints(double[] xCoords, double[] yCoords)`
Add points to the table.
`void`
`apply(StackOfDouble stack, Cases cases)`
Override method apply() from interface FunctionParserExtension, to handle cases properly.
`void`
`copyDataFrom(TableFunction source)`
Copy data from another TableFunction, except that the name of the funcion is not duplicated.
`boolean`
`dependsOn(Variable wrt)`
Returns false.
`Function`
`derivative(int wrt)`
Compute the derivative of this function.
`Function`
`derivative(Variable wrt)`
Returns null.
`int`
`findPoint(double x)`
If there is a point in the list with x-coordinate x, then this function returns the index of that point in the list (where the index of the first point is zero).
`int`
`getArity()`
Returns the arity of the function, which is 1.
`int`
`getPointCount()`
Gets the number of points in the table.
`int`
`getStyle()`
Get the style of this TableFunction, which specifies how values are interpolated between points on the curve.
`double`
`getVal(double x)`
Get the value of the function at x, using interpolation if x lies between two x-coordinates in the list of points that define the function.
`double`
`getVal(double[] params)`
Get the value of the function at the specified parameter value.
`double`
`getValueWithCases(double[] params, Cases cases)`
Get the value of the function at the specified parameter value.
`double`
`getX(int i)`
Get the x-coordinate in the i-th point, where the first point is number zero.
`double`
`getY(int i)`
Get the y-coordinate in the i-th point, where the first point is number zero.
`void`
`removeAllPoints()`
Remove all points.
`void`
`removePointAt(int i)`
Removes the i-th point from the list of points.
`void`
`setStyle(int style)`
Set the style of this TableFunction, to specify how values are interpolated between points on the curve.
`void`
`setY(int i, double y)`
Set the y-coordinate in the i-th point to y, where the first point is number zero.

### Methods inherited from class edu.hws.jcm.functions.FunctionParserExtension

`appendOutputString, compileDerivative, doParse, extent, getName, setName, setParensCanBeOptional`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### SMOOTH

public static final int SMOOTH
If the style of the function is set to SMOOTH, then cubic interpolation is used to find the value of the functions for x-values between the points that define the function.

See Also:
  - Constant Field Values

### PIECEWISE_LINEAR

public static final int PIECEWISE_LINEAR
If the style of the function is set to PIECEWISE_LINEAR, then linear interpolation is used to find the value of the functions for x-values between the points that define the function.

See Also:
  - Constant Field Values

### STEP

public static final int STEP
If the style of the function is set to STEP, then the function is piecewise constant, and the value of the function at x is taken from the nearest point in the list of points that define the function.

See Also:
  - Constant Field Values

### STEP_LEFT

public static final int STEP_LEFT
If the style of the function is set to STEP_LEFT, then the function is piecewise constant, and the value of the function at x is taken from the nearest point to the left in the list of points that define the function.

See Also:
  - Constant Field Values

### STEP_RIGHT

public static final int STEP_RIGHT
If the style of the function is set to STEP_RIGHT, then the function is piecewise constant, and the value of the function at x is taken from the nearest point to the right in the list of points that define the function.

See Also:
  - Constant Field Values

## Constructor Details

### TableFunction

public TableFunction()
Create a TableFunction with SMOOTH style and no points.

### TableFunction

public TableFunction(int sytle)
Create a TableFunction with specified style and no points.

Parameters:
  `style` - The style for the function: SMOOTH, PIECEWISE_LINEAR, STEP, STEP_LEFT, or STEP_RIGHT.

## Method Details

### copyDataFrom

public void copyDataFrom(TableFunction source)
Copy data from another TableFunction, except that the name of the funcion is not duplicated. The new TableFunction is nameless.

### setStyle

public void setStyle(int style)
Set the style of this TableFunction, to specify how values are interpolated between points on the curve.

Parameters:
  `style` - One of the style constants SMOOTH, PIECEWISE_LINEAR, STEP, STEP_LEFT, STEP_RIGHT. Other values are ignored.

### getStyle

public int getStyle()
Get the style of this TableFunction, which specifies how values are interpolated between points on the curve.

Returns:
  The style of this TableFunction. This is one of the constants SMOOTH, PIECEWISE_LINEAR, STEP, STEP_LEFT, or STEP_RIGHT.

### addPoints

public void addPoints(double[] xCoords, double[] yCoords)
Add points to the table. The x-coordinates of the points are taken from the xCoords array. The y-coordinate for the i-th point is yCoords[i], if an i-th position exists in this array. Otherwise, the y-coordinate is is zero. (Note that if xCoords[i] duplicates an x-value already in the table, then no new point is added but the corresponging y-value is changed.)

Parameters:
  `xCoords` - A list of x-coordinates to be added to the table. If this is null, then nothing is done.
  `yCoords` - The value of yCoords[i], if it exists, is the y-coordinate corresponding to xCoords[i]. Otherwise, the y-coordinate is undefined. This can be null, in which case all y-coordinates are zero.

### addIntervals

public void addIntervals(int intervals, double xmin, double xmax)
Add points to the table. The number of points added is intervals + 1. The x-coordinates are evenly spaced between xmin and xmax. The y-coordinates are zero.

Parameters:
  `intervals` - The number of intervals. The number of points added is intervals + 1. The value should be at least 1. If not, nothing is done.
  `xmin` - The minimim x-coordinate for added points.
  `xmax` - The maximum x-coodinate for added points. Should be greater than xmin, for efficiency, but no error occurs if it is not.

### addPoint

public int addPoint(double x, double y)
Add a point with the specified x and y coordinates. If a point with the given x coordinate already exists in the table, then no new point is added, but the associated y-value is changed. (If x is Double.NaN, then no change is made and the return value is -1.)

Parameters:
  `x` - The x-coordinate of the point to be added or modified.
  `y` - The y-coordinate of the point.
Returns:
  the position of the point in the list of points, where the first point is at position zero.

### getPointCount

public int getPointCount()
Gets the number of points in the table.

### getX

public double getX(int i)
Get the x-coordinate in the i-th point, where the first point is number zero. Throws an IllegalArgumentException if i is less than zero or greater than or equal to the number of points.

### getY

public double getY(int i)
Get the y-coordinate in the i-th point, where the first point is number zero. Throws an IllegalArgumentException if i is less than zero or greater than or equal to the number of points.

### setY

public void setY(int i, double y)
Set the y-coordinate in the i-th point to y, where the first point is number zero. Throws an IllegalArgumentException if i is less than zero or greater than or equal to the number of points.

### findPoint

public int findPoint(double x)
If there is a point in the list with x-coordinate x, then this function returns the index of that point in the list (where the index of the first point is zero). If there is no such point, then -1 is returned.

### removePointAt

public void removePointAt(int i)
Removes the i-th point from the list of points. Throws an IllegalArgumentException if i is less than zero or greater than or equal to the number of points.

### removeAllPoints

public void removeAllPoints()
Remove all points. The resulting function is undefined everywhere.

### getVal

public double getVal(double x)
Get the value of the function at x, using interpolation if x lies between two x-coordinates in the list of points that define the function. If x is outside the range of x-coords in the table, the value of the function is Double.NaN.

### getValueWithCases

public double getValueWithCases(double[] params, Cases cases)
Get the value of the function at the specified parameter value.

### getVal

public double getVal(double[] params)
Get the value of the function at the specified parameter value.

### derivative

public Function derivative(int wrt)
Compute the derivative of this function. The value of the parameter, wrt, must be 1 or an IllegalArguemntException will be thrown.

### derivative

public Function derivative(Variable wrt)
Returns null. It really should be the constant function zero, but I don't expect this ever to be called. Since dependsOn(wrt) returns false, it will never be called within the JCM system.

### dependsOn

public boolean dependsOn(Variable wrt)
Returns false.

### getArity

public int getArity()
Returns the arity of the function, which is 1.

### apply

public void apply(StackOfDouble stack, Cases cases)
Override method apply() from interface FunctionParserExtension, to handle cases properly. Not meant to be called directly.

Specified by:
  `apply` in interface `ExpressionCommand`
Overrides:
  `apply` in class `FunctionParserExtension`
Parameters:
  `stack` - contains results of previous commands in the program.
  `cases` - if non-null, any case information generated during evaluation should be recorded here.