牛顿迭代法
2014-01-18 19:45
351 查看
设r是
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=9beb80334e086e066ea8384932097b5a/eaf81a4c510fd9f9f458496b272dd42a2834a460.jpg)
的根,选取
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=80562e3a2a381f309a198aab99004c67/6a63f6246b600c33993dc2ca184c510fd9f9a16f.jpg)
作为r的初始近似值,过点
![](http://b.hiphotos.baidu.com/baike/s%3D220/sign=d9f55f3c0ef3d7ca08f63874c21ebe3c/ac345982b2b7d0a24d231c9fc9ef76094a369acd.jpg)
做曲线
![](http://h.hiphotos.baidu.com/baike/s%3D220/sign=46c00c0dba0e7bec27da04e31f2fb9fa/810a19d8bc3eb1354c3bafb9a41ea8d3fd1f4437.jpg)
的切线L,L的方程为
![](http://a.hiphotos.baidu.com/baike/s%3D220/sign=4a9e7d3ddbf9d72a1364171fe42b282a/00e93901213fb80e2b3e78d534d12f2eb83894c0.jpg)
,求出L与x轴交点的横坐标
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=bd4e47520e33874498c5287e610ed937/adaf2edda3cc7cd9c67a2ddb3b01213fb80e9158.jpg)
,称x1为r的一次近似值。过点
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=77dd520c6509c93d03f209f5af3cf8bb/c995d143ad4bd113cd3aaf3058afa40f4bfb0538.jpg)
做曲线
![](http://h.hiphotos.baidu.com/baike/s%3D220/sign=46c00c0dba0e7bec27da04e31f2fb9fa/810a19d8bc3eb1354c3bafb9a41ea8d3fd1f4437.jpg)
的切线,并求该切线与x轴交点的横坐标
![](http://c.hiphotos.baidu.com/baike/s%3D220/sign=3d80ddecb68f8c54e7d3c22d0a282dee/71cf3bc79f3df8dc43d19493cf11728b461028c7.jpg)
,称
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=cf9e83065b82b2b7a39f3ec601accb0a/5d6034a85edf8db1a5c967660b23dd54574e74c8.jpg)
为r的二次近似值。重复以上过程,得r的近似值序列,其中,
![](http://a.hiphotos.baidu.com/baike/s%3D220/sign=8618283a2a381f309a198aab99014c67/6a63f6246b600c339f73c4ca184c510fd9f9a1ad.jpg)
称为r的
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=cfbc83065b82b2b7a39f3ec601accb0a/5d6034a85edf8db1a5eb67660b23dd54574e74ee.jpg)
次近似值,上式称为牛顿迭代公式。
用牛顿迭代法解非线性方程,是把非线性方程
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=9beb80334e086e066ea8384932097b5a/eaf81a4c510fd9f9f458496b272dd42a2834a460.jpg)
线性化的一种近似方法。把
![](http://h.hiphotos.baidu.com/baike/s%3D220/sign=c7b154de56e736d15c138b0aab514ffc/bd3eb13533fa828bd9a187e1ff1f4134970a5a35.jpg)
在点
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=80562e3a2a381f309a198aab99004c67/6a63f6246b600c33993dc2ca184c510fd9f9a16f.jpg)
的某邻域内展开成泰勒级数
![](http://d.hiphotos.baidu.com/baike/s%3D250/sign=9871af630db30f24319aeb06f894d192/8601a18b87d6277f7dd7363a2a381f30e824fcef.jpg)
,取其线性部分(即泰勒展开的前两项),并令其等于0,即
![](http://a.hiphotos.baidu.com/baike/s%3D220/sign=a24d511560d0f703e2b292de38fb5148/37d3d539b6003af312d9db62372ac65c1038b654.jpg)
,以此作为非线性方程
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=9beb80334e086e066ea8384932097b5a/eaf81a4c510fd9f9f458496b272dd42a2834a460.jpg)
的近似方程,若
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=3f0efba7d343ad4ba22e41c2b2025a89/060828381f30e9245ea49a334e086e061d95f7b4.jpg)
,则其解为
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=bd4e47520e33874498c5287e610ed937/adaf2edda3cc7cd9c67a2ddb3b01213fb80e9158.jpg)
, 这样,得到牛顿迭代法的一个迭代关系式:
![](http://a.hiphotos.<br/>aea0<br/>baidu.com/baike/s%3D220/sign=8618283a2a381f309a198aab99014c67/6a63f6246b600c339f73c4ca184c510fd9f9a1ad.jpg)
。
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。[1]
军人在进攻时常采用交替掩护进攻的方式,若在数轴上的点表示A,B两人的位置,规定在前面的数大于后面的数,则是A>B,B>A交替出现。但现在假设军中有一个胆小鬼,同时大家又都很照顾他,每次冲锋都是让他跟在后面,每当前面的人占据一个新的位置,就把位置交给他,然后其他人再往前占领新的位置。也就是A始终在B的前面,A向前迈进,B跟上,A把自己的位置交给B(即执行B
= A),然后A 再前进占领新的位置,B再跟上,直到占领所有的阵地,前进结束。像这种两个数一前一后逐步向某个位置逼近的方法称为迭代法。
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=9beb80334e086e066ea8384932097b5a/eaf81a4c510fd9f9f458496b272dd42a2834a460.jpg)
的根,选取
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=80562e3a2a381f309a198aab99004c67/6a63f6246b600c33993dc2ca184c510fd9f9a16f.jpg)
作为r的初始近似值,过点
![](http://b.hiphotos.baidu.com/baike/s%3D220/sign=d9f55f3c0ef3d7ca08f63874c21ebe3c/ac345982b2b7d0a24d231c9fc9ef76094a369acd.jpg)
做曲线
![](http://h.hiphotos.baidu.com/baike/s%3D220/sign=46c00c0dba0e7bec27da04e31f2fb9fa/810a19d8bc3eb1354c3bafb9a41ea8d3fd1f4437.jpg)
的切线L,L的方程为
![](http://a.hiphotos.baidu.com/baike/s%3D220/sign=4a9e7d3ddbf9d72a1364171fe42b282a/00e93901213fb80e2b3e78d534d12f2eb83894c0.jpg)
,求出L与x轴交点的横坐标
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=bd4e47520e33874498c5287e610ed937/adaf2edda3cc7cd9c67a2ddb3b01213fb80e9158.jpg)
,称x1为r的一次近似值。过点
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=77dd520c6509c93d03f209f5af3cf8bb/c995d143ad4bd113cd3aaf3058afa40f4bfb0538.jpg)
做曲线
![](http://h.hiphotos.baidu.com/baike/s%3D220/sign=46c00c0dba0e7bec27da04e31f2fb9fa/810a19d8bc3eb1354c3bafb9a41ea8d3fd1f4437.jpg)
的切线,并求该切线与x轴交点的横坐标
![](http://c.hiphotos.baidu.com/baike/s%3D220/sign=3d80ddecb68f8c54e7d3c22d0a282dee/71cf3bc79f3df8dc43d19493cf11728b461028c7.jpg)
,称
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=cf9e83065b82b2b7a39f3ec601accb0a/5d6034a85edf8db1a5c967660b23dd54574e74c8.jpg)
为r的二次近似值。重复以上过程,得r的近似值序列,其中,
![](http://a.hiphotos.baidu.com/baike/s%3D220/sign=8618283a2a381f309a198aab99014c67/6a63f6246b600c339f73c4ca184c510fd9f9a1ad.jpg)
称为r的
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=cfbc83065b82b2b7a39f3ec601accb0a/5d6034a85edf8db1a5eb67660b23dd54574e74ee.jpg)
次近似值,上式称为牛顿迭代公式。
用牛顿迭代法解非线性方程,是把非线性方程
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=9beb80334e086e066ea8384932097b5a/eaf81a4c510fd9f9f458496b272dd42a2834a460.jpg)
线性化的一种近似方法。把
![](http://h.hiphotos.baidu.com/baike/s%3D220/sign=c7b154de56e736d15c138b0aab514ffc/bd3eb13533fa828bd9a187e1ff1f4134970a5a35.jpg)
在点
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=80562e3a2a381f309a198aab99004c67/6a63f6246b600c33993dc2ca184c510fd9f9a16f.jpg)
的某邻域内展开成泰勒级数
![](http://d.hiphotos.baidu.com/baike/s%3D250/sign=9871af630db30f24319aeb06f894d192/8601a18b87d6277f7dd7363a2a381f30e824fcef.jpg)
,取其线性部分(即泰勒展开的前两项),并令其等于0,即
![](http://a.hiphotos.baidu.com/baike/s%3D220/sign=a24d511560d0f703e2b292de38fb5148/37d3d539b6003af312d9db62372ac65c1038b654.jpg)
,以此作为非线性方程
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=9beb80334e086e066ea8384932097b5a/eaf81a4c510fd9f9f458496b272dd42a2834a460.jpg)
的近似方程,若
![](http://g.hiphotos.baidu.com/baike/s%3D220/sign=3f0efba7d343ad4ba22e41c2b2025a89/060828381f30e9245ea49a334e086e061d95f7b4.jpg)
,则其解为
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=bd4e47520e33874498c5287e610ed937/adaf2edda3cc7cd9c67a2ddb3b01213fb80e9158.jpg)
, 这样,得到牛顿迭代法的一个迭代关系式:
![](http://a.hiphotos.<br/>aea0<br/>baidu.com/baike/s%3D220/sign=8618283a2a381f309a198aab99014c67/6a63f6246b600c339f73c4ca184c510fd9f9a1ad.jpg)
。
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。[1]
军人在进攻时常采用交替掩护进攻的方式,若在数轴上的点表示A,B两人的位置,规定在前面的数大于后面的数,则是A>B,B>A交替出现。但现在假设军中有一个胆小鬼,同时大家又都很照顾他,每次冲锋都是让他跟在后面,每当前面的人占据一个新的位置,就把位置交给他,然后其他人再往前占领新的位置。也就是A始终在B的前面,A向前迈进,B跟上,A把自己的位置交给B(即执行B
= A),然后A 再前进占领新的位置,B再跟上,直到占领所有的阵地,前进结束。像这种两个数一前一后逐步向某个位置逼近的方法称为迭代法。
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。
double func(double x) //函数 { return x*x*x*x-3*x*x*x+1.5*x*x-4.0; } double func1(double x) //导函数 { return 4*x*x*x-9*x*x+3*x; } int Newton(double *x,double precision,int maxcyc) //迭代次数 { double x1,x0; int k; x0=*x; for(k=0;k<maxcyc;k++) { if(func1(x0)==0.0)//若通过初值,函数返回值为0 { printf("迭代过程中导数为0!\n"); return 0; } x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算 if(fabs(x1-x0)<precision || fabs(func(x1))<precision) //达到结束条件 { *x=x1; //返回结果 return 1; } else //未达到结束条件 x0=x1; //准备下一次迭代 } printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度 return 0; } int main() { double x,precision; int maxcyc; printf("输入初始迭代值x0:"); scanf("%lf",&x); printf("输入最大迭代次数:"); scanf("%d",&maxcyc); printf("迭代要求的精度:"); scanf("%lf",&precision); if(Newton(&x,precision,maxcyc)==1) //若函数返回值为1 printf("该值附近的根为:%lf\n",x); else //若函数返回值为0 printf("迭代失败!\n"); getch(); return 0; }
相关文章推荐
- 牛顿迭代法
- 牛顿迭代法
- 牛顿迭代法求平方根
- 牛顿迭代法
- 我也写了一个牛顿迭代法,貌似不需要特殊处理溢出的情况 class Solution { public...
- 牛顿迭代法
- 利用牛顿迭代法自己写平方根函数sqrt
- uva 10428 - The Roots(牛顿迭代法)
- 非线性最优化(三)——拟牛顿迭代法(Quasi-Newton)
- 【清橙A1094】【牛顿迭代法】牛顿迭代法求方程的根
- C语言之基本算法11—牛顿迭代法求平方根
- C++实现牛顿迭代法求解f(x)=0
- 牛顿迭代法求数的平方根
- 立方根求解(牛顿迭代法)
- 计科答疑_牛顿迭代法求函数解_二分法求函数解_输出以下图形
- 牛顿迭代法求方程的根
- HDU 2199 Can you solve this equation?(牛顿迭代法)
- 数学建模三 单变量优化和求解 牛顿迭代法
- 通俗易懂地讲解牛顿迭代法求开方
- Tsinsen A1094 牛顿迭代法求方程的根