public class MathFunctionUtil
extends java.lang.Object
| Modifier and Type | Field and Description |
|---|---|
static double |
H
Step length in x to compute derivatives.
|
static int |
NUMINTERVALS
Default number of intervals for Simpson's integral.
|
| Modifier and Type | Method and Description |
|---|---|
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 |
gaussLobatto(MathFunction func,
double a,
double b,
double tol)
Computes and returns a numerical approximation of the integral of
f (x) over [a, b], using Gauss-Lobatto adaptive quadrature with
5 nodes, with tolerance tol.
|
static double |
gaussLobatto(MathFunction func,
double a,
double b,
double tol,
double[][] T)
Similar to method
gaussLobatto(MathFunction, double, double, double), but
also returns in T[0] the subintervals of integration, and in
T[1], the partial values of the integral over the corresponding
subintervals. |
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 Simpson's 1/3 method with numIntervals
intervals.
|
public static double H
public static int NUMINTERVALS
public static double derivative(MathFunction func, double x)
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.func - the function to derivate.x - the evaluation point.public static double derivative(MathFunction func, double x, int n)
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.func - the function to derivate.x - the evaluation point.n - the order of the derivative.public static double finiteDifferenceDerivative(MathFunction func, double x, int n, double h)
,
func - the function to derivate.x - the evaluation point.n - the order of the derivative.h - the error.public static double finiteCenteredDifferenceDerivative(MathFunction func, double x, double h)
func - the function to derivate.x - the evaluation point.h - the error.public static double finiteCenteredDifferenceDerivative(MathFunction func, double x, int n, double h)
finiteDifferenceDerivative (func, x - ε*n/2, n, h), with
h = εn.func - the function to derivate.x - the evaluation point.n - the order of the derivative.h - the error.public static double[][] removeNaNs(double[] x,
double[] y)
x - the X coordinates.y - the Y coordinates.public static double integral(MathFunction func, double a, double b)
MathFunctionWithIntegral,
this returns
MathFunctionWithIntegral.integral (double, double).
Otherwise, this calls
simpsonIntegral (MathFunction, double, double, int)
with NUMINTERVALS intervals.func - the function to integrate.a - the lower bound.b - the upper bound.public static double simpsonIntegral(MathFunction func, double a, double b, int numIntervals)
(f (a) + 4f (a + h) + 2f (a + 2h) + 4f (a + 3h) + ... + f (b))
func - the function being integrated.a - the left boundb - the right bound.numIntervals - the number of intervals.public static double gaussLobatto(MathFunction func, double a, double b, double tol)
func - the function being integrated.a - the left boundb - the right bound.tol - error.public static double gaussLobatto(MathFunction func, double a, double b, double tol, double[][] T)
gaussLobatto(MathFunction, double, double, double), but
also returns in T[0] the subintervals of integration, and in
T[1], the partial values of the integral over the corresponding
subintervals. Thus T[0][0] = x0 = a and T[0][n]
= xn = b; T[1][i] contains the value of the integral over
the subinterval
[xi-1, xi]; we also have T[1][0] = 0.
The sum over all T[1][i], for
i = 1,…, n gives the
value of the integral over [a, b], which is the value returned by this
method. WARNING: The user must reserve the 2 elements
of the first dimension (T[0] and T[1])
before calling this method.func - function being integrateda - left bound of intervalb - right bound of intervaltol - errorT - (x, y) = (values of partial intervals,partial values of integral)To submit a bug or ask questions, send an e-mail to Pierre L'Ecuyer.