Source code for nbkode.multistep.adams_moulton

"""
    nbkode.adams_moulton
    ~~~~~~~~~~~~~~~~~~~~

    Methods of the Adams–Moulton family (implicit methods).
    - AdamsMoulton1
    - AdamsMoulton2
    - AdamsMoulton3
    - AdamsMoulton4
    - AdamsMoulton5

    See: https://en.wikipedia.org/wiki/Linear_multistep_method

    :copyright: 2020 by nbkode Authors, see AUTHORS for more details.
    :license: BSD, see LICENSE for more details.
"""


import numpy as np

from ..util import classproperty
from .core import ImplicitMultistep


class AdamsMoulton(ImplicitMultistep, abstract=True):
    GROUP = "Adams-Moulton"

    @classproperty
    def A(cls):
        A = np.zeros_like(cls.B)
        A[-1] = -1
        return A


[docs]class AdamsMoulton1(AdamsMoulton): B = np.array([0.0]) Bn = 1.0
[docs]class AdamsMoulton2(AdamsMoulton): B = np.array([1 / 2]) Bn = 1 / 2
[docs]class AdamsMoulton3(AdamsMoulton): B = np.array([-1 / 12, 2 / 3]) Bn = 5 / 12
[docs]class AdamsMoulton4(AdamsMoulton): B = np.array([19, -5, 1]) / 24 Bn = 9 / 24
[docs]class AdamsMoulton5(AdamsMoulton): B = np.array([646, -264, 106, -19]) / 720 Bn = 251 / 720