
- •5. Решение дифференциальных уравнений с помощью встроенных функций MathCad
- •Вычислительный блок Given – Odesolve( )
- •Использование встроенных функций rkfixed( ), Rkadapt( ), Bulstoer( )
- •Оду высшего порядка
- •Решение систем оду в одной конечной точке
- •Некоторые примеры решения оду
- •Жесткие системы ду
- •Лабораторная работа 5
Решение систем оду в одной конечной точке
Часто при решении дифференциальных уравнений требуется определить значения искомых функций не на всем интервале (t0,t1), а только в одной его последней точке. Например, весьма распространены задачи поиска аттракторов динамических систем. Известно, что для широкого класса ОДУ одна и та же система при разных (или даже любых, как рассмотренный выше пример осциллятора с затуханием) начальных условиях приходит в одну и ту же точку (аттрактор). Поэтому часто нужно определить именно эту точку.
Такая задача требует меньше ресурсов компьютера, чем решение системы ОДУ на всем интервале, поэтому в Mathcad’e имеются модификации встроенных функций Rkadapt( ) и Bulstoer( ). Они имеют несколько другой набор параметров и работают быстрее своих аналогов:
- rkadapt(y,t0,t1,асе, D, k, s) - метод Рунге-Кутта с переменным шагом;
- bulstoer(y, t0, t1, acc, D, k, s) - метод Bulirsch-Stoer;
- y - вектор начальных значений в точке t0;
- t0,t1 - начальная и конечная точки интервала;
- асе - погрешность вычисления (чем она меньше, тем с лучшей точностью будет найдено решение; рекомендуется выбирать значения погрешности в районе 0.001);
- D - векторная функция, задающая систему ОДУ;
- k - максимальное число шагов, на которых численный метод будет находить решение;
- s - минимально допустимая величина шага.
Вместо числа шагов на интервале интегрирования ОДУ, в этих функциях необходимо задать точность расчета численным методом значения функции в последней точке. В этом смысле параметр асе похож на константу TOL, которая влияет на большинство встроенных численных алгоритмов Mathcad. Количество шагов и их расположение определяется численным методом автоматически, чтобы обеспечить эту точность. Два последних параметра нужны для того, чтобы пользователь мог искусственно повлиять на разбиение интервала на шаги. Параметр k служит для того, чтобы шагов не было чрезмерно много, причем, нельзя сделать k>1000. Параметр s - для того чтобы ни один шаг не был слишком малым для появления больших погрешностей при разностной аппроксимации дифференциальных уравнений внутри алгоритма. Эти параметры следует задавать явно, исходя из свойств конкретной системы ОДУ. Как правило, проведя ряд тестовых расчетов, можно подобрать их оптимальный набор для каждого конкретного случая.
Пример использования функции bulstoer( ) приведен на рис. 5.6. Структура матрицы результатов u такая же, как и в случае решения системы ОДУ на рис. 5.4. Однако в данном случае нужно значение последней точки интервала. Поскольку выполненное количество шагов неизвестно, т. е. размер матрицы заранее неизвестен, то его необходимо предварительно определить с помощью функции length( ) и выбрать последнюю точку. Для этой цели необходимо транспонировать матрицу u.
Чтобы использовать альтернативный численный метод, достаточно на рис. 5.6. заменить функцию buistoer( ) на rkadapt( ). Эти функции не предназначены для нахождения решения в промежуточных точках интервала, хотя они и выдают их в матрице-результате.
Рис. 5.6. Решение системы двух ОДУ