在我一直在努力的项目中,我一直在使用SciPy的 optimize.curve_fit()功能,通过改变3个参数使曲线适合图形。其中一个参数(c)需要根据另一个参数(Mhalo)限制在限制范围内,如图here所示。
作为项目的下一步,我想改变这种关系,以便不是基于Mhalo在限制范围内改变c,如图中所示,c参数具有围绕Mhalo-c关系的对数正态分布。
当我尝试通过从 optimize.curve_fit()函数中的变量中取c并在随后的函数中放入随机对数正态计算时,我试图这样做程序根本无法拟合曲线(可能是因为随机元素)。
有什么方法可以使用 optimize.curve_fit()或Python中的其他函数来完成我在此描述的内容?
答案 0 :(得分:0)
这与I need a python function that can fit a curve within a parameter space有关。这不是一个重复。正如那里提到的那样,肯定有助于提供你正在尝试做的更多细节。发布示例代码,遵循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
。
这是你想做的事吗?真的,我不知道。要获得更具体的答案,您必须提出更具体的问题。