ПОИСК
Категории книг
ОПРОС
Вопрос: Какой язык программирования вы предпочитаете
С/C++
Delphi
Visual Basic
Perl
Java
PHP
ASP
Другой
ЭТО ПОЛЕЗНО!
ОБРАТНАЯ СВЯЗЬ

/ Главная / Программирование / Иллюстрированный самоучитель по Visual Studio.Net
Иллюстрированный самоучитель по Visual Studio.Net

 

Метод прогонки

Прогонкой называется модификация метода Гаусса для решения систем линейных алгебраических уравнений с трехдиагональной матрицей. Если матрица системы обладает определенными свойствами, то метод прогонки является численно устойчивым и очень эффективным методом, который позволяет практически мгновенно решать одномерные краевые задачи, одну из которых мы рассмотрели в предыдущем разделе. Большинство корректно поставленных физических задач приводит к системе уравнений с хорошей матрицей, и в этих случаях метод прогонки проявляет слабую чувствительность как к погрешностям задания начальных условий, так и к погрешностям вычислительного характера.

В предыдущем разделе была сформулирована так называемая первая краевая задача, в которой требуется найти значения функции во внутренних узлах сетки при условии, что на границах области они известны. В теории и на практике рассматриваются задачи с более сложными граничными условиями. Например, когда на одной из границ известна не функция, а ее первая производная — граничное условие второго рода. Имеют место и постановки задач с граничными условиями третьего рода, когда на границе должно выполняться какое-то известное заранее соотношение между функцией и ее первой производной. С точки зрения численной реализации все три типа задач можно описать с помощью соотношений одного и того же вида:

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-приложения.

 



Компьютерные книги © 2006-2013
computers.plib.ru