追赶法是一种适用于三对角矩阵的线性方程组求解方法。其通用程序可以分为以下步骤:
初始化
定义三对角矩阵A的各组成单元,包括对角线元素$b$、主对角线元素$a$和第1条对角线元素$c$。
初始化变量$u_0$和$y_0$为0,并将$a(1)$设为0。
“追”的过程
从$i=2$到$n-1$,计算每一步的$L(i)$和$y(i)$,其中$L(i) = b(i) - a(i) * u(i-1)$,$y(i) = (d(i) - y(i-1) * a(i)) / L(i)$,$u(i) = c(i) / L(i)$。
“赶”的过程
计算最后一步的$L(n)$和$y(n)$,其中$L(n) = b(n) - a(n) * u(n-1)$,$y(n) = (d(n) - y(n-1) * a(n)) / L(n)$。
求解最终结果
$x(n) = y(n)$,即得到线性方程组的解。
示例代码(C语言)
```c
include
void追赶法(float a, float b, float c, float x, float y) {
float temp, alpha, beta;
int i, j, k;
// 初始化
for (i = 0; i < 3; i++) {
temp = 0;
for (j = 0, k = i + 1; j < i; j++)
temp += a[j][i] * a[i][j];
a[i][i] -= temp;
}
// “追”的过程
u = b;
y = d / u;
for (i = 1; i < 3; i++) {
l[i] = a[i][i - 1] / u[i - 1];
u[i] = b[i] - l[i] * c[i - 1];
y[i] = (d[i] - l[i] * y[i - 1]) / u[i];
}
// “赶”的过程
x = y;
for (i = 2; i > 0; i--) {
x[i - 1] = y[i] - beta * x[i];
beta = a[i - 1][i] / u[i];
}
}
int main() {
float a = {{5, 1, 0}, {1, 5, 1}, {0, 1, 5}};
float b = {17, 14, 7};
float c = {1, 1, 1};
float x, y;
追赶法(a, b, c, x, y);
printf("解为: x = %f, %f, %f\n", x, x, x);
return 0;
}
```
示例代码(MATLAB)