def weekly_job_2(): main.init() try: main.fit(True) except Exception as ex: traceback.print_exc() try: main.map(any=True) except Exception as ex: traceback.print_exc()
def fcn2min(params, x, data): """Model decaying sine wave, subtract data.""" amp = params['amp'] shift = params['shift'] omega = params['omega'] decay = params['decay'] model = amp * np.sin(x * omega + shift) * np.exp(-x * x * decay) return model - data # create a set of Parameters params = Parameters() # params.add('amp', value=7, min=2.5) params.add('amp', value=7, min=0, max=14) params.add('decay', value=0.05, min=0, max=0.1) params.add('shift', value=0.0, min=-np.pi / 2., max=np.pi / 2) params.add('omega', value=3, min=0, max=5) params['amp'].set(brute_step=0.25) params['decay'].set(brute_step=0.005) params['omega'].set(brute_step=0.25) params.pretty_print() result = fit(fcn2min, params, args=(x, data), algo_choice='genetic') plt.plot(x, data, 'b') plt.plot(x, data + fcn2min(params, x, data), 'y') plt.plot(x, data + fcn2min(result, x, data), 'r') plt.show()
def fcn2min(params, x, data): """Model decaying sine wave, subtract data.""" amp = params['amp'] shift = params['shift'] omega = params['omega'] decay = params['decay'] model = amp * np.sin(x * omega + shift) * np.exp(-x * x * decay) return model - data # create a set of Parameters params = Parameters() # params.add('amp', value=7, min=2.5) params.add('amp', value=7, min=0, max=14) params.add('decay', value=0.05, min=0, max=0.1) params.add('shift', value=0.0, min=-np.pi / 2., max=np.pi / 2) params.add('omega', value=3, min=0, max=5) params['amp'].set(brute_step=0.25) params['decay'].set(brute_step=0.005) params['omega'].set(brute_step=0.25) params.pretty_print() result = fit(fcn2min, params, args=(x, data), algo_choice='montecarlo') plt.plot(x, data, 'b') plt.plot(x, data + fcn2min(params, x, data), 'y') plt.plot(x, data + fcn2min(result, x, data), 'r') plt.show()
def func(pars, x, data): a, b, c = pars['a'], pars['b'], pars['c'] model = a * np.exp(-b * x) + c if data is None: return model return model - data def f(var, x): return var[0] * np.exp(-var[1] * x) + var[2] params = Parameters() params.add('a', value=10) params.add('b', value=10) params.add('c', value=10) a, b, c = 2.5, 1.3, 0.8 x = np.linspace(0, 4, 50) y = f([a, b, c], x) data = y + 0.15 * np.random.normal(size=x.size) # fit without analytic derivative result = fit(func, params, args=(x, data), algo_choice="levmar") plt.plot(x, data, 'b') plt.plot(x, data + func(params, x, data), 'y') plt.plot(x, data + func(result, x, data), 'r') plt.show()
import matplotlib.pyplot as plt import numpy as np from main import fit from lmfit import Parameters x = np.linspace(1, 10, 250) np.random.seed(0) y = 3.0 * np.exp(-x / 2) - 5.0 * np.exp(-(x - 0.1) / 10.) + 0.1 \ * np.random.randn(x.size) p = Parameters() p.add_many(('a1', 4.), ('a2', 4.), ('t1', 3.), ('t2', 3., True)) def residual(p): v = p return v['a1'] * np.exp(-x / v['t1']) + v['a2'] * np.exp(-(x - 0.1) / v['t2']) - y result = fit(residual, p, algo_choice="simplex") plt.plot(x, y, 'b') plt.plot(x, y + residual(p), 'y') plt.plot(x, y + residual(result), 'r') plt.show()