3,423
社区成员
发帖
与我相关
我的任务
分享
/* 利用高斯-塞德尔迭代法求解线性方程组 */
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <iomanip.h>
#define N 200
int main()
{
double A[N][N]; //系数矩阵
double b[N]; //方程为Ax=b
double x[N];
int A_m;
int i,j;
double omaxx,nmaxx;
int precision=0;
double jingdua; //精度
cout<<"请输入矩阵(方阵)的行数:";
cin>>A_m;
for(i=0;i<A_m;i++)
{ for(j=0;j<A_m;j++)
{
if (i==j) A[i][j]=2;
else if((i-j==-1)||(i-j==1)) A[i][j]=-1;
else A[i][j]=0;
}
}
cout<<"向量A:";
for(i=0;i<A_m;i++)
{ for(j=0;j<A_m;j++)
{
cout<<A[i][j];
if(j==(A_m-1))
cout<<endl;
}
}
cout<<"结果向量B:";
for(i=0;i<A_m;i++)
{
if((i==0||(i==(A_m-1))))b[i]=1;
else b[i]=0;
}
for(i=0;i<A_m;i++)
{
cout<<b[i]<<" ";
}
cout<<"请输入精度(1--32):";
cin>>precision;
jingdua=pow(10,-precision);
while(1)
{
omaxx=nmaxx;
nmaxx=0;
for(i=0;i<A_m;i++)
{
x[i]=b[i];
for(j=0;j<A_m;j++)
if(j!=i)
x[i]+=-A[i][j]*x[j];
x[i]/=A[i][i];
if(fabs(x[i])>fabs(nmaxx))
nmaxx=x[i];
}
if(fabs(nmaxx-omaxx)<jingdua)
break;
}
cout<<"方程的解为:";
cout.precision(precision);
for(i=0;i<A_m;i++)
cout<<x[i]<<" ";
cout<<endl;
return 1;
}