首页 >> 数学 >> 计算机科学 >> 文章

【前言】自然是解题的好手。

你的手每次划过空中,自然就给出了一组微分方程的数值解,而同样的一组微分方程解的性质,却已困扰数学界数百年。

每一道光传入你的眼睛,它走的路径便需要数学家用一种繁复的数学技巧——变分法——才能计算出来,而光,天生就知道怎么走。

蚂蚁并没有人那样的智慧,它们只有简单的脑,能看到的也就是它面前的一点点距离,但一群蚂蚁可以找到从它们的巢穴到食物的最短距离。

螽斯尽然愚笨,但它在漫长的演化路上学会了模仿蟋蟀求偶的鸣叫来诱捕这些可怜的受害者。而蟋蟀同时也演化出了一些判别的方法,与螽斯展开了一场演化军备竞赛。

分子没有意识,但在退火之下,它们能形成近乎完美的晶体。没有人命令它们,它们自然而然就知道自己应该在什么位置。

这一切一切,一切你说能看到或者不能看到的,都是自然在计算。而人,只能亦步亦趋跟在自然之后,学习自然是如何计算的。

自然是可敬畏的,不为它的力量,而为它的精巧,在极简单极简单的规则之下,演出着极宏大极宏大的歌剧。

我将尽我所能,描述这场歌剧中的计算,以及人是如何学习这样的计算的。

最后,我以一段歌词结尾:

围着雾的冰水任瓶边结露
凝聚渐厚过后交汇成川渗于台布
神奇而极普通的景象
谁人曾又会静来一睹?
——谢安琪《活着》

-----------------------------我 是 目 录 的 分 隔 线-----------------------------

这个系列的文章,讲的东西可能比较杂,但是围绕的是同一个主题:自然的计算,以及人们受自然启发而提出的各种算法。虽然如此,每篇文章是各自独立的。以下是一个目录,每一篇新文章发表在群博上后,我会及时在这里更新链接。另外,读者您也可以通过标签“人算不如天算”来访问这个系列的文章。

遗传算法:内存中的进化

这就是自然在计算,它以不计其数的分子和原子,用离散的方法,编织了一个连续的世界;我们活在其中,却不知觉。

田野中有一朵蒲公英,你向它吹了一口气,它的种子便随着你的气流在空中飞舞。于你而言,这只是一阵风,但对于自然而言,它又给出了一个偏微分方程的数值解。

流体引发的问题

像水和空气这样会流动的东西,我们将它们称为流体。对流体的研究,肇源于古希腊阿基米德的浮力原理,经过十八世纪微积分的推动,最终在十九世纪达到顶峰。十九世纪的两位物理学家——纳维和斯托克斯——将流体流动的奥秘都汇聚到了一个偏微分方程中(注1)。这个方程也因他们而得名“纳维-斯托克斯方程”。

但随着实验水平的提高,人们发现,对于一些在极端条件之下的流体,纳维-斯托克斯方程失去了预言的力量。

究其原因,物理学家在研究流体的时候,往往假定流体是连续的,这与我们在生活中的体验也是一致的。但事实上,空气和水都是由大量分子组成的,只不过因为分子体积极小而数量惊人,所以在我们看来,空气就变成连续的了,于是风——空气的流动——对我们来说也就是连续的。这就好比大型广告牌一样:在远处看,广告上是一位天真无邪的小孩子,但靠近看的话,不过是数量巨大的油墨点组成的点阵而已。

但在极端条件之下,分子的这种离散的特性变得突出,变得不再那么连续了。既然“流体是连续的”这个假设失效了,那么在这个假设的基础上推导出来的流体力学方程,它在极端条件下失去准确性也就并非不可理解了。

对于物理学家来说,这就意味着在极端条件下,他们需要从另外的假设出发来推导流体所服从的方程。

离散对连续的模拟

但对于研究数学分析的数学家来说,连续的流体要比离散的原子分子更自然,方程比现实更自然。与其说方程描述了现实,不如说现实是方程的近似。在每一阵风中,自然给我们展示的,正是如何通过离散去得到连续。

自然告诉我们的,正是这样一个道理:通过离散的手段,也能模拟出连续的现象。

不知道是巧合还是必然,为了模拟自然中流体的流动,研究人员发展了一种数值计算方法,叫有限差分方法,能给出一些偏微分方程的数值解。

有限差分方法的精髓,正是自然告诉我们的道理:通过离散的手段,模拟连续的现象。它将一个原本连续的区域离散化,划分成一个一个的点,就像空气中的分子。然后它将连续的问题转化为离散的问题,也就是说将要求解的问题翻译成线性方程组。最后通过求解这个方程组,我们就得到了原来问题的一个数值解。由于计算机善于处理离散的问题,而离散的问题也会比连续的容易处理,这就使有限差分方法成为了得到偏微分方程的近似数值解的好工具。

