#include<stdio.h>
#include<math.h>
#define N 10010
#define e 1e-7 //设定精度
double A[N][N];
double X[N],XK[N];
int m,n;
double Jacobi(int m,int n)//jacobi迭代函数;
{
double Max=-1.0;
int i,j;
for(i=1;i<=n;i++)
{
XK[i]=A[i][n+1];
for(j=1;j<=n;j++)
{
if(j==i)
continue;
XK[i]-=A[i][j]*X[j];
}
XK[i]/=A[i][i];
}//迭代;
for(i=1;i<=n;i++)
{
if(fabs(XK[i]-X[i])>Max)
Max=fabs(XK[i]-X[i]);
X[i]=XK[i];
}//计算最大误差;
return Max;
}
int main()
{
int i,j;
double Max;
scanf("%d%d",&m,&n);//矩阵大小;
for(i=1;i<=m;i++)
{
for(j=1;j<=n+1;j++)
scanf("%lf",&A[i][j]);
} //以增广矩阵的格式输入数据;
for(i=1;i<=m;i++)
scanf("%lf",&X[i]);//输入初始值;
do
{
Max=Jacobi(m,n);
}while(Max>e);//jacobi迭代;
for(i=1;i<=n;i++)
printf("X%d=%lf\n",i,XK[i]);//输出解;
return 0;
}
雅可比迭代
最新推荐文章于 2023-11-09 17:34:51 发布