コード例 #1
0
ファイル: bb_lmfit.py プロジェクト: pyfit/pyfit
from lmfit import Parameters, minimize
from bb import BoxBOD, report_results

# Define model with named parameters
pars = Parameters()
pars.add("b1", value=BoxBOD.p0[0])
pars.add("b2", value=BoxBOD.p0[1])


def model(pars, x):
    b1 = pars["b1"].value
    b2 = pars["b2"].value
    return BoxBOD.model(x, b1, b2)


# Define chi vector
# Nothe that (chi ** 2).sum() is automatically
# computed by minimize.
def chi(pars, x, y):
    return model(pars, x) - y


# Perform fit
result = minimize(chi, pars, args=(BoxBOD.x, BoxBOD.y))

# Report results
popt = [pars["b1"].value, pars["b2"].value]
perr = [pars["b1"].stderr, pars["b2"].stderr]
chi2 = result.chisqr
report_results("lmfit", popt, perr, chi2)
コード例 #2
0
ファイル: bb_sherpa.py プロジェクト: pyfit/pyfit
    b1, b2 = pars
    return BoxBOD.model(x, b1, b2)

ui.load_user_model(boxbod_func, "boxbod")
ui.add_user_pars("boxbod", ["b1", "b2"])
bb = boxbod
ui.set_model(bb)
bb.b1, bb.b2 = BoxBOD.p0[0], BoxBOD.p0[1]

# Perform fit
ui.set_stat('chi2datavar')
#ui.set_method('levmar') #  ['levmar', 'moncar', 'neldermead', 'simplex']
ui.set_method_opt('xtol', 1e-10)
ui.fit() # Compute best-fit parameters
ui.set_covar_opt('eps', 1e-5) # @todo: Why does this parameter have no effect
ui.covariance() # Compute covariance matrix (i.e. errors)
#ui.conf() # Compute profile errors
#ui.show_all() # Print a very nice summary of your session to less

# Report results
fr = ui.get_fit_results()
cr = ui.get_covar_results()

# Report results (we have to apply the s factor ourselves)
popt = np.array(fr.parvals)
chi2 = fr.statval
s_factor = np.sqrt(chi2 / fr.dof)
perr = s_factor * np.array(cr.parmaxes)
report_results('sherpa', popt, perr, chi2)

コード例 #3
0
ファイル: bb_scipy_curve_fit.py プロジェクト: pyfit/pyfit
import numpy as np
from numpy import sqrt
from scipy.optimize import curve_fit, leastsq
from bb import BoxBOD, report_results

# Perform fit
popt, pcov = curve_fit(BoxBOD.model, BoxBOD.x, BoxBOD.y, BoxBOD.p0)

def chi(pars):
    return BoxBOD.y - BoxBOD.model(BoxBOD.x, *pars)

res = leastsq(chi, BoxBOD.p0, full_output=True)
from pprint import pprint
pprint(res)
raise

# Report results
perr = sqrt(pcov.diagonal())
# chi2 is not returned, we have to compute it by hand
chi = (BoxBOD.y - BoxBOD.model(BoxBOD.x, *popt))
chi2 = (chi ** 2).sum()
report_results('scipy_curve_fit', popt, perr, chi2)