计算数学家在干些什么?
随着当代科技的高速发展, 在科学研究和工程设计领域里,离不开计算机的模拟。实行这种模拟,通常需要将非常复杂的微分方程化简到能够在计算机上编程实现。在这个化简的过程中,仍然要求所得到的结果能充分地逼近原始复杂问题的解。在应用数学上,实现和证明这个过程的方法,叫做“科学计算”- Scientific Computing。
这样说来,“科学计算”和计算机是紧密联系在一起的。没有计算机,也就谈不上“科学计算”。但它又和计算机科学不一样。计算机就是一个可以用来算题的机器。然而,“科学计算”,是把一个完全无法计算的东西,比如一个无穷维的微分方程,变换和简化成可以在计算机上演算的东西。也就是说,一个复杂而神秘的东西,用一个简单的算法来做为它的替身,放到计算机去求解。应用数学家就是寻找和创造这些“替身”的伯乐。
我们知道,宇宙空间,球体之间的引力和它们之间的距离有关。计算每一对星球之间的引力,整个银河系统里的运动规律。。。,模拟这个庞大的系统,计算量可怕,计算机不知道要算到猴年马月,科学家只能望洋兴叹。再看看设计宇宙飞船,飞机导弹,和设计汽车的领域里,飞行物质的周围,被一层流体气层包围着,如何设计流线型的飞行物体,那是航天航空,和汽车制造业的关键之关键。当然,还有在我们周围的电磁场波。。。等等,总之,大到宇宙,小到电子,无处不存在科学家想探索的奥秘。
计算数学家在这探索自然界奥秘的过程中,扮演了什么角色?
首先,应用数学家为上面的自然现象写出微分方程,这叫建立模型。他们认为,这些微分方程能够准确地描述我们想要知道的物理现象。但是,这些微分方程都是无穷维的,非常复杂, 大部分的微分方程都是无法显式求解的。
当代的计算机,无论有多先进,它只能够对付有限多个数的运算,我们想要在计算机上运算无穷维的微分方程,得到它得解,办不到。也就是说,在计算机上做无穷多个加减乘除的运算,无法实现。
既然这般,科学家说了,我们不需要模型的准确解,如果能得到一个相对误差不超过1% 的近似解,我们就满足了。“科学计算”要做的事,就是找一个算法 (algorithm),设计一个编程,来代替那个可怕的微分方程,这个编程是可以在计算机上运算的。这样还不够,还要证明,得到的解符合相对误差不超过1% 。有了这样的证明,确保了精确度,科学家方才心服口服。
“替身”找到了,科学家却又改变了主意,得寸进尺了。他们说现在要求精确度达到 0.1%,0.01%,0.001%。。。计算数学家可以用同样一个方法,达到这些要求,只不过要增加计算量。比如,增加网格点的个数。只要你给出要求,精确度ε,我总能找到网格N,来满足你的要求,在数学上,这叫收敛性。
那么,是不是总是可以用增加计算量来达到精确度?这不好讲。毫无疑问,增加计算量肯定会带来更高的精度,但是,如果代价太大,或者效率太低,都是不聪明的办法。
这里存在一个数学家很关心的问题:如果有两个算法,一个 A, 一个 B, 都能达到误差不超过 1% 的要求,但在同一台机器上,A要花两天才能算出结果,然而, B只要两小时就能给出同样的结果。你喜欢谁呢?当然是B,这是傻子都能回答的问题。这是计算方法中不可忽视的问题,叫做算法的效率。
最后谈一下“科学计算”中的 稳定性。
计算机是不能准确表达所有的数的。比如,1/3,存在计算机里的是0.3333333333333。。。
到底给出多少个小数点,那就看你的计算机是怎么设计的。现在的计算机,一般可以保留十几位有效数字。被截断的部分,就是“截断误差”。
当今的计算机里,“截断误差”通常可以小到 10-15 ,似乎微不足道。但是问题在于,很多算法,都要在计算机上运算成千上万步。我们假设有一个算法,它在计算机上的每一步运算,都把误差放大 1%。这一点点放大,似乎微不足道,但是运算一万步后,误差就被放大了1043 倍,原来微不足道的10-15 的截断误差,现在被放大成了1028,这可是个天文数字啊!这样的误差,把所有真解的影子全都埋没了,那还了得!
计算数学需要研究稳定的格式,确保“截断误差”控制在某一范围内,不准误差每部放大。这就是所谓的“稳定性”。
以上所说,是“科学计算”的基本常识,属于中学生的科普。1978年,徐迟的一篇报告文学《哥德巴哈猜想》,使得高考志愿选数学系的大门挤破了头,人人争先恐后地想当陈景润。陈景润是搞数论的,属于纯数学,所以大家都认为只有纯数学才是数学,应用数学不是数学。这是一个误导。纯数学和应用数学确实有区别,我这里不往深里去解释它们之间的区别,但有一点是大家一听就懂的,那就是应用数学可以混,纯数学没法混。此话怎讲?学纯数学,懂就懂,不懂就不懂,证明不出来就是证明不出来,没法不懂装懂。然而,学应用数学,有些数学功底不咋的人,跟在人家已经设计好的东西后面,这里算算,那里改改,总归可以的,这叫滥竽充数。但这不等于说应用数学就比纯数学容易。能够设计出巧妙的算法,绝对需要 扎实的数学功底和智慧。有几个经典的算法,都有冠名。设计出这些算法的人,都是牛人。应用数学的牛人和纯数学的牛人没有区别,都是非常智慧的人。