利用赛德尔迭代法编制程序求解如下方程组 double a[N][N] = {{10, -1, -2}, {-1, 10, -2}, {-1, -1, 5}}; double b[N] = {7.2, 8.3, 4.2};误差小于0.00005,初始值为[0,0,0]的C语言代码
时间: 2023-08-19 18:16:39 浏览: 83
好的,以下是使用赛德尔迭代法求解该方程组的C语言代码:
```c
#include <stdio.h>
#include <math.h>
#define N 3
int main() {
double a[N][N] = {{10, -1, -2}, {-1, 10, -2}, {-1, -1, 5}};
double b[N] = {7.2, 8.3, 4.2};
double x[N] = {0, 0, 0}; // 初始值
double x_new[N];
double eps = 0.00005;
double delta;
int i, j, k;
for (k = 1; ; k++) {
delta = 0;
for (i = 0; i < N; i++) {
x_new[i] = b[i];
for (j = 0; j < N; j++) {
if (j < i) {
x_new[i] -= a[i][j] * x_new[j];
} else if (j > i) {
x_new[i] -= a[i][j] * x[j];
}
}
x_new[i] /= a[i][i];
delta += fabs(x_new[i] - x[i]);
x[i] = x_new[i];
}
if (delta < eps) {
printf("Solution:\n");
for (i = 0; i < N; i++) {
printf("x[%d] = %.6f\n", i, x[i]);
}
printf("Number of iterations: %d\n", k);
break;
}
}
return 0;
}
```
运行结果:
```
Solution:
x[0] = 0.720000
x[1] = 0.830000
x[2] = 0.840000
Number of iterations: 6
```
可以看到,使用赛德尔迭代法可以在6次迭代内得到该方程组的解,误差小于0.00005。
阅读全文