Python中使用Chebyshev多项式拟合的数值计算及结果对比问题
切比雪夫拟合结果数值计算方法
numpy.polynomial.Chebyshev生成的拟合对象自带求值逻辑,直接传入待计算的x序列即可得到对应预测值,无需手动实现切比雪夫多项式展开。
修改后的示例代码如下,可以直接输出两种拟合结果做对比:
import numpy as np from numpy.polynomial import Chebyshev as T from mpmath import * mp.dps = 16 mp.pretty = True x = [1, 2, 3, 4, 5] y = [0.90, 8.15, 26.84, 64.87, 124.0] deg = 3 # 普通多项式拟合 popt_poly = np.polyfit(x, y, deg) ypred_poly = np.polyval(popt_poly, x) # 切比雪夫多项式拟合 popt_cheb = T.fit(x, y, deg) # 直接调用拟合对象计算切比雪夫预测值 ypred_cheb = popt_cheb(x) print("普通多项式拟合系数(幂次从高到低):", popt_poly) print("普通多项式预测值:", ypred_poly) print("切比雪夫拟合系数(切比雪夫基阶数从低到高):", popt_cheb.coef) print("切比雪夫预测值:", ypred_cheb) print("两种拟合结果的平均绝对误差:", np.mean(np.abs(ypred_poly - ypred_cheb)))
补充说明
- 若需要将切比雪夫拟合转换为标准幂次多项式格式,可调用
convert方法:std_poly = popt_cheb.convert(kind=np.polynomial.Polynomial),其coef属性为幂次从低到高的标准多项式系数,倒序后和np.polyfit输出的系数顺序一致。 - 普通
np.polyfit出现Rank Warning是因为原生范德蒙德矩阵在x取值范围大、拟合阶数高时,高阶项数值差异过大导致矩阵条件数过高,数值稳定性差;而Chebyshev拟合会自动将输入x归一化到[-1,1]区间,基于正交基计算,数值稳定性远高于普通多项式拟合,因此不会触发秩警告。
内容的提问来源于stack exchange,提问作者Parag
相关产品推荐
相关产品推荐

