用C程序写一个用高斯-赛德尔迭代法解线性方程组且精确度要求为0.00001的算法
时间: 2024-05-29 09:10:31 浏览: 30
#include<stdio.h>
#include<math.h>
#define N 100 // 最大迭代次数
#define eps 0.00001 // 精度要求
int main()
{
int n, i, j, k, flag = 0;
float A[N][N], b[N], x[N], y[N], sum, error;
printf("请输入矩阵的阶数n: ");
scanf("%d", &n);
printf("请输入矩阵A的系数:\n");
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
scanf("%f", &A[i][j]);
}
}
printf("请输入矩阵b的系数:\n");
for(i = 1; i <= n; i++)
{
scanf("%f", &b[i]);
}
printf("请输入初值x0:\n");
for(i = 1; i <= n; i++)
{
scanf("%f", &x[i]);
}
k = 0;
while(k < N)
{
for(i = 1; i <= n; i++)
{
sum = 0;
for(j = 1; j <= n; j++)
{
if(i != j)
{
sum += A[i][j] * x[j];
}
}
y[i] = (b[i] - sum) / A[i][i];
}
error = fabs(x[1] - y[1]);
for(i = 2; i <= n; i++)
{
if(fabs(x[i] - y[i]) > error)
{
error = fabs(x[i] - y[i]);
}
x[i] = y[i];
}
if(error < eps)
{
flag = 1;
break;
}
k++;
}
if(flag == 1)
{
printf("迭代次数: %d\n", k+1);
printf("方程的解为:\n");
for(i = 1; i <= n; i++)
{
printf("%f ", x[i]);
}
printf("\n");
}
else
{
printf("迭代失败!\n");
}
return 0;
}
阅读全文