gpt4 book ai didi

python - 用 numpy 拟合数据

转载 作者:IT老高 更新时间:2023-10-28 21:46:32 26 4
gpt4 key购买 nike

首先让我告诉你,我得到的可能不是我所期望的,也许你可以在这里帮助我。我有以下数据:

>>> x
array([ 3.08, 3.1 , 3.12, 3.14, 3.16, 3.18, 3.2 , 3.22, 3.24,
3.26, 3.28, 3.3 , 3.32, 3.34, 3.36, 3.38, 3.4 , 3.42,
3.44, 3.46, 3.48, 3.5 , 3.52, 3.54, 3.56, 3.58, 3.6 ,
3.62, 3.64, 3.66, 3.68])

>>> y
array([ 0.000857, 0.001182, 0.001619, 0.002113, 0.002702, 0.003351,
0.004062, 0.004754, 0.00546 , 0.006183, 0.006816, 0.007362,
0.007844, 0.008207, 0.008474, 0.008541, 0.008539, 0.008445,
0.008251, 0.007974, 0.007608, 0.007193, 0.006752, 0.006269,
0.005799, 0.005302, 0.004822, 0.004339, 0.00391 , 0.003481,
0.003095])

现在,我想用 4 次多项式来拟合这些数据。所以我这样做:

>>> coefs = np.polynomial.polynomial.polyfit(x, y, 4)
>>> ffit = np.poly1d(coefs)

现在我为 x 值创建一个新网格来评估拟合函数 ffit:

>>> x_new = np.linspace(x[0], x[-1], num=len(x)*10)

当我使用命令进行所有绘图(数据集和拟合曲线)时:

>>> fig1 = plt.figure()                                                                                           
>>> ax1 = fig1.add_subplot(111)
>>> ax1.scatter(x, y, facecolors='None')
>>> ax1.plot(x_new, ffit(x_new))
>>> plt.show()

我得到以下信息:

fitting_data.png fitting_data.png

我期望的是正确拟合的拟合函数(至少接近数据的最大值)。我做错了什么?

提前致谢。

最佳答案

不幸的是,np.polynomial.polynomial.polyfit 以与 np.polyfitnp.polyval 的相反顺序返回系数(或者,正如您使用的 np.poly1d)。举例说明:

In [40]: np.polynomial.polynomial.polyfit(x, y, 4)
Out[40]:
array([ 84.29340848, -100.53595376, 44.83281408, -8.85931101,
0.65459882])

In [41]: np.polyfit(x, y, 4)
Out[41]:
array([ 0.65459882, -8.859311 , 44.83281407, -100.53595375,
84.29340846])

一般来说:np.polynomial.polynomial.polyfit 返回系数[A, B, C]A + Bx + Cx^2 + .. .,而 np.polyfit 返回:... + Ax^2 + Bx + C

所以如果要使用这种函数组合,必须将系数的顺序颠倒,如:

ffit = np.polyval(coefs[::-1], x_new)

但是,the documentation明确声明避免使用 np.polyfitnp.polyvalnp.poly1d,而只使用 new(er) 包。

只使用多项式包是最安全的:

import numpy.polynomial.polynomial as poly

coefs = poly.polyfit(x, y, 4)
ffit = poly.polyval(x_new, coefs)
plt.plot(x_new, ffit)

或者,创建多项式函数:

ffit = poly.Polynomial(coefs)    # instead of np.poly1d
plt.plot(x_new, ffit(x_new))

fit and data plot

关于python - 用 numpy 拟合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com