?? 高斯賽德爾迭代法源程序.cpp
字號(hào):
//本程序用于實(shí)現(xiàn)高斯賽德爾迭代法來(lái)求節(jié)點(diǎn)電位
//是典型的面向過(guò)程的思想
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
double a[11][11];//定義二維數(shù)組用于記錄各個(gè)節(jié)點(diǎn)的電位,按要求節(jié)點(diǎn)為11行11列
double b[11][11];//數(shù)組a的拷貝數(shù)組,用于存放上一次各節(jié)點(diǎn)電位的迭代值
int i=0,j=0;
static int counter=0;//靜態(tài)變量counter用于記錄迭代的次數(shù)
bool boolean=true;
for(j=1;j<=9;j++)//為81個(gè)內(nèi)節(jié)點(diǎn)賦初值
{for(i=1;i<=9;i++)
a[i][j]=j*12.4;//這樣賦初值經(jīng)測(cè)試速度最快,所需的迭代次數(shù)最少
}
for(j=0;j<=10;j++)//兩個(gè)for語(yǔ)句為40個(gè)邊界點(diǎn)賦值
{
a[10][j]=50;
a[0][j]=100;
}
for(i=1;i<=9;i++)
{
a[i][10]=100;
a[i][0]=0;
}
cout<<"各內(nèi)節(jié)點(diǎn)上電位的初始迭代值為:"<<endl;
for(i=1;i<=9;i++)
{for(j=1;j<=9;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<"\n";
do//迭代循環(huán)
{
for(i=0;i<=10;i++)//該for語(yǔ)句用于將上一次各節(jié)點(diǎn)的迭代值存放在數(shù)組b中,用于檢測(cè)精度
{for(j=0;j<=10;j++)
{
b[i][j]=a[i][j];
}
}
for(i=1;i<=9;i++)//調(diào)用迭代公式
{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語(yǔ)句用于檢查迭代是否達(dá)到了精度要求,如果達(dá)到了,則停止循環(huán),否則繼續(xù)循環(huán)
{for(j=1;j<=9;j++)
if(fabs(a[i][j]-b[i][j])>0.000001)//迭代精度要求為0.000001
boolean=true;
else
boolean=false;
}
counter++;//每循環(huán)一次,counter自加1,用于記錄迭代次數(shù)
}while(boolean);//迭代循環(huán)
cout<<"迭代次數(shù)為:"<<counter<<endl;//輸出迭代次數(shù)及最終結(jié)果
cout<<"\n";
cout<<"各內(nèi)節(jié)點(diǎn)上電位的最終近似值為(按題目中的坐標(biāo)系顯示且滿足題目所要求的精度):"<<endl;
for(i=1;i<=9;i++)
{for(j=1;j<=9;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -