[返回文化长廊首页]·[所有跟帖]·[ 回复本帖 ] ·[热门原创] ·[繁體閱讀]·[版主管理]
看东土兄《七言绝句》有感 --- 科学计算
送交者: 木桩[☆★声望品衔8★☆] 于 2021-07-05 20:50 已读 1606 次 2 赞  

木桩的个人频道

常常碰到网友问我,什么是计算数学?什么是科学计算?这篇文章企图阐明数学在“科学计算”里的作用。

首先,什么是科学计算?在这方面有着不同的定义。在我看来,这应该是用数学作为工具,设计有效的算法,然后在计算机上实现。的确,科学计算和计算机科学有着紧密的联系,但不是一回事。科学计算着重于数学的角色,强调数学的作用。通过数学,保证设计方法的有效性,有足够的精确度,足够的稳定性,而且提高效率。

还是通过几个有名的例子来说明问题吧。 

例一:快速傅立叶变换 (Fast Fourier transform, FFT)。

我想,这个方法大家都不陌生吧?在很多科学技术领域里,应用的那个部分里,都需要做傅立叶变换,事实上,当今世界上的计算机在运算的时侯,很多都在作快速傅立叶变换。这里,你就可以看到数学对它的贡献了。其实,这仅仅是初等数学,而且还是比较简单的数学。

一维空间:从0 2π,均匀地分布个点。

频谱空间:傅立叶级数展开傅立叶级数的系数和点空间之间是有关系的。这样说吧,如果你知道了这些点值,就能算出这些系数,反之,知道了这些系数,也能算出那些点值。

计算机在点值和系数的空间来回计算,这是要有代价的。如果已知系数,要算一个点值,这是 N 数量级的工作量;把所有N个点值全算出来 , 则是 N2 数量级的工作量。反之,如果已知点值,要把所有N个系数全算出来,也 是 N2  数量级的工作量。当 N 很大时,这是相当大的计算量,这不,如果 N = 100000,再平方一下,这数字太可怕了,而且,计算机的大量运算会产生误差积累,导致算出的结果不够精确。

能不能把 N2降下来?能。快速傅立叶变换 ( FFT) 的思想其实很简单:仔细观察公式,发现有很多重复计算。在算点值时,打个比方(纯粹胡说):第一个点,第四个点,第七个点。。。有重复计算。FFT 把重复计算的部分,一次性算好,然后在第一个点,第四个点,第七个点。。。同时使用。就这么点简单的思想,你只要把它做到极致,一个 N2  数量级的工作量就降到了N logN 数量级了,相比于 N,log N 是一个很小的数,几乎等同于常数。这,是一个革命性的创举。

可以这么说,如果没有得益于快速傅立叶变换( FFT)的应用,各种信号处理,电子工程,绝对不会变得像今天这么广泛。FFT 在数学上是一个很简单的东西,这件事情之所以做得非常飘亮,就是在数学上并没有做新的事情,也没有改变原来的公式,思路也是简单的,只是把傅立叶公式算得很快,多快好省干革命。

FFT的第一篇文章,1965年发表在 Mathematics of Computation , 这是美国数学学会的顶级杂志,也是非常古老的计算数学杂志。这篇FFT 论文的影响力是巨大的。

例二:快速多极法 (fast multi-pole method)

这种方法是用来快速计算 N 个粒子之间两两相互作用的效果。 比如,两两粒子间的引力作用。对一个固定的粒子来说,它的运动取决于它和其他所有粒子两两相互作用的效果之和。把这些相互作用都算清楚,需要 N 数量级的工作量。那么,要算好所有 N 个粒子的运动规律,则需要 N2  数量级的工作量。

