高斯赛德尔迭代法c语言
时间: 2023-07-02 20:17:59 浏览: 119
用C语言实现高斯-赛德尔迭代方法
4星 · 用户满意度95%
高斯赛德尔迭代法是一种求解线性方程组的方法,以下是基于C语言的高斯赛德尔迭代法实现代码:
```c
#include <stdio.h>
#include <math.h>
#define MAX_ITER 1000 // 最大迭代次数
#define TOL 0.0001 // 迭代收敛精度
int main() {
int n = 3; // 方程组的未知数个数
double a[n][n+1]; // 增广矩阵
double x[n]; // 解向量
double x0[n]; // 初值向量
double error = 0; // 迭代误差
int iter = 0; // 迭代次数
// 初始化增广矩阵
a[0][0] = 3; a[0][1] = -0.1; a[0][2] = -0.2; a[0][3] = 7.85;
a[1][0] = 0.1; a[1][1] = 7; a[1][2] = -0.3; a[1][3] = -19.3;
a[2][0] = 0.3; a[2][1] = -0.2; a[2][2] = 10; a[2][3] = 71.4;
// 初始化初值向量
x0[0] = x0[1] = x0[2] = 0;
// 开始迭代
do {
error = 0;
for(int i = 0; i < n; i++) {
x[i] = a[i][n] / a[i][i];
for(int j = 0; j < n; j++) {
if(j != i) {
x[i] -= a[i][j] / a[i][i] * x0[j];
}
}
error = fmax(error, fabs(x[i] - x0[i]));
x0[i] = x[i];
}
iter++;
} while(iter < MAX_ITER && error > TOL);
// 输出结果
if(iter < MAX_ITER) {
printf("Solution found after %d iterations:\n", iter);
for(int i = 0; i < n; i++) {
printf("x%d = %f\n", i+1, x[i]);
}
} else {
printf("Solution not found within %d iterations\n", MAX_ITER);
}
return 0;
}
```
以上代码实现了一个有三个未知数的线性方程组的求解,可以根据实际情况修改增广矩阵和初值向量。
阅读全文