gpt4 book ai didi

python - SciPy:使用多项式的通用拟合函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:19 32 4
gpt4 key购买 nike

我尝试使用 SciPy 的 curve_fit 方法生成通用拟合多项式。我当前的简化代码如下所示:

import functools
import scipy.optimize

def __fit_polynom_order_6(self, data):
def func(x, c1=None, c2=None, c3=None, c4=None, c5=None, c6=None):
return c1*x + c2*x**2 + c3*x**3 + c4*x**4 + c5*x**5 + c6*x**6

x, y = data[:,0], data[:,1]
popt, pcov = scipy.optimize.curve_fit(func, x, y)

func_fit = functools.partial(func, c1=popt[0],c2=popt[1],c3=popt[2],c4=popt[3],c5=popt[4],c6=popt[5])

return func_fit

现在我还想对 n 阶多项式进行拟合,从而生成一个通用函数 __fit_polynom_order_n(self, n, data) 自动生成多项式并执行本质上与我上面的函数相同,但具有任意多项式。

我的尝试都没有成功。你能帮我吗?提前致谢!

最佳答案

已经有一个函数,np.polyfit :

fit = np.polyfit(x, y, n)

另一方面,您的func 没有常数项。是故意的吗?

如果您想编写自己的 polyfit 类型的方法,您可能需要研究 source code for np.polyfit .您会看到问题被设置为线性矩阵方程并用 np.linalg.lstsq 求解。 ,而不是更通用的 scipy.optimize.curve_fit

# set up least squares equation for powers of x
lhs = vander(x, order)
rhs = y
c, resids, rank, s = lstsq(lhs, rhs, rcond)

有用的引用:

  • np.vander -- 啊哈,这可以用来计算 x 处的多项式。如果要消除常数项,则必须砍掉 np.vander 返回的最右边的列。

关于python - SciPy:使用多项式的通用拟合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18889216/

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