# Numerical integration¶

By default, Brian chooses an integration method automatically, trying to solve the equations exactly first (for linear equations) and then resorting to numerical algorithms. It will also take care of integrating stochastic differential equations appropriately.

Note that in some cases, the automatic choice of integration method will not be appropriate, because of a choice of parameters that couldn’t be determined in advance. In this case, typically you will get nan (not a number) values in the results, or large oscillations. In this case, Brian will generate a warning to let you know, but will not raise an error.

## Method choice¶

You will get an `INFO`

message telling you which integration method Brian decided to use,
together with information about how much time it took to apply the integration method
to your equations. If other methods have been tried but were not applicable, you will
also see the time it took to try out those other methods. In some cases, checking
other methods (in particular the `'linear'`

method which attempts to solve the
equations analytically) can take a considerable amount of time – to avoid wasting
this time, you can always chose the integration method manually (see below). You
can also suppress the message by raising the log level or by explicitly suppressing
`'method_choice'`

log messages – for details, see Logging.

If you prefer to chose an integration algorithm yourself, you can do so using
the `method`

keyword for `NeuronGroup`

, `Synapses`

, or `SpatialNeuron`

.
The complete list of available methods is the following:

`'linear'`

: exact integration for linear equations`'independent'`

: exact integration for a system of independent equations, where all the equations can be analytically solved independently`'exponential_euler'`

: exponential Euler integration for conditionally linear equations`'euler'`

: forward Euler integration (for additive stochastic differential equations using the Euler-Maruyama method)`'rk2'`

: second order Runge-Kutta method (midpoint method)`'rk4'`

: classical Runge-Kutta method (RK4)`'heun'`

: stochastic Heun method for solving Stratonovich stochastic differential equations with non-diagonal multiplicative noise.`'milstein'`

: derivative-free Milstein method for solving stochastic differential equations with diagonal multiplicative noise

The following topics are not essential for beginners.

## Technical notes¶

Each class defines its own list of algorithms it tries to
apply, `NeuronGroup`

and `Synapses`

will use the first suitable method out of
the methods `'linear'`

, `'euler'`

and `'heun'`

while `SpatialNeuron`

objects will use `'linear'`

, `'exponential_euler'`

, `'rk2'`

or `'heun'`

.

You can also define your own numerical integrators, see State update for details.