牛顿法使用的是函数切线的方程的零点来逼近原函数的零点,他所使用的是“切直线”,要是改为同曲率的“切抛物线”,则有更稳定的收敛效果以及更快的收敛速度

设函数y=f(x)(x0,y0)处有一条“切抛物线”y=ax2+bx+c,则应该有

a(x0+Δx)2+b(x0+Δx)+c=f(x0+Δx)-------(A)
ax20+bx0+c=f(x0)-------(B)
a(x0Δx)2+b(x0Δx)+c=f(x0Δx)-------(C)

其中limΔx>0

这道方程组是有解的。首先(A)-(B)得到:
a(Δx2+2x0Δx)+bΔx=f(x0+Δx)f(x0)----(D)
(B)-(C)得到
a(Δx2+2x0Δx)+bΔx=f(x0)f(x0Δx)----(E)
(D)-(E)得到
2Δx2a=[f(x0+Δx)f(x0)][f(x0)f(x0Δx)]a=limΔx>0f(x0+Δx)f(x0)Δxf(x0)f(x0Δx)Δx2Δx=limΔx>0f(x0)f(x0Δx)2Δx=limΔx>0f

即是a=\frac{y_0''}{2},进而有:b=y_0'-y_0''x_0c=y_0-y_0'+\frac{y_0''x_0^2}{2}

至此,我们已经求出了任意函数y=f(x)的切抛物线方程,利用其可以有效地逼近原来函数的零点。设y=f(x),令上述抛物线方程等于0,解这道方程:
x=x_0-\frac{y_0'}{y_0''}+-\sqrt{(\frac{y_0'}{y_0''})^2-\frac{2y_0}{y_0''}}

一般地,这是比x_0更接近方程零点的值(这里+-待定,一般取的是正号),我们可以取这个解继续求切抛物线,继续进行上述步骤,于是得出递推公式为:
x_{n+1}=x_n-\frac{y_n'}{y_n''}+-\sqrt{(\frac{y_n'}{y_n''})^2-\frac{2y_n}{y_n''}}

不可否认,这比牛顿法计算量大了很多;但也有一定优点,收敛更快,x_0的取值范围更广一些。

上面是从纯几何的角度来推导出这种方法的,几何意义明显。泰勒级数可以更方便推出。根据泰勒级数有:
f(x)=f(x_n)+f'(x_n)(x-x_n)+\frac{f''(x_n)}{2!}(x-x_n)^2 +\frac{f'(x_n)}{3!}(x-x_n)^3 +...

牛顿法是取f(x)=f(x_n)+(x-x_n)f'(x_n)作为f(x)=0的近似方程,而“切抛物线”则是取f(x)=f(x_n)+(x-x_n)f'(x_n)+(x-x_n)^2 \frac{f''(x_n)}{2!},这是关于x的二次方程,于是可以得出:
x_{n+1}=x_n-\frac{y_n'}{y_n''}+-\sqrt{(\frac{y_n'}{y_n''})^2-\frac{2y_n}{y_n''}}

过程是不是简单了很多?可为什么一开始就从复杂的几何角度来推导呢?其实,这样推导,正是体现了解析几何的要点——代数与几何相结合,有助于我们理解一个方法的几何含义,进而推导出更多的方法来。例如我们可以不用“切抛物线”,我们可以用“切双曲线”、“切椭圆”等等的方法,进而取得更多的成果。例如函数“切双曲线”的结果则是
\begin{aligned}y=k/x+b \\ k=-y_0'x_0^2 \\ b=y_0+y_0'x_0\end{aligned}
递推公式为:x_{n+1}=\frac{y_n' x_n^2}{y_n+y_n' x_n}
(这是“弱切双曲线”,收敛比牛顿法慢;完整切双曲线应该是y=k/{x-l}+b形式的,需要用到二阶导数。)

转载到请包括本文地址:https://spaces.ac.cn/archives/504

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Mar. 06, 2010). 《(原创)切抛物线法解方程 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/504

@online{kexuefm-504,
        title={(原创)切抛物线法解方程},
        author={苏剑林},
        year={2010},
        month={Mar},
        url={\url{https://spaces.ac.cn/archives/504}},
}