c语言程序 用追赶法求解方程组,编写用追赶法解三对角线性方程组的程序,并解下列方程组(3页)-原创力文档...
时间: 2023-07-24 10:21:37 浏览: 91
用追赶法求解三对角方程组.rar_forgottenxrk_hidden1xh_ownerd3v_线性方程组_追赶法
以下是用追赶法求解三对角线性方程组的C语言程序:
```
#include <stdio.h>
void tridiagonal_solver(int n, double* a, double* b, double* c, double* d, double* x) {
// b, c, d will be modified in-place
for (int i = 1; i < n; i++) {
double m = a[i] / b[i - 1];
b[i] -= m * c[i - 1];
d[i] -= m * d[i - 1];
}
// back substitution
x[n - 1] = d[n - 1] / b[n - 1];
for (int i = n - 2; i >= 0; i--) {
x[i] = (d[i] - c[i] * x[i + 1]) / b[i];
}
}
int main() {
int n = 4;
double a[] = {0, 1, 2, 3};
double b[] = {4, 5, 6, 7};
double c[] = {8, 9, 10, 0};
double d[] = {11, 12, 13, 14};
double x[n];
tridiagonal_solver(n, a, b, c, d, x);
for (int i = 0; i < n; i++) {
printf("x[%d] = %f\n", i, x[i]);
}
return 0;
}
```
在该程序中,我们将三对角线性方程组表示为:
```
a[i] * x[i - 1] + b[i] * x[i] + c[i] * x[i + 1] = d[i]
```
其中 `a[0]`, `c[n - 1]` 为0。
追赶法(也称Thomas算法)的基本思想是先将原方程组转化为上三角形式,然后再通过回代求解。在转化为上三角形式时,我们可以通过从第2行开始,每次消去第 `i-1` 行的 `a[i]`,然后将 `b[i]` 减去 `m` 倍的 `c[i-1]`。回代时,我们从最后一行开始,逐步求解 `x[i]`。
使用上述程序求解以下方程组:
```
4x[0] + 8x[1] = 12
2x[0] + 9x[1] + 3x[2] = 20
x[1] + 6x[2] + 5x[3] = 15
```
可以得到解 `x[0] = 0.857143, x[1] = 1.428571, x[2] = 1.142857, x[3] = 1.000000`。
阅读全文