c语言求解一维热传导方的显式差分方程??

cqzxlj1986 2010-04-16 03:55:07
一维热传导方程的问题描述:
在距离为L(本题中取的是0.2米)的两个半无限长壁面之间有传热的流体。假设整个流场初始时刻具有温度T=T1(常数,本题中取10摄氏度),并处于平衡状态(即:初始时刻壁面和流体的温度都为10摄氏度)。两个壁面的初始温度Tw1=Tw2=T1(本题中即为10摄氏度)。现假设在t=0时刻,右边的壁面温度突然增加到Tw2=T2并保持在T2(本题中取T2为20摄氏度),而左边的壁面温度保持在Tw1=T1(即10摄氏度)。由于右壁面温度的突然增加,流体的温度将发生非定常变化,其瞬时温度分布由以下方程给出:(由于帖子无法发数学公式,所以略;其差分方程也略。求解中用的是差分方程,在程序中用绿色字体给出),求时间t1、t2和时间趋于无穷时壁面间流体温度的分布?
在c程序中用的是差分方程(略:复杂的数学公式无法上传,但在程序中有表示,绿色字体部分)

正确的结果是:
随着时间的推移,壁面间网格节点处温度值的连线会由曲线逐渐趋于一条直线(该直线就是从左壁面的10度直线连接到右壁面的10度)

#include<stdio.h>
#include<math.h>
void main()
{
float dx,dt,t,L=0.2,a[100000],b[100000],alpha=1.42857*10e-3;
/*dx表示delta(x),dt表示delta(t),alpha为热扩散率。由于数组大小随输入值而变化,所以取得比较大*/
int i,n1,n2,n=0,total=0;
printf("input data dx:\n"); /*输入壁面间网格节点的间距dx*/
scanf("%f",&dx);
printf("input data dt:\n"); /*输入时间推进的步长dt*/
scanf("%f",&dt);
printf("input data t:\n"); /*输入计算的总时间,代表题目中的t1、t2等*/
scanf("%f",&t);
n1=(int)(L/dx);
n2=(int)(t/dt);
printf("n1=%d n2=%d\n",n1,n2);
for(i=0;i<=n1;i++)
{
if(i<n1)a[i]=10;
else a[i]=20;
}
while(n<n2) /*一直迭代到满足的次数为止*/
for(i=0;i<=n1;i++)
{
if(i==0){b[i]=10;a[i]=b[i];} /*表示左壁面的温度始终保持在10摄氏度*/
else
if(i==n1){b[i]=20;a[i]=b[i];} /*表示右壁面的温度始终保持在20摄氏度*/
else
{
b[i]=a[i]+alpha*dt*(a[i+1]-2*a[i]+a[i-1])/(dx*dx); /*差分方程的表达式*/
a[i]=b[i];
}
n++;
}
for(i=0;i<=n1;i++)
{
printf("%8.4f",b[i]);
total++;
if(total%10==0)printf("\n");
}
}

以下是是错误的运行结果?:(n1=20表示把两壁面间的距离等分为20份,则总共有21个计算节点;n2=9999,表示要while循环要计算9999次)
input data dx:
0.01
input data dt:
0.001
input data t:
10
n1=20 n2=9999
10.00000000 -1.#IND0000 -1.#IND0000 -1.#IND0000 -1.#IND0000
-1.#IND0000 -1.#IND0000 -1.#IND0000 -1.#IND0000 -1.#IND0000
-1.#IND0000 -1.#IND0000 -1.#IND0000 -1.#IND0000 -1.#IND0000
-1.#IND0000 -1.#IND0000 -1.#IND0000 -1.#IND0000 -1.#IND0000
20.00000000Press any key to continue


...全文
1715 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanmie_09 2010-04-19
  • 打赏
  • 举报
回复
input data dx:
0.01
input data dt:
0.001
input data t:
10
n1=20 n2=9999
10.0000 10.3549 10.7139 11.0804 11.4577 11.8488 12.2561 12.6821 13.1283 13.5962

14.0863 14.5990 15.1338 15.6898 16.2656 16.8592 17.4683 18.0901 18.7215 19.3593

20.0000
cqzxlj1986 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 toroid 的回复:]
http://www.pudn.com/downloads144/sourcecode/math/detail630734.html
[/Quote]

谢谢你的建议,我再看看!
luozhangwen 2010-04-16
  • 打赏
  • 举报
回复
不懂, 帮顶

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