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

霍纳法则实现与舍入误差绘图复现问题求助

问题排查与解决建议

核心错误:复数生成逻辑错误

你当前生成xs的代码[1.606+(2**-52)*i for i in range(801)]里的i是循环计数变量(整数),并不是复数的虚部单位!这导致你生成的是实数序列,而非教材里要求的「实部固定,虚部为2^-52倍数」的复数序列。正确的复数生成应该用Python的虚数单位1j,示例代码:

# 以x=1.606+2^-52*k(k为虚部系数)为例
xs = [1.606 + (2**-52)*1j * k for k in range(801)]

其他可能的问题点

  • 未计算舍入误差:教材的图是舍入误差图,不是直接绘制r(x)的数值结果。你需要先计算r(x)的精确值(比如用高精度运算库mpmath),再计算霍纳法则得到的数值近似值,最后绘制两者的误差(绝对值误差或相对误差),而非直接画r(x)的数值。
  • 霍纳法则实现问题:检查代码是否正确处理复数运算,确认分子分母的多项式系数顺序是否符合要求——霍纳法则需要从最高次项到最低次项依次计算,比如多项式a_n x^n + ... + a_1 x + a_0,计算式应为((...((a_n)*x + a_{n-1})*x + a_{n-2})*x + ...) + a_0。
  • 数值精度范围问题:2^-52是双精度浮点数的机器epsilon量级,普通浮点数计算可能无法捕捉细微误差,建议用mpmath设置更高精度计算精确值,再对比双精度下的霍纳法则结果。

验证步骤

  1. 修正复数生成代码,确认每个x都是实部固定、虚部线性变化的复数;
  2. 用高精度方法计算r(x)的精确值;
  3. 用你的霍纳法则代码计算数值近似值;
  4. 计算两者的误差(如abs(数值结果 - 精确结果))并绘图,此时应该能看到类似教材的舍入误差波动。

内容的提问来源于stack exchange,提问作者Parker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:33:11