下面,我们来看一个用有限差分方法解决问题的例子。

肥皂膜的数学模型

【公式出没,注意!不适者欢迎绕行。相信我,不会过于影响后面的阅读。】

如果我们将下面这个铁丝架浸到肥皂水中再拿出来,架上会有一层肥皂膜,它是什么形状的呢?

铁丝架

我们先将架子放在一个平面上,它的底面就是一个正方形。为了描绘肥皂膜的形状,我们在正方形上定义一个函数f,在某个点(x,y)上,找到肥皂膜上在它正上方的那一点,然后量度两点的距离,然后我们定义f(x,y)为这两点的距离,如下图所示(细黑线是等高线)。这样的话,定义在这个正方形上的函数f就完全地反映了整个肥皂膜的形状了。

例子

而在这个正方形的边界上,由于肥皂泡附着在架子上,所以在一条边上,函数f的取值为1,而在其它边上它的取值为0。这种定义在边界上的条件被数学家称为边界条件。

由于表面张力的原因,从局部看来,肥皂膜肯定是非常平滑的。任何可能的突起都会迅速被表面张力拉平。如果将这种平滑的特性翻译成数学的语言的话,就是函数f满足以下偏微分方程:

拉普拉斯方程,又称调和方程

于是,我们需要解决的问题就变成:在这个正方形内,根据给定的边界条件,数值求解以上的偏微分方程,也就是说求出满足上面方程的函数f。

这正是有限差分方法派上用场的时候。

有限差分方法的回答

不知道有限差分方法的灵感是否来自自然,但以自然作类比,我们能更好地理解它。

回到肥皂膜的例子上,我们知道,实际上肥皂膜并不是连续的,而是由数量有限的水分子和肥皂分子构成的,它的整体形状也是由这些分子的相互作用所决定的。如果我们能够在计算机上模拟肥皂膜上每个分子和它们的相互作用的话,我们就能得到整个肥皂膜的形状。

但尽管这些分子的数量有限,对于现代计算机而言仍是天文数字,完全的模拟并不可行。是否可能减少进行模拟的分子数量,牺牲模拟的精度去换取更高的速度呢?不妨想象一下,如果肥皂的分子很大很大,大到那块肥皂膜变成一个16×16的分子网格,上面只有256个“肥皂分子”。那么,由于需要模拟的分子数目不大,对肥皂膜的模拟变得非常容易。

不妨试试在这种基础上做个模拟,看看结果如何。

我们不妨假定这些巨大的“肥皂分子”在平面上的投影将正方形分成了一个16×16的网格。

16×16网格

每个格点都代表了一个“肥皂分子”。那么,只要知道每个格点对应的“肥皂分子”离地面的高度,我们就能知道整个肥皂膜的形状了。我们用h[i,j]表示第i行第j列的“肥皂分子”离地面的高度。

然后,我们需要将刚才的偏微分方程表达成这些h[i,j]之间的关系。经过不算复杂的推导,对于不在边界上的格点h[i,j],我们可以得到如下的关系:

网格满足的方程

用自然语言来说,就是一个“肥皂分子”的高度正好是它前后左右四位邻居高度的平均值。这也非常符合我们的直觉,因为只有这样,在每个局部看来这个肥皂膜都是比较平坦的。如果我们想象每个“肥皂分子”的邻居都用同样大小的力(可以看作表面张力)拉着它的话,它的稳定位置正好就符合上面的方程。

数学家们把这个关系称为偏微分方程的差分形式,这也就是“有限差分方法”这个名字的来源。

最后剩下的要翻译过来的内容就是边界条件了。在网格的边界处,“肥皂分子”都是附着在铁丝网上的。根据铁丝网的形状,我们容易知道,除了网格第一行的“肥皂分子”的离地高度都是1以外,其余的都是0。

当所有条件都翻译完毕后,我们手头上就有了一个由这些条件构成的线性方程组。剩下的工作就是解方程组。对于计算机来说,此乃小菜一碟。将方程组的解画出来,就是这样:

有限差分方法给出的近似数值解

效果似乎不错,但正确性如何呢?

我们同时画出原来偏微分方程的解:

偏微分方程的解

肉眼看不出它们之间的差异,不是吗?

