如何在Python中找到其中一个参数具有对数正态分布的曲线的最佳拟合

问题描述 投票:0回答:1

在我一直从事的一个项目中,我一直在使用 SciPy 的 optimize.curve_fit() 函数通过改变 3 个参数将曲线拟合到图形。其中一个参数 (c) 需要基于另一个参数 (Mhalo) 限制在限制范围内,如图 here 所示。

作为项目的下一步,我想更改此关系,以便如图所示,c 参数在 Mhalo-c 关系周围具有对数正态分布,而不是在基于 Mhalo 的限制内改变 c。

当我尝试通过从 optimize.curve_fit() 函数中的变量中取出 c 并将随机对数正态计算放入我正在拟合的函数中来实现此目的时,程序根本无法拟合曲线(大概是因为随机元素)。

有什么方法可以使用 optimize.curve_fit() 或 Python 中的其他函数来完成我在这里描述的内容吗?

python python-3.x scipy curve-fitting normal-distribution
1个回答
0
投票

这与我需要一个可以在参数空间内拟合曲线的Python函数相关。它不完全重复。

c
Mhalo
是拟合参数吗?

正如前面的问题中提到的,您可能会发现

lmfit
有帮助。它可以允许将一个参数定义为其他参数的简单(或可能不那么简单)数学表达式。例如,您想要做的可能是将
c
限制为
Mhalo
的某个函数加上某个具有有限边界的项。这可以在
lmfit
中用类似

的东西来完成
 from lmfit import Parameters

 params = Parameters()
 params.add('mhalo', value=100, vary=True)
 params.add('c_offset', value=0, min=-1, max=1, vary=True) 

 params.add('c', expr='log10(mhalo) + c_offset')

这将允许

mhalo
自由变化,允许
c_offset
在范围内变化,并约束
c
为这两个参数的函数,这意味着
c
可以在拟合中变化,但不能独立于
mhalo 
c_offset

© www.soinside.com 2019 - 2024. All rights reserved.