ode#
- класс scipy.integrate.ode(f, jac=None)[источник]#
Универсальный интерфейсный класс для численных интеграторов.
Решить систему уравнений \(y'(t) = f(t,y)\) с (необязательно)
jac = df/dy.Примечание: Первые два аргумента
f(t, y, ...)находятся в противоположном порядке аргументов в функции определения системы, используемойscipy.integrate.odeint.- Параметры:
- fcallable
f(t, y, *f_args) Правая часть дифференциального уравнения. t — скаляр,
y.shape == (n,).f_argsустанавливается вызовомset_f_params(*args). f должен возвращать скаляр, массив или список (не кортеж).- jaccallable
jac(t, y, *jac_args), опционально Якобиан правой части,
jac[i,j] = d f[i] / d y[j].jac_argsустанавливается вызовомset_jac_params(*args).
- fcallable
- Атрибуты:
- tfloat
Текущее время.
- yndarray
Текущие значения переменных.
Методы
Извлекает код возврата для интегрирования, чтобы обеспечить лучший контроль при сбое интегрирования.
integrate(t[, step, relax])Найти y=y(t), установить y как начальное условие и вернуть y.
set_f_params(*args)Установить дополнительные параметры для пользовательской функции f.
set_initial_value(y[, t])Установить начальные условия y(t) = y.
set_integrator(name, **integrator_params)Установить интегратор по имени.
set_jac_params(*args)Установить дополнительные параметры для пользовательской функции jac.
set_solout(solout)Установить вызываемый объект для вызова на каждом успешном шаге интегрирования.
Проверить, успешна ли интеграция.
Смотрите также
Примечания
Доступные интеграторы перечислены ниже. Их можно выбрать с помощью
set_integratorметод.“vode”
Решатель обыкновенных дифференциальных уравнений с вещественными коэффициентами, с реализацией фиксированного ведущего коэффициента. Он предоставляет неявный метод Адамса (для нежестких задач) и метод, основанный на формулах обратного дифференцирования (BDF) (для жестких задач).
Источник: http://www.netlib.org/ode/vode.f
Предупреждение
Этот интегратор не является реентерабельным. Вы не можете иметь два
odeэкземпляры, использующие интегратор "vode" одновременно.Этот интегратор принимает следующие параметры в
set_integratorметодodeкласс:atol : float или последовательность абсолютный допуск для решения
rtol : float или последовательность относительный допуск для решения
lband : None или int
uband : None или int Ширина полосы матрицы Якоби, jac[i,j] != 0 для i-lband <= j <= i+uband. Установка этих параметров требует, чтобы ваша функция jac возвращала матрицу Якоби в упакованном формате, jac_packed[i-j+uband, j] = jac[i,j]. Размерность матрицы должна быть (lband+uband+1, len(y)).
method: 'adams' или 'bdf' Какой решатель использовать, Адамс (нежесткий) или BDF (жесткий)
with_jacobian : bool Эта опция рассматривается только тогда, когда пользователь не предоставил функцию Якобиана и не указал (установкой band), что Якобиан является ленточным. В этом случае, with_jacobian определяет, является ли метод итерации шага коррекции решателя ОДУ хордовой итерацией с внутренне сгенерированной полной матрицей Якоби или функциональной итерацией без матрицы Якоби.
nsteps : int Максимальное количество (внутренне определённых) шагов, разрешённых за один вызов решателя.
first_step : float
min_step : float
max_step : float Ограничения для размеров шага, используемых интегратором.
order : int Максимальный порядок, используемый интегратором, order <= 12 для Адамса, <= 5 для BDF.
“zvode”
Решатель комплекснозначных обыкновенных дифференциальных уравнений с переменными коэффициентами, с реализацией фиксированного ведущего коэффициента. Предоставляет неявный метод Адамса (для нежестких задач) и метод, основанный на формулах обратного дифференцирования (BDF) (для жестких задач).
Источник: http://www.netlib.org/ode/zvode.f
Предупреждение
Этот интегратор не является реентерабельным. Вы не можете иметь два
odeэкземпляров, использующих интегратор «zvode» одновременно.Этот интегратор принимает те же параметры в
set_integratorв качестве решателя "vode".Примечание
При использовании ZVODE для жёсткой системы, его следует применять только в случае, когда функция f аналитическая, то есть когда каждая f(i) является аналитической функцией от каждого y(j). Аналитичность означает, что частная производная df(i)/dy(j) — это уникальное комплексное число, и этот факт критически важен для того, как ZVODE решает плотные или ленточные линейные системы, возникающие в жёстком случае. Для комплексной жёсткой системы ОДУ, в которой f не аналитическая, ZVODE, вероятно, будет иметь сбои сходимости, и для такой задачи следует использовать DVODE на эквивалентной вещественной системе (в вещественных и мнимых частях y).
“lsoda”
Решатель обыкновенных дифференциальных уравнений с вещественными коэффициентами, с реализацией фиксированного ведущего коэффициента. Обеспечивает автоматическое переключение методов между неявным методом Адамса (для нежестких задач) и методом на основе формул обратного дифференцирования (BDF) (для жестких задач).
Источник: http://www.netlib.org/odepack
Предупреждение
Этот интегратор не является реентерабельным. Вы не можете иметь два
odeэкземпляры, используя интегратор "lsoda" одновременно.Этот интегратор принимает следующие параметры в
set_integratorметодodeкласс:atol : float или последовательность абсолютный допуск для решения
rtol : float или последовательность относительный допуск для решения
lband : None или int
uband : None или int Ширина полосы Якобиана, jac[i,j] != 0 для i-lband <= j <= i+uband. Установка этих значений требует, чтобы ваша функция jac возвращала якобиан в упакованном формате, jac_packed[i-j+uband, j] = jac[i,j].
with_jacobian : bool Не используется.
nsteps : int Максимальное количество (внутренне определённых) шагов, разрешённых за один вызов решателя.
first_step : float
min_step : float
max_step : float Ограничения для размеров шага, используемых интегратором.
max_order_ns : int Максимальный порядок, используемый в нежёстком случае (по умолчанию 12).
max_order_s : int Максимальный порядок, используемый в жестком случае (по умолчанию 5).
max_hnil : int Максимальное количество сообщений о слишком малом размере шага (t + h = t) (по умолчанию 0)
ixpr : int Определяет, нужно ли генерировать дополнительную печать при переключении методов (по умолчанию False).
"dopri5"
Это явный метод Рунге-Кутты порядка (4)5, предложенный Дорманом и Принсом (с контролем шага и плотным выводом).
Авторы:
E. Hairer и G. Wanner Университет Женевы, Департамент математики CH-1211 Женева 24, Швейцария e-mail: ernst.hairer@math.unige.ch, gerhard.wanner@math.unige.ch
Этот код описан в [HNW93].
Этот интегратор принимает следующие параметры в методе set_integrator() класса ode:
atol : float или последовательность абсолютный допуск для решения
rtol : float или последовательность относительный допуск для решения
nsteps : int Максимальное количество (внутренне определённых) шагов, разрешённых за один вызов решателя.
first_step : float
max_step : float
safety : float Коэффициент безопасности при выборе нового шага (по умолчанию 0.9)
ifactor : float
dfactor : float Максимальный коэффициент увеличения/уменьшения размера шага за один шаг
beta : float Бета-параметр для стабилизированного контроля размера шага.
verbosity : int Переключатель для вывода сообщений (< 0 для отключения сообщений).
“dop853”
Это явный метод Рунге-Кутты порядка 8(5,3), предложенный Дорманом и Принсом (с контролем шага и плотным выводом).
Опции и ссылки те же, что и для “dopri5”.
Ссылки
[HNW93]Э. Хайрер, С.П. Норсетт и Г. Ваннер, Решение обыкновенных дифференциальных уравнений I. Нежесткие задачи. 2-е издание. Серия вычислительной математики Springer, Springer-Verlag (1993)
Примеры
Задача для интегрирования и соответствующая якобиан:
>>> from scipy.integrate import ode >>> >>> y0, t0 = [1.0j, 2.0], 0 >>> >>> def f(t, y, arg1): ... return [1j*arg1*y[0] + y[1], -arg1*y[1]**2] >>> def jac(t, y, arg1): ... return [[1j*arg1, 1], [0, -arg1*2*y[1]]]
Интегрирование:
>>> r = ode(f, jac).set_integrator('zvode', method='bdf') >>> r.set_initial_value(y0, t0).set_f_params(2.0).set_jac_params(2.0) >>> t1 = 10 >>> dt = 1 >>> while r.successful() and r.t < t1: ... print(r.t+dt, r.integrate(r.t+dt)) 1 [-0.71038232+0.23749653j 0.40000271+0.j ] 2.0 [0.19098503-0.52359246j 0.22222356+0.j ] 3.0 [0.47153208+0.52701229j 0.15384681+0.j ] 4.0 [-0.61905937+0.30726255j 0.11764744+0.j ] 5.0 [0.02340997-0.61418799j 0.09523835+0.j ] 6.0 [0.58643071+0.339819j 0.08000018+0.j ] 7.0 [-0.52070105+0.44525141j 0.06896565+0.j ] 8.0 [-0.15986733-0.61234476j 0.06060616+0.j ] 9.0 [0.64850462+0.15048982j 0.05405414+0.j ] 10.0 [-0.38404699+0.56382299j 0.04878055+0.j ]