SSJ
V. 2.0.

umontreal.iro.lecuyer.functions
Class MathFunctionUtil

java.lang.Object
  extended by umontreal.iro.lecuyer.functions.MathFunctionUtil

public class MathFunctionUtil
extends Object

Provides utility methods for computing derivatives and integrals of functions.


Field Summary
static double H
           
static int NUMINTERVALS
           
 
Method Summary
static double derivative(MathFunction func, double x)
          Returns the first derivative of the function func evaluated at x.
static double derivative(MathFunction func, double x, int n)
          Returns the nth derivative of function func evaluated at x.
static double finiteCenteredDifferenceDerivative(MathFunction func, double x, double h)
          Returns (f (x + h) - f (x - h))/(2h), an estimate of the first derivative of f (x) using centered differences.
static double finiteCenteredDifferenceDerivative(MathFunction func, double x, int n, double h)
          Computes and returns an estimate of the nth derivative of the function f (x) using finite centered differences.
static double finiteDifferenceDerivative(MathFunction func, double x, int n, double h)
          Computes and returns an estimate of the nth derivative of the function f (x).
static double integral(MathFunction func, double a, double b)
          Returns the integral of the function func over [a, b].
static double[][] removeNaNs(double[] x, double[] y)
          Removes any point (NaN, y) or (x, NaN) from x and y, and returns a 2D array containing the filtered points.
static double simpsonIntegral(MathFunction func, double a, double b, int numIntervals)
          Computes and returns an approximation of the integral of func over [a, b], using the Simpsons 1/3 method with numIntervals intervals.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

H

public static double H

NUMINTERVALS

public static int NUMINTERVALS
Method Detail

derivative

public static double derivative(MathFunction func,
                                double x)
Returns the first derivative of the function func evaluated at x. If the given function implements MathFunctionWithFirstDerivative, this method calls MathFunctionWithFirstDerivative.derivative (double). Otherwise, if the function implements MathFunctionWithDerivative, this method calls MathFunctionWithDerivative.derivative (double, int). If the function does not implement any of these two interfaces, the method uses finiteCenteredDifferenceDerivative (MathFunction, double, double) to obtain an estimate of the derivative.

Parameters:
func - the function to derivate.
x - the evaluation point.
Returns:
the first derivative.

derivative

public static double derivative(MathFunction func,
                                double x,
                                int n)
Returns the nth derivative of function func evaluated at x. If n = 0, this returns f (x). If n = 1, this calls derivative (MathFunction, double) and returns the resulting first derivative. Otherwise, if the function implements MathFunctionWithDerivative, this method calls MathFunctionWithDerivative.derivative (double, int). If the function does not implement this interface, the method uses finiteCenteredDifferenceDerivative (MathFunction, double, int, double) if n is even, or finiteDifferenceDerivative (MathFunction, double, int, double) if n is odd, to obtain a numerical approximation of the derivative.

Parameters:
func - the function to derivate.
x - the evaluation point.
n - the order of the derivative.
Returns:
the nth derivative.

finiteDifferenceDerivative

public static double finiteDifferenceDerivative(MathFunction func,
                                                double x,
                                                int n,
                                                double h)
Computes and returns an estimate of the nth derivative of the function f (x). This method estimates

$\displaystyle {\frac{{d^nf(x)}}{{dx^n}}}$,

the nth derivative of f (x) evaluated at x. This method first computes fi = f (x + ), for i = 0,…, n, with ε = h1/n. The estimate is then given by Δnf0/h, where Δnfi = Δn-1fi+1 - Δn-1fi, and Δfi = fi+1 - fi.

Parameters:
func - the function to derivate.
x - the evaluation point.
n - the order of the derivative.
h - the error.
Returns:
the estimate of the derivative.

finiteCenteredDifferenceDerivative

public static double finiteCenteredDifferenceDerivative(MathFunction func,
                                                        double x,
                                                        double h)
Returns (f (x + h) - f (x - h))/(2h), an estimate of the first derivative of f (x) using centered differences.

Parameters:
func - the function to derivate.
x - the evaluation point.
h - the error.
Returns:
the estimate of the first derivative.

finiteCenteredDifferenceDerivative

public static double finiteCenteredDifferenceDerivative(MathFunction func,
                                                        double x,
                                                        int n,
                                                        double h)
Computes and returns an estimate of the nth derivative of the function f (x) using finite centered differences. If n is even, this method returns finiteDifferenceDerivative (func, x - ε*n/2, n, h), with h = εn.

Parameters:
func - the function to derivate.
x - the evaluation point.
n - the order of the derivative.
h - the error.
Returns:
the estimate of the derivative.

removeNaNs

public static double[][] removeNaNs(double[] x,
                                    double[] y)
Removes any point (NaN, y) or (x, NaN) from x and y, and returns a 2D array containing the filtered points. This method filters each pair (x[i], y[i]) containing at least one NaN element. It constructs a 2D array containing the two filtered arrays, whose size is smaller than or equal to x.length.

Parameters:
x - the X coordinates.
y - the Y coordinates.
Returns:
the filtered X and Y arrays.

integral

public static double integral(MathFunction func,
                              double a,
                              double b)
Returns the integral of the function func over [a, b]. If the given function implements MathFunctionWithIntegral, this returns MathFunctionWithIntegral.integral (double, double). Otherwise, this calls simpsonIntegral (MathFunction, double, double, int) with NUMINTERVALS intervals.

Parameters:
func - the function to integrate.
a - the lower bound.
b - the upper bound.
Returns:
the value of the integral.

simpsonIntegral

public static double simpsonIntegral(MathFunction func,
                                     double a,
                                     double b,
                                     int numIntervals)
Computes and returns an approximation of the integral of func over [a, b], using the Simpsons 1/3 method with numIntervals intervals. This method estimates

abf (x)dx,

where f (x) is the function defined by func evaluated at x, by dividing [a, b] in n = numIntervals intervals of length h = (b - a)/n. The integral is estimated by

$\displaystyle {\frac{{h}}{{3}}}$(f (a) + 4f (a + h) + 2f (a + 2h) + 4f (a + 3h) + ... + f (b))

This method assumes that a <= b < ∞, and n is even.

Parameters:
func - the function being integrated.
a - the left bound
b - the right bound.
numIntervals - the number of intervals.
Returns:
the approximate value of the integral.

SSJ
V. 2.0.

To submit a bug or ask questions, send an e-mail to Pierre L'Ecuyer.