我正在尝试使用 Python 将曲线拟合到一组点。基本上这些点看起来像这样。
蓝色曲线表示输入的数据(在本例中为 4 个点),绿色是使用np.polyfit
和拟合的曲线polyfit1d
。我本质上想要的是一个看起来与蓝线非常相似的曲线拟合,但在点 1 和 2 处的渐变变化更平滑(这意味着我不需要线通过这些点)。
最好的方法是什么?这条线看起来像反正切,有没有办法指定反正切拟合?
我意识到这是一个有点垃圾的问题,但我想在不指定更多点的情况下离开。任何帮助将不胜感激。
我正在尝试使用 Python 将曲线拟合到一组点。基本上这些点看起来像这样。
蓝色曲线表示输入的数据(在本例中为 4 个点),绿色是使用np.polyfit
和拟合的曲线polyfit1d
。我本质上想要的是一个看起来与蓝线非常相似的曲线拟合,但在点 1 和 2 处的渐变变化更平滑(这意味着我不需要线通过这些点)。
最好的方法是什么?这条线看起来像反正切,有没有办法指定反正切拟合?
我意识到这是一个有点垃圾的问题,但我想在不指定更多点的情况下离开。任何帮助将不胜感激。
似乎您可能在点之间进行插值而不是拟合多项式参考:Spline Interpolation with Python and Fitting polynomials to data
但是,无论哪种情况,这里都有一个可以帮助您入门的代码片段:
import numpy as np
import scipy as sp
from scipy.interpolate import interp1d
x = np.array([0,5,10,15,20,30,40,50])
y = np.array([0,0,0,12,40,40,40,40])
coeffs = np.polyfit(x, y, deg=4)#you can change degree as you see fit
poly = np.poly1d(coeffs)
yp = np.polyval(poly, x)
interpLength = 10
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)
plt.plot(x, y, '.', x, yp, '-', new_x,new_y, '--')
plt.show()