📄 seidel.cpp
字号:
//Seidel迭法算法
//计算机科学与技术(2)班 林山 200530472104 24号
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
void main()
{
int n,M;
double e;
cout<<"*****Seidel迭代法算法*****"<<endl;
cout<<"请输入矩阵A的阶数n:"<<endl;
cout<<"n= ";
cin>>n;
double **A=new double*[n+1];
for(int i=1;i<=n;i++) { A[i]=new double [n+1]; }
cout<<"请依次输入矩阵A的各元素:"<<endl;
for(i=1;i<=n;i++)
{ for(int j=1;j<=n;j++)
{ cout<<"A["<<i<<"]["<<j<<"]= ";
cin>>A[i][j];
}
}
double *B=new double [n+1];
cout<<"请输入右端项的各元素:"<<endl;
for(i=1;i<=n;i++)
{ cout<<"b"<<i<<"=\t";
cin>>B[i];
}
double *y=new double [n+1];
cout<<"请输入初始向量y:"<<endl;
for(i=1;i<=n;i++)
{ cout<<"y["<<i<<"]= ";
cin>>y[i]; }
cout<<"请输入容许误差e:"<<endl;
cin>>e;
cout<<"请输入容许最大迭代次数M:"<<endl;
cin>>M;
int k=1;
double *g=new double [n+1];
double *x=new double [n+1];
for(i=1;i<=n;i++) { x[i]=y[i]; }
for(i=1;i<=n;i++)
{ if(fabs(A[i][i])<e)
{ cout<<"求解失败!"<<endl;
exit(0);
}
else
{ double T;
T=A[i][i];
for(int j=1;j<=n;j++)
{ A[i][j]=-A[i][j]/T;
A[i][i]=0;
g[i]=B[i]/T;
}
}
}
L: for(i=1;i<=n;i++)
{ double sum=0;
for(int j=1;j<=n;j++)
{ sum+=A[i][j]*x[j]; }
sum-=A[i][i];
x[i]=sum+g[i];
}
double fan=fabs(x[1]-y[1]);
for(int m=2;m<=n;m++)
{ fan=+fabs(x[m]-y[m]); }
if(fan<e)
{ cout<<"所求方程组的解是:"<<endl;
for(int i=1;i<=n;i++) { cout<<"x["<<i<<"]= "<<x[i]<<endl; }
cout<<"运算的迭代次数为 "<<k<<" 次."<<endl;
exit(0);
}
else
{ if(k<M)
{ k++;
for(int i=1;i<=n;i++) { y[i]=x[i]; }
goto L;
}
else
{ cout<<"求解失败!"<<endl;
cout<<"请减小容许误差e或增大容许最大迭代次数M的值."<<endl;
exit(0);
}
}
delete []x; delete []y; delete [] g;
delete []A; delete []B;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -