Метод прогонки
Теоретическая часть
Пусть Ax=b, где A – трехдиагональная матрица. Матрица A=[aij] называется (2m+1) – диагональной, если aij=0 при |i-j|>m.
Для решения систем уравнений такого вида часто наиболее целесообразно применять метод Гаусса при естественном порядке исключения неизвестных. В случае, когда этот метод применяется для решения СЛАУ, его называют методом прогонки.

Получаем
, используем метод прогонки, исходя из следующего рекуррентного соотношения:
,(2) получаем:


Эти формулы представляют собой прямой проход метода. Обратный проход:

Остальные xi находим из формулы (2).
Для применимости метода прогонки достаточно, чтобы матрица A была с диагональным преобладанием.
Алгоритм:
1. Вводим str/stlb – количество строк/столбцов, A – элементы расширенной матрицы
2. Проверяем матрицу на диагональное преобладание
3. Если матрица с диагональным преобладанием тогда п.4, иначе п.8
4. Выполняем прямой ход метода (формулы (3), (4)): c[1]:=A[1,2]/A[1,1]; d[1]:=A[1,stlb]/A[1,1];
c[i]:= (-A[i,i+1])/(A[i,i-1]*c[i-1]+A[i,i]);
d[i]:= (A[i,stlb]-A[i,i-1]*d[i-1])/(A[i,i-1]*c[i-1]+A[i,i])
5. Далее обратный ход (формулы (2),(5)):
x[str]:=(A[str,stlb]-A[str,str-1]*d[str-1])/(A[str,str]+A[str,str-1]*c[str-1]);
x[i]:=c[i]*x[i+1]+d[i];
6. Выводим x;
7. Проверки на невязку;
8. Заканчиваем алгоритм.
В программе: A[i,i+1] = Bi, A[i,i] = Ci, A[i,i-1] = Ai, A[i,stlb] = bi, d[i] = ?i, c[i] = ?i, str = n.
Описание входной информации: Str (Stlb) – количество строк (столбцов) в расширенной матрице, A [i, j] – матрица A (i – строки, j – столбцы)
Описание выходной информации: x – матрица-ответ
Ссылки для скачивания:Метод прогонки
Вы правы, Андрей, насчёт ошибки, хотя казалось, что всё верно при первом взгляде. Не очень понятна причина по которой автор первые прогоночные коэффициенты обозначает за вторые. Видимо это объясняется, тем что при написании программы массив коэф-тов у автора начинался с единицы, а не с нуля. Однако это очень с толку сбивает.
Да, я помню, когда писал теорию к этому методу пользовался одним учебником и там было немного не понятно как соотношение получают, поэтому переписал так как есть. Если Вы разобрались, то покажите как данную формулу получают? Буду весьма благодарен.
В формуле (2) ошибка, как легко убедиться, если подставить.
Правильно x[i-1] = alpha[i]*x[i] + beta[i]
Проблемы с решением задач на языке Delphi?
Чем он не полон и не совсем верен?
То что надо он считает, но только для матриц с диагональным преобладанием.
Алгоритм не полон и не совсем верен.