- 7
- 0
- 约3.43千字
- 约 8页
- 2017-08-31 发布于重庆
- 举报
浅谈计算机算法实现数学方程求根
浅谈计算机算法实现数学方程求根
作者:王谦
一、前言
谈及经典数学理论很多读者都应该不会陌生,比如像是等式方程(组)的求解问题、数列求和问题、微积分的求值问题、集合问题、概论问题以及一些经典数学问题:哥尼斯堡七桥问题、海盗分金问题等等,这都是我们学生时代所熟知的。但是,本文所要谈的并不是关于以上这些数学问题是怎么样解决的,那是数学课上的内容。本文所要谈的是像上面的这些经典数学问题是如何用计算机实现的。说到这里可能有些读者要问了:计算机和经典数学有关系吗?这可是两个不同的学科噢!的确,要是十几年前人们很难把这两个学科联系在一起。但近几年,随着计算机的大众化以及计算机本身在数值计算方面的优势。使用计算机解决数学中一些计算量大,重复性高的经典问题已经成为各个研究机构所关注的问题了。由于,篇幅所限以及不需要叫读者了解更多数学知识本文只是对其中的一些简单易懂问题进行一下讲解。
用计算机解决数学问题,我们一般可以把它分为两大类,一类是数值计算类问题,另一类是非数值计算类问题。数值计算类问题主要涉及:函数计算、初(高)等方程求根、微积分求解、数论等;而非数值计算类问题主要涉及:初(高)等函数曲线拟合、图论等方面的数学问题。对于数值计算类问题我们通常使用计算机高级语言编程的方法求值,在这过程中我们会用到一些专门的计算机数值计算的算法。对于非数值计算类问题我们主要使用计算机辅助设计的方式,采用数学科学计算软件来绘制函数曲线图、拟合图谱。比较常用的软件有Matlab、Mathematica数学计算辅助软件。但无论是数值计算类也好非数值计算类也罢都遵循着相同的设计与应用过程。我们先来看一下下面的一个流程图:
图 1
上图揭示了利用计算机解决步骤,实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出解重要计算机相当庞杂的,。,我们通常使用的方法是使用一元二次求根公式计算出第一个根(解),再使用韦达定理计算出第二个根(解)。如果我们要是求高次方程的(根)解,例如:虽然也有四次方程的求根公式但计算起来是相当麻烦的。所以像这样的高次方程目前最主流的方法都是使用计算机近似辅助计算。但是,我们这里要明确的是用计算机辅助求得的解都是近似解,并非准确解。但这并不会影响我们对计算机解高次方程的热情,因为这样的近似解已经非常接近准确值了,我们完全就可以使用近似解去解决实际问题。
上面我们说到无论是数值计算或非数值计算,方法是必须的也是最重要的。因此高次方程的计算机求根(解)也要需要使用相关的计算方法来进行求根(解)。这种计算方法也叫做算法。这里我们只给大家介绍两种最常用的算法。
牛顿法
人们很早以前就开始探索高次方程的数值求解问题。这里我们即将要给大家介绍的第二种高次方程求解方法就是多年来人们探索出的最早的求解方法,它出自于牛顿 (Issac Newtom,1642-1727)的《流数法》一书中,书中给出了高次代数方程的数值解法——牛顿法。这种求方程根的方法,在科学界已被广泛采用。
下面,我们看看如何用牛顿法求方程 的根。
从函数的观点看,方程的根就是其相对应函数的函数值为零时的值。从图形上看,一个函数的取值为零的点就是在轴上那点(如图),即函数与轴的交点。只要求得函数曲线与轴的交点,那么这个交点在轴上的取值就是方程的一个根(解)。如图3所示:
图 2
如果可以找到一步一步逼近点的点,使得的值很小很小,即在x轴上做到与两点近乎重合。那么,我们就可以把的值作为的近似值,即把作为方程 = 0的近似解。
牛顿用“作切线”的方法(如下图3)找到了这一串.。最终最接近真实值当的那条切线与轴的交点就是所求方程的一个近似解。
首先我们要先找个初始点,比如 = 2。然后在点 处作的切线,切线与轴的交点就是;用代替重复上面的过程得到,一直继续下去,得到。从图形上我们可以看到,较接近 ,较接近等等。直到当的值小于我们初始设定误差时,我们取即为函数的一个解。
图 3
了解了牛顿法的基本原理,现在我们看看计算机是怎样实现牛顿法的。
牛顿法算法:
设 分别为区间的左右端点;
为极限误差;为初始值;
分别为处的函数值和导数值;
为以为初值经一次迭代后得到的改进值。
通过上面的算法我们举一个例子给大家具体看一下使用牛顿法具体求解的过程。
例:求方程的一个解。
即:求解函数函数值为零时的的值。
首先设定,设定所求方程解的函数区间,然后迭代算法:(其中 当 时,);最后当时,为原方程的一个解。
牛顿法虽然使用的最早而且一直以来还在不断地被完善,但是还是有一些缺点。最明显的是牛顿法收敛的速度很快,而初始点取的不好就可能造成不收敛找不到解,所以在计算时应该注意初始点的选取。就目前而言,还没有一个简便易用的选取初始点的好方法
原创力文档

文档评论(0)