在我一直从事的一个项目中,我一直在使用 SciPy 的 optimize.curve_fit() 函数通过改变 3 个参数将曲线拟合到图形。其中一个参数 (c) 需要基于另一个参数 (Mhalo) 限制在限制范围内,如图 所示。
作为项目的下一步,我想更改此关系,以便如图所示,c 参数在 Mhalo-c 关系周围具有对数正态分布,而不是在基于 Mhalo 的限制内改变 c。
当我尝试通过从 optimize.curve_fit() 函数中的变量中取出 c 并将随机对数正态计算放入我正在拟合的函数中来实现此目的时,程序根本无法拟合曲线(大概是因为随机元素)。
有什么方法可以使用 optimize.curve_fit() 或 Python 中的其他函数来完成我在这里描述的内容吗?
这与我需要一个可以在参数空间内拟合曲线的Python函数有关。它不完全重复。
正如前面的问题中提到的,您可能会发现
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
。