在我一直在从事的一个项目中,我一直在使用 SciPy 的optimize.curve_fit()函数通过改变 3 个参数将曲线拟合到图形中。其中一个参数 (c) 需要根据另一个参数 (Mhalo) 限制在限制范围内,如此处的图表所示。
作为项目的下一步,我想改变这种关系,以便 c 参数在 Mhalo-c 关系周围具有对数正态分布,而不是在基于 Mhalo 的限制内改变 c,如图所示。
当我尝试通过将c 从 optimize.curve_fit()函数中的变量中取出并将随机对数正态计算放入我拟合的函数中来做到这一点时,程序根本无法拟合曲线(可能是因为随机元素)。
有什么方法可以完成我在这里描述的内容,无论是使用optimize.curve_fit()还是 Python 中的其他函数?
这与我需要一个名为参数空间内的曲线的 python 函数有关。 它不完全是重复的。 正如那里提到的,提供您正在尝试做的事情的更多详细信息肯定会有所帮助。 按照 https://stackoverflow.com/help/mcve 中的指南发布示例代码。 否则,我们真的不知道你想做什么。
例如,我不知道我应该在图表中看到什么。 比如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
。
这是你想做的事情吗? 真的,我不知道。要获得更具体的答案,您必须提出更具体的问题。