Для решения нелинейных дифференциальных уравнений с частными производными параболического типа существует целый ряд численных методов. В большинстве случаев они представляют собой различные варианты конечно-разностных методов, метода прямых и метода конечных элементов. Наряду со специальными работами имеется много учебников и монографий, посвященных численным методам решения дифференциальных уравнений с частными производными [6.23-6.28]. Ниже мы лишь кратко опишем основные конечно-разностные подходы и обсудим проблему их эффективной алгоритмизации. Bсе рассмотрение будет проведено на примере системы типа «реакция-диффузия» (4.3.7), т. е. для случая одной пространственной переменной.
В полуполосе выберем равномерную сетку узловых точек ;
1) Имеется в виду численное моделирование динамики, т. е. численное решение задачи Коши (точнее, задачи с начальными и краевыми условиями).
Значения приближенного решения в этих узловых точках будем обозначать как
Наиболее часто используется шеститочечная разностная схема типа Кранка — Николсона. Для системы (4.3.7) она дает:
Формулы (6.4.3) включают в себя явную схему ( ), чисто неявную схему ( ) (обе с погрешностью аппроксимации порядка ), а также классическую схему Кранка Николсона с погрешностью аппроксимации порядка . В случае граничных условий 1 рода естественно положить при всех
При этом формулы (6.4.3) записываются для . В случае граничных условий второго рода (ГУ2) уравнения (6.4.3) рассматриваются для , а граничные условия (4.3.12) заменяются соотношениями
Схема (6.4.3) является одношаговой по переменной , а это значит, что новый слой можно вычислить исходя из старого слоя . Это значит, что значения и зависят только от и . Явная схема представляет собой наиболее простой случай, поскольку значения неизвестных функций на новом слое (с верхним индексом ) непосредственно выражаются через значения на старом слое (с верхним индексом ). При этом нелинейные члены и легко аппроксимируются подстановкой значений и в функции и . Вместе с тем, в случае явной схемы должно выполняться условие численной устойчивости, накладывающее определенные
ограннчения на величину шага , а именно
Эффективность указанной явной схемы может оказаться довольно низкой, если из условия (6.4.6) приходится выбирать очень малый шаг .
При соотношение (6.4.3) представляет собой уже систему уравнений относительно неизвестных с верхним индексом . Такой метод называется неявным. При метод оказывается численно устойчивым, причем длина шага ничем не ограничивается. Записав нелинейные члены в уравнениях (6.4.3) в виде
(член записывается аналогично), мы получаем систему нелинейных уравнений, которую можно решать итерациями (например, методом Ньютона). Поскольку у нас имеется хорошее начальное приближение (а именно значения на старом слое ), обыкновенно оказывается достаточным одной-двух итераций. Метод Ньютона предпочтительнее использовать при анализе быстрых химических реакций (т. е. тогда, когда производные и велики. — Peд.). При этом число итераций может оказаться более высоким. Для вычисления нового слоя используются также неитерационные подходы, в которых нелинейные члены аппроксимируются иначе — исходя из уже найденных значений неизвестных. По существу в таких подходах мы имеем дело с одной итерацией, проводимой каким-либо методом, аналогичным методу Ньютона.
Остановимся на этом вопросе несколько подробнее.
6.4.1. Замена нелинейных членов
Простейшая разностная замена нелинейных членов в схеме (6.4.3) заключается в использовании линеаризации по и , т. е. для члена мы полагаем
тде коэффициенты зависят от известных значений решения на старом ( -м) слое. Так, например, при член
можно заменить произведением ; точно так же . При член можно заменить выражением . Довольно часто используется еще более простая замена
Если функции и легко продифференцировать аналитически, то можно воспользоваться формулой Тейлора, т. е. (например, для ) положить (ср. с (6.4.7))
Здесь (аналогично определяется .
Если аналитическое дифференцирование и оказывается сложным, используются процедуры экстраполяции, при которых значение для вычисления получают экстраполяцией, исходя из значений на нескольких предыдущих слоях (с верхними индексами . Например, полагают
Недостатком такого подхода является необходимость сохранять несколько старых слоев, а также необходимость какой-либо другой аппроксимации в начале расчета, поскольку алгоритм по-существу является многошаговым.
Еще одним часто используемым методом аппроксимации нелинейных членов является комбинация явной схемы с шагом шт в качестве предиктора с последующим использованием неявной схемы при в качестве корректора. При этом для вычисления нелинейностей используются значения неизвестных, найденные с помощью предиктора.
1) Здесь имеется в виду, что (или ) содержит слагаемое , и обсуждается, какое слагаемое можно ввести в определение величины. .
2) Разумно сначала определить по (6.4.7) и потом оставить только первые члены тейлоровского разложения. По существу об этом уже шла речь (см. абзац после формулы (6.4.7)).
) Здесь имеется в виду, что (по определению)
6.4.2. Автоматическое изменение шага по времени
Нахождение значений на одном слое при больших может потребовать много вычислений, в связи с чем часто оказывается выгодным регулировать длину шага по времени в зависимости от требуемой точности решения. Характер самого решения и его вариаций во времени может изменяться, а вместе с ними будет существенно изменяться и шаг , который обеспечивает заданную точность. В связи с этим включение в алгоритм изменения шага по времени может значительно повысить эффективность. используемой схемы. Основная проблема при этом — оценка погрешности решения, вызванной дискретизацией по переменной . Отметим, что используемые подходы носят эвристический характер. Опишем здесь три подхода.
a) Сравнение значений решения на новом слое, полученных с шагом , со значениями, полученными с помощью двух шагов длиной . В этом случае оценкой погрешности с целью регулирования шага может служить величина
(аналогичная формула записывается для ). Для более тонкой оценки можно также использовать экстраполяцию по Ричардсону [6.10]. Если действовать так, то для одного удачного и контролируемого шага нам потребуется сделать три «пробных» шага. По этой причине указанный подход используется сравнительно редко и в большинстве случаев после нескольких постоянных (т. е. не регулируемых) шагов по времени.
b) Оценка различия между экстраполированным значением , найденным с помощью формул (6.4.11) или (6.4.12), и вычисленным значением :
Аналогично определяется . Такую же оценку можно получить и для метода «предиктор-корректор».
c) В случае использования какой-то схемы линеаризации (6.4.8) мы можем положить
Аналогичным образом записывается и оценка . Отметим, что в данном случае мы находим отклонение в значениях функций и , но не в переменных состояния и .
1) Обычно норму \|\| определяют так: .
Каждую из величин , приведенных выше, можно использовать для регулировки шага по времени . С этой целью обычно выбирается некоторое характерное значение , причем шаг уменьшается, если . Если же существенно меньше, чем , то шаг увеличивается.
Мы ограничились здесь лишь идейной стороной алгоритма изменения шага . Очень вероятно, что действительная величина погрешности решения будет заметно отличаться от . Поэтому если мы хотим удостовериться в том, что заданная точность обеспечивается, следует провести вычисления при двух различных значениях (отличающихся, например, на порядок) и сравнить полученные результаты. Таким образом, однако, можно оценить лишь влияние погрешностей аппроксимации «в направлении оси ». Влияние погрешности аппроксимации «в направлении координаты » и адаптационные алгоритмы для выбора шага будут обсуждаться в следующем пункте.
6.4.3. Автоматическое изменение шага
В этом пункте мы исследуем проблему автоматического изменения шага на равномерной сетке. Для решения вопроса о том, достаточно ли велико (т. е. достаточно ли мал шаг ), при заданной «характерной величине погрешности» , будем искать оценку погрешности аппроксимации в направлении оси . В принципе мы могли бы провести вычисления для момента дважды — ш шагом и — и результаты сравнить. Такой численный подход не был бы, однако, достаточно простым и эффективным.
Другой, более подходящий путь заключается в том, чтобы использовать выражения для остаточного члена в соответствующих разностных формулах. При замене второй производной в (6.4.3) имеем
тде . Для аппроксимации четвертой производной можно воспользоваться разностной формулой вида
при . Тогда оценку погрешности «в направлении оси » можно записать в виде
Аналогичное выражение получается и для (при и для четвертой производной можно использовать асимметричные формулы). Обозначим .
Тогда для изменения (регулировки) можно использовать следующую стратегию:
1. ; шаг слишком велик, и его следует уменьшить вдвое. Значения решения в узловых точках, которые появятся между исходными узловыми точками, после уменьшения шага, можно определить с помощью интерполяции, например, положить
После проведения интерполяции перенумеруем заново узловые точки, удвоим число и вдвое уменьшим шаг ; затем продолжим вычисления.
2. , где значение , как правило, выбирается между 4 и 8. Шаг излишне мал и может быть удвоен. При этом узловые точки с нечетными индексами выбрасываются, оставшиеся точки перенумеровываются, шаг удваивается, а уменьшается вдвое.
3. В остальных случаях шаг остается неизменным и проводятся дальнейшие вычисления.
При формулировке алгоритма удобно задавать максимальный и минимальный допустимый шаг .
6.4.4. Адаптивная неравномерная сетка
Пусть у нас имеется некоторая, вообще говоря, неравномерная сетка узловых точек . Тогда вторую производную в направлении в точке можно заменить трехточечной разностной формулой
При этом разностные уравнения (6.4.3) изменяются только за счет подстановки формулы (6.4.20) вместо простейшей фор-
мулы для . Все остальное остается неизменным, включая вычисления нового слоя . Погрешность аппроксимации в направлении оси оценивается на каждом подынтервале отдельно. Айгенбергер и Батт [6.29] предложили следующий подход. Приближенное значение решения при и отыскивается двумя способами (ниже индекс опущен). В первом случае мы получаем его интерполированием по узловым точкам ,
во втором случае — интерполированием по узловым точкам ,
Для оценки погрешности аппроксимации на интервале ) используется величина
определяется аналогично. Тогда . Далее сетка узловых точек видоизменяется с помощью следующего алгоритма (здесь снова — заданная характерная величина погрешности).
1. . Тогда между и мы добавляем еще одну узловую точку . Приближенное значение решения в этой точке находим посредством интерполяции по четырем соседним узловым точкам . Проделаем эту операцию для . Далее перенумеруем узловые точки (добавим новые точки с сохранением порядка), после чего продолжим вычисления на построенной более густой сетке.
2. для и одновременно для . В этом случае мы отбрасываем узловую точку и вновь проводим
1) . Формула (6.4.20), очевидно, переходит в простейшую при .
соответствующие вычисления для соседних узловых точек. Затем перенумеровываем узловые точки и продолжаем вычисления. При этом значение выбирается обычно в диапазоне .
3. В остальных случаях сетка не изменяется. При этом бывает удобным задавать максимальное и минимальное расстояние между двумя соседними точками.
Для оценки погрешности аппроксимации на неравномерной сетке можно было бы использовать также соображения, изложенные в предыдущем пункте для случая равномерной сетки. В последнее время появился ряд работ по этой теме, см., например, сборник [6.35].
6.4.5. Метод прямых
С методом прямых мы уже встречались в п. 6.3 .3 (см. уравнения (6.3.31)). Его применение оказывается эффективным в тех случаях, когда число узловых точек сравнительно невелико. Последнего можно добиться увеличением порядка аппроксимации. В данном пункте на примере системы типа «реакция-диффузия» (4.3.7) будет продемонстрировано использование этого метода для случая, когда пространственные производные заменяются разностными отношениями с пятью узловыми точками. При этом порядок аппроксимации по сравнению с трехточечной схемой (6.3.31) возрастает с до . Обозначим и рассмотрим равномерную сетку . Уравнение (4.3.7a) заменяется системой уравнений
В случае граничных условий 1-го рода вида (4.3.9), мы имеем . Для уравнения (4.3.7b) соответствующая замена строится совершенно аналогично. Таким образом, мы получаем систему обыкновенных дифференциальных уравнений, которую можно решить каким-либо из методов, описанных в , например методом Рунге-Кутты.
Необходимо, конечно, представлять, что на величину шага, используемого в явной схеме интегрирования, накладывается
ограничение, которое определяется требованием численной устойчивости. Если же мы применяем схему интегрирования с автоматическим изменением шага (например, схему Мерсона), то будет выбран относительно короткий шаг интегрирования ( ), что, как правило, приводит к большим затратам машинного времени.
Использование метода прямых на очень редкой сетке узловых точек (часто неравномерной) приводит к небольшим системам обыкновенных дифференциальных уравнений, поведение которых можно достаточно эффективно анализировать методами, описанными в гл. 5. При этом часто оказывается возможным перенести полученные качественные выводы на исходные параболические уравнения; в частности, динамическое моделирование (численное решение нестационарных уравнений) можно проводить только в тех областях изменения параметров, где в результате анализа с помощью метода прямых следует ожидать появления каких-либо интересных эффектов.
Продемонстрируем указанный подход, построив аппроксимацию решения задачи 16 с помощью метода прямых [6.10]. Зададим граничные условия (P16-13) при и выберем узловых точек . Предположим теперь, что пространственный дифференциальный оператор в уравнении (Р16-11) заменяется в узловой точке некоторой линейной комбинацией значений решения в узловых точках, а именно
Коэффициенты находятся из требования, чтобы левая часть соотношения (6.4.25) точно равнялась правой для функций . Последовательно подставляя эти функции в формулу (6.4.25), получим
При каждом фиксированном соотношения (6.4.26) представляют собой систему линейных алгебраических уравнений
относительно неизвестных коэффициентов . Найдем решения этих систем при (в случае это оказывается излишним, поскольку в точке у нас задано ).
Используя аппроксимацию (6.4.25) для и , мы получаем из исходных уравнений (P16-11), (P16-12) систему обыкновенных дифференциальных уравнений для функций , :
(напомним, что и ).
Положим теперь , т. е. выберем лишь одну внутреннюю точку , а также точку . Система уравнений (6.4.26) для приобретает вид
откуда
Дифференциальные уравнения (6.4.27), (6.4.28) принимают в этом случае вид
(здесь уже использованы условия ).
Весьма существенным является в данном случае выбор координаты . Вилладсен и Стюарт [6.30] рекомендуют выбирать в качестве нуль подходящего ортогонального полинома. Рекомендуемые ими значения (нули неких полиномов Якоби) даются следующей таблицей:
Для стационарного решения системы (6.4.30) имеет место соотношение
аналогичное формуле (P16-15). Подставляя его во второе из уравнений (6.4.30) (при ), получаем
В табл. 6.12 приведена зависимость от Ф, подсчитанная с помощью метода отображения параметра Ф для последовательности значений . Сравнивая ее с табл. 6.9, можно заметить качественное совпадение зависимостей решений от параметра ( соответствует значению ). При зависимость однозначна, при у нас возникают кратные решения, а при в некотором диапазоне изменения параметра Ф существуют три стационарных решения данной задачи.
Таблища 6.12. Зависимость решений уравнения (6.4.32) от параметра Ф для задачи 16, .
Динамическое поведение системы (6.4.30) может подсказать нам, как будет вести себя исходная система двух дифференциальных уравнений с частными производными, динамическое моделирование которой требует больших затрат машинного времени. Выбор может дать нам более точные результаты. Более подробно результаты исследования задачи 16 приведены в работе [6.19], а для других задач — в работе [6.4].