Функции > Решение и оптимизация > Решатели дифференциальных уравнений > Решатели ОДУ
  
Решатели ОДУ
Каждая из приведенных ниже функций возвращает матрицу решения (intvls + 1) × (n + 1), где n представляет количество неизвестных. Первый столбец матрицы содержит значения x, в которых вычисляются решения. Это (intvls + 1) значений, равномерно распределенных между x1 и x2. Остальные столбцы содержат значения решений y0, y1, ..., yn-1, соответствующие значениям x в первом столбце.
Для решателей rkfixed, RkAdapt, Bulstoer, Stiffb и Stiffr можно указать скалярную величину допуска решения, определив переменную TOL перед тем, как вызвать решатель. Например, можно задать для всех переменных допуск, равный 10-6:
TOL:= 10-6
TOL не влияет на допуски для решателей Adams, BDF или Radau. Для этих решателей необходимо использовать необязательный аргумент tol, чтобы указать допуски.
Можно использовать блоки решений ОДУ, чтобы упростить запись уравнений и начальных условий.
Решатели для нежестких систем
Adams(init, x1, x2, intvls, D, [tol]): использует методы Адамса.
rkfixed(init, x1, x2, intvls, D): использует метод Рунге — Кутты четвертого порядка с фиксированным шагом.
Rkadapt(init, x1, x2, intvls, D): использует метод Рунге — Кутты четвертого порядка с адаптационным размером шага.
Bulstoer(init, x1, x2, intvls, D): использует метод Булирша — Штера, немного более точный, чем метод Рунге — Кутты, но требующий гладко меняющейся системы.
Решатели для жестких систем
Эти функции используются для решения задач с жесткими или алгебраическими ОДУ.
BDF(init, x1, x2, intvls, D, [J], [tol]): использует методы формулы дифференцирования назад. Можно использовать один из необязательных аргументов J или tol и не использовать другой.
Radau(init, x1, x2, intvls, D, [J], [M], [tol]): использует метод Радау5. Можно использовать любую комбинацию необязательных аргументов J, M и tol, опуская опции, необходимости в которых нет.
Stiffb(init, x1, x2, intvls, D, AJ): использует метод Булирша — Штера.
Stiffr(init, x1, x2, intvls, D, AJ): использует метод Розенброка.
Гибридный решатель
AdamsBDF(init, x1, x2, intvls, D, [J], [tol]): определяет, является ли система жесткой или нежесткой, и вызывает Adams или BDF соответственно. Можно использовать один из необязательных аргументов J или tol и не использовать другой.
Аргументы
init является либо вектором n начальных значений, где n представляет количество неизвестных, либо одним скалярным начальным значением в случае единственного уравнения ОДУ.
x1 и x2 являются вещественными скалярными конечными точками интервала, для которого вычисляется решение уравнений ОДУ. Исходные значения в init являются значениями функций ОДУ, вычисленными в точке x1.
intvls — целое число, количество интервалов дискретизации, используемое при интерполяции функции решения. Количество точек решения равняется количеству интервалов + 1.
D является векторной функцией формы D(x,y), указывающей правую сторону системы.
tol (необязательно) является вещественным значением или вектором вещественных значений, указывающим допуски для каждой независимой переменной в системе. Допуск представляет собой требуемую точность переменной решения.
Необходимо задать значение tol меньше или равным 10-5. В зависимости от масштаба проблемы и от используемого относительного размера шага может возникнуть необходимость уменьшить значение TOL для получения подходящих решений. Чем меньше значение tol, тем больше шагов выполняет алгоритм решателя для достижения требуемой точности.
В случае решения системы уравнений задание значения tol как скалярной величины указывает один допуск для всех переменных в системе. Задание значения tol как вектора с длиной, равной числу переменных в системе, указывает индивидуальный допуск для каждой из переменных.
J (необязательно) является функцией формы J(x, y), которая возвращает якобиан: матрицу частных производных функций в D по y0, y1, ... yn−1.
M (необязательно) является вещественной матрицей, представляющей любое соединение переменных в форме M · dy/dt = f(t, y).
AJ является функцией формы AJ(x, y), возвращающей пополненный якобиан функций правой стороны системы, в первом столбце которого содержатся частные производные по x. Остальные столбцы являются столбцами якобиана J, содержащими частные производные по y0, y1, ... yn−1.
Функции D, J и AJ поступают в решатель без аргументов, а функции yn(x) указаны в D, J и AJ без аргумента.
Второй аргумент для D, J и AJ как вектор должен иметь подстрочный индекс, даже если есть только одна запись.
Дополнительная информация
При решении дифференциального уравнения функции Radau и Rkadapt внутренне используют неравномерные шаги и добавляют дополнительные шаги в областях большего изменения решения, но возвращают решение в равномерно распределенных точках, количество которых указано в аргументе intvls.
Преимущество использования функции Radau состоит в том, что не требуется вводить якобиан, хотя если значение J доступно, использование этой переменной повышает точность.