从上面的例子中,我们可以窥见有限差分方法的一般框架:对于一个求偏微分方程解的问题,先将要求解的区域剖分成网格,然后将偏微分方程和边界条件翻译成网格中每一个格点之间的关系,从而得到一个多变量的方程组,每一个格点对应一个变量,最后通过求解这个方程组,我们得到一组解,结合原来的网格,我们就得到了原来问题的一个数值解。

自然的总结

事实上,有限差分方法得出的解是一个比较好的近似,所需的计算资源也不多。对于经常处理边界复杂的偏微分方程的工程师而言,这些问题如果用传统的数学分析方法解决的话,计算量相当浩大,只能人手计算,更别提需要做的各种近似了;但如果利用有限差分方法的话,误差不算太大,计算量却不太大,而且可以交给计算机去处理。当然,它计算出来的解永远都是近似解,但在实际应用中,过高的精度是不必要的。有限差分方法正是舍弃了一点点精确性,换来了计算的速度。

流体力学研究的自然流体实际上是离散的分子组成的,我们不知道有限差分方法的灵感是否来源于此,但它的确曾在计算流体力学中起过很大的作用。它也被应用在热力学的数值计算中,比如说计算电脑芯片的散热情况。它的吸引力很大一部分来源于它的简单和易用。

但有限差分方法也并非尽善尽美。它的求解过程只能在一个形状规则、分布均匀的网格上进行,但显然会有某些地方的变化更值得关注。比如说,如果我们想要模拟一条溪流,我们肯定更关注礁石丛生之处被扰乱的水流,而不是毫无阻碍缓缓流淌的部分。而有限差分方法对模拟区域是一视同仁的,每个地方的模拟精度都是一样的,这样的话为了提高精度,很多计算资源就被白白浪费在无关紧要的地方上。此外,还有精度和数值稳定性的问题。

但通过对有限差分方法的改进,人们可以部分地绕过这些问题。也有别的数值计算方法可以弥补这些缺陷,如有限元方法、有限体积方法等。它们的基本思路与有限差分方法是一样的:将问题用不同的方式离散化,然后用离散的手段去解决它。

而这,正是由分子和原子组成的每一股水流、每一阵风每时每刻都在做的事情,而且它们比我们、比计算机做得更好。这就是自然在计算,它是一个巨大的并行计算机。它以不计其数的分子和原子,用离散的方法,编织了一个连续的世界;我们活在其中,却不知觉。

海浪

注1:纳维-斯托克斯方程看起来是这样的:

navier_stokes

自然用原子和分子就能模拟出如此复杂的偏微分方程,着实令人惊叹。

系列

0
为您推荐

