我们在数学必修1学过求一个方程式解的近似值的方法,先来回顾一下。
首先我们使用介值定理(Intermediate value theorem)确定解所在的大致区间,然后使用二分法逼近。这个方法与算法中的二分查找(Binary search)是一样的思路,但在对精度要求较高时所用的步数比较多,逼近的速度比较慢。
那么问题的关键就在于我们如何取值来缩小区间,从而逼近解。
牛顿迭代法是一种数值分析方法,用于寻找函数的零点。核心在于通过取函数图像上一点处的切线的横截距,再于此处进行同样的操作,不断迭代从而逼近零点,所以也叫牛顿切线法。
的零点所在的区间,并且保证此区间内其导函数,也就是没有驻点。
作为初始猜测值(Initial guess),我们可以求出此处的切线方程式:
就是切线的横截距,带入可以得到
处的切线,得到下一个值。按照这样的规则不断进行迭代。
,并且能够知道:
,为零点的精确值
第一条就是这种方法的核心,称为牛顿迭代公式(Newton's Raphson Iterative Formula)。与其他方法相比,其逼近速度会更快,尤其是在近似的精度较高时尤为明显。
obtained after the first iteration on application of Newton-Raphson scheme using an initial guess of
has a root in , Find the root rounded to 2 decimal places
既然这个过程是迭代,那么就很容易通过编程来实现。实际上,许多能够求解方程式的计算器用的就是这个方法。
我们可以看到,麻烦的部分在于带入求出数值,那么我们完全可以把这一过程交给计算器,让进行这样过程。
下面是使用Python代码的实现效果,不同在于我们要自己先求出导函数。我们当然也可以直接使用第三方库来求解。
第一题:
Output:
第二题:
Output:
作为初始猜测值,只是所需要的步数不同而已。这里我们考虑到了异常的情况,也通过限制迭代次数来让我们能够看出我们最初的猜测是否合适。
虽说这是大学里数值分析的内容,实际上所用到的知识都是高中的,也经常出现在一些模考题中。
实际上,我们在解决物理问题时通常只需要得到方程式的一个近似的数值解,并且可以根据需要的精度容易地调整求解过程。而牛顿迭代法的核心就只有一个简单的公式,只涉及函数本身以及其导函数,并且能够通过较少的步数得到精度更高的值。这个算法最常用的就是快速求平方根了。
的形式,得到迭代公式。比如第二题我们可以得到
从而得到迭代公式
虽然这看起来更加简单,但是其逼近速度比较慢,也并非所有方程式都容易化成这种形式。
那么,大家可以试着解决下面的问题,利用计算器或编程比较一下切线迭代与其他方法的逼近速度。
Given that
Show that the equation has a root near to .
Find the root to 3 significant figures.