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

时间:2018-03-20 17:45:09

标签: python python-3.x scipy curve-fitting normal-distribution

在我一直在努力的项目中,我一直在使用SciPy的 optimize.curve_fit()功能,通过改变3个参数使曲线适合图形。其中一个参数(c)需要根据另一个参数(Mhalo)限制在限制范围内,如图here所示。

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

当我尝试通过从 optimize.curve_fit()函数中的变量中取c并在随后的函数中放入随机对数正态计算时,我试图这样做程序根本无法拟合曲线(可能是因为随机元素)。

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

1 个答案:

答案 0 :(得分:0)

这与I need a python function that can fit a curve within a parameter space有关。这不是一个重复。正如那里提到的那样,肯定有助于提供你正在尝试做的更多细节。发布示例代码,遵循https://stackoverflow.com/help/mcve中的指南。否则,我们真的不知道你想要做什么。

例如,我不知道我应该在图表中看到什么。类似于cMhalo是否适合参数?

正如前面的问题中所提到的,您可能会发现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可以适合度的变化但不独立于mhaloc_offset

这是你想做的事吗?真的,我不知道。要获得更具体的答案,您必须提出更具体的问题。