python - 在 symfit python 模块中使用命名模型来拟合高斯分布

标签 python gaussian symfit

我正在尝试编写一个代码,用于使用 symfit 模块同时使用两个不同的方程和一些共享参数来拟合两个数据集。它太复杂了,无法在这里展示,所以我展示了具有相同命令且更简单的另一个代码。在这里,我尝试用线性函数拟合一系列数据,但斜率呈高斯分布。 这是代码:

 `
import symfit as sf
from symfit import parameters, variables, Fit, Model, Ge, CallableModel
from symfit.core.minimizers import BFGS, BasinHopping, NelderMead, DifferentialEvolution
xd= [1.1, 3, 5, 7, 9, 11, 14, 19, 25, 32, 44]
yd= [5.5, 8, 11, 14, 18, 22, 28, 35,45, 69, 110]
pi=3.14
x, y = variables('x, y')
a = sf.Parameter('a',value=3)
b = sf.Parameter('b',value=0.7)
sigma= sf.Parameter('sigma',value=0.7)
res=0
norm=0
for i in range(1,5):
    atemp= (a + ((i-1)*3*sigma/2))
    gauss= sf.exp(-(atemp-a)**2/(2*(sigma**2)))/sf.sqrt(2*pi*(sigma**2))
    res= res+ gauss* (atemp * x + b) 
    norm= norm + gauss
    if i == 4:
        firstres= res
        firstnorm= norm
        res=0
        norm=0

funfit = Model({y: (firstres/firstnorm)})

fit = Fit(funfit, x= xd, y=yd, minimizer=[NelderMead, BFGS])
fit_result = fit.execute()
print(" Best-Fit Parameters: ", fit_result)

`

这就是我遇到的错误 “NameError:名称‘DiracDelta’未定义”

最佳答案

您可以尝试用 GradientModel 甚至 CallableModel 替换 Model。出现问题的原因是默认情况下会计算模型的 Hessian 矩阵,而对于高斯矩阵,这会产生一个未简化的 DiracDelta。使用这些其他模型中的任何一个都不会导致计算 Hessian 矩阵,因此应该可以解决问题。所以,

from symfit import CallableModel

funfit = CallableModel({y: (firstres/firstnorm)})

另外,您使用的是哪个版本?在 symfit >= 0.5.2 中,这种情况应该不再发生,所以我很想知道:)。

关于python - 在 symfit python 模块中使用命名模型来拟合高斯分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59626774/

相关文章:

python - 如何解决TiffFile错误: Not a Tiff File and Byte Problem with KeyError: b'\x89P'

python - Hadoop 流 - 执行二进制应用程序问题的包装器

Python读取文件-传递变量名

python - 如何保存和加载高斯过程进行生产

matlab - 高斯超几何函数 2F1

python - Python中如何任意扩展Symfit的参数个数

python - Beautiful Soup - 在带有字符串的标签中找到标签?第 n 个 child ?

python - 如何在 python 中绘制日志?

c# - 高斯模糊C#实现(类似OpenCV)