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

📄 高斯赛德尔迭代法源程序.cpp

📁 用迭代法计算网格电位值
💻 CPP
字号:
//本程序用于实现高斯赛德尔迭代法来求节点电位
//是典型的面向过程的思想
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	double a[11][11];//定义二维数组用于记录各个节点的电位,按要求节点为11行11列
	double b[11][11];//数组a的拷贝数组,用于存放上一次各节点电位的迭代值
	int i=0,j=0;
	static int counter=0;//静态变量counter用于记录迭代的次数
	bool boolean=true;
	for(j=1;j<=9;j++)//为81个内节点赋初值
	{for(i=1;i<=9;i++)
		a[i][j]=j*12.4;//这样赋初值经测试速度最快,所需的迭代次数最少
	}
	for(j=0;j<=10;j++)//两个for语句为40个边界点赋值
	{
		a[10][j]=50;
		a[0][j]=100;
	}
	for(i=1;i<=9;i++)
	{
		a[i][10]=100;
		a[i][0]=0;
	}
	cout<<"各内节点上电位的初始迭代值为:"<<endl;
	for(i=1;i<=9;i++)
	{for(j=1;j<=9;j++)
	{	
		cout<<a[i][j]<<"  ";
	}
	cout<<endl;
	}
	cout<<"\n";
	
	do//迭代循环
	{
	for(i=0;i<=10;i++)//该for语句用于将上一次各节点的迭代值存放在数组b中,用于检测精度
	{for(j=0;j<=10;j++)
		{	
		b[i][j]=a[i][j];
		}
	}
	for(i=1;i<=9;i++)//调用迭代公式
	{for(j=1;j<=9;j++)
	{	
		a[i][j]=(b[i+1][j]+b[i][j+1]+b[i-1][j]+b[i][j-1])/4;//迭代公式
	}
	}

	for(i=1;i<=9;i++)//该for语句用于检查迭代是否达到了精度要求,如果达到了,则停止循环,否则继续循环
	{for(j=1;j<=9;j++)
		if(fabs(a[i][j]-b[i][j])>0.000001)//迭代精度要求为0.000001
			boolean=true;
		else
			boolean=false;
	}

	counter++;//每循环一次,counter自加1,用于记录迭代次数
	}while(boolean);//迭代循环
	
	cout<<"迭代次数为:"<<counter<<endl;//输出迭代次数及最终结果
	cout<<"\n";
	cout<<"各内节点上电位的最终近似值为(按题目中的坐标系显示且满足题目所要求的精度):"<<endl;
	for(i=1;i<=9;i++)
	{for(j=1;j<=9;j++)
	{	
		cout<<a[i][j]<<"  ";
	}
	cout<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

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