# I1 p6 N( @# v3 |5 Z& c
用自然语言来说,就是一个“肥皂分子”的高度正好是它前后左右四位邻居高度的平均值。这也非常符合我们的直觉,因为只有这样,在每个局部看来这个肥皂膜都是比较平坦的。如果我们想象每个“肥皂分子”的邻居都用同样大小的力(可以看作表面张力)拉着它的话,它的稳定位置正好就符合上面的方程。1 w" n2 }* n% S+ L' M- a; p. c
/ P, A% t! h' n' l! }数学家们把这个关系称为偏微分方程的差分形式,这也就是“有限差分方法”这个名字的来源。/ X, [/ M7 @1 b9 V E
' H4 o7 a ?8 F1 k3 Z
最后剩下的要翻译过来的内容就是边界条件了。在网格的边界处,“肥皂分子”都是附着在铁丝网上的。根据铁丝网的形状,我们容易知道,除了网格第一行的“肥皂分子”的离地高度都是1以外,其余的都是0。 * @( ^* U2 Q, a1 y) Q" W" ^( Y' B& b3 B* }
当所有条件都翻译完毕后,我们手头上就有了一个由这些条件构成的线性方程组。剩下的工作就是解方程组。对于计算机来说,此乃小菜一碟。将方程组的解画出来,就是这样:3 c8 b; g/ Z0 ~; G+ ` 1 T s7 X; n) i6 k' }1 f1 S
效果似乎不错,但正确性如何呢? 0 i! c& T0 X; y- V2 o, }我们同时画出原来偏微分方程的解: ; h+ @; W0 l- A" o" _/ I2 N' N9 n) G% I' u& v$ I
肉眼看不出它们之间的差异,不是吗?7 [. l( V7 U1 V6 m) s3 L2 t/ A
从上面的例子中,我们可以窥见有限差分方法的一般框架:对于一个求偏微分方程解的问题,先将要求解的区域剖分成网格,然后将偏微分方程和边界条件翻译成网格中每一个格点之间的关系,从而得到一个多变量的方程组,每一个格点对应一个变量,最后通过求解这个方程组,我们得到一组解,结合原来的网格,我们就得到了原来问题的一个数值解。 自然的总结) u: g; ]9 Q% w' y4 o9 a6 e, ^; M
事实上,有限差分方法得出的解是一个比较好的近似,所需的计算资源也不多。对于经常处理边界复杂的偏微分方程的工程师而言,这些问题如果用传统的数学分析方法解决的话,计算量相当浩大,只能人手计算,更别提需要做的各种近似了;但如果利用有限差分方法的话,误差不算太大,计算量却不太大,而且可以交给计算机去处理。当然,它计算出来的解永远都是近似解,但在实际应用中,过高的精度是不必要的。有限差分方法正是舍弃了一点点精确性,换来了计算的速度。1 E; J2 Z4 z- n ~" F4 J5 r& e
" w6 W P% F2 S流体力学研究的自然流体实际上是离散的分子组成的,我们不知道有限差分方法的灵感是否来源于此,但它的确曾在计算流体力学中起过很大的作用。它也被应用在热力学的数值计算中,比如说计算电脑芯片的散热情况。它的吸引力很大一部分来源于它的简单和易用。 K3 e8 Z. J2 @7 e' k4 N ' P [* J7 E. P+ B5 X& j但有限差分方法也并非尽善尽美。它的求解过程只能在一个形状规则、分布均匀的网格上进行,但显然会有某些地方的变化更值得关注。比如说,如果我们想要模拟一条溪流,我们肯定更关注礁石丛生之处被扰乱的水流,而不是毫无阻碍缓缓流淌的部分。而有限差分方法对模拟区域是一视同仁的,每个地方的模拟精度都是一样的,这样的话为了提高精度,很多计算资源就被白白浪费在无关紧要的地方上。此外,还有精度和数值稳定性的问题。 * E3 F* v. Y: N' [* X; j" X , _, U+ x+ s+ u C( P y& c但通过对有限差分方法的改进,人们可以部分地绕过这些问题。也有别的数值计算方法可以弥补这些缺陷,如有限元方法、有限体积方法等。它们的基本思路与有限差分方法是一样的:将问题用不同的方式离散化,然后用离散的手段去解决它。9 \7 V+ M5 ^0 o: T3 a9 l
5 C* S! u+ {+ x0 D
而这,正是由分子和原子组成的每一股水流、每一阵风每时每刻都在做的事情,而且它们比我们、比计算机做得更好。这就是自然在计算,它是一个巨大的并行计算机。它以不计其数的分子和原子,用离散的方法,编织了一个连续的世界;我们活在其中,却不知觉。0 E7 z0 F: X8 e) u ; R& O0 g1 V$ t$ z( s注1:纳维-斯托克斯方程看起来是这样的: 7 q/ H( o# P$ [- a