Numpy Polynomial类拟合系数显示与实际求值结果不符问题
为什么Polynomial.fit输出的系数与实际求值结果不符?
核心原因是np.polynomial.Polynomial.fit()默认会对输入的x做归一化处理(将x线性映射到[-1,1]区间),目的是提升拟合的数值稳定性。打印出的系数和表达式,是对应这个归一化后变量的,不是原始x坐标系下的系数。
验证归一化映射
可以查看拟合后多项式的domain和window属性:
print(poly.domain) # 输出[-3.1, -2.3],即输入x的范围 print(poly.window) # 输出[-1., 1.],归一化后的目标区间
归一化的映射公式为:x_normalized = (2 * x - (domain[0] + domain[1])) / (domain[1] - domain[0])
代入你的x范围计算:
domain_min=-3.1,domain_max=-2.3,所以:x_normalized = (2x +5.4)/0.8 = 2.5x +6.75
转换回原始坐标系的多项式
拟合后的多项式是基于x_normalized的:p(x_normalized) = 2.96978417 -0.56115108*x_normalized
将x_normalized代入,转换为原始x的表达式:
p(x) = 2.96978417 -0.56115108*(2.5x +6.75) = 2.96978417 -1.4028777x -3.78776978 = -0.81798561 -1.4028777x
这个表达式的结果就和你调用poly(0)、poly(1)-poly(0)的输出完全一致了。
获取原始坐标系的系数
如果需要直接得到原始x下的系数,可以调用convert()方法:
poly_original = poly.convert() print(poly_original.coef) # 输出[-0.81798561, -1.4028777] print(poly_original) # 输出-0.8179856115107942 - 1.4028776978417268·x¹
此时用这个多项式求值就和直观的系数计算一致了。
内容的提问来源于stack exchange,提问作者Leyna Shackleton
相关产品推荐
相关产品推荐

