soifaint的个人博客分享 http://blog.sciencenet.cn/u/soifaint

博文

无量纲化,trick,以及其他一些小问题

已有 19684 次阅读 2014-2-22 12:00 |系统分类:科普集锦

这几天看到无量纲化的一些讨论,怎么说呢,还是感觉和各位不是生活在一个位面上。我也说说我理解的无

量纲化,以及有关的一些感觉。

首先我觉得应该清楚的一件事是,无量纲化不是来自数值,相反无量纲化的第一动力是“避免数值”或者说

“避免定量”。无量纲化是理论研究者和原型设计人员的基本功之一,什么叫无量纲?无量纲化基本就是给

你方程中出现的每个物理量一个合适的单位,让它的数值在“人类可以理解的范围之内(1-10)”。比如你用焦耳来计算原子能量,会出来一大堆莫名其妙的巨大/超小数字,让人难以想象是多少,好,我就拿氢原子能量做单位,方程就变成无量纲化的了。那么这个有什么好处呢?好处很多,最简单的用处是让设计者快速核准你的

设计参数,在全部系数都无量纲化之后,如果你的某个设备工况参数出来了几千万这样的数据,那多半你弄错了

某个常数。

无量纲技术发展的第二个动力也是出于“避免计算”的目的,准确地说是“计算重用”,就是说你解了个方程,

想拿到别的地方去用,但是每个问题都有自己的背景,那么怎么办,方法就是拿个无量纲的方程画条曲线,然后凡是碰上别的问题,就把对应问题的单位抹掉看看,如果差不多,就说问题是“相似的”,然后拿现有的曲线去凑。流体力学所谓的“相似律”和“相似参数”差不多就是这玩意。

但是你很容易看到这些东西都和数值模拟没啥关系,为什么数值模拟早期也要搞无量纲化呢?这是个历史问题,首先,早期写数值模拟程序的人基本不懂自己写的是啥(他不懂物理啊),那么他怎么验证结果是对的(这就是冯诺依曼给数值方法提出的第一个问题),那么解决方法就是整个计算都无量纲化,然后随时检查是不是某一步出现了极大或者极小的数值,出来了就说明写程序的犯错了。

下一个原因是这样的,方程里面总是存在乘法和加法,而且单位之间换来换去必然涉及到乘法。如果你的计算都是无量纲化的,那么单位转换只要在开始和结束的时候各做一次就好,否则每次代入方程都要做一个乘法。在远古时代的计算机上,浮点乘法比浮点加法慢很多,所以那时候都建议大家减少乘法次数,提高计算量。当然你知道这只存在历史的意义,毕竟在现在的计算机上,乘法操作早就不是主要开销了(最大开销是内存读写,网络传输,以及除法/开方)。

和这个原因有关的还有个历史上的大问题,计算机有单精度和双精度两种标准浮点类型。单精度最多只有7位到8位有效数字,并且(!)最大只能表达到10^38左右,所以如果你的程序中出现类似h^2(普朗克常数平方)之类的东西,恭喜你,单精度直接溢出了。问题是对于学物理的,这东西简直是家常便饭,偏偏早期为了节省计算量,大部分人都用单精度跑代码(一个反面教材叫做卢刚,啊啊哈哈哈哈哈。。。。),所以这帮人总是告诉你要无量纲化。

所以你看到数值程序无量纲化之类的东西都是trick,他们是一些在特定限制下解决问题所必须的把戏,如果你非要去追寻这些把戏有什么意义,恭喜你,可以不用毕业了,等你追寻完了,这些把戏也落伍了。

其实这种把戏在各研究领域,各行各业都存在,甚至大部分用很不屑的语气说“本质才重要,程序不重要”的人,他们的“物理本质”或者“工程经验”说的也是这种把戏。就像费曼说的,齿轮工程师最主要的“工程经验”是什么呢?是每个齿轮20-40个齿,齿多了容易坏,齿少了噪声大。而糟糕的是,大部分做数值的人,也有意无意地受了这种影响,把这些“把戏”当成最重要的东西(做软件的也差不多)。

姑且先写到这里,下次再讨论数值重现性和可靠性的问题。




https://blog.sciencenet.cn/blog-224732-769790.html

上一篇:等离子体技术,数值模拟,超级计算机以及创新(一)
下一篇:1735年地图......黄河在国界线上?
收藏 IP: 123.189.71.*| 热度|

9 于春水 王春艳 庄世宇 蒋大和 陈楷翰 曾泳春 强涛 徐晓 陈奕涛

该博文允许注册用户评论 请点击登录 评论 (11 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-10-14 04:24

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部