Решение краевых задач при помощи разностных схем связано с необходимостью разработки собственного алгоритма для каждой конкретной задачи. Как вы помните (см. разд. 10.4), в случае линейных уравнений в результате построения разностной схемы система алгебраических сеточных уравнений также получалась линейной. Это автоматически означало, что она имеет единственное решение, которое в большинстве случаев могло быть найдено стандартными численными методами. В ситуации, когда исходные дифференциальные уравнения нелинейны, система разностных уравнений тоже является нелинейной, и их решение существенно усложняется, хотя бы потому, что оно не является единственным. Поэтому подход к построению разностных схем нелинейных уравнений должен быть специфическим, но наградой за него станет решение задач, с которыми не справляется алгоритм стрельбы (например, жестких).
Подробная разработка алгоритмов и соответствующих программ Mathcad выходит далеко за пределы данной книги, поэтому мы конспективно представим один из приемов решения нелинейных краевых задач, сводящийся к их линеаризации. В общих чертах подход заключается в следующем. Предположим, что некоторое приближение (обозначим его
Y(х) и у(х)) к решению нелинейной задачи (10.9) нам известно, и можно считать, что
Y->Y+Z и
y->y+z, где z и z — близкие к нулю функции х. Тогда, пользуясь их малостью (по сравнению с
Y0 и у0), можно разложить нелинейные слагаемые в уравнениях (10.9) в ряд Тейлора по
z и z. Получим:
Y'+Z' = -aY + ry + ε(Y2 + Yy) - aZ + rz + 2εY(Z + z);
Листинг 10.10. Решение линеаризованной задачи (продолжение
листинга 10.9)
Последний важный момент, который следует обозначить, связан с решением задач, обладающих значительной нелинейностью. Решение, приведенное в листингах 10.9, 10.10 и на рис. 10.12, согласно самой постановке, должно не сильно отличаться от решения линейной краевой задачи, поскольку функции
z(x) и z(x) малы по сравнению с Y(x) и у(х). Если же нелинейность сильная, то решение может сильно отличаться от
Y и у, и линеаризация (10.11) будет просто неправильной. В этом случае следует слегка усложнить алгоритм решения нелинейной краевой задачи.
Рис. 10.12. Решение нелинейной краевой задачи разностным методом (продолжение листингов 10.9 и 10.10)
Обозначим полученное в результате решение, как и в листинге 10.10, вектором J(ε), подчеркивая тем самым его зависимость от параметра нелинейности. Очевидно, что
J(0) есть решение линейной задачи. Для того чтобы решить задачу с сильной нелинейностью, т. е. довольно большим
ε=ε1, можно организовать продолжение по
ε как по параметру. Иными словами, используя в качестве начального приближения
J (0), можно решить задачу для другого, малого
ε=Дε, получив
J(Aε), затем, взяв это J(ε)
в качестве приближенного решения, получить J(2Aε) и т. д. малыми шагами добраться до желаемого
ε1.
ПРИМЕЧАНИЕ
Упрощенную реализацию этого алгоритма вы найдете на компакт-диске, прилагаемом к книге. Она связана с выводом во внешний файл данных результата задачи из листинга 10.10 и считыванием из него же этих данных в качестве входной информации для следующей итерации. В качестве нулевой итерации используется решение линейной задачи, выводимое предварительно в файл из усовершенствованного листинга 10.9.