数值传热学第一次大作业
, ������ = 1,2,3, … ������ − 1;
������ = 0,1,2, … , ������ − 1
定解条件:
初始值:������ ������, 0 = ������ ������ ,即:
���������0��� = ������ ������ = ������ ������ ∙ Δ������ , ������ = 0,1,2, … ������ 由初始条件的取值函数������ ������ ,将边界条件设为定值 0,即:
非定常热传导问题
1 题目
求方程:
������������ ������������
=
������
������ 2 ������ ������������ 2
初边值问题的有限差分解。
������ ������, 0 = ������(������) 求解域为 ������, ������ ∈ 0,1 × [0, ∞],初始条件和边界条件为 ������ 0, ������ = ������(������)
再由 THOMAS 算法将三对角阵消为容易解的二对角阵。
4.2 计算程序
#include<iostream>//输入输出流头文件
#include <cmath>
//包含了许多数学函数的库文件
using namespace std;//使用 std 这个名字空间
int main()
{
double c=0.1;
//参数设定
double deltaX=0.01;
//空间步长
double t=0.01;
//选定时刻
double deltaT=c*deltaX*deltaX;//时间步长
int const M=100;
//空间网格数
int N=t/deltaT;
//时间网格数
double T[M+1],P[M],Q[M],A[M],B[M],C[M],D[M];
构造 n+1 时刻的线性方程组: ������������ ������������ = ������������ ������������+1 + ������������ ������������−1 + ������������ , ������ = 1,2, … , ������ − 1;
端点条件: i = 1,������������ = 0 i = ����ቤተ መጻሕፍቲ ባይዱ� − 1,������������ = 0
������ = 0,1,2, … , ������ − 1
1 + 2������ ������������������+1 = ������ ������������������++11 + ������������������−+11 + ������������������ ;
其中 σ =
������������ ������ 2
������0������ = ������������������ = 0,������ = 0,1, … , ������
3.2 计算程序
#include <iostream> #include <cmath> using namespace std; int main() {
double c=0.1; double deltaX=0.01;
且要求计算 t = 0.01,t =0.1,t =1,t =10 时的数值解,故时间网格数 ������ = ������ ,表 1 为不同时间 t 与时间步长 Δ������ 所对应的网格数������分布。
������������
表 1 不同的计算时间 t 与时间步长 Δ������ 所对应的时间网格数������分布
������Δ������ σ = Δ������ 2 = 0.1, 0.5, 1.0 差分格式:FTCS 格式,BTCS 格式,CNCS 格式。
2 问题初始化
问题为一维,要求网格点数 M=100,故 x 方向按空间步长: 1
Δ������ = M = 0.01 而根据 σ 规定时间步长 Δ������ 取为1 × 10−5,5 × 10−5 ,1 × 10−4;
int j,i;
//初始化
for(i=1;i<M;i++)
{
T[i]=1;
}
else
{
T[i]=10/3*(1-i*deltaX);
}
T[0]=0;
T[M]=0;
}
//节点差分
for(i=1;i<=N+1;i++)
//时间迭代
{
T[0]=0;
T[M]=0;
for(j=0;j<=M;j++)
{
result[j]=T[j];
}
for(j=1;j<100;j++)
//空间网格数
int N=t/deltaT;
//10s 内的时间网格数
double T[M+1];
//存放初始值和边界值
double result[M+1];
//存放结果
int i,j;
//初始化
for(i=1;i<M;i++)
{
if(i*deltaX<0.3)
{
T[i]=0;
}
else if(i*deltaX<0.7)
其中,各项系数: ������������ = 1 + 2������,������ = 1,2, … , ������ − 1 ������������ = ������,������ = 1,2, … , ������ − 2 ������������ = ������,������ = 1,2, … , ������ − 1 ������������ = ������������������ ,������ = 1,2, … , ������ − 2
������
������
������
0.01
0.1
1
10
0.1 1 × 10−5 1 × 103 1 × 104 1 × 105 1 × 106
0.5 5 × 10−5
200 2 × 103 2 × 104 2 × 105
1.0 1 × 10−4
100 1 × 103 1 × 104 1 × 105
������ 1, ������ = ������(������)
其中������ = 1,初值条件的具体取法为:
0
������ x =
1
− 10/3 ������ + (10/3)
0 < ������ < 0.3 0.3 ≤ ������ ≤ 0.7 0.7 < ������ < 1.0
取网格点数 M=100,要求计算 t = 0.01,t =0.1,t =1,t =10 时的数值解,计 算的时间步长取法为:
图5 图6
4.1 离散差分方程
4 BTCS 格式
内部节点:
������������������
− ������������������−1 Δ������
=
������
������������������+1
−
2������������������ + ������ 2
������������������−1
。
定解条件:
初始值:������ ������, 0 = ������ ������ ,即:
���������0��� = ������ ������ = ������ ������ ∙ Δ������ , ������ = 0,1,2, … ������ 边界条件同 FTCS 格式设为定值 0。
差分方程的求解:
//空间迭代
{
T[j]=result[j]+deltaT*(result[j+1]-2*result[j]+result[j-
1])/deltaX/deltaX;
}
if(i*deltaT==t)
{
cout<< "FTCS" <<" "<<endl;
cout<< "Time=" << t <<endl;
,
������������������+1 − ������������������ Δ������
=
������ ������������������++11 −
2������������������+1 ������ 2
+ ������������������−+11 ,������
=
1,2,3, … ������ − 1;
cout<< " σ =" << c <<endl<<endl; for(j=0;j<=M;j++)
{ cout<< result[j] <<endl; //输出结果
} cout<<endl<<endl; } } }
3.3 计算结果
本非定常热传导问题设置不同取值时刻与不同时间步长取法来探究 ������ 与 ������
下图 5 是相同计算时间 t=0.01 时,时间步长取法 σ = 0.1、0.5 结果比较, 由图知,两个计算结果基本相同。说明模拟计算具有一定的稳定性。