首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iminuit中对拟合参数的限制?

在iminuit中对拟合参数的限制?
EN

Stack Overflow用户
提问于 2019-03-28 21:34:13
回答 1查看 327关注 0票数 0

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

代码语言:javascript
复制
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.log(mpi**2)。例如,我尝试过:

代码语言:javascript
复制
if cf<=np.log(mpi**2):
    chif+=((fpi-f(mpi,cf))/error)**2

else:
    pass

但它并没有起作用。有没有办法在代码中加入这个约束呢?

EN

回答 1

Stack Overflow用户

发布于 2019-04-01 17:07:06

对于这种类型的约束,总是有简单的参数变换解决方案。在这种情况下,您可以定义:

代码语言:javascript
复制
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及其错误,您需要进行标准错误传播。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55398949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档