49 Responses to “人算不如天算 之 那一阵风告诉我们的”

  1. cary说道:

    沙发?

    • whensee说道:

      文氏一 猜想:这样证明 歌德巴赫猜想 行不行?

      文氏一猜想:

      把所有任意两个奇素数之和按从小到大的顺序排列就可以得到不小于6的连续不间断的偶数数列。 ­

      (注)除特别说明以外,文中所说的“质数”或“素数”均指奇素数,对于唯一的偶素数2暂不与讨论。

      因为篇幅有限,具体论证过程请登录我的QQ空间阅读。

      我的QQ:248914156

      谢谢!

  2. ct说道:

    对湍流问题一直很有兴趣却一直没怎么深入研究过的人飘过~~

  3. 路人甲说道:

    量子力学的波函数都是连续的吧

  4. Leh说道:

    自然没有计算,而是人类在计算自然的模式,本文实在是因果倒置

    • 说道:

      楼上仿佛来自18世纪或更早:)

    • Metaverse说道:

      自然定律的作用模式,在人类看来就是一种计算,无非是这个意思而已,不是什么因果不因果的关系。

      世界本质上是不连续的,给予离散的数字很好的表现机会。。。

    • laplaceme说道:

      同感,这种想法让人感觉怪怪的。

      • gxsheng说道:

        啥叫“计算”? 是用一套符号系统来模拟映射另外一套? 那我们人的“计算”是不是也是自然“计算”的一部分? 我们自身都是自然“计算”的产物啊。。。
        把人的“计算”理解为大自然的“局部互映射”更好一点吧。

    • ether说道:

      蛋疼的文章啊。。。。。人类的计算都是对自然的演化进行模拟而已。。。。。不然你的计算为什么非得按照一定的方程来计算,而不是自己想怎么算就怎么算呢?

  5. 鬼子说道:

    支持楼上。但是人类的智慧就体现在理解这个难题上:自然就是同时既是连续的,又是离散的。

  6. 打破的管道说道:

    自然是一个巨大的并行计算机?虽然我和你一样不同意,但也无法证伪。
    我想这只是作者的一个比喻,不必上升到因果倒置的高度来理解吧:)

  7. 牧狮说道:

    宗教也许就是这样产生的,他们看到了结果,却不了解原因。

  8. vt说道:

    两个小问题,也许是我理解力太差,读完全文也没明白。

    一、“为了描绘肥皂膜的形状,我们在正方形上定义一个函数f,在某个点(x,y)上,找到肥皂膜上在它正上方的那一点,然后量度两点的距离,然后我们定义 f(x,y)为这两点的距离,如下图所示(细黑线是等高线)。”

    (x,y)上方的点和它之间的距离到底指什么呢?在图上看不出来。

    二、“根据铁丝网的形状,我们容易知道,除了网格第一行的“肥皂分子”的离地高度都是1以外,其余的都是0。”

    网格的第一行在哪?

    • 方弦说道:

      这个是我没有说清楚……

      第一点,其实就是数学上描述曲面的方法。曲面上的一点,可以用三维坐标(x,y,z)来表示。但因为曲面其实是二维的,所以只用两个坐标就可以确定了,也就是说第三个坐标是被前两个坐标决定的。这样的话,我们可以把曲面上的点写成(x,y,f(x,y)),这里f(x,y)描述的就是前两个坐标如何决定第三个坐标。而如果在几何的角度来说,其实f(x,y)也就是(x,y,f(x,y))与它在xy平面上的投影(x,y,0)之间的距离。

      第二点,观察一下铁丝网,有一条边是高出来的,根据坐标,那里就是网格的第一行,网格是有图的,不过是平面的而已。我们考虑的是格点。

      • 依轩说道:

        作者你好啊 麻烦问一下那个拉普拉斯方程是怎么导的呀???我怎么就导不出来那个样子??麻烦详细解释下啦

  9. 民主说道:

    那个偏微分方程 …+…= 0 的推导过程如何?

  10. 访客说道:

    这个就是我们工程界所谓的有限元方法吧?

  11. 瓜子黄杨说道:

    写得好,作为数值计算的科普读物很好。

  12. Jonsoncao说道:

    现在解Navier-Stokes已经不用空间上的有限差分了,因为误差原因,三维的时候离散时间用显式表达微分项的话,空间离散的程度必须非常高,才能让误差可以接受,也就是楼主说的稳定性不好;基本上涉及到物理量的扩散和对流的方程都不会再用有限差分了;目前来说,解每个时间定点上的Stokes问题的话,还是用有限元比较多(stokes需要用到mixed finite element)或者有限体积(finite volume),一是算的快,二是误差小,而且符合微分几何里面的真解的一些代数性质,比如梯度场对应点,散度对应边,正好和离散空间在的基函数配起来;另外Navier-Stokes最关键的问题还在于解决那个速度和速度的梯度做内积的非线性项,很多离散问题都避开那个,也就是避开了速度的空间变化对于速度的时间变化的影响(即连续介质方程中都要涉及到的对流项),其实是很取巧的;

    另外某位访客同学:有限差分(finite difference)和有限元(finite element)区别还是很大的,在一维你可以认为他们是相同,但在2维以上完全不同,有限差分是把空间离散化后力图找到每个点上的解的具体数值,而有限元的思想是离散化空间之后,找到这个离散空间对应的基函数,把解表达成那个基函数的组合;都是往另外一个函数空间上做投影,有限元有道理的多,因为那个离散空间很好的描述了那个连续空间的性质(比如楼主给出的那个最简单的泊松方程,变分之后需要解一次可导,你用一次多项式去逼近它,比有限差分用常值有道理很多)

    我很久没有接触过这些东西的中文了,很多用词可能会不太准确

    • 板砖说道:

      有限元非常之慢的。。。计算流体有限体积用得比较多,因为比较快

  13. JoshuaShaw说道:

    自然就是计算机。只所以比我们的计算机更有效,就是因为它是量子的,可以进行大规模的并行计算。

  14. 二八大卡说道:

    数学在描述自然

  15. xuby说道:

    你说的“有限差分法”就是“有限元”吗?
    大学学过这门课,现在全忘光了。

    • fwjmath说道:

      其实不是的。如同之前的评论所说,有限差分是对函数定义域作离散近似,而有限元是对函数本身作离散近似。

  16. lpiszdf说道:

    唔,看到老本行了,很亲切呀

  17. TonyShaw说道:

    我很想知道那个递推方程怎么算出来的?

  18. whensee说道:

    文氏一 猜想:这样证明 歌德巴赫猜想 行不行?

    文氏一猜想:

    把所有任意两个奇素数之和按从小到大的顺序排列就可以得到不小于6的连续不间断的偶数数列。 ­

    (注)除特别说明以外,文中所说的“质数”或“素数”均指奇素数,对于唯一的偶素数2暂不与讨论。

    因为篇幅有限,具体论证过程请登录我的QQ空间阅读。

    谢谢!

    • whensee说道:

      我的QQ :248914156 谢谢!

    • whensee说道:

      文氏一 猜想:这样证明 歌德巴赫猜想 行不行?

      文氏一猜想:

      把所有任意两个奇素数之和按从小到大的顺序排列就可以得到不小于6的连续不间断的偶数数列。 ­

      (注)除特别说明以外,文中所说的“质数”或“素数”均指奇素数,对于唯一的偶素数2暂不与讨论。

      因为篇幅有限,具体论证过程请登录我的QQ空间阅读。

      我的QQ:248914156

      谢谢!

  19. John说道:

    本末倒置啊!
    并不是“自然就给出了一组微分方程的数值解”,而是人们希望用一个模型抽象流体,于是建立了一个由一组微分方程组成的数学回归模型。

    连续数学模型描述理想的、精确的行为,而自然则是近似的。你自己也说自然给出的是“数值解”,数学家们从来不会困扰于得到特定精度的数值解。代数性质才是困扰之处。

    况且,代数级别的分析得出的结论是普适的、开创性的、预见性的,自然“算”出来的数值解对我们没有什么意义——除了艺术领域。

    • fwjmath说道:

      分析性质上的分析固然很重要,但对于实际的应用来说,由于很多偏微分方程的复杂性,并不能得到很多必须的性质,比如说Navier-Stokes方程的解的存在性和光滑性就是一个例子。这是就必须依靠数值解法。况且这也是方程所尝试描述的自然,它的解答方式。
      理想和精确的数学,当然是很好的,给我们很多指导作用,但很多时候,在应用上,不一定需要非常理想或者精确,为了计算的可行性,适当的近似是必须的,恰好正是数学给了我们作近似的依据。
      纯粹数学当然很好,但是人还是生活在现实中的。无意冒犯,我也有朋友学纯数学,但认识到理论和应用的差距还是很重要的。

  20. 猪头猪脑说道:

    对我来说,这些太深奥了,但那阵风告诉我:它不会再出现!

  21. 我心依旧说道:

    我也想过这问题,自然界就是一巨大的计算机,如果有一台计算机能够完全仿真自然,会有什么后果?它能计算出自己在计算什么吗?
    物理的思想就是去接近自然。正如费曼所说的那样,当代的科学一切都是近似。
    ps:想想我们上的模电课,近似了一塌糊涂的,大电阻并小电阻,直接就用小电阻了。好多东西想精确求解几乎不可能。差个十倍,就称为远大于

    • wz说道:

      让我想起了马哲课的“真理的相对性”
      模电那是等效替换,有限差分法只是一种数值解法

  22. wz说道:

    物理很多时候就是搞近似,进行数值计算有时也是无法求得解析解得无奈。人类连一个简单的三体问题都没法解决,可想而知自然界有多复杂。

  23. wz说道:

    现在仿生学算法貌似很盛行
    蚁群算法、模拟退火算法、遗传算法、贪心算法……

  24. 水木计划说道:

    [...] - 人算不如天算·那一阵风告诉我们的 人算不如天算·那一阵风告诉我们的 文章来自科学松鼠会,点击此处查看来源。 [...]

  25. 十四弟说道:

    流体真的是十分美妙的

  26. 依轩说道:

    那个拉普拉斯方程是怎么导出的( ⊙ o ⊙ )啊! 就是那个...+...=0那个 没导出来。。。求高人指点。。。

  27. joby说道:

    这个文章看得我蛋疼。

  28. 闫霄龙说道:

    即便不用数值计算,那一串串的微分方程也只不过是对自然的一种概率意义下的猜测与概括。至于是数值求解还是积分求解只是技术手段而已,但是人类永远不可能了解上帝的本意。

  29. [...] 这里无节操广告一下,关于自然解优化问题的一个例子,可以参考松鼠会的文章:https://songshuhui.net/archives/33649 [...]

  30. gsh说道:

    1.楼主所言有点意思
    2.所有存在的事物与运动,都是各种力的相互作用,无需计算。
    3.数学是严谨的,其方程也是完美的,但是它的单元比较少,它起于人得悟性,后自成一派,而且计算并非是数学的唯一目的。严格的说,所有的自然运动都不能用方程描述,甚至用其他方法也是不可描述的,而数学所描述的一切,甚至其他方法的所描述的一切,都不可能在自然界准确的发生。
    4.

Leave a Reply