//二维稳态导热,固定壁温
#include
#define dx 1.0
#define dy 1.0
void main()
{
float
T[11][11]={0};
int
i,j,iter_times=1;
for(i=0;i<=10;i++)
//初始化温度场
{
T[0][i]=20;
T[10][i]=80;
T[i][0]=0;
T[i][10]=100;
}
T[0][10]=100;
for(i=0;i<=10;i++)
{
for(j=0;j<=10;j++)
printf("%.2f\t",T[i][j]);
printf("\n");
}
float
s;
s=(dx*dx*dy*dy)/(2*dx*dx+2*dy*dy);
printf("s=%f\n",s);
//gauss-seider
迭代
loop:
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
T[i][j]=s*((T[i+1][j]+T[i-1][j])/(dx*dx)+(T[i][j+1]+T[i][j-1])/(dy*dy));
}
}
printf("\niter %d times:\n",iter_times++);
for(i=0;i<=10;i++)
{
for(j=0;j<=10;j++)
printf("%.2f\t",T[i][j]);
printf("\n");
}
if(iter_times<=100)
//经肉眼判断已经收敛...
goto loop;
}
计算结果:
http://s15/mw690/002ZNkK7gy6KvHAY9wqbe&690
加载中,请稍候......