Строгого общепринятого математического определения жестких ОДУ
нет. В рамках этой книги будем считать, что жесткие системы — это те уравнения,
решение которых получить намного проще с помощью определенных неявных методов,
чем с помощью явных методов (типа тех, что были рассмотрены в предыдущих разделах).
Примерно такое определение было предложено в 1950-х годах классиками в этой
области Кертиссом и Хирш-фельдером. Начнем разговор о жестких ОДУ с примера
нежесткого уравнения (листинг 11.11), решение которого показано на рис. 11.16.
На том же графике показано решение подобного ОДУ с другим коэффициентом при
Листании 11.11. Решение нежесткого ОДУ
Рис. 11.16. Решение нежестких ОДУ методом Рунге-Кутты (листинг 11.11)
На рис. 11.17 показано решение того же ОДУ с коэффициентом -50. Вас, несомненно, должен насторожить результат, выданный Mathcad. Характерная "разболтка" решения говорит о неустойчивости алгоритма. Первое, что можно сделать, — увеличить количество шагов в методе Рунге-Кутты. Для этого достаточно добавить третий параметр step в функцию odesoive(t,i,step). После нескольких экспериментов можно подобрать такое значение step, которое будет обеспечивать устойчивость решения. Читатель может самостоятельно убедиться, что при step>20 "разболтка" пропадает, и решение становится похожим на графики, показанные на рис. 11.16.
Рис. 11.17. Неверное решение более жесткого ОДУ методом Рунге-Кутты
Таким образом, во-первых, мы выяснили, что одни и те же уравнения с разными параметрами могут быть как жесткими, так и нежесткими. Во-вторых, чем жестче уравнение, тем больше шагов в обычных численных методах требуется для его устойчивого решения. С классическим примером ОДУ из листинга 11.11 все получилось хорошо, т. к. оно было не очень жестким, и небольшое увеличение числа шагов разрешило все проблемы. Для решения обычными методами более жестких уравнений требуются миллионы, миллиарды и даже большее число шагов.
Некоторые ученые замечают, что в последние годы методы Рунге-Кутты стали уступать свое главенствующее положение среди алгоритмов решения ОДУ методам, способным решать жесткие задачи.
Исторически, интерес к жестким системам возник в середине XX века при изучении уравнений химической кинетики с одновременным присутствием очень медленно и очень быстро протекающих химических реакций. Тогда неожиданно оказалось, что считавшиеся исключительно надежными методы Рунгй-Кутты стали давать сбой при расчете этих задач. Рассмотрим классическую модель взаимодействия трех веществ (Робертсон, 1966), которая как нельзя лучше передает смысл понятия жесткости ОДУ.
Пусть вещество "0"- медленно превращается в "1": "0" -> "1" (со скоростью 0.1), вещество "1" при каталитическом воздействии самого себя превращается очень быстро в вещество "2" : "1" + "1" -> "2" + "1" (10^3). И, наконец, подобным! образом (но со средней скоростью) реагируют вещества "2" и "1" : "1" + "2" -> "0" + "2" (10^2). Система ОДУ, описывающая динамику концентрации реагентов, с попыткой решения методом Рунге-Кутты, приведена в листинге 11.12.
Листинг 11.12. Жесткая сисема ОДУ химической кинетики
Бросается в глаза сильно различающийся порядок коэффициентов при разных слагаемых. Именно степень этого различия чаще всего и определяет жесткость системы ОДУ. В качестве соответствующей характеристики выбирают матрицу Якоби (якобиан) векторной функции Fit,у), т.е. функциональную матрицу, составленную из производных F(t,y) (см. разд. "Частные производные" гл. 7). Чем вырожденнее матрица Якоби, тем жестче система уравнений. В приведенном примере определитель якобиана и вовсе равен нулю при любых значениях у„, yi и у2 (листинг 11.13, вторая строка). В первой строке листинга 11.13 приведено напоминание способа вычисления якобиана средствами Mathcad на примере определения элементов его первой строки.
Листинг 11.13. Якобиан рассматриваемой системы ОДУ химический киметики
Для примера, приведенного в листинге 11.12, стандартным методом Вунге-Кутгы все-таки удается найти решение (оно показано на рис. 11.18). Однако для этого требуется очень большое число шагов, м=2000о, что делает (расчеты очень медленными. При меньшем числе шагов численному алгоритму не удается найти решение. В процессе работы алгоритма оно расходятся, и Mathcad вместо результата выдает ошибку о превышении предельно большого числа.
Еще один факт, на который стоит обратить внимание, — это различие в порядке величины получающегося решения. Как видно из рис. 11.18, концентрация первого реагента y1 существенно (в тысячи раз) превышает концентрацию остальных. Это свойство также очень характерно для жестких систем.
В принципе, можно было бы снизить жесткость системы "вручную", применяя масштабирование. Для этого нужно искусственно уменьшить искомую функцию yl, к примеру, в тысячу раз, разделив все слагаемые в системе ОДУ, содержащие yi, на 1000. После масштабирования для решения полученной системы методом Рунге-Кутты будет достаточно взять всего М=20 шагов.
Рис. 11.18. Решение жесткой системы ОДУ химической кинетики методом Рунге-Кутты (листинг 11.12)