---
layout: default
---
Function solveODE #
Numerical Integration of Ordinary Differential Equations
Two variable step methods are provided:
- "RK23": Bogacki–Shampine method
- "RK45": Dormand-Prince method RK5(4)7M (default)
The arguments are expected as follows.
- `func` should be the forcing function `f(t, y)`
- `tspan` should be a vector of two numbers or units `[tStart, tEnd]`
- `y0` the initial state values, should be a scalar or a flat array
- `options` should be an object with the following information:
- `method` ('RK45'): ['RK23', 'RK45']
- `tol` (1e-3): Numeric tolerance of the method, the solver keeps the error estimates less than this value
- `firstStep`: Initial step size
- `minStep`: minimum step size of the method
- `maxStep`: maximum step size of the method
- `minDelta` (0.2): minimum ratio of change for the step
- `maxDelta` (5): maximum ratio of change for the step
- `maxIter` (1e4): maximum number of iterations
The returned value is an object with `{t, y}` please note that even though `t` means time, it can represent any other independant variable like `x`:
- `t` an array of size `[n]`
- `y` the states array can be in two ways
- **if `y0` is a scalar:** returns an array-like of size `[n]`
- **if `y0` is a flat array-like of size [m]:** returns an array like of size `[n, m]`
Syntax #
```js
math.solveODE(func, tspan, y0)
math.solveODE(func, tspan, y0, options)
```
Parameters #
Parameter | Type | Description
--------- | ---- | -----------
`func` | function | The forcing function f(t,y)
`tspan` | Array | Matrix | The time span
`y0` | number | BigNumber | Unit | Array | Matrix | The initial value
`options` | Object | Optional configuration options
Returns #
Type | Description
---- | -----------
Object | Return an object with t and y values as arrays
Throws #
Type | Description
---- | -----------
Examples #
```js
function func(t, y) {return y}
const tspan = [0, 4]
const y0 = 1
math.solveODE(func, tspan, y0)
math.solveODE(func, tspan, [1, 2])
math.solveODE(func, tspan, y0, { method:"RK23", maxStep:0.1 })
```
See also #
[derivative](derivative.html),
[simplifyCore](simplifyCore.html)