# SPDX-License-Identifier: MIT #!/usr/bin/env python3 # -*- coding: utf-8 -*- from symfit import variables, Parameter, Fit, D, ODEModel import numpy as np from symfit.contrib.interactive_guess import InteractiveGuess # First order reaction kinetics. Data taken from # http://chem.libretexts.org/Core/Physical_Chemistry/Kinetics/Rate_Laws/The_Rate_Law tdata = np.array([0, 0.9184, 9.0875, 11.2485, 17.5255, 23.9993, 27.7949, 31.9783, 35.2118, 42.973, 46.6555, 50.3922, 55.4747, 61.827, 65.6603, 70.0939]) concentration = np.array([0.906, 0.8739, 0.5622, 0.5156, 0.3718, 0.2702, 0.2238, 0.1761, 0.1495, 0.1029, 0.086, 0.0697, 0.0546, 0.0393, 0.0324, 0.026]) # Define our ODE model A, t = variables('A, t') k = Parameter('k') model = ODEModel({D(A, t): - k * A}, initial={t: tdata[0], A: concentration[0]}) guess = InteractiveGuess(model, A=concentration, t=tdata, n_points=250) guess.execute() print(guess) fit = Fit(model, A=concentration, t=tdata) fit_result = fit.execute() print(fit_result)
Created on Mon Dec 7 11:28:58 2015 @author: peterkroon """ from symfit import Variable, Parameter, exp, Fit, Model from symfit.contrib.interactive_guess import InteractiveGuess import numpy as np def distr(x, k, x0): kbT = 4.11 return exp(-k * (x - x0)**2 / kbT) x = Variable('x') y = Variable('y') k = Parameter('k', 900) x0 = Parameter('x0', 1.5) model = Model({y: distr(x, k, x0)}) x_data = np.linspace(0, 2.5, 50) y_data = model(x=x_data, k=1000, x0=1).y guess = InteractiveGuess(model, x=x_data, y=y_data, n_points=150) guess.execute() print(guess) fit = Fit(model, x=x_data, y=y_data) fit_result = fit.execute(maxiter=1000) print(fit_result)
from symfit import variables, Parameter, exp, Fit, Model from symfit.distributions import Gaussian from symfit.contrib.interactive_guess import InteractiveGuess import numpy as np x, y, z = variables('x, y, z') mu_x = Parameter('mu_x', 10) mu_y = Parameter('mu_y', 10) sig_x = Parameter('sig_x', 1) sig_y = Parameter('sig_y', 1) model = Model({z: Gaussian(x, mu_x, sig_x) * Gaussian(y, mu_y, sig_y)}) x_data = np.linspace(0, 25, 50) y_data = np.linspace(0, 25, 50) x_data, y_data = np.meshgrid(x_data, y_data) x_data = x_data.flatten() y_data = y_data.flatten() z_data = model(x=x_data, y=y_data, mu_x=5, sig_x=0.3, mu_y=10, sig_y=1).z guess = InteractiveGuess(model, x=x_data, y=y_data, z=z_data) guess.execute() print(guess) fit = Fit(model, x=x_data, y=y_data, z=z_data) fit_result = fit.execute() print(fit_result)
sigma: sigma.value }), modules=[{ 'ImmutableMatrix': ndarray }, 'numpy', 'scipy']) x_finer = r_[d.getaxis('$B_0$')[0]:d.getaxis('$B_0$')[-1]:500j] result = model_lambda(x_finer) guess_nddata = nddata(result, [-1], ['$B_0$']).setaxis('$B_0$', x_finer).set_units( '$B_0$', d.get_units('$B_0$')) plot(d, label='data') plot(guess_nddata, ':', label='guess') model = s.Model({y_var: dVoigt}) if interactive: guess = InteractiveGuess(model, y=d.data.real, B=d.getaxis('$B_0$'), n_points=500) guess.execute() logger.info(strm(guess)) y_var = s.Variable('y') logger.info(strm("about to run fit")) fit = s.Fit( model, d.getaxis('$B_0$'), d.data.real ) # really want to use minpack here, but gives "not proper array of floats fit_result = fit.execute() logger.info(strm("fit is done")) plt.figure() plt.title('data with fit') plot(d, '.', label='data') fit_nddata = nddata( fit.model(B=x_finer, **fit_result.params).y, [-1],
# -*- coding: utf-8 -*- from symfit import variables, Parameter, exp, Fit, Model from symfit.distributions import Gaussian from symfit.contrib.interactive_guess import InteractiveGuess import numpy as np x, y, z = variables('x, y, z') mu_x = Parameter('mu_x', 10) mu_y = Parameter('mu_y', 10) sig_x = Parameter('sig_x', 1) sig_y = Parameter('sig_y', 1) model = Model({z: Gaussian(x, mu_x, sig_x) * Gaussian(y, mu_y, sig_y)}) x_data = np.linspace(0, 25, 50) y_data = np.linspace(0, 25, 50) x_data, y_data = np.meshgrid(x_data, y_data) x_data = x_data.flatten() y_data = y_data.flatten() z_data = model(x=x_data, y=y_data, mu_x=5, sig_x=0.3, mu_y=10, sig_y=1).z guess = InteractiveGuess(model, x=x_data, y=y_data, z=z_data) guess.execute() print(guess) fit = Fit(model, x=x_data, y=y_data, z=z_data) fit_result = fit.execute() print(fit_result)
# # SPDX-License-Identifier: MIT # -*- coding: utf-8 -*- from symfit import Variable, Parameter, Fit, Model from symfit.contrib.interactive_guess import InteractiveGuess import numpy as np x = Variable('x') y1 = Variable('y1') y2 = Variable('y2') k = Parameter('k', 900) x0 = Parameter('x0', 1.5) model = {y1: k * (x - x0)**2, y2: x - x0} model = Model(model) # Generate example data x_data = np.linspace(0, 2.5, 50) data = model(x=x_data, k=1000, x0=1) y1_data = data.y1 y2_data = data.y2 guess = InteractiveGuess(model, x=x_data, y1=y1_data, y2=y2_data, n_points=250) guess.execute() print(guess) fit = Fit(model, x=x_data, y1=y1_data, y2=y2_data) fit_result = fit.execute() print(fit_result)