Newton-Raphson method
何为"Newton's method"
牛顿法(英语:Newton's method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。方法使用函数的泰勒级数 的前面几项来寻找方程 的根。
方法说明
首先,选择一个接近函数 零点 [ 令 的点] 的 ,计算相应的 和该点的切线斜率,即对该点的函数求导得 。然后我们计算穿过点 (, ) 并且斜率为 的直线和 轴的交点的横坐标,也就是求如下方程的解 [下面式子也恰好为 的泰勒展开式的前两项 ]:
我们将新求得的点横坐标命名为 ,通常 会比 更接近方程 的解。因此 我们可以利用 进行下一轮的迭代。迭代公式可简化为:
图像示例:

示例
求方程 的根。
由于 ,则 , 即 ,则 ,因此 ,所以 。可知方程得根位于0和1之间。我们可以从 开始。
令 ,两边求导,得 。

牛顿法 VS 二分法
以求解立方根得问题为例:
解法一
求立方根的问题实际上就是在 1~给定数字 之间找到一个数,让这个数的立方近似等于给定数字,由此转化为了一个查找问题。
def binary_cubic_root(num):
low = 1
high = num / 2.0
mid = low
while high - low > 0.0001:
mid = (low + high) / 2.0
cubic = mid * mid * mid
if cubic < num:
low = mid
elif cubic > num:
high = mid
else:
break
return mid
解法二
求立方根得问题实际上就是解决 得解,其中 是给定已知得值,转化为牛顿迭代公式为: 。
def newton_cubic_root(num):
# give an approximation of root
last = num
new = last - (last * last * last - num) / (3.0 * last * last)
while abs(new - last) > 0.0001:
last = new
new = last - (last * last * last - num) / (3.0 * last * last)
return new
为什么要用牛顿法?
牛顿迭代法的速度比二分法的速度要快。
time_1 = time.clock()
print("binary_search %.4f" % binary_cubic_root(12345678))
print(time.clock() - time_1)
time_2 = time.clock()
print("newton %.4f" % newton_cubic_root(12345678))
print(time.clock() - time_2)
binary_search 231.1204
3.419999999998424e-05
newton 231.1204
2.5200000000002998e-05
参考
从平凡到超凡,只有一万个小时的距离!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~