# Class NumericalIntegration

java.lang.Object
edu.wpi.first.math.system.NumericalIntegration

```public final class NumericalIntegration
extends Object```
• ## Method Summary

Modifier and Type Method Description
```static <States extends Num,​ Inputs extends Num>Matrix<States,​N1>``` ```rk4​(BiFunction<Matrix<States,​N1>,​Matrix<Inputs,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, Matrix<Inputs,​N1> u, double dtSeconds)```
Performs 4th order Runge-Kutta integration of dx/dt = f(x, u) for dt.
`static double` ```rk4​(BiFunction<Double,​Double,​Double> f, double x, Double u, double dtSeconds)```
Performs Runge Kutta integration (4th order).
`static double` ```rk4​(DoubleFunction<Double> f, double x, double dtSeconds)```
Performs Runge Kutta integration (4th order).
`static <States extends Num>Matrix<States,​N1>` ```rk4​(Function<Matrix<States,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, double dtSeconds)```
Performs 4th order Runge-Kutta integration of dx/dt = f(x) for dt.
```static <States extends Num,​ Inputs extends Num>Matrix<States,​N1>``` ```rkdp​(BiFunction<Matrix<States,​N1>,​Matrix<Inputs,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, Matrix<Inputs,​N1> u, double dtSeconds)```
Performs adaptive Dormand-Prince integration of dx/dt = f(x, u) for dt.
```static <States extends Num,​ Inputs extends Num>Matrix<States,​N1>``` ```rkdp​(BiFunction<Matrix<States,​N1>,​Matrix<Inputs,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, Matrix<Inputs,​N1> u, double dtSeconds, double maxError)```
Performs adaptive Dormand-Prince integration of dx/dt = f(x, u) for dt.

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

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
• ## Method Details

• ### rk4

public static double rk4​(DoubleFunction<Double> f, double x, double dtSeconds)
Performs Runge Kutta integration (4th order).
Parameters:
`f` - The function to integrate, which takes one argument x.
`x` - The initial value of x.
`dtSeconds` - The time over which to integrate.
Returns:
the integration of dx/dt = f(x) for dt.
• ### rk4

public static double rk4​(BiFunction<Double,​Double,​Double> f, double x, Double u, double dtSeconds)
Performs Runge Kutta integration (4th order).
Parameters:
`f` - The function to integrate. It must take two arguments x and u.
`x` - The initial value of x.
`u` - The value u held constant over the integration period.
`dtSeconds` - The time over which to integrate.
Returns:
The result of Runge Kutta integration (4th order).
• ### rk4

public static <States extends Num,​ Inputs extends Num> Matrix<States,​N1> rk4​(BiFunction<Matrix<States,​N1>,​Matrix<Inputs,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, Matrix<Inputs,​N1> u, double dtSeconds)
Performs 4th order Runge-Kutta integration of dx/dt = f(x, u) for dt.
Type Parameters:
`States` - A Num representing the states of the system to integrate.
`Inputs` - A Num representing the inputs of the system to integrate.
Parameters:
`f` - The function to integrate. It must take two arguments x and u.
`x` - The initial value of x.
`u` - The value u held constant over the integration period.
`dtSeconds` - The time over which to integrate.
Returns:
the integration of dx/dt = f(x, u) for dt.
• ### rk4

public static <States extends Num> Matrix<States,​N1> rk4​(Function<Matrix<States,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, double dtSeconds)
Performs 4th order Runge-Kutta integration of dx/dt = f(x) for dt.
Type Parameters:
`States` - A Num prepresenting the states of the system.
Parameters:
`f` - The function to integrate. It must take one argument x.
`x` - The initial value of x.
`dtSeconds` - The time over which to integrate.
Returns:
4th order Runge-Kutta integration of dx/dt = f(x) for dt.
• ### rkdp

public static <States extends Num,​ Inputs extends Num> Matrix<States,​N1> rkdp​(BiFunction<Matrix<States,​N1>,​Matrix<Inputs,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, Matrix<Inputs,​N1> u, double dtSeconds)
Performs adaptive Dormand-Prince integration of dx/dt = f(x, u) for dt. By default, the max error is 1e-6.
Type Parameters:
`States` - A Num representing the states of the system to integrate.
`Inputs` - A Num representing the inputs of the system to integrate.
Parameters:
`f` - The function to integrate. It must take two arguments x and u.
`x` - The initial value of x.
`u` - The value u held constant over the integration period.
`dtSeconds` - The time over which to integrate.
Returns:
the integration of dx/dt = f(x, u) for dt.
• ### rkdp

public static <States extends Num,​ Inputs extends Num> Matrix<States,​N1> rkdp​(BiFunction<Matrix<States,​N1>,​Matrix<Inputs,​N1>,​Matrix<States,​N1>> f, Matrix<States,​N1> x, Matrix<Inputs,​N1> u, double dtSeconds, double maxError)
Performs adaptive Dormand-Prince integration of dx/dt = f(x, u) for dt.
Type Parameters:
`States` - A Num representing the states of the system to integrate.
`Inputs` - A Num representing the inputs of the system to integrate.
Parameters:
`f` - The function to integrate. It must take two arguments x and u.
`x` - The initial value of x.
`u` - The value u held constant over the integration period.
`dtSeconds` - The time over which to integrate.
`maxError` - The maximum acceptable truncation error. Usually a small number like 1e-6.
Returns:
the integration of dx/dt = f(x, u) for dt.