这是菜鸟学Python的粉丝第8篇原创投稿
阅读本文大概需要3.5 分钟
本篇作者:小匡同学
作为科研 go,MATLAB 一直是做数值计算的标配。然而目前 Python 的火爆程度、 丰富的第三方库、灵活便捷的编程方式,也让科研 go 们垂涎不已。本篇文章从NHT(数值传热学)的基本原理与 Python 代码实现两个方面带领 NHT 小白入坑, 老司机自动略过
要点:
-
工具 Pycharm
-
第三方库为 Numpy 和 matplotlib
-
Py3
01
开发环境准备
1).Python 用于科学计算
要先安装第三方的科学计算库,这里我们主要做数值计算,Numpy就可以啦。数值计算结果需要以图形曲线的形式输出,在 Python中 matplotlib 库可用于绘制类似于 MATLAB 的图表
2).对于习惯了 MATLAB 编程的人员来说
MATLAB 安装的时候直接安装了 所有库,非常便捷。然而Python 的所有库都需要自己安装
3).可以安装 Anaconda
它基本包括了市面上所有常用库,然后将 pycharm的解释器修改为 anaconda 的解释器,相当于 MATLAB 了。由于安装的库多,相 应的软件的启动运行都非常慢,想想 MATLAB 启动就知道了
4).第三方库的安装
对于新手比较麻烦。这里推荐一种简单的方法。 在 File→Settings→Project Interpreter 中,可以看到已安装的库
右边红框中,减号表示卸载选中的库,箭头表示升级库,如果要安装新库,
则选择加号
在上方可以在线搜索所需要的库,右下角可以选择版本,点击安装就可以在 线安装库。全程傻瓜式操作,方便快捷!
02
导热问题分析
1).金属导热问题
假设一根等截面的直金属棒,长度 2m,受到内热源加热,线热流密度为1000W/m,金属棒两端为定壁温边界,温度 300K。稳态导热下,温度分布满足 如下的控制方程。
2).如果将坐标原点选择在金属棒的中心,则本问题的解析解为:
3).在数值传热学的计算中
需要在金属棒上划分网格节点,本例中我们在金属 棒上均匀布置 n 个节点,考虑到两端各需要一个节点,因此金属棒实际被分成了n-1 段微元。这 n 各节点上的温度值组成了一个一维数组,因此可以用一个一维 数组保存各节点的温度信息
-
有了这个离散方程,基本就可以开始进行数值计算中最常用的迭代计算了。 然而还需要一个判断迭代结束的条件,在 CFD/NHT 中,叫做收敛准则
-
事实上 数值计算的基本原理就是通过设计好的算法不断迭代,从而构建一个柯西列,如 果这个数列依范数收敛了,则可以认为它收敛于真实解。
-
依范数收敛可以简单的 认为就是相邻两次迭代之差的范数(1,2,无穷范数都可)趋于 0,就可以认为 收敛。
因此内存中要始终保持两个一维数组,一个保存当前迭代得到的温度值, 一个是上一次迭代得到的温度值。最后,完整的程序代码如下:
迭代结果如下 :
-
多次迭代结果都是在 300K 附近,迭代似乎没有进行就结束了。事实上,观 察第 14 行,是将当前的温度数组赋值给上一步的温度数组,然后迭代计算更新 当前的温度数组
-
这个过程中,出现了数组的拷贝操作,不同于 MATLAB,在Python 中数组的拷贝并不是创建一个新数组,而只是将新的数组名指向原数组在 内存中的地址
-
这样做的结果就是 temp 和 temp_up 在内存中其实是存储了相同的数据,二者同步改变,二者之差的范数因此始终是 0,程序认为迭代已收敛, 直接跳出了
4).多次迭代的结果
迭代10次
数值结果在不断趋近于解析结果
迭代 200次
数值结果与解析结果已经完全重合,计算完成。
熟悉 MATLAB 的同学可能发现,Python 绘图与 MATLAB 十分类似,不仅是操作代码近似,图片风格也一样。这是因为 matplotlib 库的开发初衷就是为了 像 MATLAB 那样方便快捷的绘制图形曲线
03
关于Pycharm断点调试
1).首先设置断点
然后 alt+shift+F9,进入调试模式。注意这里需要键盘操作。直接点击 pycharm界面的 debug 按钮,无法进行下一步的操作。 进入调试后,从下面的 debugger进入 console 界面
2).点击那个“show Python prompt”按钮
3).就可以在 console 中输入想要查看的变量的数值了
比如本例中的 xxline 存储的 是所有网格节点的 x 坐标,是个一维数组
欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧
长按二维码,关注【菜鸟学python】
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 什么是python多值参数01/08
- ♥ python编程如何打出根号08/25
- ♥ python 元组解包是如何实现的?10/26
- ♥ python中8个常用内置函数详解12/03
- ♥ 牛逼!40行Python代码一键把html网页保存为pdf,太方便了!06/23
- ♥ 渣男 23 式 | 23 种设计模式的通俗解释,看完秒懂06/29
内容反馈