什么是牛顿-拉夫逊法?
牛顿:艾萨克牛顿(1642年12月25日-1727年3月20日)是英国数学家、物理学家、天文学家、神学家和作家。他被认为是历史上最有影响力的科学家之一,也是科学革命的关键人物。他的《自然哲学的数学原理》一书于1687年首次出版,奠定了经典力学的基础。牛顿还对光学做出了开创性的贡献,并与戈特弗里德威廉莱布尼茨一起发展了微积分这门学科。
牛顿
拉韦森约瑟夫拉弗森生卒不详,最著名的作品是1690年出版的《通用分析方程》。它包含一种方法,现在称为牛顿-拉夫逊法,用于求近似方程的根。艾萨克牛顿在1671年写的《通量法》中发展了一个非常相似的公式,但这部著作直到1736年才发表,比拉尔夫分析。然而,这种方法的拉夫逊版本比牛顿法简单,所以它通常被认为是一种更好的方法。
所以牛顿迭代法(简称)是一种实数域和复数域近似求解方程的数学方法。那么这个方法的具体原理是什么呢?
牛顿如何迭代?
直接看数学公式来描述如何迭代是不直观的。先看动图容易理解牛顿迭代法为什么叫迭代法,怎么迭代:
牛顿迭代法的原理是一个初始点在该点相切,切线与X轴相交得到下一个迭代点的坐标,然后在该点相切,以此类推,直到得到满足精度的近似解。
从前面的描述中我们知道,牛顿迭代法是用来近似求解方程的。这里有两点需要说明:
为什么要近似解?很多方程可能无法直接求解。
迭代法非常适合计算机编程。事实上,计算机编程广泛用于牛顿迭代法。
让看,它是如何用数学描述的?其中是函数在的一阶导数,它是点的切线。让简单推一下上面公式的由来。一次函数方程是:如果知道一条直线的一个坐标点和斜率,就可以很容易地知道这条直线的方程:那么这条直线和轴的交点就是方程的解:
什么时候停止迭代?
解决
给一个初始假设根值,用上面的迭代公式迭代。
计算绝对相对迭代逼近误差
将绝对相对近似误差与预定的相对误差容限进行比较。如果是,重复步骤2,否则,算法停止。此外,检查迭代次数是否超过了允许的最大迭代次数。如果是这样,您需要终止算法并退出。另一个终止条件是:
怎么编码?
因为牛顿迭代法的主要目的是解方程,当然也可能用来求某个数学函数的极值,所以不可能写通用代码。这里只给出一种编码思路。我相信我已经掌握了思路,对于各种实际应用,应该可以快速写出符合实际应用的代码。假设一个函数具有以下波形:
它的一阶导数是:那么对于这个函数的根:大致从图中可以知道有两个根。如果直接解方程,很难找到它的根。您可以编写一个代码来尝试:
#include #include #include # define(x)(2 *(x)*(x)-10 * cos(x)(x)-80)# define EDF (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(根是:%f,函数值是:% f ,root,F(root));root _ guess=-23;root=Newton _ root(root _ guess,precision,min_deltax,step);printf(根是:%f,函数值是:% f ,root,F(root));}结果:根为:6.457232,函数值为:0.00004,根为:-6.894969,函数值为:-0.00008。函数值非常接近0。如果需要更精确的数值,可以选择进一步求解,比如使用二分法近似。
需要注意什么?
如果斜率为0,则可以找到函数的极值,例如:
如果选取的初始猜测根靠近方程f(x)=0中函数f(x)的拐点,牛顿-拉夫逊法就可能开始偏离根。然后,它可能会收敛回根。例如:
5435866
如果选定的初始值不合适,一些根可能会被跳过,例如:
所以在实际应用中,你需要了解待解模型的大致情况,并合理调整。
有哪些应用?
比如知道一个系统的传递函数,求出传递函数的参数,就可以把上面的方法推广到求解多维变量方程组,导数就变成偏导数了。
例如,设计一个电路来测量物质的阻抗。
总结
牛顿在解决实际问题时,利用了迭代求解方程近似根的数学原理,在工程中有很好的实用价值。比如求一个趋势的极值,传递函数的参数辨识等。具有广泛的实际应用。这篇文章抛砖引玉,有可能文章有很多错漏。如有不同看法或发现错误,欢迎留言交流指正。
编辑:CC
标签:牛顿方程函数