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

📄 2.cpp

📁 线性方程组求根实验
💻 CPP
字号:
#include<iostream>
#include<math.h>
using namespace std;
double a[11][11],b[11];
double x[11],w=1.25,epi=1e-6;
void Jacobi();
void SOR();
int main()
{
	//定义方程组
	for(int i=1;i<=10;i++)
	{
		for(int j=1;j<=10;j++)
			a[i][j]=1.0/(i+j-1);
		b[i]=1.0/i;
		x[i]=0.0;//初始向量取0
	}
	Jacobi();
	//初始向量取0
	for(int i=1;i<=10;i++)
		x[i]=0.0;
	SOR();
	system("pause");
	return 0;
}

void Jacobi()
{	
	double max=0.0;
	bool succ=1;
	do{
		if(max>10000)
		{
			cout<<"Jacobi迭代法不收敛"<<endl;
			succ=0;
			break;
		}
		max=0.0;
		//保存上一次的结果
		double x_last[11];
		for(int i=1;i<=10;i++)
			x_last[i]=x[i];
		for(int i=1;i<=10;i++)
		{
			double sum=0.0;
			for(int j=1;j<=10;j++)
				if(j!=i)
					sum+=a[i][j]*x_last[j];
			x[i]=(b[i]-sum)/a[i][i];
			if(max<fabs(x[i]-x_last[i]))
				max=fabs(x[i]-x_last[i]);
		}
	}while(max>epi);
	if (succ)
	{
		cout<<"Jacobi迭代法求出方程组的解x="<<endl;
		for(int i=1;i<=10;i++)
			cout<<x[i]<<endl;
	}	
}
void SOR()
{
	double max;
	do{
		max=0.0;
		for(int i=1;i<=10;i++)
		{
			double sum=0.0,last=x[i];
			//j<i的x[j]已经更新为最新计算出的
			for(int j=1;j<=10;j++)
				sum+=a[i][j]*x[j];
			x[i]=x[i]+w*(b[i]-sum)/a[i][i];
			if(max<fabs(x[i]-last))
				max=fabs(x[i]-last);
		}
	}while(max>epi);
	cout<<"SOR迭代法求出方程组的解x="<<endl;
	for(int i=1;i<=10;i++)
		cout<<x[i]<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -