最精确的插值数据和找到峰值的方法?

2024-10-04 11:32:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据总是在二次多项式(二次函数)上。我要尽可能精确地找到插值函数的峰值。在

Data sample points

到目前为止,我一直在使用interp1d,然后使用linspace和一个简单的for循环提取峰值。虽然您可以在linspace中使用大量新生成的样本,但是使用拟合多项式的导数仍然可以更精确。
我还没有找到使用interp1d来实现这一点的方法。在

现在我发现的唯一一个返回拟合多项式系数的函数是polyfit,但是这个拟合函数非常不准确(大多数时候函数甚至不经过数据点)。在

<code>interp1d</code> and <code>polyfit</code> functions

我尝试过使用UnivariateSpline,拟合函数似乎非常精确,而且得到导数样条及其根非常简单。在

其他多项式拟合函数(BarycentricInterpolatorKroghInterpolator,…)表示,出于数值稳定性的原因,它们不计算多项式系数。在

UnivariateSpline及其导数有多精确,或者还有更好的选择吗?在


Tags: 数据方法函数for样条插值样本导数
2条回答

最后我选择了polyfit。虽然拟合函数没有完全通过数据点,但最终结果仍然很好。从返回的系数中,我得到了所需的峰值的x和y坐标。在

如果您只需要找到二次多项式的最小值/最大值,为什么不这样做:

import matplotlib.pyplot as plt
from scipy.interpolate import KroghInterpolator
import numpy as np

x=range(-20,20)
y=[]
for i in x:
    y.append((i**2)+25)

x=x[1::5]
y=y[1::5]

f=KroghInterpolator(x,y)
xfine=np.arange(min(x),max(x),.5)
yfine=f(xfine)

val_interp=min(yfine)
print val_interp

plt.scatter(x,y)
plt.plot(xfine, yfine)
plt.show()

相关问题 更多 >