0

私は、iminuit が単純な線形モデルに収束できないという厄介なバグに遭遇しました。しかし、本当の問題は、「#bins = np.linspace(0,4,25)」という行のコメントを外すと、プログラムの結果が異なり、収束する可能性があることです。

「同じ入力」が「同じ出力」を生成しない場合、未定義の動作またはセグメンテーション違反があることを意味します。何か案は?

import numpy as np
import scipy as sp
import scipy.special
import probfit
import pandas as pd
data = pd.read_feather('test.feather').rho2.to_numpy()
print(data)
N,bins = np.histogram(data,bins=24,range=(0,4))
#bins = np.linspace(0,4,25)
print(bins)
x = (bins[:-1]+bins[1:])/2

exposure = 3.8061025098100147
def cost(y0,k):
    global x,exposure,N
    T = (y0+k*x)*exposure
    return -2*np.sum(N*np.log(T)-T-sp.special.loggamma(N+1))

import iminuit
minimizer = iminuit.Minuit(cost,errordef=1,y0=11,k=3,limit_y0=(0,None),limit_k=(0.1,None))
minimizer.migrad()
minimizer.hesse()
minimizer.minos()
display(minimizer.fmin, minimizer.params,minimizer.merrors)
minimizer.draw_mncontour("y0","k")

出力: 出力

テスト入力

test.feather.zip

4

1 に答える 1