这次运气不好,和 FFT 不同,我们似乎找不到明显的重复运算 (除了两两相互作用只需算一次,这只能减少一半运算量,没法在数量级上减少)。但这难不倒数学家。数学家们发现,一个粒子和距离它较远的一堆粒子的相互作用,不用两两算清楚,只需要算这个粒子和这一堆粒子(看成一个大粒子)的相互作用,也就八九不离十了。当然,误差是多少,一堆粒子到底可以多大,如何定义 “较远”,这些都要分析清楚。这次没有办法像 FFT 一样得到和原来公式一样的数学效果,但是,如果给定能容忍的误差,比如千分之一,则上述的办法只需要 N log N 数量级的工作量。实际上,如果把算法和分析再做得精细些,工作量能降到 N 数量级。这种方法叫做 “快速多极法”。

快速多极法的发明,归功于 耶鲁大学的 V. Rokhlin 和 L. Greengard。1985 年,他们发表在 Journal of Computational Physics 的一篇文章中,首创性地提出和分析了快速多极法。和FFT 类似,这个方法也在科学和工程中得到广泛的应用。因为这个工作,这两位数学家得到了美国数学学会 2001 年的 一个重量级奖项 (the Leroy P. Steele Prize)。这项奖通常都是授予纯粹数学家的,应用数学家极少得到该奖,这也说明了快速多极法在数学和应用中的双重重要性。

例三:多重网格法 (multigrid method)

怎样解大型的线性方程组                        

                         Ax = b

A是 N x N 矩阵,b 是向量。这个问题看上去十分简单,用中学学到的 Cramer’s Rule 就能得到解。不过,用 Cramer’s Rule 的计算量是 N 的阶乘(N!)的数量级。当矩阵很大的时候,比如, N=1000, N! 是个非常庞大的数,不信你在计算器上摁一摁,会发现计算器都无法显示出这么庞大的结果。不管今天的计算机有多快,都无法在短时间内实现这样的计算。所以,Cramer’s Rule 在解大型的线性方程组时,只有理论上的意义,没有实际意义,纸上谈兵也。 

用高斯消除法(Gaussian elimination)求解,可以将工作量从 N! 数量级降到 N数量级。这已经大大提高了计算效率。对一般的线性方程组,这经常是实际计算中唯一可行的方法。不过, N3  还是实在太大了,数学家希望再进一步降低工作量。对于一些实际应用中的矩阵,有些特殊的性质,比如对称正定矩阵,何不利用一下?应用数学知识可以设计 N 数量级的算法,如果能如愿以赏,的确是美事一桩,故而发明了“多重网格法”。要知道,不是所有的矩阵都能采用多重网格法,矩阵需要满足特殊的性质。因为哪怕A是对角矩阵,求解也需要 N 数量级的计算,再也没有油水可榨了,N数量级已经达到了极限。

多重网格法的主要贡献者是以色列数学家 Achi Brandt , 为此,2005 年,他得到了美国工业与应用数学学会(SIAM)和美国计算机学会 (ACM) 共同授予的 “计算科学和工程奖”  (Prize in Computational Science and Engineering ), 这是个非常了不起的大奖。

向科学家们致以崇高的敬礼!

6park.com

贴主:木桩于2021_07_05 20:52:14编辑

评分完成:已经给 木桩 加上 50 银元!

6park.com

贴主:木桩于2021_07_09 2:16:56编辑
贴主:木桩于2021_07_09 2:19:58编辑
喜欢木桩朋友的这个贴子的话, 请点这里投票,“赞”助支持!
[举报反馈]·[ 木桩的个人频道 ]·[-->>参与评论回复]·[用户前期主贴]·[手机扫描浏览分享]·[返回文化长廊首页]
木桩 已标注本帖为原创内容,若需转载授权请联系网友本人。如果内容违规或侵权,请告知我们。

所有跟帖:        ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )


用户名:密码:[--注册ID--]

标 题:

粗体 斜体 下划线 居中 插入图片插入图片 插入Flash插入Flash动画


     图片上传  Youtube代码器  预览辅助

打开微信,扫一扫[Scan QR Code]
进入内容页点击屏幕右上分享按钮

楼主本栏目热帖推荐:

>>>>查看更多楼主社区动态...






[ 留园条例 ] [ 广告服务 ] [ 联系我们 ] [ 个人帐户 ] [ 版主申请 ] [ Contact us ]