Метки: Метод прогонки алгоритм, метод прогонки c++, метод прогонки как решать, метод прогонки уравнение пуассона.
Метод прогонки или алгоритм Томаса (англ. Thomas algorithm) используется для решения систем линейных уравнений вида , где A — трёхдиагональная матрица.
Содержание |
Система уравнений равносильна соотношению
Метод прогонки основывается на предположении, что искомые неизвестные связаны рекуррентным соотношением:
Используя это соотношение, выразим xi-1 и xi через xi+1 и подставим в уравнение (1):
где Fi — правая часть i-го уравнения. Это соотношение будет выполняться независимо от решения, если потребовать

Отсюда следует:

Из первого уравнения получим:

После нахождения прогоночных коэффициентов и , используя уравнение (2), получим решение системы. При этом,
Другим способом объяснения существа метода прогонки, более близким к терминологии конечно-разностных методов и объясняющим происхождение его названия, является следующий: преобразуем уравнение (1) к эквивалентному ему уравнению
c надиагональной (наддиагональной) матрицей
.
Вычисления проводятся в два этапа. На первом этапе вычисляются компоненты матрицы и вектора , начиная с до
и
На втором этапе, для вычисляется решение:
Такая схема вычисления объясняет также английский термин этого метода «shuttle».
Для применимости формул метода прогонки достаточно свойства строгого диагонального преобладания у матрицы A.
Данный код работает при предположении, что a[0] = 0, b[n-1] = 0.
/**
* n - число уравнений (строк матрицы)
* b - диагональ, лежащая над главной (нумеруется: [0;n-2])
* c - главная диагональ матрицы A (нумеруется: [0;n-1])
* a - диагональ, лежащая под главной (нумеруется: [1;n-1])
* f - правая часть (столбец)
* x - решение, массив x будет содержать ответ
*/
void solveMatrix (int n, double *a, double *c, double *b, double *f, double *x)
{
double m;
for (int i = 1; i < n; i++)
{
m = a[i]/c[i-1];
c[i] = c[i] - m*b[i-1];
f[i] = f[i] - m*f[i-1];
}
x[n-1] = f[n-1]/c[n-1];
for (int i = n - 2; i >= 0; i--)
x[i]=(f[i]-b[i]*x[i+1])/c[i];
}
Tags: Метод прогонки алгоритм, метод прогонки c++, метод прогонки как решать, метод прогонки уравнение пуассона.