11.5.2. Функции для решения жестких ОДУ
Решение жестких систем дифференциальных уравнений можно осуществитьтолько с помощью встроенных функций, аналогичных по действию семейству рассмотренных выше функций для обычных ОДУ. Отличием является
добавление к стандартному набору параметров дополнительной матричнойфункции, задающей якобиан системы ОДУ. Решение выдается в виде матрицы, по форме идентичной аналогичным функциям решения нежесткихзадач Коши.
- stiffb(yO,to,ti,M, F, j) - метод Булирша-Штера для жестких системОДУ;
- stiffr (yO,to,ti,M,F, j) - метод Розенброка для жестких систем ОДУ;
уО - вектор начальных значений в точке to;
to,ti - начальная и конечная точки расчета;
м - число шагов численного метода;
F - векторная функция F(t,y) размера IXN, задающая систему ОДУ;
J - матричная функция J(t,y) размера (N+IJXN, составленная из вектора производных функции F(t,y) no t (правый столбец) и ее якобиана (N левых столбцов).
Покажем действие этих алгоритмов на том же примере жесткой системыОДУ химической кинетики (листинг 11.14). Обратите внимание, как следуетпредставлять в данном случае якобиан, сравнив задание матричной функциив предпоследней строке листинга 11.14 с заданием якобиана из листинга 11.13.
Листинг 11.14. Решение жесткой системы ОДУ химической кинетики
Расчеты показывают, что для получения того же результата (см. рис. 11.18)оказалось достаточно в тысячу раз меньшего количества шагов численного
алгоритма, чем для стандартного метода Рунге-Кутты! Примерно во столькоже раз требуется меньше компьютерного времени на проведение расчетов.Стоит ли говорить, что, если вы имеете дело с жёсткими (в той или инойстепени) системами, применение описанных специальных алгоритмов просто необходимо.
Важно заметить, что до сих пор мы имели дело с примером не очень жесткой системы. Попробуйте вместо скоростей упомянутых химических реакций (см. разд. 11.5.1), 0.1, 103 и 102 взять другие числа, например о.05, 104 и 107 соответственно. Заметим, что такое соотношение скоростей часто встречается в прикладных задачах химической кинетики и определяет куда болеежесткую систему ОДУ. Ее уже никак не удается решить стандартными методами, поскольку число шагов численного метода должно быть просто гигантским. А между тем, алгоритмы для жестких ОДУ справляются с этойзадачей с легкостью (рис. 11.19), причем практически при тех же значенияхшага, что были взяты в листинге 11.14.
Рис. 11.19. Решение более жесткой системы ОДУ химической кинетики методом Розенброка
Обратите внимание, что порядки величины решений для концентраций различных веществ на рис. 11.19 различаются еще сильнее, чем в предыдущем(менее жестком) примере.
Примечание
Это еще раз доказывает, что одна и та же система ОДУ с различными коэффициентами может быть жесткой в разной степени. В частности, приведенныйвыше пример генератора Ван дер Поля с параметром ц=5000 - это уже пример жесткой задачи.
В заключение приведем встроенные функции, которые применяются длярешения жестких систем ОДУ не на всем интервале, а только в одной заданной точке ti.
- stiffb(yO,to,ti,acc,F, j, k, s) - метод Булирша-Штера- stiffr (yO,to,ti,acc,F, J,k,s) - метод Розенброка
Имена этих функций пишутся с маленькой буквы, а их действие и наборпараметров полностью аналогичны рассмотренным нами ранее для функций, относящихся к решению в заданной точке нежестких систем(см. разд. 11.3.2). Отличие заключается в специфике применяемого алгоритма и необходимости задания матричной функции якобиана J(t,y).
Глава 10
Содержание
Глава 11