iminuit中拟合参数的约束?

2024-04-29 14:17:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试将一些参数拟合到曲线上,但我需要对其中一个常量施加约束,我不知道如何使代码确认约束并用正确的值拟合值。我将尝试编写一个简单的示例代码来说明我的问题:

def chi(paras):
    mpi=paras[0:32]
    cf=paras[32]
    chif=0
    for i in range(32):
        chif+=((fpi-f(mpi,cf))/error)**2
    return chif
m=Minuit.from_array_func(chi,parin,parstep,name=parname,errordef=1)

fmin,param=m.migrad(ncall=10000)

print(m.values)

例如,我想要cf<=np.日志(mpi**2)。我试过例如:

if cf<=np.log(mpi**2):
    chif+=((fpi-f(mpi,cf))/error)**2

else:
    pass

但它没有起作用。在代码中是否有这样的约束?你知道吗


Tags: 代码示例for参数defnperror曲线
1条回答
网友
1楼 · 发布于 2024-04-29 14:17:26

对于这类约束,通常都有简单的参数变换解。 在这种情况下,您可以定义:

def chi( paras ):
    mpi = paras[ 0 : 32 ]
    s = paras[ 32 ]
    a = np.log( np.sum( np.array( mpi )**2 ) )
    cf = a - np.exp( -s )
    chif = 0
    for i in range( 32 ):
        chif += ( ( fpi - f( mpi, cf ) ) / error )**2
    return chif

参数s允许在-np.infnp.inf之间变化,而内部cf可以在-np.infa = np.log( sum ( mpi**2 ) )之间变化。要获得cf及其错误,您需要进行标准错误传播。你知道吗

相关问题 更多 >