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

为何mpmath与numpy的Chebyshev拟合系数存在差异?

为什么mpmath和numpy的Chebyshev近似系数存在差异?

你看到的系数差异,本质是两个函数返回的系数对应不同的多项式基底:

1. mpmath.chebyfit 返回幂级数系数

mpmath.chebyfit会先基于Chebyshev节点构建近似,然后直接将结果转换为标准幂级数形式(即 $p(x) = a_0 + a_1x + a_2x^2 + a_3x^3 + a_4x^4$),返回的数组是从低次到高次的系数:

  • 你的输出[0.0399612, 2.11758e-23, -0.499576, -2.64698e-23, 1.0]对应:
    $0.0399612 + 0x -0.499576x^2 +0x^3 +1.0x^4$
    (极小的非零值是数值计算误差导致的)

2. numpy.chebinterpolate 返回Chebyshev基系数

numpy.polynomial.chebyshev.chebinterpolate返回的是Chebyshev多项式基的系数,即近似多项式表示为 $p(x) = c_0T_0(x) + c_1T_1(x) + c_2T_2(x) + c_3T_3(x) + c_4T_4(x)$,其中$T_n(x)$是第一类Chebyshev多项式:

  • $T_0(x)=1$,$T_1(x)=x$,$T_2(x)=2x2-1$,$T_4(x)=8x4-8x^2+1$
  • 你的输出[7.65197687e-01, -6.51999524e-18, -2.29807158e-01, -3.40959333e-18, 4.99515460e-03]对应各Chebyshev项的系数

验证:两种形式是同一多项式

把numpy的Chebyshev基多项式展开为幂级数,就能得到和mpmath一致的结果:

# 基于numpy的系数展开为幂级数
c = [7.65197687e-01, 0, -2.29807158e-01, 0, 4.99515460e-03]
a0 = c[0] + c[2]*(-1) + c[4]*1
a2 = c[2]*2 + c[4]*(-8)
a4 = c[4]*8
print(f"幂级数系数:[{a0:.6f}, 0, {a2:.6f}, 0, {a4:.6f}]")

输出结果:

幂级数系数:[1.000000, 0, -0.499576, 0, 0.039961]

完全匹配mpmath返回的系数(误差是数值精度导致的)。

额外说明

  • mpmath的chebyfit参数n=5对应4次多项式(共5项,0到4次),numpy的chebinterpolate参数4也对应4次多项式(最高次为$T_4(x)$),两者的近似阶数一致,所以代入x计算的结果完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:09:55