pyerrors/examples/08_combined_fit_example.ipynb

138 lines
21 KiB
Text
Raw Permalink Normal View History

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "ethical-frontier",
"metadata": {},
"outputs": [],
"source": [
"import pyerrors as pe\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from packaging import version\n",
"if version.parse(pe.__version__) < version.parse(\"2.6.0\"):\n",
" raise Exception(f\"v2.6.0 or newer is required for this example, you are using {pe.__version__}\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "incredible-posting",
"metadata": {},
"outputs": [],
"source": [
"x_test = {'a':[0,1,2,3,4,5],'b':[0,1,2,3,4,5]}\n",
"y_test = {'a':[pe.Obs([np.random.normal(i, i*1.5, 1000)],['ensemble1']) for i in range(1,7)],\n",
" 'b':[pe.Obs([np.random.normal(val, val*1.5, 1000)],['ensemble1']) for val in [1.0,2.5,4.0,5.5,7.0,8.5]]}\n",
"for key in y_test.keys():\n",
" [item.gamma_method() for item in y_test[key]]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "subtle-malaysia",
"metadata": {},
"outputs": [],
"source": [
"def func_a(a, x):\n",
" return a[1] * x + a[0]\n",
"\n",
"def func_b(a, x):\n",
" return a[2] * x + a[0]\n",
"\n",
"funcs_test = {\"a\": func_a,\"b\": func_b}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "45f67973",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fit with 3 parameters\n",
"Method: migrad\n",
"Optimization terminated successfully.\n",
"chisquare/d.o.f.: 0.8085703524653507\n",
"fit parameters [0.97737577 1.01063624 1.47900852]\n",
"chisquare/expected_chisquare: 0.8121288230401409\n"
]
}
],
"source": [
"output_test = pe.fits.least_squares(x_test,y_test,funcs_test,method='migrad',expected_chisquare=True)"
]
},
{
"cell_type": "code",
2022-12-16 18:55:43 +01:00
"execution_count": 5,
"id": "technological-rolling",
"metadata": {},
"outputs": [],
"source": [
"output_test.gamma_method()"
]
},
{
"cell_type": "code",
2022-12-16 18:55:43 +01:00
"execution_count": 6,
"id": "wooden-potential",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"colour= {'a':'red','b':'black'}\n",
"plt.figure()\n",
"for key in funcs_test.keys():\n",
" plt.errorbar(x_test[key],[o.value for o in y_test[key]],ls='none',marker='*',color=colour[key],yerr=[o.dvalue for o in y_test[key]],capsize=3,label=key)\n",
" plt.plot([x_val for x_val in x_test[key]],[funcs_test[key](output_test.fit_parameters,x_val) for x_val in x_test[key]],color=colour[key],label='func_'+key)\n",
"plt.legend()\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
},
"vscode": {
"interpreter": {
"hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}