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

为何我的numpy polyfit拟合结果不符合预期?代码问题排查

代码错误分析与修正

你的代码存在两个关键问题,导致拟合曲线呈现异常状态:

1. 多项式次数设置错误

你明确要做2次多项式拟合,但代码中deg = 1指定的是线性拟合(1次多项式),完全不符合需求。需要将deg改为2。

2. 绘图时x数组未排序

原x数组并非按从小到大排列,直接用原x计算拟合值并绘图,会让曲线在无序的x点之间来回连接,出现图中混乱的折线效果。解决方式是先对x排序,再基于排序后的x计算拟合y值。

修正后的完整代码

import numpy as np
import matplotlib.pyplot as plt

deg = 2  # 修改为2次多项式
fig, ax = plt.subplots(1, facecolor="white")
fig.set_size_inches(5,4)
x = [0.843291,0.873922,0.903581,0.93344,0.961478,0.990968,
     1.019434,1.047562,1.075373,1.102883,1.130106,1.157059,
     1.183751,1.210195,1.236399,1.262376,1.288134,1.313679,
     1.339022,1.364167,1.389123,1.413896,1.438492,1.462916,
     1.505685,1.57998,1.690303,1.730423,1.761613,1.791332,
     1.63034,1.652749,1.675848,1.698821,1.721672,1.744402]
y = [291000000,291000000,292000000,291000000,290000000,290000000,
     290000000,290000000,289000000,289000000,288000000,288000000,
     288000000,287000000,287000000,287000000,287000000,286000000,
     286000000,286000000,285000000,285000000,284000000,284000000,
     284000000,283000000,283000000,282000000,282000000,281000000,
     280000000,280000000,279000000,278000000,277000000,277000000]

ax.scatter(x, y, label="data", c="black", alpha=0.8)
# 拟合多项式
poly = np.poly1d(np.polyfit(x, y, deg=deg))
# 对x排序并计算拟合值
x_sorted = np.sort(x)
y_fit = poly(x_sorted)
# 用排序后的x绘图
ax.plot(x_sorted, y_fit, label='fit', c="black", alpha=0.5)
ax.legend()
plt.show()

补充说明

  • np.polyfit本身不要求x有序,但绘图时必须用有序的x值,才能得到连续平滑的拟合曲线。
  • 修改deg=2后,拟合结果会符合你想要的2次多项式形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:00:16