Метод прогонки
Прогонкой называется модификация метода Гаусса для решения систем линейных алгебраических уравнений с трехдиагональной матрицей. Если матрица системы обладает определенными свойствами, то метод прогонки является численно устойчивым и очень эффективным методом, который позволяет практически мгновенно решать одномерные краевые задачи, одну из которых мы рассмотрели в предыдущем разделе. Большинство корректно поставленных физических задач приводит к системе уравнений с хорошей матрицей, и в этих случаях метод прогонки проявляет слабую чувствительность как к погрешностям задания начальных условий, так и к погрешностям вычислительного характера.
В предыдущем разделе была сформулирована так называемая первая краевая задача, в которой требуется найти значения функции во внутренних узлах сетки при условии, что на границах области они известны. В теории и на практике рассматриваются задачи с более сложными граничными условиями. Например, когда на одной из границ известна не функция, а ее первая производная — граничное условие второго рода. Имеют место и постановки задач с граничными условиями третьего рода, когда на границе должно выполняться какое-то известное заранее соотношение между функцией и ее первой производной. С точки зрения численной реализации все три типа задач можно описать с помощью соотношений одного и того же вида:
U 0 =y 0 U 1 +б 0 , (6)
U n =y n U n-1 +б n , (7)
Они связывают значения разностных аналогов Ui, непрерывной функции U(x) в двух узлах, прилегающих к левой или правой границе. Так, граничное условие первого рода и Uo = с может быть задано с помощью пары параметров: у 0 = 0, б 0 = с, а условие второго рода dU/dx| 0 = с с помощью другой лары: у 0 = 1,бo=ch, где h — это шаг сетки. В нашем приложении будет работать немодальный диалог, который позволит пользователю задавать различные типы граничных условий, изменяя численные значения четырех коэффициентов у o , бo, yn , бn
Суть метода прогонки заключается в том, что, используя специфику структуры матрицы системы уравнений (наличие трех диагоналей), удается получить рекуррентные формулы для вычисления последовательности коэффициентов прогонки , которые позволяют на обратном ходу вычислить значения функции в узлах сетки. Рассматривая конечно-разностное уравнение для первой тройки узлов:
b 1 U 1 +c 1 U 2 =-a 1 U 0 ,
видим, что оно совпадает по форме с обобщенным граничным условием (6) и связывает между собой два соседних значения U 1 , и U 2 . Перепишем его в виде:
d 1 U 2 +e=U 1 , (8)
где d 1 и е 1 вычисляются по известным значениям. Наблюдательный читатель заметит, что это справедливо только для задач первого рода. Чуть позже мы получим общее решение. Теперь мы можем исключить £/, из уравнения для следующей тройки узлов:
a 2 U 1 +b 2 U 2 +c 2 U 2 =f 2 ,
подставив значение U 1 из уравнения (8). После этой процедуры последнее уравнение также может быть приведено к виду:
d 3 U 3 +e 2 =U 2 ,
Подстановки можно продолжать и дальше, но для получения рекуррентного соотношения, достаточно рассмотреть одну из них для произвольного индекса i. Подставив
d i-1 U i +e i-1 =U i-1 ,
в уравнение
a i U i-1 +b i U i +c i U i+1 =f i ,
получим:
U i =-[C iUi+1 /(a i d i-1 +b i )]+ [f i-ai+1 *ei+1 /(a i d i-1 +b i )] (9)
Это соотношение дает две рекуррентные формулы для коэффициентов:
d i =-C i /(a i *d i-1 +b i ) (10)
e i =(f i- a i*ei-1) /(a i d i-1 +b i ) (11)
Цикл вычисления последовательности коэффициентов в соответствии с этими формулами носит название прямого хода прогонки. Начальные значения коэффициентов определяются предварительно заданным граничным условием (6):
d o =y o , e o =б o ,
Цикл прямого хода повторяется N-1 раз. Последними будут вычислены коэффициенты d N-1 и e N-1 , которые связывают функции в двух узлах вблизи правой границы:
Un-1=d n-1 U n +en-1 (12)
Если на правой границе задано условие первого рода U n = с, то уже можно вычислить U n-1 по формуле (12) и далее продолжать обратный ход прогонки, используя уравнения (9) при I = N - 1,..., 1, 0. Если условие более сложное, то вместе с уравнением (12) надо рассмотреть уравнение (7), определяющее граничное условие на правой границе. Напомним его:
U n =y n U n-1 +б n (7)
Соотношения (7) и (12) составляют систему из двух уравнений с двумя неизвестными. Используя определители, запишем ее решение.
U n-1 =(e n-1 +б n d n-1 )/(1-y n dn-1) (13)
U n =(б n +y n e n-1 )/(1-y n d n-1 )
Таким образом, мы нашли значения в двух узлах, лежащих вблизи правой границы расчетной области. Теперь, используя формулу (9) и уменьшая индекс i от N= 2 до 0, можно вычислить все неизвестные £/.. Этот процесс носит название обратного хода прогонки. Почему-то в голову приходит лозунг нашего времени: «Цели ясны, задачи определены. За работу, товарищи!» Нам осталось всего лишь реализовать описанный алгоритм в виде MFC-приложения.
Заключение: в ходе решения курсовой работы был применен численный метод решения краевой задачи в разностном виде. Используя прямой ход метода прогонки были найдены прогоночные коэффициенты P,Q. Применяя обратный ход метода прогонки были найдены значения функции U на первом слое по времени, всего было произведено 10 шагов по времени. Уже на 8 слое по времени были получены значения функции U, которые практически не отличались от значений функции на 7 слое по времени.
