gpt4 book ai didi

python - 使用 numpy/scipy 进行 6 次曲线拟合

转载 作者:太空狗 更新时间:2023-10-29 20:34:31 25 4
gpt4 key购买 nike

我有一个非常具体的要求,即使用 6 次多项式对非线性数据进行插值。我见过 numpy/scipy 例程 (scipy.interpolate.InterpolatedUnivariateSpline),它只允许插值到 5 次。

即使没有直接的函数可以做到这一点,有没有办法在 Python 中复制 Excel 的 LINEST 线性回归算法? LINEST 允许 6 度曲线拟合,但我不想将 Excel 用于任何事情,因为此计算是更大的 Python 脚本的一部分。

如有任何帮助,我们将不胜感激!

最佳答案

您可以使用 scipy.optimize.curve_fit使您想要的任何功能(在合理范围内)适合您的数据。这个函数的签名是

curve_fit(f, xdata, ydata, p0=None, sigma=None, **kw)

它使用非线性最小二乘法拟合函数 f 到数据 ydata(xdata)。在您的情况下,我会尝试类似的方法:

import numpy
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def _polynomial(x, *p):
"""Polynomial fitting function of arbitrary degree."""
poly = 0.
for i, n in enumerate(p):
poly += n * x**i
return poly

# Define some test data:
x = numpy.linspace(0., numpy.pi)
y = numpy.cos(x) + 0.05 * numpy.random.normal(size=len(x))

# p0 is the initial guess for the fitting coefficients, set the length
# of this to be the order of the polynomial you want to fit. Here I
# have set all the initial guesses to 1., you may have a better idea of
# what values to expect based on your data.
p0 = numpy.ones(6,)

coeff, var_matrix = curve_fit(_polynomial, x, y, p0=p0)

yfit = [_polynomial(xx, *tuple(coeff)) for xx in x] # I'm sure there is a better
# way of doing this

plt.plot(x, y, label='Test data')
plt.plot(x, yfit, label='fitted data')

plt.show()

它应该给你这样的东西:

enter image description here

关于python - 使用 numpy/scipy 进行 6 次曲线拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10143174/

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