Жесткие системы ОДУ
До сих пор мы имели дело с "хорошими" уравнениями, которые надежно решались численными методами Рунге-Кутты. Однако имеется класс так называемых жестких (stiff) систем ОДУ, для которых стандартные методы практически неприменимы, поскольку их решение требует исключительно малого значения шага численного метода. Некоторые из специальных алгоритмов, разработанных для этих систем, реализованы в Mathcad.
Что такое жесткие ОДУ?
Строгого общепринятого математического определения жестких ОДУ нет. В рамках этой книги будем считать, что жесткие системы – это те уравнения, решение которых получить намного проще с помощью определенных неявных методов, чем с помощью явных методов (типа тех, что были рассмотрены в предыдущих разделах). Примерно такое определение было предложено в 1950-х годах классиками в этой области Кертиссом и Хиршфельдером.
Листинг 11.11. Решение нежесткого ОДУ:
Начнем разговор о жестких ОДУ с примера нежесткого уравнения (листинг 11.11), решение которого показано на рис. 11.16. На том же графике показано решение подобного ОДУ с другим коэффициентом при правой части, равным не -10, а -30. Решение обоих уравнений не составило труда, и численный метод Рунге-Кутты дал правильный результат.
Рис. 11.16. Решение нежестких ОДУ методом Рунге-Кутты (листинг 11.11)
На рис. 11.17 показано решение того же ОДУ с коэффициентом -50. Вас, несомненно, должен насторожить результат, выданный Mathcad. Характерная "разболтка" решения говорит о неустойчивости алгоритма. Первое, что можно сделать, – увеличить количество шагов в методе Рунге-Кутты. Для этого достаточно добавить третий параметр step в функцию odesoive(t,i,step). После нескольких экспериментов можно подобрать такое значение step, которое будет обеспечивать устойчивость решения. Читатель может самостоятельно убедиться, что при step>20 "разболтка" пропадает, и решение становится похожим на графики, показанные на рис. 11.16.
Рис. 11.17. Неверное решение более жесткого ОДУ методом Рунге-Кутты