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

博文

数值模拟的可靠性:“列车晚点怪列车时刻表吗?”(1)

已有 3583 次阅读 2014-5-2 13:21 |系统分类:科普集锦

集群终于到货了,所以,接下来就得实际实现并测试代码,也就是科学网上许多牛人所鄙视的“基础体力活”。在开始一个初级(数值模拟没有高级职称!)技工的工作之前,再闲扯几句数值模拟,顺便回答一下很久以前WCY的一个问题:数值模拟的可靠性到底是怎么回事?

关于程序有一个来自计算机科学界的根深蒂固的梦魇:某一天早上,负责管理地球环境状况的超级计算机例行调整天气,然后层层调用各种子程序,最后一直调用到了最底层的一个加法程序,就是e+pi,然后,这个几百年前开发的子程序出现了bug,里面没有正确处理第24位小数上的一个进位,然后,经过一连串调用溢出后,系统把南极的目标气温从-88度改成了+88度,于是计算机决定向南极投射一个小行星用于提高气温。

好吧,我们知道对于控制和管理程序这是不会发生的,如果一个程序要求中央情报局长去枪杀总统,而他真的这么做了,这事肯定不怪程序。但是,对于数值模拟,事情真就难说了。如果一个程序算出来地球中心的温度是8000度,而另一个程序算出来是3000度,你相信哪一个?或者两个都是没有意义的?

当然,很多人都说:“数值程序的结果是没有意义的,只有来自物理概念分析的结果才有意义。”好吧,我知道这些人很多都被尊称为“大牛”甚至“大师”,但是我仍然要说,这么说话的人基本上是扯淡,或者是科盲+技术盲。在今天,想绕过数值程序?至少你不可能得出任何能与实验比对的结果,恩,也许你是个实验家+理论大师,你搞了个解析结果,然后直接去测量数据,那么,你知道从探头测出来的数据到仪器的输出,其中微处理器给你做了多少次修正和滤波么?你知道这些修正是用什么程序实现的么?更重要的是,你知道如何从这些结果反向修正出真正的实验结果么?

事实上这是应用研究的一个新的噩梦,你所知道的一切,其实并不是从“你知道的那些东西”导出的。我们有理论方程,有实验现象,但是方程本身不会说话,实验目标也没有智能,你要解出方程得到某个条件下的中间结果,再用专门的实验设备将实验对象的状态转化为这些中间结果,最后比对两种中间结果。

看上去这并不复杂,但是这个链条太长了,链条的任何一部分都可能会断裂。比如“从理论方程给出结果”。事实上几乎所有(又是一个有趣的词汇,讨厌数学的同学应该知道“几乎所有”是什么意思)的方程都没有严格解法,我们通常要使用计算机程序才能求值。

使用计算机求理论方程的结果可以在不同层次上完成。最简单也被各种“大师”们视为“最没有技术含量”的一种,是直接用计算机去求解这个理论的基本方程,尽量避免“物理概念”和“工程经验”的出现(所以你知道为啥各位“大师”这么鄙视这种方法了吧?这种程序方法会把他们几十年的工作经验变成几十条计算机代码)。这个通常称为数值模拟。

信仰上说,计算机模拟的结果依赖于(1)你使用的基本方程对不对;(2)你的求解法对不对;(3)你使用的参数对不对。看到了没有?都是简单的“对不对”问题,没有任何创新思维问题,遗憾的是,就这么简单的“对不对”问题,恰恰是非常难以回答的。(当然,数值模拟无“大师”,所以也许这里的“难以回答”对于“大师”来说根本就是我们这些数值烂人太笨太没有创新思维能力太没有系统思维能力的体现。)

