最近看到牛顿迭代法和二分法,现在用python实现一下
拿开方举例,转载自Python编程实现二分法和牛顿迭代法求平方根代码
一、使用二分法实现开方
假设求根号5,二分法的基本思路是
1 | a:折半: 5/2=2.5 |
每次得到当前值和5进行比较,并且记下下下限和上限,依次迭代,逐渐逼近平方根:
- 当结果校验超过原值,继续迭代
- 当结构校验低于原值,获得另一半,继续迭代
python代码
1 | import math |
二、使用牛顿迭代法实现开方
从函数意义上理解:我们是要求函数f(x)=x²,使f(x)=num的近似解,即x²-num=0的近似解。
从几何意义上理解:我们是要求抛物线g(x)=x²-num与x轴交点(g(x)=0)最接近的点。
我们假设g(x0)=0,即x0是正解,那么我们要做的就是让近似解x不断逼近x0,这是函数导数的定义:
可以由此得到
从几何图形上看,因为导数是切线,通过不断迭代,导数与x轴的交点会不断逼近x0。

对于一般情况:
将m=2代入:
1 | def sqrt_newton(num): |
三、利用牛顿迭代法实现立方
1 | def cube_newton(num): |