计算机科学数学理论浅谈

出处:www.examlink.com 作者:华翊 日期:2006年12月04日 14时08分

计算机自从其诞生之日起,它的主要任务就是进行各种各样的科学计算。文档处理,数据处理,图像处理,硬件设计,软件设计等等,都可以抽象为两大类:数值计算与非数值计算。作为研究计算机科学技术的人员,我们大都对计算数学对整个计算机科学的重要性有一些了解。但是数学对我们这些专业的研究和应用人员究竟有多大的用处呢?我们先来看一下下面的一个流程图:



    上图揭示了利用计算机解决科学计算的步骤,实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出计算数学理论对用计算机解决问题的重要性。下面我们将逐步展开对这个问题的讨论。
    计算机科学的数学理论体系是相当庞杂的,笔者不敢随意划分,参考计算机科学理论的学科体系,我们谈及的问题主要涉及:数值计算,离散数学,数论,计算理论四大方向。

[一]数值计算(Numerical Computation)主要包括数值分析学、数学分析学、线性代数、计算几何学、概率论与数理统计学。
    数值分析学又常被称为计算方法学,是计算理论数学非常重要的一个分支,主要研究数值型计算。研究的内容中首先要谈谈数值计算的误差分析,误差是衡量我们的计算有效与否的标准,我们的算法解决问题如果在误差允许的范围内,则算法是有效的,否则就是一个无效的问题求解。另外就是数值逼近,它研究关于如何使用容易数值计算的函数来近似地代替任意函数的方法与过程。感觉应用比较广的不得不提切雪比夫逼近和平方逼近了。笔者曾经尝试过的就是通过最佳平方逼近进行曲线的拟合,开发工具可以选择VC++或者Matlab。插值函数是另外一个非常重要的方面,现代的计算机程序控制加工机械零件,根据设计可给出零件外形曲线的某些型值点,加工时走刀方向及步数,就要通过插值函数计算零件外形曲线及其他点函数值。至于方程求根、线性方程组求解,一般的计算性程序设计问题都会多多少少的涉及一些,我们这里就不赘述了。关于数值分析学的一个学习误区就是仅仅学习理论知识,而很难和程序设计结合起来,实际上通过上面的论述,大家已经能够初步地认识到这个学科是应当与程序设计紧密联系才能够体现它的重要性的。关于理论的学习,推荐华中科技大学李庆扬老师的《数值分析》。然而理论学习毕竟是个过程,最终的目标还是要用于程序设计解决实际的计算问题,向这个方向努力的书籍还是挺多的,这里推荐大家高等教育出版社(CHEP)和施普林格出版社(Springer)联合出版的《计算方法(Computational Methods)》,华中理工大学数学系写的(现华中科技大学),这方面华科大做的工作在国内应算是比较多的,而个人认为以这本最好,至少程序设计方面涉及了:任意数学函数的求值,方程求根,线性方程组求解,插值方法,数值积分,场微分方程数值求解。
    数学分析学很多学校在近些年已经替代高等数学被安排到了本科教学当中。原因是很简单的,高等数学虽然也是非常有用的工程数学,介绍的问题方法也被广泛的应用,但是正如大家所知道的,高等数学不太严格的说,基本上就是偏向于计算的数学分析,当然省去了数学分析非常看重的推理证明,然而我们认为这一部分正是我们最需要的。这对我们培养良好的分析能力和推理能力极有帮助。我的软件工程学导师北工大数理学院的王仪华先生就曾经教导过我们,数学系的学生到软件企业中大多作软件设计与分析工作,而计算机系的学生做初级程序员的居多,原因就在于数学系的学生分析推理能力,从所受训练的角度上要远远在我们平均水平之上。谈到这方面的书籍,公认北京大学张筑生老师的《数学分析新讲》为最好。张筑生教授一生写的书并不太多,但是只要是写出来的每一本都是本领域内的杰作,这本当然更显突出些。这种老书看起来不仅是在传授你知识,而是在让你体会科学的方法与对事物的认识方法。现在多用的似乎是复旦大学的《数学分析》,高等教育出版社的,也是很好的教材。但关于如何去利用从中获得的推理证明能力,我们在遇到具体问题的时候,可以在今后的文章详细讨论。
    线性代数是我们在工科本科学习的必修课程,似乎大家找不到到底这个有什么用,其实很明显,线性代数作为工程数学的重要分支,在计算机领域的研究有相当广泛的应用。最为突出的可以谈谈数组和矩阵的相关知识:

下面谈一个我经常作为例子和同学讨论的问题:四个城市之间的航线如图所示:



令aij=1,表示从i市到j市有1条航线
令aij=0,表示从i市到j市没有单项航线
则图可用矩阵表示:                        
A= (aij) =

    我们可以采用程序设计实现这个问题,如果辅以权值,可以转化为最短路径的问题,再复杂化一点还可以转化为具有障碍物的最短路径问题,这就会涉及一些如Dijkstra算法等高级程序设计算法话题。这些都依靠着数组、矩阵的基本知识。数组的应用主要在图像处理以及一些程序设计理论。矩阵的运算领域极为广泛,比如在计算机图形学当中曲线曲面的构造,图像的几何变换,包括平移、镜像、转置、缩放。在高级图像问题更有广泛应用,例如在图像增强技术,投影技术中的应用。

    计算几何学研究的是几何外形信息的计算机表示。包括几何查找、多边形、凸包问题、交与并、几何体的排列、几何拓扑网络设计、随机几何算法与并行几何算法。它构成了计算机图形学中的基本算法,是动画设计,制造业计算机辅助设计的基础。如果从事这方面的深入研究,可以参考中国计算机学会周培德先生的《计算几何——算法分析与设计》。
    概率论与数理统计学是这个领域最后一门关键的课程。概率论部分提供了很多问题的基本知识描述,比如模式识别当中的概率计算,参数估计等等。数理统计部分有很多非常经典的内容,比如伪随机数、蒙特卡罗法、回归分析、排队论、假设检验、以及经典的马科夫过程。尤其是随机过程部分,是分析网络和分布式系统,设计随机化算法和协议非常重要的基础。

[二]离散数学(Discrete Mathematics)随着计算机科学的出现与广泛应用,人们发现利用计算机处理的数学对象与传统的分析有明显的区别:分析研究的问题解决方案是连续的,因而微分,积分成为基本的运算;而这些分支研究的对象是离散的,因而很少有机会进行此类的计算。人们从而称这些分支为"离散数学"。离散数学经过几十年发展,方向上基本上稳定下来。当然不同时期还有很多新内容补充进来。就学科方向而言,一般认为,离散数学包含:集合论、逻辑学、代数学、图论、组合学。
    逻辑学(Logics)我们主要指数理逻辑,形式逻辑在推理问题中也有比较广泛的应用。(比如我们学校还为此专门开设了选修课程)这方面的参考推荐中科院软件所陆钟万教授的《面向计算机科学的数理逻辑》。现在可以找到陆钟万教授的讲课录像,
http://www.cas.ac.cn/html/Dir/2001/11/06/3391.htm。总的来说,学集合/逻辑一定要站在理解的高度上去思考相关的问题。集合论(Set Theory)和逻辑学构成了计算机科学最重要的数学问题描述方式。
    代数学(Algebra)包括:抽象代数、布尔代数、关系代数、计算机代数

最后更新时间:2008-07-01 16:27:59
文章评论
共有 0 位网友发表了评论
用户名: 新注册) 密码: 匿名评论 [查看所有评论]

评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
您可以用以下几种方式找到此文章

考试全流程