使用numpy polyfit/poly1d拟合多项式后绘图遇维度不匹配错误求助
多项式拟合绘图问题解决
错误原因解析
np.polyfit(t, y, n)返回的是n阶多项式的系数数组,比如1阶拟合的p1是[一次项系数, 常数项],仅包含2个元素,和自变量t的10个元素维度不匹配,直接传入plt.plot()会触发维度错误。np.poly1d()生成的是多项式函数对象,它本身不是拟合后的y值,需要传入自变量t(即pp1(t))来计算对应每个t的拟合y值,这样得到的数组和t维度一致,才能用于绘图。
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt ylist = [81, 50, 35, 27, 26, 60, 106, 189, 318, 520] y = np.array(ylist) t = np.linspace(-0.9, 0.9, 10) # 多项式拟合 p1 = np.polyfit(t, y, 1) p2 = np.polyfit(t, y, 2) p3 = np.polyfit(t, y, 3) # 生成多项式函数对象 pp1 = np.poly1d(p1) pp2 = np.poly1d(p2) pp3 = np.poly1d(p3) # 计算每个t对应的拟合y值 y_fit1 = pp1(t) y_fit2 = pp2(t) y_fit3 = pp3(t) # 绘图 plt.figure(figsize=(8, 6)) plt.plot(t, y, 'o', label='原始数据') plt.plot(t, y_fit1, label='1阶拟合') plt.plot(t, y_fit2, label='2阶拟合') plt.plot(t, y_fit3, label='3阶拟合') plt.xlabel('t') plt.ylabel('y') plt.title('多项式拟合结果对比') plt.legend() plt.grid(True) plt.show()
补充说明
如果不想用np.poly1d,也可以直接用系数数组计算拟合值:比如1阶拟合的y值可以用p1[0]*t + p1[1],2阶的话是p2[0]*t**2 + p2[1]*t + p2[2],原理和pp1(t)完全一致,只是np.poly1d让多项式运算更简洁。
内容的提问来源于stack exchange,提问作者rockpaperscissors
相关产品推荐
相关产品推荐

