📄 高斯赛德尔迭代法源程序.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 + -