⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seidel.cpp

📁 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 + -