📄 seidel迭代法.cpp
字号:
#include<iostream.h>
#include<math.h>
double d(double *x,double *x0,int n) //求范数
{
double m=0;
for(int i=0;i<n;i++)
if(m<fabs(x[i]-x0[i]))m=fabs(x[i]-x0[i]);
return m;
}
void main()
{
cout<<"-----------------------Seidel迭代-------------------------"<<endl;
a1: int n,N,i,j,k;
double e,*x,*x0,*b,*a;
cout<<"输入未知数个数n:"<<endl;
cin>>n;
cout<<"输入误差限e:"<<endl;
cin>>e;
cout<<"输入最大允许迭代次数N:"<<endl;
cin>>N;
x=new double[n];
x0=new double[n];
a=new double[n*n];
b=new double[n];
cout<<"输入系数矩阵:\n";
for(i=0;i<n*n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
cout<<"输入常数项矩阵:\n";
for(i=0;i<n;i++)
{
cout<<"b["<<i<<"]=";
cin>>b[i];
}
cout<<"输入初始未知数的值:\n";
for(i=0;i<n;i++)
{
cout<<"x0["<<i<<"]=";
cin>>x0[i];
x[i]=x0[i];
}
for(k=0;;k++)
{ //迭代
for(i=0;i<n;i++)
{
x[i]=b[i];
for(j=0;j<n;j++)
{
if(j!=i)x[i]-=a[i*n+j]*x[j];
}
x[i]/=a[i*n+i];
}
if(d(x,x0,n)<e)break; //判断
if(k>=N) //报错
{
cout<<"超过最大迭代次数,迭代失败!"<<endl;
break;
}
else{cout<<"第"<<k<<"次迭代成功!"<<endl;}
for(i=0;i<n;i++)x0[i]=x[i]; //准备
}
if(k<N)
{
cout<<"方程组的解为:"<<endl;
for(i=0;i<n;i++)cout<<"x["<<i+1<<"]="<<x[i]<<endl;
}
delete[]x;
delete[]x0;
delete[]a;
delete[]b;
char out='y';
cout<<"继续?y/n"<<endl;
cin>>out;
if(out!='n') goto a1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -