c语言实现赛德尔迭代法求解方程组
时间: 2023-07-13 17:15:06 浏览: 51
以下是使用 C 语言实现赛德尔迭代法求解线性方程组的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3 // 方程组的元数
#define MAX_ITERATION 1000 // 最大迭代次数
#define EPSILON 1e-9 // 精度要求
int main() {
double a[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 系数矩阵
double b[N] = {4, 5, 6}; // 常数向量
double x[N] = {0}; // 初始解向量
double x_old[N] = {0}; // 上一次的解向量
int iteration = 0; // 迭代次数
// 开始迭代
while (iteration < MAX_ITERATION) {
// 保存上一次的解向量
for (int i = 0; i < N; i++) {
x_old[i] = x[i];
}
// 更新解向量的每个元素
for (int i = 0; i < N; i++) {
double sum1 = 0;
double sum2 = 0;
for (int j = 0; j < i; j++) {
sum1 += a[i][j] * x[j];
}
for (int j = i + 1; j < N; j++) {
sum2 += a[i][j] * x_old[j];
}
x[i] = (b[i] - sum1 - sum2) / a[i][i];
}
// 判断是否满足精度要求
int flag = 1;
for (int i = 0; i < N; i++) {
if (abs(x[i] - x_old[i]) > EPSILON) {
flag = 0;
break;
}
}
if (flag) {
break;
}
iteration++;
}
// 输出解向量
printf("Solution:\n");
for (int i = 0; i < N; i++) {
printf("x%d = %f\n", i + 1, x[i]);
}
return 0;
}
```
其中,a[N][N] 表示系数矩阵,b[N] 表示常数向量,x[N] 表示解向量,x_old[N] 表示上一次的解向量,iteration 表示迭代次数,flag 表示是否满足精度要求。在这个示例中,系数矩阵和常数向量都是固定的,可以根据实际情况进行修改。
阅读全文