You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中精准测量牛顿迭代法的微小耗时?

如何在Python中精准测量牛顿迭代法的微小耗时?

刚接触编程就折腾数值计算的性能分析,已经超棒啦!你的问题其实很典型:单次牛顿迭代循环的耗时实在太短——现代CPU执行这么几行代码可能只需要几纳秒,而普通计时方法的精度跟不上,所以测出来全是0。咱们可以从两个方向解决这个问题:


核心思路:放大测量窗口

单次执行的时间太短捕捉不到?那咱们就把同一个计算重复成千上万次,用总耗时除以次数,得到更准确的单次平均耗时。这是性能测试里常用的技巧,能有效抵消系统时钟精度的限制。

具体修改方案

结合Python推荐的高精度计时函数time.perf_counter()(它的精度比time.time()、process_time()更高,专门用于短时间测量),再加上多次重复测试,就能得到靠谱的结果了。

这里是修改后的代码示例,你可以直接套用:

import math
import time

# 定义函数
def f(x):
    return x**2 - 4

# 定义导数
def fderiv(x):
    return 2*x

# 牛顿迭代公式
def Newton(x):
    return (x - f(x)/fderiv(x))

# 目标零点
zero = 2
# 重复测试次数(可根据实际情况调整,比如10000/100000)
num_runs = 10000

# 遍历不同起始点
for n in range(-100, 100):
    start = zero + n/100
    current = start
    difference = abs(current - zero)
    
    # 先验证当前起始点是否能正常收敛(避免重复测试时报错)
    try:
        temp_current = start
        temp_diff = abs(temp_current - zero)
        while temp_diff > 0.00001:
            temp_current = Newton(temp_current)
            temp_diff = abs(temp_current - zero)
        
        # 开始多次重复计时
        start_time = time.perf_counter()
        for _ in range(num_runs):
            current = start
            diff = abs(current - zero)
            while diff > 0.00001:
                current = Newton(current)
                diff = abs(current - zero)
        total_time = time.perf_counter() - start_time
        # 计算单次平均耗时
        avg_time = total_time / num_runs
        print(f"{start}: 平均耗时: %.12f" % avg_time)
    except:
        print(f"{start}: Error")

为什么之前的方法没效果?

  1. 单次耗时太短:哪怕用time.time_ns(),单次牛顿循环的时间可能比系统时钟的最小间隔还小,所以测出来的差值是0。多次重复后,总耗时足够长,就能被准确捕捉了。
  2. 选对计时函数:time.perf_counter()是Python官方推荐的性能测量工具,它会自动忽略系统休眠时间,专注于程序实际运行的CPU时间,精度比time.time()高得多。

额外小建议

  • 可以灵活调整num_runs的数值:如果平均耗时还是太小,就把次数调大(比如100000);如果总耗时太长,就适当调小。
  • 你的起始点范围是1到3,不会碰到导数为0的情况,但try-except保留下来仍然很有必要,能应对迭代过程中可能出现的意外错误。

备注:内容来源于stack exchange,提问作者3005736

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 08:49:51