持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
python 算法之 Newton-Raphson23
最常用的近似算法通常归因于艾萨克·牛顿。它通常被称为牛顿方法,但有时被称为牛顿-拉夫森方法.24它可以用来找到许多函数的实根,但我们只会在找到一个变量的多项式的实根的背景下来研究它。对具有多个变量的多项式的推广在数学上和算法上都很简单。具有一个变量的多项式(按照惯例,我们将变量写为x)要么是O或有限数量的非零项的总和,例如,3x2 + 2x + 3。每个项(例如 3x2)由一个常量(项的系数,在本例中为 3)乘以升为非负整数指数(在本例中为 2)的变量(在本例中为 x)组成。项中的指数称为该项的度数。多项式的次数是任何单个的最大次数术语。一些示例包括 3(度 0)、2.5x + 12(度 1)和 3x2(度 2)。
如果 p 是多项式,r 是实数,我们将写 p(r) 来代表 x = r 时多项式的值。多项式 p 的根是方程 p = o 的解,即 r 使得 p(r) = 0.So,例如,找到 24 平方根的近似值的问题可以表述为找到 x 使得 x2 - 24 接近 o。
牛顿证明了一个定理,该定理意味着,如果一个值(称为猜测)是多项式根的近似值,那么猜测 - p(猜测)/p'(猜测),其中p'是p的一阶导数,是比猜测更好的近似。
函数 f(x) 的一阶导数可以被认为是表示 f(x) 的值如何随 x 的变化而变化。例如,常量的一阶导数是 o,因为常量的值不会改变。对于任何项 cx',该项的第一导数是 cp*xp-1。因此,形式多项式的一阶导数
是
要找到一个数字的平方根,比如说 k,我们需要找到一个值 x,使得 x2 - k = 0。这个多项式的一阶导数就是 2x。因此,我们知道,我们可以通过选择作为下一个猜测来改进当前的猜测 - (猜测2 - k)/ 2 *猜测。Eigure 3-7 包含说明如何使用此方法快速找到平方根近似值的代码。
练习:在牛顿-拉夫森的实现中添加一些代码,以跟踪用于查找根的迭代次数。将该代码用作比较牛顿-拉夫森和二分搜索效率的程序的一部分。(你应该发现牛顿-拉夫森的效率要高得多。