📄 雅可比迭代.cpp
字号:
//雅可比迭代的C语言实现
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#define T 100
void main()
{int n,N,i,j,k;
float a[T][T],b[T],x0[T],x[T],sum,e;
double max;
cout<<"//雅可比迭代程序实例//"<<endl;
md:printf("输入维数,最大迭数以及精确度:\n");
scanf("%d %d %f",&n,&N,&e);
cout<<"输入矩阵A的值"<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cin>>a[i][j];
}
cout<<"请输入矩阵b的值"<<endl;
for(i=1;i<=n;i++)
cin>>b[i];
cout<<"请输入初值x0"<<endl;
for(j=1;j<=n;j++)
cin>>x0[j];
k=1;
while(k<=N)
{
for(i=1;i<=n;i++)
{ sum=0;
for(j=1;j<=n;j++)
{ if(i!=j)
sum+=a[i][j]*x0[j];
}
x[i]=(b[i]-sum)/a[i][i];
}
max=fabs(x[1]-x0[1]);
for(i=1;i<=n;i++)
{if(fabs(x[i]-x0[i])>max)
max=fabs(x[i]-x0[i]);
}
if(max<e)
{cout<<"经过"<<k<<"次雅可比迭代,结果为:"<<endl;
for(i=1;i<=n;i++)
{ printf("x%d=%-6.10f\n",i,x[i]);
}
cout<<endl<<endl;
goto md;
k=N+1;
}
else if(k<N) { k++;
for(i=1;i<=n;i++)
x0[i]=x[i];
}
else {
cout<<"迭代次数太少,达不到此精确度!"<<endl<<endl;
goto md;
k=N+1;
}
}
}
//郑重声明:此程序解释权归吴贺,任何人不得将其用于其它领域。//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -