函数不动点、数学迭代法、求数值平方根算法的数学原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅论函数不动点与数学迭代法在求数值平方根中
的运用
By vista3344
摘要:函数不动点具有比较特殊的性质,特别是迭代趋近或者发散的现象,使得该部分成为数学中一个极为有意思的内容(这部分内容甚至已经渗入高考数年之久)。本文从函数不动点的定义出发,从数形结合的角度,着重而形象地分析迭代法求平方根的算法。
一、
首先,给出牛顿迭代法求平方根的公式。这是一个迭代公式,赋予x k一个初始值,之后通过迭代运算,使x不断逼近n的开方。
求n开方值的c语言代码如下[1]:
#include
#include
void main( )
{
double x, y, y0 ;
printf( "输入一个正数:") ;
do
{
scanf("%lf", &x );//格式lf
}
while( x<0 );
y = 1;
do
{
y0 = y;
y = 1.0/2*( y + x / y ); //1.0变浮点数
}
while ( fabs( y - y0 ) / y > 0.00001);
printf("Square root of %lf is%lf\n", x, y ); //格式lf
}
二、数学角度的算法分析
为了便于表述,这里我们设n=7。
(1)、首先介绍函数不动点的收敛性。取f(x)=0.5(x+7/x),同时取x0如图,为几何画板生成的函数图像:
不动点即y=x与函数的交点,如图:
解算方程:x=0.5(x+7\x)可知,方程的解正是根号7。同理,如果是n的话,其解也会是根号n,这就达到了通过不动点的转换求取无理数值的目的。那么,这个交点的求法如何?
(2)、关于函数不动点的收敛性。
如图所示,取x0=10后,得出f(10)。通过y=x的转换,得到x=f(10),在此将f(10)投影到f(x)上,则得到了f(f(10))。从图上显而易见,f(f(10))更加趋近于不动点。而且,随着迭代的不断进行,精度还可以逐步提高。最终使f n(x)与不动点之间的误差达到可以忽略掉的级别。而迭代本身这一繁复的运算则可以交由计算机执行,即上文中的do-while循环。
(由图可见,不断收敛的折线会逼近交点)
该算法在高等教育出版社《全国计算机等级考试二级教程—c语言程序设计(2013年版)》中作为了一个例题出现,使用了0.5a(即我们这里的0.5n)作为初始的x值,道理相同。
后记:将牛顿公式化简之后,即为x2=n,要注意两点。第一,本公式会计算出正负两
个值,要注意筛选。第二,笔者先前有一个疑惑,就是为什么不能采用x=n/x这个式子呢?事实上,如果采用那一个算式的话,不论代入的处置为何,都会进入死循环之中。其几何原理就是,y=n/x本身就是关于y=x对称的,即是说,不论代入什么初值,都会形成一个封闭的矩形而不会向交点收敛。从函数另一方面来说,y=n/x是其本身的反函
数,重复迭代是没有意义的。所以,只需要打破左右的形式就可以完成迭代计算,达到求解的目的。因而,牛顿开方公式本身的形式也是可以有多样化的。
资料参考:[1].百度知道页:
/link?url=OUd3gCRxv6V2vsRu8JuowSuqRsDJuSM67lcE6S gdgXivTN12OWapW4XLttY_GLKnKujQxXNf5u0ttQ3o1_UnFK