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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:05:20