第一个问题:我正在尝试用以下形式的函数来拟合实验数据:

f(x) = m_o*(1-exp(-t_ox)) + ... + m_j(1-exp(-t_j*x)) 复制

目前,我找不到一种方法来确定参数的数量m_j,t_j,我被迫这样做:

def fitting_function(x, m_1, t_1, m_2, t_2): return m_1*(1.-numpy.exp(-t_1x)) + m_2(1.-numpy.exp(-t_2*x))

parameters, covariance = curve_fit(fitting_function, xExp, yExp, maxfev = 100000) 复制

(xExp和yExp是我的实验点)

有没有一种方法可以这样写我的拟合函数:

def fitting_function(x, li): res = 0. for el in range(len(li) / 2): res += li[2idx](1-numpy.exp(-li[2*idx+1]*x)) return res 复制

其中li是拟合参数列表,然后执行curve_fitting?我不知道如何告诉curve_fitting拟合参数的数量。当我为fitting_function尝试这种形式时,我遇到类似'ValueError: Unable to determine number of fit parameters'这样的错误。

可以使用*args和**kwargs来传递未确定数量的参数。这样,您可以将拟合函数定义为:

def fitting_function(x, li): res = 0. for idx in range(len(li) // 2): res += li[2idx](1-numpy.exp(-li[2idx+1]*x)) return res

然后,使用curve_fit时,将拟合参数列表传递给*args:

parameters, covariance = curve_fit(fitting_function, xExp, yExp, p0 = [1]*num_params, maxfev = 100000, *li)

其中num_params是拟合参数的数量。在p0中,我们使用了一个长度为num_params的列表来指定拟合参数的初始估计值。

使用 Scipy 的 curve_fit() 函数拟合具有未知参数数量的函数

原文地址: https://www.cveoy.top/t/topic/oWV7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录