先说第一个问题,看上去有点找乐,基本方程对不对难道不是数值模拟的前提么?但是你要知道所谓“基本方程”对于不同的学科是不一样的,而且太“基本”的方程多半根本没有解。拿个最简单的例子来说,为什么有的物质是透明的而有的物质反射光?有人说,这就是一个量子电动力学的问题,因为光和物质相互作用的一切问题归结为量子电动力学。好吧,量子电动力学的基本方程(原谅我还是用方程这个词来描述,我是很难找到别的贴切的词汇了)怎么解?不知道,至少我们知道在“几乎所有”的情况下那方程没有已知的求解法,至于解的存在性。。。我们也没有任何一个完整的解可以验证存在性问题。我们只能是首先割断问题,在某些条件下凑几个看上去是解的东西,然后通过这些东西来“预言”(你就用“先知”那个“预言”的意思来理解这里的“预言”就好了)一般意义上的解应该满足什么性质。怎么凑呢?最简单的办法当然是切断,随便扔掉方程中“看上去不够简明”的几项,然后搞个解出来。切断出来的东西叫光和电子的非相对论量子力学理论。现在这个问题是不是有解了?有,但是很遗憾,有解不表明能解,我们接下来还要继续简化,比如,使用波恩-奥本海默近似把电子的运动分解。你会说这个近似很简单很有创意,blahblah。。。事实上,这个近似很复杂繁琐,并且相当的不可靠(你自己去follow一下就知道我说的不可靠是什么意思了)。OK,现在我们终于有了一个看上去有点意思的跃迁公式,但是折射率问题还是不能直接动出,那么我们继续简化或者“预言”。把跃迁公式里面99.9999%的项都扔掉,剩下几个项看看他们的性质,然后开始做A,B,.C,D这样的剪断,最后,我们得到了一个折射率公式。得到折射率公式后,我们扔掉量子力学,(为啥要扔掉?还是那个问题,我们的折射率公式是在某些非常极端的假定下得出的,在不使用这些假定的时候,即使这样简化的方程仍然无法求解),最后得到一个看上去能求解的麦克斯韦方程组。这样,我们可以用计算机去“数值模拟”麦克斯韦方程组,然后计算各种问题的求解。

所以你看到即使是电磁学这种“非常第一原理”的计算,里面仍然充斥着近似和猜测,并且这些近似的合法性几乎从来没有得到过严格证明,事实上在很多情况下它们确实是不合理的。正常情况下,地球人绝不是因为“创新思维”或者“物理直觉”决定在方程中扔掉哪些项的。我们扔掉某些项,仅仅是因为我们不知道如何计算那些项的结果。结果,当扔掉这些项开始导致麻烦的时候,理论家就会发疯。这里有一个非常典型的例子。一块板砖砸向汽车,我们有很多理论来描述这个问题,也有各种数值模拟方法(不管好用不好用)来处理这类问题,归根结底那就是力学方程。然而,当板砖的速度超过100km/s的时候,你的问题来了:碰撞导致目标被强烈地压缩和加热,汽车不再能看做固体,而是一团电离气体,再也没有什么能级,晶体结构之类的东西;但是压缩又使得它的电子之间开始由于不相容原理而互相排斥,于是用于处理气体的经典运动方程也失效。那么,你如何处理这个问题呢?“大师”马上会表示我们应该用量子电动力学来处理这个问题,好吧,那你需要100年时间等待有人证明量子电动力学在这么多粒子的时候有解。事实上我们从来不这么干;我们只是简单的猜测一个量子力学导致的压力修正项,加到气体方程上去,然后去求解这个气体方程得出结果。大部分理论家非常蔑视这个做法,但是,他们又拿不出什么有用的方法来处理这个问题。(实验家的态度我们以后再提)

再来看第三个问题,这个问题本质上是第一个问题衍生的。我们的“基本方程”并不是“基本”的,所以其中必然存在某些本来应该从基本常数算出来但实践中只能当成物性参数去测量的东西。很不幸的是,这些参数常常是不可靠的或者错误的,或者干脆是不公开的。后面这个情况出在一些“技术大牛”或者“著名创新公司”的做法里面。一个典型情况是算流体,我们有很多种用来仿真湍流过程的经验公式或者“湍流模型”,每种“模型”都是在一类特殊情况下最好用,而在其他情况下精度大大降低或者完全不对。所以正常的做法就是,做一张巨大无比的表格,里面设置在A条件下用1号公式,系数为S1B条件下用2号公式,系数为S2;。。。。,诸如此类。填写这张表格的过程叫做“标定”。对于技术提供者什么是核心竞争力?就是这张表格的填写能力。所有其他的东西你都可以随便找几个卢瑟做一做就凑合出来,只有这张表是没办法凑合的,它只能靠工作积累,而且大部分商业公司对此秘而不宣(你去intel买一张他们标定的所有实验条件下各个工质参数的表?),只有国立实验室才会把无关武器的部分的表格贴出来。很遗憾的是,国内研究部门基本不可能耗费工作量去进行标定,于是就产生了“大牛”们的话:“你们的算法研究毫无意义,因为没有创新”。当然,我们知道,“创新”不是核心力量,“标定”才是。

让我们假设(我们可以假设地球是从东向西转!)上面两个问题都不是问题-因为如果上面两个问题出现的话你基本就是只能自求多福-我们就可以来考虑第二个问题了。我会用单独的一节来说这个事情。

 

 



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

上一篇:扯淡的本科毕业论文早该取消了
下一篇:数值模拟的可靠性:“列车晚点怪列车时刻表吗?”(2)
收藏 IP: 113.236.57.*| 热度|

5 张永进 王春艳 庄世宇 徐晓 樊京

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

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

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

GMT+8, 2024-10-12 23:52

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部