#include<stdio.h>
#include<math.h>
float cal(float X[],float A[10][10],int i,int s,int n)
{
int j;
float sum=0;
for(j=s;j<=n;++j)
sum=sum+A[i][j]*X[j];
return sum;
}
float jacobi(int n,int N,float A[10][10],float B[10],float flag,float X[10])
{
int k=1,i,j,l;
float Xi[10],temp[10];
for(i=1;i<=n;++i)
temp[i]=X[i];
printf("k ");
for(l=1;l<=n;++l)
printf("X%d ",l);
printf("\n");
while(k<=N)
{
printf("%d ",k-1);
for(l=1;l<=n;++l)
{
printf("%f ",X[l]);
}
printf("\n");
for(i=1;i<=n;++i)
{
Xi[i]=(-cal(temp,A,i,1,i-1)-cal(temp,A,i,i+1,n)+B[i])/A[i][i];
temp[i]=Xi[i];
}
for(j=1;j<=n;++j)
{
if(fabs(Xi[j]-X[j])<flag)
{
return 1;
}
}
k++;
for(j=1;j<=n;++j)
{
X[j]=Xi[j];
}
}
return 0;
}
int main(){
int i,j,n,N;
float A[10][10],B[10],flag,X[10];
printf("方程组的未知个数n;系数矩阵A;常数项b;初始值X;精度要求flag;最大迭代次数N.");
scanf("%d",&n);
//
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&A[i+1][j+1]);
for(i=1;i<=n;++i)
scanf("%f",&B[i]);
for(i=1;i<=n;++i)
scanf("%f",&X[i]);
scanf("%f",&flag);
scanf("%d",&N);
if(jacobi(n,N,A,B,flag,X))
{
printf("The anser:\n");
for(i=1;i<=n;++i)
printf("%f ",X[i]);
}else
printf("error!\n");
printf("\n");
return 0;
}
Gauss_Seidel
最新推荐文章于 2023-06-12 22:22:11 发布