gauss-seidel迭代法解线性方程组Ax=b,C实现
时间: 2023-12-25 09:04:15 浏览: 87
高斯-赛德尔迭代法求线性方程组Ax=b的解
以下是使用 Gauss-Seidel 迭代法解线性方程组 Ax=b 的 C 语言实现:
```c
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 100 // 最大迭代次数
#define eps 1e-14 // 精度
int main()
{
int n, i, j, k;
double A[N][N], x[N], b[N], s, t;
printf("请输入未知数个数:");
scanf("%d", &n);
printf("请输入系数矩阵A:\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%lf", &A[i][j]);
}
}
printf("请输入常数向量b:\n");
for(i=0; i<n; i++)
{
scanf("%lf", &b[i]);
}
for(i=0; i<n; i++)
{
x[i] = 0; // 初始化解向量x
}
for(k=0; k<N; k++) // 迭代 N 次
{
s = 0;
for(i=0; i<n; i++)
{
t = b[i];
for(j=0; j<n; j++)
{
if(j != i)
{
t -= A[i][j] * x[j];
}
}
t /= A[i][i];
if(fabs(t-x[i]) > s)
{
s = fabs(t-x[i]); // 计算误差
}
x[i] = t;
}
if(s < eps)
{
break; // 如果误差小于精度,结束迭代
}
}
if(k == N)
{
printf("迭代失败!\n");
}
else
{
printf("解向量x为:\n");
for(i=0; i<n; i++)
{
printf("%lf ", x[i]);
}
printf("\n迭代次数为:%d\n", k+1);
}
return 0;
}
```
其中,A 表示系数矩阵,b 表示常数向量,x 表示解向量,s 表示误差,t 表示临时变量。程序通过输入系数矩阵 A 和常数向量 b,计算解向量 x,并输出解向量和迭代次数。
阅读全文