方程求近似解方法分析以及比较

********************************

鉴于在博客中写公式略显难看,有碍观瞻,博客中的内容我都事先用latex写了一个pdf的文档,可以在下链接下载 

http://download.csdn.net/detail/xue_haiyang/7640513

下面所写的难免有各种错误,还请留言批评指正(欢迎任意的批评交流)

********************************



对于一些单变量的方程f(x)会时常遇到求解问题,比如一元二次方程等。

数学中对于一元二次方程有明确的求解方法--比如,公式法,十字相乘法等【1】。

但是数学中一些方程的根无法明确表示,比如 sin(x)-0.3,

在计算机中实数是以近似值存在计算机中的,并且一些实际应用中,只要有一定小的误差是可以接受的

所以有一个问题就是,计算机是不是可以快速的计算一些方程的近似解?

下面我们分析对于满足一定性质的方程给近似解的几种方法:二分法, 不动点法,牛顿法和割线法。

其中各有优缺点,在选好初始值的前提下牛顿法是最快的。


注:这里分析的方程都是连续的方程。 

二分法

总体的思想是,先找到一个区间[a, b] 使得 f(a), f(b) 是异号的,则根据f是连续方程,可以知道[a, b] 一定有一个根

然后,每次把区间缩小一半,具体选择左半区还是右半区的原则是使得方程异号。循环该过程,区间的中间点不断逼近方程的根。


下面引自【2】中的图形很好的展示了算法的过程


方程求近似解方法分析以及比较_第1张图片




不动点法

不动点是说存在一个点a使得g(a)=a 成立,仔细分析就会发现求不动点是和求某方程 f(x) 的根等价的。

我们看下不动点的图形解释(引自【2】)

不动点就是方程g(x) 和y=x 的交点坐标

方程求近似解方法分析以及比较_第2张图片

该不动点问题可解的条件是找到一个区间 [a, b] 使得[g(a), g(b)] 包含在区间 [a, b] 中。

求解的方法就是在在 [a, b] 中选择一个初始点p_0, 依次循环计算

 


不断地逼近不动点。


牛顿法

牛顿法是一个逼近速度更快的算法. 基本上是二分法的速度的指数级别.

可以用方程的Taylor 展开来解释对根的逼近


而最后一项  在高阶小量,忽略的话就有



选择比较接近根的初始点,并使用上面的迭代逼近方程的根。

这里边选择初始点非常重要,选择不好的话就发散了。

方程求近似解方法分析以及比较_第3张图片




割线法

有时候 导数 并不好算,就有了割线法,

使用


逼近导数


相应的迭代方程是

方程求近似解方法分析以及比较_第4张图片



以上是几个主要求近似解的方法,下篇我会给出Java的具体实现以及实例。见(http://blog.csdn.net/xue_haiyang/article/details/37961955)


【1】http://en.wikipedia.org/wiki/Quadratic_equation

【2】http://www.amazon.com/Numerical-Analysis-Richard-L-Burden/dp/0538733519/ref=dp_ob_title_bk


怎了一直是待审核??

你可能感兴趣的:(算法)