参考与感谢
本文参考HIT赵军明老师教学内容和参考了肖广州学长的代码,感谢写在最前面
公式
Matlab的实现
写入matlab
单条曲线的实现
依第一条曲线1/Bi=0.05为例子
Bi=1/0.05
由utan(u)=Bi可得其超越方程解u_1
由于是中心温度,则无量纲数x/δ=1
at/δ²=Fo直接取做横坐标
那么可以得到以下代码
Fo=[0:0.1:700]; %%创建横坐标
u_1=0; %%u_1初始化
Bi=1/0.05; %%第一条曲线的Bi
for x=u_1:0.000001:pi/2 %%遍历求超越方程的解
y=x*tan(x)-Bi;
if (abs(y)<0.0001)
u_1=x;
end
end
temper=4*sin(u_1)/(2*u_1+sin(2*u_1))*cos(u_1)*exp(-u_1*u_1*Fo); %%计算中心无量纲温度
plot(Fo,temper) %%绘制
结果如图
多条曲线的实现
原理不变,只需要把Bi变成数组即可
为了让曲线连续绘制,需要在matlab里开启图线保留hold on
那么可以得到以下代码
Fo=[0:0.1:700]; %%创建横坐标
u_1=0; %%u_1初始化
BiDS=[0.05,0.1:0.1:0.8,1.0:0.2:2.0,2.5,3:1:10,12:2:20,25:5:50,60:10:100]; %%1/Bi组
N=length(BiDS);
hold on %%开启绘图保留
for i=1:1:N %%求Bi
Bi(i)=1/BiDS(i);
end
for i=1:1:N
for x=0:0.000001:pi/2 %%遍历求超越方程的解
y=x*tan(x)-Bi(i);
if (abs(y)<0.0001)
u_1=x;
end
end
temper=4*sin(u_1)/(2*u_1+sin(2*u_1))*cos(u_1)*exp(-u_1*u_1*Fo); %%计算中心无量纲温度
plot(Fo,temper) %%绘制
end
%%特别提示,循环部分我没有优化,如果有时间for x=0:0.000001:pi/2完全不应该这样写,
这么暴力求解需要让电脑遍历这个循环几十次(十分消耗资源和时间),
更好的解法为for x=u_1:-0.000001:0 (初始化为:u_1=pi/2) 因为Bi是由大到小,所以超越方程的解也是由大到小解,这样可以使遍历次数仅为1,
但是我学习matlab时间还很短,
也没尝试这样的写法是否正确,故没有优化该循环算法
可得结果
优化与改进空间
如果有时间和兴趣,可以将该图尝试转变为变坐标系,将区域曲线转变为直线,这样就彻底成为了书上的参考诺模图。
Fo=[0:0.1:700]; %%创建横坐标
u_1=0; %%u_1初始化
BiDS=[0.05,0.1:0.1:0.8,1.0:0.2:2.0,2.5,3:1:10,12:2:20,25:5:50,60:10:100]; %%1/Bi组
N=length(BiDS);
for i=1:1:N %%求Bi
Bi(i)=1/BiDS(i);
end
for i=1:1:N
for x=0:0.000001:pi/2 %%遍历求超越方程的解
y=x*tan(x)-Bi(i);
if (abs(y)<0.0001)
u_1=x;
end
end
temper=4*sin(u_1)/(2*u_1+sin(2*u_1))*cos(u_1)*exp(-u_1*u_1*Fo); %%计算中心无量纲温度
semilogy(Fo,temper); %%对数10变坐标绘制
axis([ 0 700 0.001 1]); %%框定范围
hold on %%开启绘图保留
end
如何还原传热学书上的诺模图
有人私信我问如何还原传热学书上变Fo的诺模图,最简单的办法就是用多个Fo跨度(eg.第一张图axis([ 0 4 0.001 1]) 第二张图axis([ 4 10 0.001 1]))画几张图,然后用Ps拼起来。