scipy.integrate.

LSODA#

класс scipy.integrate.LSODA(fun, t0, y0, t_bound, first_step=None, min_step=0.0, max_step=inf, rtol=0.001, atol=1e-06, jac=None, lband=None, uband=None, векторизованный=False, **лишний)[источник]#

Метод Адамса/БДФ с автоматическим обнаружением жесткости и переключением.

Это обёртка для решателя Fortran из ODEPACK [1]. Он автоматически переключается между нежестким методом Адамса и жестким методом BDF. Метод был первоначально подробно описан в [2].

Параметры:
funcallable

Правая часть системы: производная состояния по времени y в момент t. Сигнатура вызова: fun(t, y), где t является скаляром и y является ndarray с len(y) = len(y0). fun должен возвращать массив той же формы, что и y. См. векторизованный для получения дополнительной информации.

t0float

Начальное время.

y0array_like, форма (n,)

Начальное состояние.

t_boundfloat

Граничное время - интегрирование не продолжится за его пределы. Оно также определяет направление интегрирования.

first_stepfloat или None, опционально

Начальный размер шага. По умолчанию None что означает, что алгоритм должен выбрать.

min_stepfloat, опционально

Минимально допустимый размер шага. По умолчанию 0.0, т.е. размер шага не ограничен и определяется исключительно решателем.

max_stepfloat, опционально

Максимально допустимый размер шага. По умолчанию np.inf, т.е. размер шага не ограничен и определяется исключительно решателем.

rtol, atolfloat и array_like, опционально

Относительные и абсолютные допуски. Решатель поддерживает оценки локальной ошибки меньше, чем atol + rtol * abs(y). Здесь rtol управляет относительной точностью (количеством верных цифр), в то время как atol управляет абсолютной точностью (количество верных десятичных знаков). Для достижения желаемой rtol, установите atol быть меньше наименьшего значения, которое можно ожидать от rtol * abs(y) так что rtol доминирует над допустимой ошибкой. Если atol больше, чем rtol * abs(y) количество верных цифр не гарантируется. И наоборот, для достижения желаемого atol set rtol такой, что rtol * abs(y) всегда меньше чем atol. Если компоненты y имеют разные масштабы, может быть полезно установить разные atol значения для различных компонентов, передавая array_like с формой (n,) для atol. Значения по умолчанию: 1e-3 для rtol и 1e-6 для atol.

jacNone или вызываемый объект, необязательно

Матрица Якоби правой части системы относительно y. Матрица Якоби имеет форму (n, n), и её элемент (i, j) равен d f_i / d y_jФункция будет вызываться как jac(t, y). Если None (по умолчанию), якобиан будет аппроксимирован конечными разностями. Обычно рекомендуется предоставлять якобиан, а не полагаться на аппроксимацию конечными разностями.

lband, ubandint или None

Параметры, определяющие полосу пропускания якобиана, т.е., jac[i, j] != 0 only for i - lband <= j <= i + uband. Установка этих параметров требует, чтобы ваша функция jac возвращала матрицу Якоби в упакованном формате: возвращаемый массив должен иметь n столбцы и uband + lband + 1 строки, в которые записываются диагонали Якобиана. В частности jac_packed[uband + i - j , j] = jac[i, j]. Тот же формат используется в scipy.linalg.solve_banded (проверьте иллюстрацию). Эти параметры также могут использоваться с jac=None для уменьшения количества элементов якобиана, оцениваемых конечными разностями.

векторизованныйbool, необязательно

Определяет ли fun может вызываться векторизованно. False (по умолчанию) рекомендуется для этого решателя.

Если vectorized равно False, fun всегда будет вызываться с y формы (n,), где n = len(y0).

Если vectorized равно True, fun может вызываться с y формы (n, k), где k является целым числом. В этом случае, fun должен вести себя таким образом, что fun(t, y)[:, i] == fun(t, y[:, i]) (т.е. каждый столбец возвращаемого массива является производной по времени состояния, соответствующего столбцу y).

Установка vectorized=True позволяет ускорить конечную разностную аппроксимацию Якобиана методами ‘Radau’ и ‘BDF’, но приведёт к более медленному выполнению для этого решателя.

Атрибуты:
nint

Количество уравнений.

statusstring

Текущий статус решателя: ‘running’, ‘finished’ или ‘failed’.

t_boundfloat

Граничное время.

направлениеfloat

Направление интегрирования: +1 или -1.

tfloat

Текущее время.

yndarray

Текущее состояние.

t_oldfloat

Предыдущее время. None, если шаги ещё не были сделаны.

nfevint

Количество вычислений правой части.

njevint

Количество вычислений якобиана.

Методы

dense_output()

Вычислить локальный интерполянт на последнем успешном шаге.

step()

Выполнить один шаг интегрирования.

Ссылки

[1]

A. C. Hindmarsh, "ODEPACK, A Systematized Collection of ODE Solvers," IMACS Transactions on Scientific Computation, Vol 1., pp. 55-64, 1983.

[2]

L. Petzold, “Автоматический выбор методов решения жестких и нежестких систем обыкновенных дифференциальных уравнений”, SIAM Journal on Scientific and Statistical Computing, Vol. 4, No. 1, pp. 136-148, 1983.