给我一个高斯塞德尔迭代法C语言程序求解三元一次方程组要求精度小于10的-5次方
以下是高斯塞德尔迭代法的C语言程序,用于求解三元一次方程组,精度小于10的-5次方。
#include <stdio.h>
#include <math.h>
#define N 3 // 矩阵维度
#define EPS 1e-5 // 精度
int main() {
double a[N][N+1] = {{2, -1, 0, 1}, {-1, 2, -1, 2}, {0, -1, 2, 3}}; // 系数矩阵
double x[N] = {0}; // 迭代初值
double p[N] = {0}; // 上一次迭代的解
int i, j, k;
double sum;
for (k = 0; k < 100; k++) { // 最多迭代100次
for (i = 0; i < N; i++) {
sum = 0;
for (j = 0; j < N; j++) {
if (j != i) {
sum += a[i][j] * x[j];
}
}
p[i] = x[i];
x[i] = (a[i][N] - sum) / a[i][i];
}
if (fabs(x[0] - p[0]) < EPS && fabs(x[1] - p[1]) < EPS && fabs(x[2] - p[2]) < EPS) {
// 判断是否满足精度要求
break;
}
}
if (k == 100) { // 超过最大迭代次数,可能无解或收敛速度太慢
printf("迭代失败\n");
} else {
printf("解为:\n");
for (i = 0; i < N; i++) {
printf("x[%d] = %lf\n", i, x[i]);
}
}
return 0;
}
在程序中,先定义了一个3x4的系数矩阵a和一个长度为3的初始迭代解x,其中a的最后一列是方程组的常数项。在迭代过程中,先对每个未知数的值进行更新,然后判断是否达到精度要求。如果达到了,就直接输出解,否则继续迭代。当迭代次数超过100次时,程序会提示迭代失败。
可以根据具体情况修改系数矩阵a和初始迭代解x,以求解不同的三元一次方程组
原文地址: https://www.cveoy.top/t/topic/dT3W 著作权归作者所有。请勿转载和采集!