Python2:拟合函数的多参数和scipy.optimize.curve\u fi曲线

2024-04-29 22:37:06 发布

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

这是我关于堆栈溢出的第一篇文章,如果有任何信息丢失,请耐心等待。你知道吗

我正在使用python2.7.15(ubuntu18.04)和scipy.optimize.curve\u fit曲线拟合(). 这个拟合函数由一个数量可变的指数和通过拟合函数的*args参数传递的相关参数组成。你知道吗

我试着把参数向量传递给我的拟合函数。不幸的是,我用“for”循环执行的指数和实际上被解释为numpy。ndarray,其中应该是要返回到拟合算法的单个值。 下面是我尝试的一个(简化的)例子:

import numpy as np
import scipy
import math
from scipy import optimize

# Fitting function:
def fitFuncTau(amplitude, nFit, t, *args):
    C0=args[0]
    C=list(args[1:(nFit+1)])
    tau=list(args[(nFit+1):(2*nFit+2)])
    sumFit=0
    for i in range(0, nFit):
        sumFit+=C[i]*np.exp(-t/tau[i])
    print sumFit
    return C0+amplitude*sumFit

#Fitting Args: C0 parameter, then two lists C[] and tau[] (size Nfit)
fitArgs=[1, 0.01, 0.01, 0.1, 0.1]
nFit=2
amplitude=1

# Dummy fitting data
x=np.linspace(0, 4, 100)
np.random.seed(1729)
y=np.random.normal(size=x.size)

#Fit
wrapFunc=lambda t, *args: fitFuncTau(amplitude, nFit, t, *args)
fit_opt, fit_cov = scipy.optimize.curve_fit(wrapFunc, x, y, p0=fitArgs)

任何帮助都将不胜感激!你知道吗


Tags: 函数importsizenpargsscipy指数fit
1条回答
网友
1楼 · 发布于 2024-04-29 22:37:06

尝试独立使用fitFuncTau函数。fitFuncTau(1, 2, 3, 4, 5, 6, 7, 8)(或者您想提供的任何值来填充正确数量的参数)只打印一个数字,而不是一个列表。你知道吗

我找不到任何文档或引用来证明它,但我猜这只是curve_fit()所做的打印优化。
x的每个元素引起的所有print调用都收集在一个列表中,并打印该列表。如果检查打印列表的长度是否与x数组的长度相同(本例中为100)。你知道吗

它不应影响拟合的结果。检查fit_opt中的值是否合理。你知道吗

相关问题 更多 >