Heun2#
- class brainpy.integrators.ode.Heun2(f, var_type=None, dt=None, name=None, show_code=False, state_delays=None, neutral_delays=None)[source]#
Heun’s method for ODEs.
This method is named after Karl Heun [1]. It is also known as the explicit trapezoid rule, improved Euler’s method, or modified Euler’s method.
Given ODEs with a given initial value,
\[y'(t) = f(t,y(t)), \qquad y(t_0)=y_0,\]the two-stage Heun’s method is formulated as:
\[\tilde{y}_{n+1} = y_n + h f(t_n,y_n)\]\[y_{n+1} = y_n + \frac{h}{2}[f(t_n, y_n) + f(t_{n+1},\tilde{y}_{n+1})],\]where \(h\) is the step size and \(t_{n+1}=t_n+h\).
Therefore, the Butcher tableau of the two-stage Heun’s method is:
\[\begin{split}\begin{array}{c|cc} 0.0 & 0.0 & 0.0 \\ 1.0 & 1.0 & 0.0 \\ \hline & 0.5 & 0.5 \end{array}\end{split}\]Geometric interpretation
In the
brainpy.integrators.ode.midpoint()
, we have already known Euler method has big estimation error because it uses the line tangent to the function at the beginning of the interval \(t_n\) as an estimate of the slope of the function over the interval \((t_n, t_{n+1})\).In order to address this problem, Heun’s Method considers the tangent lines to the solution curve at both ends of the interval (\(t_n\) and \(t_{n+1}\)), one (\(f(t_n, y_n)\)) which underestimates, and one (\(f(t_{n+1},\tilde{y}_{n+1})\), approximated using Euler’s Method) which overestimates the ideal vertical coordinates. The ideal point lies approximately halfway between the erroneous overestimation and underestimation, the average of the two slopes.
\[\begin{split}\begin{aligned} {\text{Slope}}_{\text{left}}=&f(t_{n},y_{n}) \\ {\text{Slope}}_{\text{right}}=&f(t_{n}+h,y_{n}+hf(t_{n},y_{n})) \\ {\text{Slope}}_{\text{ideal}}=&{\frac {1}{2}}({\text{Slope}}_{\text{left}}+{\text{Slope}}_{\text{right}}) \end{aligned}\end{split}\]References