什么是牛顿-拉夫逊法?

牛顿:艾萨克牛顿(1642年12月25日-1727年3月20日)是英国数学家、物理学家、天文学家、神学家和作家。他被认为是历史上最有影响力的科学家之一,也是科学革命的关键人物。他的《自然哲学的数学原理》一书于1687年首次出版,奠定了经典力学的基础。牛顿还对光学做出了开创性的贡献,并与戈特弗里德威廉莱布尼茨一起发展了微积分这门学科。

牛顿

约瑟夫拉弗森在拉韦森的生卒年不详,他最著名的作品是1690年出版的《通用分析方程》。它包含一种方法,现在称为牛顿-拉夫逊法,用于近似方程的根。艾萨克牛顿在1671年写的《通量法》中发展了一个非常相似的公式,但这部著作直到1736年才发表,这比拉夫森的分析晚了近50年。然而,这种方法的拉夫逊版本比牛顿的方法简单,因此它通常被认为是一种更好的方法。

所以牛顿迭代法(简称)是一种近似求解实数域和复数域方程组的数学方法。那么这个方法的具体原理是什么呢?

牛顿迭代怎么迭代?

直接看数学公式来描述如何迭代是不直观的。先看动图就很容易理解牛顿迭代法为什么叫迭代法,怎么迭代了:

牛顿迭代法的原理是一个初始点在这个点上做一条切线,切线与X轴相交得到下一个迭代点的坐标,然后在这个点上做一条切线,以此类推,直到得到一个满足精度的近似解。

从以上描述可知,牛顿迭代法用于近似求解方程,这里有两点需要说明:

为什么要近似求解?很多方程可能无法直接求解。

迭代法非常适合计算机编程。事实上,计算机编程广泛用于牛顿迭代法。

我们来看看,数学上怎么描述?其中是函数在的一阶导数,它是点的切线。简单推一下上式的原点,一次函数方程是:知道一条直线的一个坐标点和斜率,就可以很容易的知道这条直线的方程:那么这条直线和轴的交点就是方程的解:

什么时候停止迭代?

解决

给一个初始假设根值,用上面的迭代公式迭代。

计算绝对相对迭代逼近误差

将绝对相对近似误差与预定的相对误差容限进行比较。如果是,重复步骤2,否则停止算法。此外,检查迭代次数是否超过了允许的最大迭代次数。如果是这样,您需要终止算法并退出。另一个终止条件是:

怎么编码?

因为牛顿迭代法的主要目的是解方程,也可能用来求某个数学函数的极值,所以不可能写通用代码。这里只给出一个编码思路。相信掌握了思路之后,应该可以针对各种实际应用,快速写出符合实际应用的代码。假设一个函数的波形图如下:

它的一阶导数是:那么对于这个函数的根:从图中可以大致知道有两个根。如果直接解方程,很难找到它的根。你可以试着编一个代码:

#include #include #include # definef(x)(2 *(x)*(x)-10 * cos(x)-80)# definedf (x) (4 * (x)。float Newton _ root(float x0,floatprecision,floatmin_deltax,intmax_iterations) { floatxn,xn1,fn,fn1,dfnfloatdeltaxint step=0;xn=x0xn1=x0do { xn=xn1fn=F(xn);dfn=DF(xn);if (fabs (dfn) precision)返回nan否则返回fn;} xn1=xn-fn/dfn;fn1=F(xn1);deltax=fabs(xn1-xn);步;if(step max _ iterations){ if(fabs(fn1)precision | | delta xmin _ deltax);returnxn1} void main(){ float root _ guess=23.0 f;floatprecision=0.00001ffloatmin _ deltax=0.001ffloatrootint step=7;root=Newton _ root(root _ guess,precision,min_deltax,step);Printf ('root: %f,函数值:%f 'root,F(root));root _ guess=-23;root=Newton _ root(root _ guess,precision,min_deltax,step);Printf ('root: %f,函数值:%f 'root,F(root));结果:根是6.457232,函数值是0.000004,根是-6.894969,函数值是-0.000008。函数值非常接近0。如果需要更精确的数值,可以选择在此基础上进一步求解,比如使用二分法近似。

需要注意什么?

斜率可以是0。如果为0,则可能找到函数的极值,例如:

如果选取的初始猜测根靠近方程f(x)=0中函数f(x)的拐点,牛顿-拉夫逊法就可能开始偏离根。然后,它可能会收敛回根。例如:

5435866

如果选择的初始值不合适,一些根可能会被跳过,例如:

所以在实际应用中,你需要了解你要求解的模型的大致情况,并合理调整。

有哪些应用?

比如知道一个系统的传递函数,求出传递函数的参数,就可以把上面的方法推广,求解多维变量方程组,导数就变成偏导数了。

另一个例子是设计一个电路来测量物质的阻抗。

总结

牛顿迭代法在解决实际问题时,利用迭代求方程近似根的数学原理,在工程上有很大的实用价值。例如,寻找趋势的极值和识别传递函数的参数具有广泛的实际应用。本文抛砖引玉,文中可能有不少错漏。如有不同意见或发现错误,欢迎留言指正。

责任编辑:抄送