我手头的数据始终在一个二次多项式(二次函数)上。我想尽可能精确地找到插值函数的峰值。
到目前为止,我一直使用 `interp1d`,然后使用 `linspace` 和简单的 `for` 循环提取峰值。虽然你可以使用大量新生成的样本在 `linspace` 中,但使用拟合多项式的导数仍然可以更精确。
现在,我唯一找到的返回拟合多项式系数的函数是 `polyfit`,但这个拟合函数相当不准确(大多数情况下,函数甚至没有通过数据点)。
我已经尝试使用 `UnivariateSpline`,拟合函数似乎非常准确,并且很容易获得导数样条和其根。
其他多项式拟合函数(`BarycentricInterpolator`、`KroghInterpolator` 等)表示由于数值稳定性问题,它们不计算多项式系数。
`UnivariateSpline` 及其导数有多准确,或者是否有更好的选择?
到目前为止,我一直使用 `interp1d`,然后使用 `linspace` 和简单的 `for` 循环提取峰值。虽然你可以使用大量新生成的样本在 `linspace` 中,但使用拟合多项式的导数仍然可以更精确。
现在,我唯一找到的返回拟合多项式系数的函数是 `polyfit`,但这个拟合函数相当不准确(大多数情况下,函数甚至没有通过数据点)。
我已经尝试使用 `UnivariateSpline`,拟合函数似乎非常准确,并且很容易获得导数样条和其根。
其他多项式拟合函数(`BarycentricInterpolator`、`KroghInterpolator` 等)表示由于数值稳定性问题,它们不计算多项式系数。
`UnivariateSpline` 及其导数有多准确,或者是否有更好的选择?
np.arange
的步长,而在这种情况下为0.5。我想将二次函数的最大值降至浮点/双精度。 - Tjaz Brelihy.append((i**2)+25)
更改为y.append((i**2)+25.086)
。然后运行程序。0.5间距的插值即使在您传递的原始数据中不存在该值,也会找到最小值。 - Will.Evoy.append((i**2)+25)
更改为y.append(((i+0.2)**2)+25)
时,您将无法找到真正的峰值,而只能在间隔为_0.5_的采样插值函数的最大/最小值。 - Tjaz Brelihnp.arange
,则此方法将起作用。最终,我选择了polyfit
方法,因为它返回二次函数的实际系数,因此您可以通过“手动”导出峰值的x和y坐标。 - Tjaz Brelih