def construct_multi_fit(shared_x_error): fit_1 = XYFit(xy_data=[U, T], model_function=empirical_T_U_model) fit_1.add_error(axis='y', err_val=sigT) # declare errors on T fit_2 = XYFit(xy_data=[U, I], model_function=I_U_model) fit_2.add_error(axis='y', err_val=sigI) # declare errors on I multi_fit = MultiFit(fit_list=[fit_1, fit_2], minimizer='iminuit') if shared_x_error: multi_fit.add_error(axis='x', err_val=sigU, fits='all') else: fit_1.add_error(axis='x', err_val=sigU) fit_2.add_error(axis='x', err_val=sigU) return multi_fit
T -= T0 # Measurements are in Kelvin, convert to °C # -- Finally, go through the fitting procedure # Step 1: construct the singular fit objects fit_1 = XYFit(xy_data=[U, T], model_function=empirical_T_U_model) fit_1.add_error(axis='y', err_val=sigT) # declare errors on T fit_2 = XYFit(xy_data=[U, I], model_function=I_U_model) fit_2.add_error(axis='y', err_val=sigI) # declare errors on I # Step 2: construct a MultiFit object multi_fit = MultiFit(fit_list=[fit_1, fit_2], minimizer='iminuit') # Step 3: Add a shared error error for the x axis. multi_fit.add_error(axis='x', err_val=sigU, fits='all') # (Optional): assign names for models and parameters multi_fit.assign_parameter_latex_names(x='U', p2='p_2', p1='p_1', p0='p_0', R0='R_0', alph=r'\alpha_\mathrm{T}') multi_fit.assign_model_function_expression('{1}*{x}^2 + {2}*{x} + {3}', fit_index=0) multi_fit.assign_model_function_latex_expression( r'{1}\,{x}^2 + {2}\,{x} + {3}', fit_index=0) multi_fit.assign_model_function_expression( '{x} / ({1} * (1 + ({3}*{x}^2 + {4}*{x} + {5}) * {2}))', fit_index=1)