【发布时间】:2018-03-15 16:18:05
【问题描述】:
我正在尝试使用随 NumPy v1.4 发布的 Polynomial 模块来拟合以下示例中给出的数据。
import matplotlib.pyplot as plt
import numpy as np
# data points to fit
x = np.array([11844.6, 20204.7, 24964.8, 29724.9, 34485.0, 39245.1, 44005.2,
48765.3, 53525.4, 58285.5, 58968.2])
y = np.array([4.2, 4.086, 4.048, 3.984, 3.949, 3.909, 3.869, 3.802, 3.723,
3.531, 3.0])
# polynomial fit
xx = np.linspace(min(x), max(x), 500)
c = np.polynomial.polynomial.polyfit(x, y, 5)
yfit = np.polynomial.polynomial.polyval(xx, c)
# plot
plt.ion()
plt.close('all')
plt.figure()
plt.plot(x, y, 'o-', alpha=0.4, label='data')
plt.plot(xx, yfit, label='fit')
plt.xlabel('x values')
plt.ylabel('y values')
plt.legend(loc='best')
这将产生以下图,其中蓝色点是数据,橙色线是示例中的多项式拟合。
我尝试了多项式的不同次数,但无法很好地拟合数据点。有没有办法使用 NumPy 中的多项式模块开发具有固定数据点的多项式拟合?
【问题讨论】:
-
您是否希望多项式与给定数据点的值完全匹配,即 P(xx) = y for xx in x ?
-
@ma3oun 拟合需要包含每个数据点。
-
NumPy 1.4?新的?大约十年前,大约 2010 年或 2009 年底(Github 发布日期为 2009 年 12 月 27 日)。
-
这个数据看起来不像多项式是一个合理的模型。
-
如果您希望曲线通过每个数据点,您可能不需要拟合,而是需要插值:docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html
标签: python numpy polynomial-math