scipy.integrate.

Radau#

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

Неявный метод Рунге-Кутты семейства Радо IIA пятого порядка.

Реализация следует [1]. Ошибка контролируется с помощью встроенной формулы третьего порядка точности. Для плотного вывода используется кубический полином, удовлетворяющий условиям коллокации.

Параметры:
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 что означает, что алгоритм должен выбрать.

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.

jac{None, array_like, sparse_matrix, callable}, optional

Матрица Якоби правой части системы относительно y, требуемая этим методом. Матрица Якоби имеет форму (n, n) и её элемент (i, j) равен d f_i / d y_j. Существует три способа определения якобиана:

  • Если array_like или sparse_matrix, предполагается, что матрица Якоби постоянна.

  • Если вызываемый объект, предполагается, что якобиан зависит от обоих t и y; он будет вызван как jac(t, y) по мере необходимости. Для методов 'Radau' и 'BDF' возвращаемое значение может быть разреженной матрицей.

  • Если None (по умолчанию), Якобиан будет аппроксимирован конечными разностями.

Обычно рекомендуется предоставлять Якобиан, а не полагаться на аппроксимацию конечными разностями.

jac_sparsity{None, array_like, sparse matrix}, опционально

Определяет структуру разреженности матрицы Якоби для конечно-разностной аппроксимации. Её форма должна быть (n, n). Этот аргумент игнорируется, если jac не является None. Если матрица Якоби имеет только несколько ненулевых элементов в каждый строке, предоставление структуры разреженности значительно ускорит вычисления [2]. Нулевой элемент означает, что соответствующий элемент в матрице Якоби всегда равен нулю. Если 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 позволяет быстрее аппроксимировать Якобиан методом конечных разностей, но может привести к более медленному выполнению в некоторых случаях (например, малый len(y0)).

Атрибуты:
nint

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

statusstring

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

t_boundfloat

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

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

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

tfloat

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

yndarray

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

t_oldfloat

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

шаг_размераfloat

Размер последнего успешного шага. None, если шаги ещё не выполнялись.

nfevint

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

njevint

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

nluint

Количество LU-разложений.

Методы

dense_output()

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

step()

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

Ссылки

[1]

E. Hairer, G. Wanner, "Решение обыкновенных дифференциальных уравнений II: Жесткие и дифференциально-алгебраические задачи", разд. IV.8.

[2]

A. Curtis, M. J. D. Powell, и J. Reid, “On the estimation of sparse Jacobian matrices”, Journal of the Institute of Mathematics and its Applications, 13, pp. 117-120, 1974.