Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PythonJupyter
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LabMeccanica
PythonJupyter
Commits
005534c9
Commit
005534c9
authored
4 months ago
by
Francesco Santanastasio
Browse files
Options
Downloads
Patches
Plain Diff
updated 2024
parent
67f6cfba
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
NonLinearFitExample.ipynb
+0
-260
0 additions, 260 deletions
NonLinearFitExample.ipynb
with
0 additions
and
260 deletions
NonLinearFitExample.ipynb
+
0
−
260
View file @
005534c9
...
...
@@ -870,266 +870,6 @@
"print (\"Rho[tau,T0] fit\", COV_3par[0,2]/(np.sqrt(COV_3par[0,0])*np.sqrt(COV_3par[2,2])))\n",
"print (\"Rho[Tm,T0] fit\", COV_3par[1,2]/(np.sqrt(COV_3par[1,1])*np.sqrt(COV_3par[2,2])))"
]
},
{
"cell_type": "markdown",
"id": "c7cd5a88",
"metadata": {},
"source": [
"# Fit integrando la posterior"
]
},
{
"cell_type": "markdown",
"id": "7cffbbf8",
"metadata": {},
"source": [
"### Esempio con 2 parametri"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "9396f526",
"metadata": {},
"outputs": [],
"source": [
"# Assumo prior vaga (costante) --> posterior ~ likelihood (a meno della normalizzazione)\n",
"def posterior(tau,Tm,T0,Y,X,SigmaY): \n",
" Yexp = Tm-(Tm-T0)*np.exp(-X/tau) # modello di fit\n",
" #print (Yexp)\n",
" return np.prod( stats.norm.pdf(Y, Yexp, SigmaY) )"
]
},
{
"cell_type": "markdown",
"id": "7f6b8da3",
"metadata": {},
"source": [
"## Grafico della posterior"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "1de92ec0",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ8AAAEWCAYAAAC5XZqEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAABL+0lEQVR4nO29e3xlVXn///5MMoFJMgEnYS7MBEFKEaSKgmDFVqxaEa2oLS2oFKwWbYvVfp1WpGJR2v6oHRWrVkREtCLWKlSKVEtRRNuiXBzlMiJXSZhhhkScWwKZzDy/P9bayTo7+5yzk5yTy+R5v17ndfZlrbWffXKyP+d51rPWkpnhOI7jODPJotk2wHEcx1l4uPg4juM4M46Lj+M4jjPjuPg4juM4M46Lj+M4jjPjuPg4juM4M46Lz16KpDdK+q/ZtqMISSdK6p9i3YMlmaTWKufPk3RZUVlJ/ynpzKlbXtOusyR9vxltJ9e4RNL5DWpLkj4n6QlJP2xEm5O4dtP+Ds78ofAf2Jkckh4GVgC7gZ3A9cA7zGzHFNu7APgVM3vTVG0ysyuBK6daf75iZn9f49wrs21JZwFvNbMXzYRdjcDM3p5tSzoR+KKZrZlicy8CXg6sMbOd07eumKLvcvp3cBYu7vk0jt8xs07gecDzgffNliHVvIKSdSVpWt+L6VzfmTGeDjzcTOFxnJqYmb+m+QIeBl6W7P8jcF3cfg1wN/BL4CbgiKTce4BHge3AvcBLgZOAEWAXsAP4cSy7H/BZYFOs87dASzx3FvA/wEeBX8RzZwHfT671QuBWYGt8f2Fy7ibg72Ibw4RfqkX3+F7gHuAJ4HPAvvHciUB/vJ/HgH8B9gEuBjbG18XAPrny5wEDse03Jtd6FfAjYBvQB1yQnDsYMODs2O4m4N3J+QsIHkFatjW5z7cCRwBPEjzVHfFv83xgc1Y2lv9dYH2Vv3k3cG208YfAhbnP+5nADfHvcS/w+8m5K4BPAt+If/sfAIfGc4p/xy3xb/UT4Kik3t8CHfHvtCfavwM4EBgCupPrHAM8DizO2f6W3P1/gNz3JZaz7LtQy+Z4/lnJ/W6Of9tq3+WbCF4nhB/A7wN+Hu/5C8B+ub/fmcAjhO/KX8/2/7u/GvOadQP2hheJ+AC9BLG5EPhVQhju5cBi4K+A+4E24HDCg/XAWO/g5AF0AfEBmlzj34FPxwfP8vjAe1s8dxYwCryDEEpdkj5MgGUEwTgjnj897nfH8zfFf+5nxfOLq9zjXfH+lhGE6m/juRPj9f+BIDpLgA8Ct0RbDwD+F7gwV/4jsfyL4+d0eHL+1+KD6dnxYfba5HMy4Kr4Wfwa4QH7svxnRxXxST6z/MP2HuCVyf41JMKWK/tl4CvRhqMIPwiyz7sj/m3fHD/P5xEenM+K568gPKSPi+evBL4cz70CuB3YnyBERwCrknrpZ96fs+l64E+S/Y8CH69if8X9V/k88uJTzealxB8BwL5x//ga3+X07/BHhP+JZwCdwNXAv+T+fp8hfKeeAzxF8gPOX/P35WG3xvHvkn4JfB/4LvD3wB8A3zCzG8xsF7CO8E/0QsKvzn2AIyUtNrOHzeyBooYlrQBeCbzLzHaa2RbCg+W0pNhGM/u4mY2a2XCuiVcB95nZv8TzVwE/BX4nKXOFmd0dz++qco+fMLM+M/sFwVM6PTm3B/gbM3sqXv+NwAfNbIuZPU74dX1Grr3zY/nvEn5R/z6Amd1kZnea2R4z+wlBaF6cq/uB+FncSfDCTmf6fB54E4CkZQQh+FK+kKQWglf0/mjDXbFuxqsJIa3Pxc/zDuBrwO8lZa42sx+a2SjhQX50PL6L8PB+JiAz22Bmm6ZgfwvhM/mXknXLUM3mVwOPmdmHzexJM9tuZj8o2eYbgY+Y2YMW+kjfC5yWC91+wMyGzezHwI8JIjQjSLpc0hZJd5Uo+/8k3SPpJ5JulPT05NxuSevj69rmWj0/cPFpHK81s/3N7Olm9qfxAXwgIZwAgJntIfwiXm1m9wPvIvwy3CLpy5IOrNL20wme0yZJv4wi92mCV5HRV8O2CjsiPwdWl6xfVObnsd2Mx83syRrXzJd/wir7G8bOSzpe0nckPS5pK/B2oGcStkyVLwK/I6mTIITfq/LgP4Dw6z9vQ8bTgeOzv1X8e70RWJmUeSzZHiL86sfMvg18ghDi2izpUkldJe3/OuHHzDMI3vZWM2tkJluhzQRvuPCHUwmKviethASeetedCa4ghA/L8CPgWDN7NvBV4EPJuWEzOzq+XtNgG+clLj7NZSPhQQSEznzCP+qjAGb2JQvZVk8nhBf+IRbNTzXeRwg39ESB29/MuszsWUmZWtOTV9gROSizo0T9jN5c/Y016uevmS//NEkdVc5/idCf0mtm+wGXEEJQZW0pw4T7NbNHgf8DXkfw0qp5DY8TwoZ5GzL6gO8mf6v9zazTzP6klGFm/2RmxxDCoL8K/GVJ+58khALfWMf+InYC7dmOpJU1yubpAw6tcq7e96roezJKCLXOOmZ2MyHcOIakQyV9U9Ltkr4n6Zmx7HfMbCgWuwWYaibigsDFp7l8BXiVpJdKWkyIiT8F/K+kwyX9lqR9CJ2/w4RQHIR/vIOzrLP46/u/gA9L6pK0KP4D5ENR1bge+FVJb5DUKukPgCOB6yZ5P38maU0MSZ0H/GuNslcB75N0gKQe4P0EzyLlA5LaJP0GIXTzb/H4UuAXZvakpOOANxS0f76kdknPIvSt1LKliM3AGkltueNfIPTN/Rqhz2cCZrab0DdxQbThSEKneMZ1hM/7DEmL4+v5ko6oZ1Qsd3z8vuxkPDGgyP5uSfsV2H8WIdEl/3nX4sfAsyQdLWlfgkdeluuAlZLeJWkfSUslHZ/YOfZdLuAq4C8kHRI9zr8H/jWG9uYqlxKGUhwDrAX+uaDMW4D/TPb3lXSbpFskvXYGbJzzuPg0ETO7lxCD/zihw/l3CCnZI4T+novi8ccIIbTzYtXsITwo6Y64/YeERIUs2+yrwKqSdgwSHu7vBgYJD9dXm9nAJG/pSwQRfDC+/rZG2b8FbiNka90J3JEr/xjhPjYS+g/ebmY/jef+FPigpO0E0fpKQfvfJXRU3wisM7PJDqj9NiEx5DFJ6edwDeGX+DVWOw35HEL45zFCaOZz2Qkz2w78NqFPbmMskyVj1KOL0MH+BCEENUjoK6wgflZXAQ/G0N6B8fj/EPrf7jCzh0tcL2vvZ4Qkkf8G7iP0XZatu50Q5vsdwr3eB7wkni76LqdcTvDQbgYeIojtO8pee6aJAvlC4N8krSeEv1flyrwJOJaQ9ZpxkJkdS/ghdbGkap7igkFmvpicU584kPatZvbfs21Ls5H0ACGTcF7eq6RvA18ys8tm25a9AUkHE4ZOHBX73+41s8IffpJeRvix+eKYGFRU5orY3lebZPK8wD0fx0mQ9LuEfopvz7YtU0HS8wmp3ZMNQzolMLNtwEOSToWxQdnPidvPJXhCr0mFR9LTYnidGII+gRDBWNA0TXwk9caMpQ2S7pb0znj81Li/R9KxVeoenqQlrpe0TdK74rllkm6QdF98f1qz7sFZWEi6CfgU8GcxM3FeIenzhLDZu2IozJkmkq4iJKEcLqlf0lsICR1vkfRjQuj2lFj8Hwmh2H9TZUr1EcBtsfx3gIvMbMGLT9PCbpJWEQbH3SFpKWHg3GsJvyr3EH4hrDWz2+q000LIyjrezH4u6UOEzuiLJJ0LPM3M3tOUm3Acx3GaQtM8HzPbFAfXZR2SGwjjWzbEjviyvBR4wMyysQCnMD6g7/MEQXMcx3HmETMyAWTssHsuYT6oyXIaIasnY0U28M/MNklaXlRJ0tmE+b9YvHifY1asaMQYxEoWL17Erl3zKzrjNjef+WYvzD+bm2lvf/9DA2Z2wHTa+FWp1IytG+FbZlZ2EOteRdPFJ6Ymfo0Qh942ybpthPEK753sdc3sUkI+PtJq6+9/y2SbqMu6dYeydu1UB3bPDm5z85lv9sL8s7m59r4vPxvIpNlJGC9Q90oTZ+5YMDQ12y0OlPsacKWZXT2FJl5JGK+QjnbeHPuTsn6lwnRGx3EcZ+7SzGw3EZYA2GBmH5liM6dTGXKDMO1KNpr8TMJ8Vo7jOHOGFsJo4XqvhUwzPZ8TCPNL/VaSMn2ypNcpLKH868A3JH0LQNKBkq7PKktqJ4yazntMFwEvl3RfPH9RE+/BcRzHaQJN6/Mxs+8zcTLIjAlzZpnZRuDkZH+IsGBXvtwgIQPOcRxnTtJCmKDQqY7PcOA4juPMOC4+juM4cxjVWdBO0hsVFrD7iaT/zab7qVVX0gWSHk27RJp9H3lcfBzHcRpMgxMOrqD2gnYPESYyfTZwIXGISYm6H00WuLu+Spmm4eLjOI4zhyla0C53/n/N7Im4W7GIXb26s4mLj+M4zt5DfhG7WpwTQ3WXz8YEzS4+juM4DWYRpcNuPXGF0+x19lSvKeklBPEpM9HypwhLnx8NbAI+PNXrTpUZmdvNcRzHKWQgrnA6LSQ9G7gMeGUcjlKTdNYYSZ8hLIU+o7j4OI7jNJiZHOcj6SDCYPwz4nLoZeqsyiZoBl4HFGbSNRMXH8dxnDlMXNDuREKIrh/4G2AxgJldAryfMCD/n8OsZoxm3lRRXTP7LPAhSUcT1ld7GHjbzN1RwMXHcRxnDmNmp9c5/1bgrZOpa2ZnNMC0aeHi4ziO02CycT5OdTzbzXEcx5lx3PNxHMdpMO751Mc9H8dxHGfGcfFxHMdxZhwPuzmO4zSYRYKl+5Qo+GTTTZmzuOfjOI7jzDju+TiO4zSYlkXQ1VGioHs+juM4jjNzuPg4juM4M46H3RzHcRpNC1Am7FZ3/um9F/d8HMdxnBnHPR/HcZxGs4hyns8Cxj0fx3EcZ8Zx8XEcx5nDSLpc0hZJhQu+KfBPku6X9BNJz0vO/YWkuyXdJekqSfvG48sk3SDpvvj+tJm6nwwXH8dxnEaThd3qvcpxBXBSjfOvBA6Lr7OBTwFIWg38OXCsmR1FSIM4LdY5F7jRzA4Dboz7M4qLj+M4zhzGzG4GflGjyCnAFyxwC7C/pFXxXCuwRFIr0A5sTOp8Pm5/Hnhtww2vQ9PER1KvpO9I2hDdvnfG46fG/T2Sjq1Rf39JX5X009jGr8fjF0h6VNL6+Dq5WffgOI4zD1gN9CX7/cBqM3sUWAc8AmwCtprZf8UyK8xsE0B8Xz6D9gLNzXYbBd5tZndIWgrcLukG4C7g9cCn69T/GPBNM/s9SW0E1c74qJmta4rVjuM406V8tluPpNuS/UvN7NJJXk0Fxyz245wCHAL8Evg3SW8ysy9Osv2m0DTxiWqaKet2SRsIanwDgFT0eQUkdQG/CZwV648AI82y1XEcZ5YYMLOqEaCS9AO9yf4aQnjtZcBDZvY4gKSrgRcCXwQ2S1plZptiiG7LNG2YNDPS5yPpYOC5wA9KVnkG8DjwOUk/knSZpPR3xDkxq+Py2cjScBzHqUljEw7qcS3whzHr7QWE8NomQrjtBZLaFX7tvxTYkNQ5M26fCXy9YdaURGbW3AtIncB3gb8zs6uT4zcBa83stoI6xwK3ACeY2Q8kfQzYZmbnS1oBDAAGXAisMrM/KmjjbELmB/vt133M+ed/ouH3tmbNPvT3P9XwdpuJ29x85pu9MP9sbqa9a9eefvt0vZFj95Pd9qL65XQ9da8l6SrgRKAH2Az8DbAYwMwuicLyCUJG3BDw5uy5KukDwB8QukF+BLzVzJ6S1A18BTiIIFKnmlmtpIaG01TxkbQYuA74lpl9JHfuJqqLz0rgFjM7OO7/BnCumb0qV+5g4LqYRljDjtUGfzqNOylm3bpDWbv2gYa320zc5uYz3+yF+Wdzc+1935wSn72VpvX5RDX+LLAhLzz1MLPHJPVJOtzM7iW4i/fEdldlWRrA6wgJDI7jOHOHshOLLmCame12AnAGcKek9fHYecA+wMeBA4BvSFpvZq+QdCBwmZllqdPvAK6MmW4PAm+Oxz8k6WhC2O1h4G1NvAfHcRynCTQz2+37FKcAAlxTUH4jcHKyvx6Y4I6a2RkNMtFxHKc5+MSidfEZDhzHcZwZx8XHcRzHmXF8PR/HcZxGswjonG0j5jbu+TiO4zgzjns+juM4jcZTrevino/jOI4z47j4OI7jODOOh90cx3EajY/zqYt7Po7jOM6M4+LjOI7jzDgednMcx2k0Hnari3s+juM4cxhJJ0m6V9L9ks4tOP80SdfEBTZ/KOmo3PmWuCjndcmxCyQ9Kml9fJ2cb7fZuOfjFNDVgDa2NaANx5mnNMjzkdQCfBJ4OWG57FslXWtm9yTFzgPWm9nrJD0zln9pcv6dhBVM8//YHzWzddO3cmq45+NEupJXo9trZLuOs6A4DrjfzB40sxHgy8ApuTJHAjcCmNlPgYPjis9IWgO8Crhs5kwuh4vPgmcmhcHFyHEmyWqgL9nvj8dSfgy8HkDSccDTgTXx3MXAXwF7Cto+J4bqLpf0tEYaXQYXnwXNbAuAC5Gzl5JNr1PvBT2SbkteZ+daKloTzXL7FwFPi4t2vgP4ETAq6dXAFjO7vaCNTwGHAkcDm4APT/IOp433+SxYpvPAX1qizPZJtpna4/1FzoJhwMwmLJqZ0A/0JvtrgI1pATPbRlzpWZKAh+LrNOA1MZlgX6BL0hfN7E1mtjmrL+kzwHXMMC4+C5LJCk8ZsSlbp4wouRA585zGpVrfChwm6RDgUYKgvCEtIGl/YCj2Cb0VuDkK0nvjC0knAmvN7E1xf5WZbYpNvA64qyHWTgIXnwVH2UjrVARnKu3WE6MuPDrsLFTMbFTSOcC3CMG8y83sbklvj+cvAY4AviBpN3AP8JYSTX9I0tGEEN7DwNuaYH5NXHycAiYjPGW8qFreS1kxcm/IWZiY2fXA9bljlyTb/wccVqeNm4Cbkv0zGmrkFHDxWVCUEYp6wjOVvqJqdYpEJL1+PSFyEXLmKD7DQV1cfJyEasIzGcEpKltNJPJl8+Uye1rq1HcRcpz5houPE5ms8ExXkDJS4aglRpl9Rd6Qh+ScOYZ7PnVx8XFqUCQatYSkbF9RKiC1BCc7lw5rqBeWc2/IceYDLj4OxaJRVnganYZdJEYtFItKGW/IRchx5iIuPk5J8qJQVrDKsq2gzUyMhoHOWKYoxFbLG3IRcmaBFsJX1qmKi49TQF5E0v28QDTCG6rm8WTtPFVwrVSIynhDLkKOM5dw8XHqUMubqSVK9epOhieY6N2kYlLLG3IRcmYBTzioS9OGjkvqlfQdSRsk3S3pnfH4qXF/j6SqcxpJ2l/SVyX9NLbx6/H4Mkk3SLovvs/4bKwLl1QAqglP0WShRcsrpK81BcdWx3aXMt7nk72WJq/89fLXzsrl8QlNHWc2aea8JaPAu83sCOAFwJ9JOpIwh9DrgZvr1P8Y8E0zeybwHMJiSADnAjea2WGENSwmrOznTIdqD+R6wlMkAJN5wNcSpxaqC04qLlMVIcdxZpqmhd3ipHWb4vZ2SRuA1WZ2A0CYfLUYSV3AbwJnxfojwEg8fQpwYtz+PGHKiPc02n4H6me8Lc0dq/EgXzKJyw7nr7WI4B2VCZVVC8nVCsd5KM5pMB52q4vM8ktDNOEi0sEET+eoONsqkm4izLJ6W0H5o4FLCZPkPQe4HXinme2U9Esz2z8p+4SZTQi9xXUxzgbYb7/uY84//xMNvitYs2Yf+vufql9wzrCINWsW09+/K3e8pcT2otyx/HuBE72oynZZ4vJXa1bvoL8vnzqUrY21u8p7UZn8dtF+Wm9qzL/vxfyzuZn2rl17+u11ljmoy7HPkd32zfrldCDTvtZ8pekJB5I6ga8B78qEpwStwPOAd5jZDyR9jBBeO7/sdc3sUoKAIa22tWsfmJzhJVi37lCa0W4zWbfuMNau3Zw7Wi2k1llQpqtgP+fxpF5OR654UdMpO3L722Hd+25i7UUnws54bDhXZsxj2TZeqeq+cufS89XanRzz83sxv2yeb/Y6E2mq+EhaTBCeK83s6klU7Qf6zewHcf+rjPftbM7WopC0CtjSOIudcuSFKCETnrzopGJTa/xDem5H3F/MeJfN9th2hRClYb8ygpEPx9XKjPNQnDN5bBGMetitJk0Tn7ii3meBDWb2kcnUNbPHJPVJOtzM7gVeSgjBAVwLnElYOvZM4OsNNNuZkLqcUrJzvprwdObOkyuXsj0ptxhYmWtjR1JughA1UoS8P8hxmkEzPZ8TgDOAO+Pa4gDnAfsAHwcOAL4hab2ZvULSgcBlZnZyLPsO4EpJbcCDxGViCaLzFUlvAR4BTm3iPeyFFPVnbGfqi8clgpSG25ZSXXSKvKE86blFjIvP9uT8juQ99YgmiFA9McqXcRFypseeFjHUsbhEyZG6JSSdRMj+bSE8Iy/Knd8P+CJwEOGZvs7MPhfPXQ68GthiZkcldZYB/wocTFhM7vfN7IkSBjeMZma7fZ/xAHueawrKbwROTvbXAxM64sxskOAJOU2nlhdUhQ4qdayTStHJCxLUzwqq5/l05o5XeEP58UZlPaLMYA/FObOHpBbgk8DLCd0Rt0q61szuSYr9GXCPmf2OpAOAeyVdGbOErwA+AXwh13Q2ZOUiSefG/RnNGvYZDpxJMAkxSgUBJgpPUSJCNU9oH4o9n+y9SIgmeEP1RGg7lZ4SeCjOmQMcB9xvZg8CSPoyYbhJKj4GLI1dHZ3ALwjjLDGzm2O2cZ5ZH7Li4rMgqSciU/B4qo3jyTyhvPCkobd6yQiLgV8hCMpKxsUmE5gVBIFJRaeaN1RVhPKCVFaEXICciexhEUMtZQa3jfRISoebXBozdTNWA33Jfj9wfK6RTxD6wjcSvqh/YGb1xgusiGMxiclby0sY21BcfJzIdPp9SpIKTyoO9QRoJ7B/3N5R8L6DiQkI2bEib2iCCNWiqD/IvSCnYQzUGedT1HWRH5z5CmA98FvAocANkr43iaEts4KLz4KlrHdTVK6kUOWFJr9fJD5F4bhHGA+7ZZfPvB2oFKAi76euCNUSlzzuBTn12cMihmkvUXJrvQL9QG+yv4bg4aS8GbjIwowB90t6CHgm8MMa7c76kBUXHychFZW86NQRnGEqQ2/1MtnSV0VCwigAbZ1DY8W1aQ9tK5MH+0oY2RH/sXe0jpuXejzpazuwmUmKUEq+P6ieF+Q4DeNW4DBJhwCPAqcBb8iVeYSQhPU9SSuAwwkZwrWY9SErLj4Lmin07RQuYVCyjbTvp/DcKG2dQyyJwtPeFqYyaGsZoXdZX0XxoWVBfIZGguIN72gPgrSjdaIQPca4TuyM+6VEqJ4nU80LauZ8vc5CwsxGJZ0DfIuQan25md0t6e3x/CXAhcAVku4khOneY2YDAJKuIiQW9EjqB/7GzD7LHBiy4uLj5CjyfrL3vPdTQ3h2UJlCnW7nvZ5V46KTCU47QywhiFAro3QzWNF8tj/UtiSEN5YNMrSsnaGRJROFKBOYTIiyDLi8CG2KjVfMmgCVHs5kvSAPxS1E9rCIoVJht/qY2fXA9bljlyTbG4HfrlL39CrHZ33IiovPgmcq3g80JEEhNyaovW24QnR6osAE8RkIZeLEbkMxxtcNY7H1IdqDGC1rrxSiVe2wqbUyI66aCGXbdUNxeYqWAWcS9R1nYeHi41C7fyfv/RSVryJgO5Nm0u0cY15PFJ52hiu2W9mHHp4YEyUIopNRIT5RlIZpZ6Cte0yIBju7gzfUUUWEsj6hdLtQhIoSEvJeUEvuvAvQQmMPGvsuOsW4+DiTJBWm7CEchSedbbozKVIz+SAkGIyH24YniNAiFtPNIEvj9doTEQIqwhvbWcoQIRTXzSBDLGGQHrqXDTC4rIehlUvY+lgPrGwNwpOJUKYpm+N2eu4xCkJxtTA8DOcsZCR9ysz+pFYZFx8nMl3vJ0eW9pzfrkHm2WTC081A9Hw6WMHmsfPtuTUV0v6gTHiGaB8Toh4GGaA7vLd103PQIAMj3WztrCJC2f4mKkW0ZkJC2heUeT6eku3s/Uh6kJDokI4/Wi3pROBTZvZPRfVcfJwaVOvXKfJ+ALqCh5AlF+STDqp4QUuStOr2MYEJArSU7Sxiz4RwXCgzYWGfirBbFoYbpp3NrGCIJVGCuuluG2QwFaE0HJcKTz4sV9ULSkVlmEqRLvKCXID2Zqz0OJ+9gqJBst8BXgP8J+Di49SjljdTlPlGcfls8GdnbruDysGgkeEd7bQvGxeSVFRC2G0PPQxWCBBQKELVxCcNwW1meegTopvutp4gQiu7Qziuo7UyBTsTnuweMmGq6QUNU/lZFaVkexjO2WsYBn4TOIIw2m8TYQ23n0u6vVolFx8nx1TCbymJ95NNeZNtdyZNjc1G0FrsDTE01sdT5PnkvaCMfCJCKkADY37PQOgHYpDBGJKbIEKbWoPoZDanmXCZ/VW9oIEqnxm4F7QwaGSq9VwlzqB9HvAywvQ+9wFPAs8CnifpFOBD1eq7+DglKBN+y5H3fpZSPOlnHVJxycRmzAvaPUz7zrAeSuvOiXVHO7Yy1NHGUEul9xMkKIjOCjazmRX0ZWLWNkT7QcMhO25p18QxSWlCQvYRTJgrroXaHqQLkLNXcDzwH2b2F0UnJT2NsNxD4ewJLj5OAZMJv2XHUrrGM9/yyx3kp8DZDiOd7Qx1DtHe1s4QwxMGlC5iD+0Mj3k8mfB0bRkZF7mduesBrZ3QxQhdHSPQsZXRDhjo2m8sAaGbnihGIZNuM8vHhWlZN32dveP9QZkApcIzoS8oC8P9jEpRLhqY6tlwzvzGzK6rdk7Sr5vZ/wF/W61MTfGRdG0JG35hZmeVKOfMK8qG36B6VldyqGjdnST0NrwjzFIAod+mvUrIYiwhYWcUnkzM8iIE41MldoRXK7ByxVbo2Er38kGGWvoYjGLTzQB99I71CS2hl/a24fFQ3P0ri72g7N6y+xqAML1OGfH2bLi9lRB2WxjjfCS9kDDnXPqL6zVRP/7dzKbk+RwBvLXWdQmr7Dl7JWUnF62SfJB5P2nIDSqnu8mOrwzjdYJ30w4Msp2lE8b0ALTvHg5htlR4MqHJjqd0JO9bwnvXiuAR9SzfykBX6A3qYZA+esdSvLPQ3JK2XtqPHGZTZ+9ELyjrC8ruC+LUbpkX1F/weWV4P5CzV/AZ4B+p/NL+JnAdcG+1SvXE56/N7Lu1Ckj6QFkLnb2BTICqZb+lxPBb0eqjOe9n5LGusdAbDI4JEYRfkVXZSaXgpCKUpyN5bQGWQ+vm4A1lIrSEoQoh2syKMSFqP2iouheUzg23mJDzMwxhBvxqY4IyvB/Imdc8aWZXpAckvc/MvlarUj3xuVbSAWb2eK7h5cA2M3vSzL4yJXOdeUID+n/S5AOoXHcn8X6Gd7QztGw4eBvRAxqifSyEkXlEE0iFJ/WI0nMw7gFlgrGcMSFqXT4uQn1dq8ZsyPqDHuZgljBU3QvKWEqM75GE4Yo+v7L9QC5A85Hy6/nsFfxewbHfrVepnvj8E/BN4Orc8ZcDLwJqTp/g7C2U6f/JH0+olnyQziyQ835C7tkw22N7w4x7RPmEBKCyzycLxRX1AyWhNzYTFqWLXlAmQoc8YxPdywdpb4keT0zYzrygPoZpP2iIvs7ekBGXkSUjLCaITyZKdVdO9fFAzrzmtyVdSPjPOwu4kzBj9mW1KtUTnxeZ2dn5g2Z2paTzpmioMy+p1/8zyfDbJmAV46EqgA7Y+lgP7QeNez+DdDNKa3z8h1DcUMsS2jtGJn5588KTD8ml5MJvY+/LQ/muFSMcfsgDY6G41AtqZ4g+elmybGg8I+7+xAvaB/iV5N4mZMP1M9HL8fFAexONHOcj6STgY4Qc/svM7KKCMicCFxN++gyY2YslHQ78a1LsGcD7zexiSRcAfwxkUa3z4tINU+E9wJGEn1z/bGa/Kelspik+ReuHZ/iKWQuOagJUsv9nINldycTw22aAVgY7u2lfNsQgPbQzzB4WMUj3mAcyTDtDHcMxhbqKqfUEKJ+EsJxK4doS+4OesZX2Q4bpaQl9QOPDVofGMuL6DhpmE0kYbpjgUWVMyIbL+oFq4WE4ByS1EJK6Xk741XKrpGvN7J6kzP7APwMnmdkjsVsEM7sXODpp51HgmqT5j5rZugaY+TCw1cwGoi0QRLAm9cRni6TjzKxiLXBJz2dcMZ0FRVkBysqm5Pp/HmMiMfw20NkNbSG1epQdY55P5hEtaRkK4pP132SvlER4tsXrbn8ynhuEpftGq7J1fbYwLkQrGPeCdo7QtXwTS1YNjXlB2ZijbHBqRRjuPuAwJmbDZXg/kFOe44D7zexBAElfBk4B7knKvAG42sweATCzLRNaCWGwB8zs502w8U7gG5KuBDpiCO7+epXqic9fEpZavQLI5ug5FvhDQl634yQUhY5yD8qs7yMLu2X9P2k/EMQZp2FJ2xCjPMlmlld4PoP00L58mK6dI5XCk84nl1m1c1x0Umu2xWPbn4SlOwtE6BmMC9hyWLkzeEHtLcNxep/hsWQEYCwMxyOEsFsRdfuBXID2BiYxzqdH0m3J/qVmdmmyvxpI15DvJ8wskPKrwGJJNxG+LB8zsy/kypwGXJU7do6kPwRuA95tZk+UMbiApdGuFxOW+34M+Lt6lWqKj5n9UNJxhCkSzoqH7waOr6KuzoJgqgNQc+v+JLMRVNAJbGpluLOdwWU9jLJ5LASXeh5DLUuC97OC8DAv8n5yVmdW5XtbeBK6noTVqQhF0Unfu3aGvqD2rqExMUzDcLRByz6jcOgoUJANl114bMnuySQiuADthQyYWdGs0BlFXR+W228FjiF4N0uA/5N0i5n9DEBSG2GG6fcmdT4FXBjbuhD4MPBHU7kBM5tSvbrT60SR+ZupNO7szUxGgMjtxwSExxjPCksTD+LDeoQuBg+DUVrH+nzyjHk/mUjspFKMcl5Q9viu8ICSc9tSEUr7ixIvqHVHyIgrCsO1M8y+2o9VB/WN9wNlpLMiQC4RISXNenMBmo80MNW6H+hN9tcAGwvKDJjZTmCnpJuB5xDmeQJ4JXCHmY19+9JtSZ8hDAidErGP6Y+Bg0k0xczeXKtevel1Li3KditTRlIv8AXC42UPwZ38mKRTgQsIsyccZ2a35evG+g8T/tN2A6PZr4MGZ2k402IyKdh5chlwaQJC0kcysrSLUWulj1Vjx0LGWXjQ97UM03tIH12MVCYXJP1AXR1JX0/O+qK7yURozSNBhMbaPCQWjPtZGC6/anYbS+ilDw4iTFBKV/WJVFdSkAlXZGmtVGwXoL2YW4HDJB1CSBg4jdDHk/J14BOSWoE2Qljuo8n508mF3CStMrPsJ9/rgLumYePXge8SQm57ylaq5/m8VlLBv+0YAl5S5dwoIY54h6SlwO2SbiDc5OuBT5ew7yVmNlBwvFFZGs60mWYKdtFfN6UTdo+0MjDSzZK21MtIXi1DtC/fND7lTn6MT0fo09n25ETfIW/V9twdbRus4gWN3cEIhx/ys4p+oH05iMO5N6RkL+ul77DeIEDxfiYwJkAwngn3KJWfa61UbB8LtLdiZqOSziE82FuAy83sbklvj+cvMbMNkr4J/ITw8L/MzO4CkNROyJR7W67pD0k6mhB2e7jg/GSQmZ072UplEg7q8b2ig1FVN8Xt7ZI2AKvN7AYAqVYWtzO/mGYKdq0MuDiH2tbHQgICbcUWLOkaYuXyrZXp0jsY76uJ3k+1x3O149shrFCyJZeflohR1g+UFdjBCAfz8HjZZQQBWpoPryX3CAXrA1XzzXws0FynkeN8YmTn+tyxS3L7/0iYXy1fd4jKZa6y42c0xLjAtyW91sz+fTKVZJbvu2o8kg4GbgaOMrNt8dhNwNoaYbeHgCcIyvzpLAMkht3OIvyXVc3SiIOczgbYb7/uY84//xMNvSeANWv2ob//qYa320yaa3N+6FdLlfdFcTt7LQqHFhFGB2Tv8bVmyQ76WzphH2hZPEqbRmhj/LUvT45tt+7aDSPAU8lrBNgFjMKu0fHd3fEFxbGCzMq2uN0GLM4CG4sJg0nb4nt8jSxazPCOA9nVuYNKK9sY2d2G7VoUbNoVX9n27mAfu1Jj9iRW7k72Sd7z29Xupjbz7bvcTHvXrj399jpJAHU58NhV9tbb6vfDX6i/n/a1ZhtJ2whB7l2Efy8I2lJlsa9A09fzkdQJfA14VyY8JTnBzDbGzqwbJP3UzG6mZJZGFKsoWKtt7doHpnknE1m37lCa0W4zab7N+V/3S5Pje5LzS+N29t4V8nQ6CCnYnQRPZyWse/FNrN19Yjh36CirDuqjlz66GeBwHuRgHqKXPg4gHF+5aWsYefA48BChk/8hYAtsewgefTIEtbYBQ4yH2qrdTWZhDyEotrqb0P+znBCCOyS+DoTRQ+Dbd3yMp514JfdyOH308jAHR8tW0PeLXkYe6wqjIH5B8HbuZzz5IHuNrQye5ehtz70rZ3Xeq5ycBzTfvstz3d7dtIxNDbW3Y2a1Ujar0lTxkbSYIDxXmll+friamNnG+L5F0jWEwVY3NzJLw2kG0wjB5ccAZSG4p0j6hlpDFtlBYa9wvvZVsJKthdZ1ZeN4SiQgVDvGYBh8UUQr0LZnV0g4KGIZ9JH0AWVkS3SvTPYLl+hOLfMQnDO7SHoV8IMqffM1aZr4KHTqfBbYYGYfmWTdDmBR7CvqAH4b+GA818gsDacpNFiAdpEbLz1NAYIJApQO7Swi7drvh5oCxL7Qu20TdFEc968mQDsI9+0C5MwfDgHWScLMjphMxVLiI+lY4K+Bp8c6AszMnl2j2gnAGcCdktbHY+cRouMfBw4gTMmw3sxeIelAQpbGyYSRGtfEpIRW4Etm9s3YRiOzNJym0UAB2sW4FzQ2MHVcgLKR5EMsqRxbkQlQwfQ7XR2EUNyTlcnh6Xu1u8rel+6ErnS11IxnQOtD0H3UIL0tk/CA0gGoLkDzmoWykqmZfQKo2qEuaZmZ/aLoXFnP50pC5tudlOzNNLPvU31i0mvyB2KY7eS4/SBhkFRRu43M0nCaSoMEaJTieeCiAA2tXDIhCy5LfGbVvcUeUEfsadoCj8YVGopG2eR7VdI8tK40Cy6dqPQgYDN0dYzQe0jfhHFAY2QCtL1AWDYx3u9VIUDpWJ/UShcgZ05yI/DcohNlxedxM7u2cfY4C4daApRRQ4CGCclcReKzA6CVrTtWhrnUqqRhD6/qo7djE63pJKQPxZMdsLoDeKTSq8k/qvOP+7EkhSeTfqRsBoNd4/tdHSN0rxognQthO0vHRykta2fwMMY9oKIphyaMA8oksuw4IHABmlkW2GJytaiaTl1WfP5G0mUEFRvLb5xsEoGzUKk3EwLUHAc0WuVUxg7YShCg4bb2Ma8nHYpKF/QesqnyC98BPBjeVwNLtwRvpp+JU3vWvLudOQEapWLO95VsJZmgYSLLYNOqdqC1+nx3EzwgGP9Qas2rV+uDc5zpI6na9GtGjW9+WfF5M/BMwuiGLOxmTFzh1HGqMB0BongmhNyDeisrGV7ZDsuKmxjqaqf3qL7xdYAeokKAuraE19ItIR07e3TnZqUDJnpCwPjA092MC9EWoBN6OrYy3DUujMPJdKRDLGFo5RK20gM7WyvbSy+UhfZKzwWXx70fpynU+oWTH4Q2RlnxeY6Z/drk7HGcPGUEqIj4e2eA8dkQdjC+YNt2xoRoZHsXfYf1MrRs3OsJYa74kG9ZQu+v9LGyY2ulAGXvcS64ri3jSzEU9bJUZWc0N/WEdkDrFujuGGSopdIjG+ubagNWEkKI2f2tzLWbrvxaKEDgyzHMDRo5w8Fcp1Y2s6SqffRlxecWSUemq+c5ztQoMxlp/uE4QgiGramcDbuIHaH/ZNOq9rFMuOyVeh0V/UCbCSKxnDEvaMwT2hmz2grWA6o5si6Z2ifzftp3jtDdVb3/p6dtkOGV7aH/pyj89ljyUVXNgPP1gJw5xdT6fCS1mtko8CLgzDjlzVOUS7V2nCrkg1hp30WRAO2OZWJvzHBXeBCn6c3ZnG7ZQ3tnZSZcUT/QWBhueS4Mt4UgSHFRua5kYtGluSUauopWUc0C0+lkpNH7ae8Ii9H1MDgh/AYwtKydTTvaYUXr+H11ML5i68qkbRcgZw4g6elFx+OqqcdVq1fP8/kh8DzgpKmb5jjVKJOKDeFpnntQZplwMDFElR3b0crWXwn9QMPLwnibfBhusKWb3swLWkHwfLJwWSfBe9lCMokoE9YIGqPGQnZZ/fadI7R3DTHEkjH/ZwVbxoSom4HK/p/8fVVNwc5TFIZ3AZopFso4n8h/EB0SwjjOQ4AHgCOi81JIPfERjCmY4zSBMgK0mNJLMmT9P7l+oAdWHc7QQe300lcRhhtkcMwL6u4aCH1BabLAFkLf0mYqPZm8AKXjfFqpun5P684wA3c77bQz7gEtYYjuaEtP2yDDne2MrOwaX+NoKeMJCDuTa0EyD1xK2Qw4FyBneuQjYJKOBP6iXr164nOApP9X46KTmjbHcYqpNxZo/+R4nq7KRISih/4OKsJwPW3diacxOCZGPXQzvKqP7uWDISMuCb2NrYqahfaqeUAdVbYT2ncPM9wSgn+ZB5R5P92EPqHuZYPVw2+Z11Oz/6dWBlyRADmNpJHjfCSdBHyMMFz5MjO7KHf+RMKCbtnotavN7IPJ+RbCCgCPmtmr47FlwL8SVh99GPj9otUBpoKZ3SPpBfXK1ROfFsLX3RffcZpMrUSE3RT/Ok+Wfsv3A6UisYMJYbgsGy572KdeUHfLAD2/Mkjv8k20pv0/O6kIwVWIT9bX1Elw1Ir6gnKERfGCBzQ8tkje+H5b51BYA2gnE8NvmRBl91pVgLLjZUctOXOJKByfJCwI1w/cKunaguSv72XCUsA7gQ1UfkHOBW40s4sknRv33zNFGy9nXCMWAc8CflyvXj3x2ZQqqOM0l6lkwiWk/UBpbnQahtsBI4eGbLihlUvobVtS4QUN0k0vfUGIYiiuZ/nWcRHK9QFBfF+eXG9R3C8hQADtDDFI95joZB7RmPfT0RqEplT4rV4CQkbe+1lU20hntjgOuD9OOYakLwOnAKUyjyWtAV4F/B2QRrFOAU6M258HbmKK4kPlygL7EOb4uKpK2TFK9fk4zsxRlAnXnpyr9+u9q/p4oNQL2hmm5Rle2c7gssExL2iQ7ortXvoY7BocF6HM+0lDb6kIQfB8MvGB0l7QUrYzSPeYBzTB+8kEKM1+g0qhrdr/k87L7f0/zWYS43x6JKULal6aLZwZWQ0V63P0A8cXtPPrkn4MbCQs0nl3PH4x8FdMHKq2IlsdwMw2xXXTpkTBTDdXSfo+YUacqtQTn5dO1SDHmR5TmZS0ThguDV3FDLnUC+pp6x4PvTHACrYwEAWoh24GuwZp7xqie/kg7TtHgjdUkd4d35+MpmXXTuaUG+2AoZbqWVCp8AzSzZLOIUY6a3g/Wfvp9ScVfnMBmmUG6qxkWuQA5MfO3AE83cx2SDoZ+HfgMEmvBraY2e2xX6gp5FKtFwG/Rli1oCY1xafaVNiOMzOUmZS0BkVhuCz8toJxL2hzK1tXrGT4sKwvKCQfDNJDNwNj/UHtMSOtu2WAnq7BkLW2ezgIUeoB3RfbzyUfjHbAUEeY/bTMr+IlDNHe1s5wLe8HqoTfMtIfvEXjf5xmsAc1KtW6H+hN9tcQvJsx0hWizex6Sf8sqYewrM1roiDtC3RJ+qKZvQnYnK2NJmkVwZ+fKmmq9Sjwc+CN9So1fRltx5ke2xiPm0H9Aal5kjDcdsIUNZm3spLKvqCdXWxa2cXgym4Glw3SzQC9MRmhm0FWsJkBuqMwRTFqCd5QJkQAPBKW084YE5yWJclA12x7kg+ovPeTZcHtoEr2W61+nvR47jNzYZor3ErwYg4hrP5+GvCGtICklcBmMzNJxxG8j0Ezey/w3ljmREI47k2x2rXAmcBF8f3rUzVwqpMNuPg484BskOk0w3AQBmmmXlAqRpkIbR8PxQ23tcc0hIGx/pgVbKGbAdoZHntvZ4glLWG2tpFFi+nrKp7Mt1J42seOVUvLbWeIoc4l46G3dNqdzPvZzrgXtB1YwhSy3/KLDrkAzQXMbFTSOcC3CH+ky83sbklvj+cvAX4P+BNJo4S//GlmVnVam8hFwFckvQV4BDh1srbFRUYfMbOqXpOkV5nZN4rOufg484jJhOHSTLlIFobLe0ErmZARl4Xitq7qYWDlwFh/UBChnrE+oUyQehiM/TXDjLAvfTFSsoShCcKSF6AsyXp72elLM+8nE52s2gTvJ0+axFEm/OYCNFWsgeN8zOx64PrcsUuS7ZqricYyNxEy2rL9Qabfpz8CXCnpSeA7wM8IPZ7LgWMI2XT/Abj4OHsDRQIE0/KC0j6gzAvqpCIrbmvnuAhlMjRIz1g/ULa9hCFW01YhPnmGE48nv/R33QdWZld2y1k/0PbcuULvJ/2syky/4zjVMbOfAC+X9CxCOvfvE755G4HvAX9tZk9Wq+/i48xD8unYMOVkhJ1UZsRl3k/2IN9BnEU7L0KDsf9n/D3zfA6oIz5jJuSWfMh7QlAjMSGzL+3vyYQou5dC8qsTZUKdRWk8+60RLLAlFe4G7q5bMIeLjzOPmc6g1MQLSjPiOpkYisu8o5wI7bdygMG2nrFQXCYbvwbcw5FjYsRY8+MP9SzEliUc5BMRsmMAwztKPsQyIcq2QyNMzvtxnJnBxceZ59QLw5Wpk2TEdTAxFJdlxeVFaNNKtq4aZbCzm+5lg2PiM8Jm+uitEJ9sFoM84x7ORBEaop2hkZgNt6Pkv2oaeqtKkfeTJhy49+M0HxcfZy+gVhguO1/tAZrrC0pDcXnhyYtQJ7CzlZGOLjYt7YLOUfZbOcAIT9DH6rGQW5YNl5EdT/t3UhEa6xMaWcLwjnZGUs+nSFjygpP1ARWSCstkRMYFaDLssUXjPxycQlx8nL2IsskIdUhFCMZDcbVEqBPoDN7QrpGf0veLXpZ0RvFpGxefIDwTPSDIJSKkwrOjNVyvaCLTakyYcqdo3E9GV0GDHpZzmouLj7OXUSYZoZYXtHS8TLZkdxaKqyVCmQCtBAQj93WFWQmArZ2jtHUORTEKwtPeVpkLnf5Kzvp4JghPMhapgrphtiKm4sm491OWPbsXle+rW6C4+Dh7KZP1glLhqRGKKxKhVHh2AAcR1nHMjhNCc5kY0TnK1nilts6hyrBaRtbHkxceku28N1SaotBbC2Ewb6153xyncbj4OHsxk/GC8uOC0jbqiFCapJAtvf0gSTguNpWIUZaNNlJrIbd00tIij2dKTNd7ce/HaQwuPs4CYCoZcUX1KCdCo8D9jE8AmpWBiWJUix257VSI8h7RlByUakLi3s90sT2Lij1aZ4ymiY+kXuALhGDEHsI6FR+TdCpwAXAEcJyZ3Val/sOEb/1uYDSbdryZy786ezPTyYjLl6VYhCAIypOMz56QCRMF5dL3auQFKDNlJxM9oSmL0VLCzZT1atz7caZPMz2fUeDdZnaHpKXA7ZJuAO4CXg98ukQbLzGzgdyxhi3/6ixEynhBtUJxNUQIgsCMElY9TWdPyIRoM+OCU7QYXDUyM9JF8rL3an0/U+oPcpyZoWniE1fJy1bK2y5pA7DazG4AkKa8SGojl391FiTVvCAoP0VPgQhl7KLS84GJQkTuXFl25N63587lvaHCCUbLUC/05t5PTfao/MDgBYrqz7zdgItIBwM3A0dlCx9JuomwvkS1sNtDwBOESac+nS0tK+mXZrZ/Uu4JM3taQf2zgbMB9tuv+5jzz6856euUWLNmH/r7n2p4u83Ebc6zqOBYS53tRbn9lopza9bsoL+/MxRLiy6qUj1vQn51AwjB55Q9ueN7kvf02J5qlXYn27BmzSj9/YtyF6q2nW9v5mnmd2Lt2tNvr7O6aF101LHGVwofbZU8S9O+1nyl6dIsqRP4GvCudMW9EpxgZhvj2uI3SPqpmd1ctnIUqyhYq23t2gcmZXcZ1q07lGa020zc5moUZZ0tzZ3fkyu7tHB/3bqfsXbtieNVsyE81TyftN8nXf20GkWDTfOe0E4KvJ5tjHsr25NjsG7dFtauXcLE9POi7bS92WHOf49307A8DUknAR8j/Cy5zMwuqlLu+cAtwB+Y2Vdr1ZV0AfDHwOOx+nlx6YYZo6niI2kxQXiuNLOrJ1PXzDbG9y2SrgGOI3hPjVz+1XEiZUNxZcJNuwmrH8e2spDcMEGIshBcOksCFE+Tk6fWANN8v1AF0xUKD73NBpJagE8CLyd8qW6VdK2Z3VNQ7h8Ii86VrftRM1s3A7dRSDOz3QR8FthgZh+ZZN0OYFHsK+oAfhv4YDzdsOVfHWciBenVE7LioPaDt9rP3mQG7VSIYFyMSC5VZlxPepmsrSn38zhzkOOA+83sQQBJXyb0e9+TK/cOwg/950+h7qzQTM/nBOAM4E5J6+Ox84B9gI8DBwDfkLTezF4h6UCCW3gyYT7ha2JSQivwJTP7Zmxj2su/Ok5t6nlB+TJ5EdrNeIgry5hLZ1aI9VKRyMQIKgWpHnkvp1B4tuXet+f2nYazh7KJJD2S0s6hS7P+7chqoC/Z7weOTxuQtBp4HfBbVIpPvbrnSPpD4DZCZvKMDllpZrbb94FqKW3XFJTfCJwctx8EnlOl3UYs/+o4JZiqCC2mesC/SIhi/bxwZPu1Jkeu6eVsq7JdZNNU8dDbNBmok3BQ9AzNZ4ldDLzHzHbnsohr1f0UcGHcvxD4MPBHZQxuFJ4L6Dh1qRaKg2IR2k2l1zNZ8rMqTLZ+XgyKkghcMJrKbho0HRL9EJfFDawhLFOdcizw5Sg8PcDJkkZr1TWzzdlBSZ8BrmuItZPAxcdxSlHkBUGxCC0l/Ois94BPRa1otoVqpOfqTQ+Ut7PWcWcOcitwmKRDgEeB04A3pAXM7JBsW9IVwHVm9u+SWqvVzZK2YrXXEQb/zyguPo4zKSYjQmm5dH+yA1onY1eevLiUFStnLmBmo5LOIWSxtQCXm9ndkt4ez18y2brx9IckHU0Iuz0MvK15d1GMi4/jTIlaItReUC4rW+0BX1aIypSr5s3k66Xl8oNIXYimxR4aFXYjjr+5PnesUHTM7Kx6dePxMxpj3dRx8XGcaVHWEyoqW+QN1WIqfUjVFs1znNnFxcdxGkI9EYKJIbmsfF4gikSmESG6WrMULCo4Vq+uU5XGJRzstbj4OE5D2UYYwlZELW8IJnpE6bFaD/+iabHLiEWRyHi4zZkZXHwcpylU84Sg2BtK66T1qi32Vq29snZN5px7PU7jcfFxnKZSS4Sg2BtK6xXVbYZ3UjRrtTNlGphwsLfi4uM4M0ItMYHq3lC+bq02JkvabrUV7ep5PR6mc6aGi4/jzDhlvaGMImGo9dAvancqIuHhNqd5uPg4zqxRzxvKqOUV1Wt3KpQVHfd6quJht7q4+DjOnKCeN5RRJAxlBKkeDVz9zHFK4OLjOHOKst5QSj3RSMWpWtn2Kser4V5PTVzL6+Li4zhzlqkIURGNfgq68DjTx8XHceYFRbMgzLYNjjN1XHwcZ14yk2LkojNpyq9kumBx8XGcvYJGjwVywXGay6L6RRzHmZ9sm8RrT27fmRbZxKL1XiWQdJKkeyXdL+ncgvNvlPST+PpfSc+Jxw+XtD55bZP0rnhumaQbJN0X3582/ZueHC4+juM4cxRJLcAngVcCRwKnSzoyV+wh4MVm9mzgQuBSADO718yONrOjgWOAIeCaWOdc4EYzOwy4Me7PKC4+juM4c5fjgPvN7EEzGwG+DJySFjCz/zWzJ+LuLcCagnZeCjxgZj+P+6cAn4/bnwde22jD6+F9Po7jOI2m/AwHPZJuS/YvNbNLk/3VQF+y3w8cX6O9twD/WXD8NOCqZH+FmW0CMLNNkpaXsraBuPg4juPMHgNmdmyN8yo4ZoUFpZcQxOdFueNtwGuA907VyGbg4uM4jtNoGjfDQT/Qm+yvATbmC0l6NnAZ8EozG8ydfiVwh5ltTo5tlrQqej2rgC0NsXYSeJ+P4zjO3OVW4DBJh0QP5jTg2rSApIOAq4EzzOxnBW2cTmXIjdjGmXH7TODrDbW6BO75OI7jzFHMbFTSOcC3gBbgcjO7W9Lb4/lLgPcD3cA/SwIYzUJ5ktqBlwNvyzV9EfAVSW8BHgFOnYn7SXHxcRzHaTQNnOHAzK4Hrs8duyTZfivw1ip1hwjClD8+SMiAmzWaFnaT1CvpO5I2SLpb0jvj8VPj/h5JtTrakNQi6UeSrkuOXSDp0WTg1MnNugfHcRynOTTT8xkF3m1md0haCtwu6QbgLuD1wKdLtPFOYAMT5wn5qJmta6i1juM4jcIXk6tL0zwfM9tkZnfE7e0EEVltZhvM7N569SWtAV5FyOBwHMdx9iJmJNtN0sHAc4EfTKLaxcBfEX5D5DknzmN0+WzMSeQ4juNMD5kVjldq3AWkTuC7wN+Z2dXJ8ZuAtWZ2W0GdVwMnm9mfSjoxlnt1PLcCGCAMtLoQWGVmf1TQxtnA2QD77dd9zPnnf6LBdwZr1uxDf/9TDW+3mbjNzWe+2Qvzz+Zm2rt27em31xn4WRftc6yxesKjbSIPadrXmq80NdtN0mLga8CVqfCU4ATgNTGZYF+gS9IXzexN6UApSZ8BritqIE5RcWkot9rWrn1gqrdRlXXrDqUZ7TYTt7n5zDd7Yf7ZPN/sdSbSzGw3AZ8FNpjZRyZT18zea2ZrzOxgwqCqb5vZm2K7q5KiryMkMDiO4zjziGZ6PicAZwB3Slofj50H7AN8HDgA+Iak9Wb2CkkHApeZWb3U6Q9JOpoQdnuYiYOnHMdxZpc9NGp6nb2WpomPmX2f4knxYHxNibT8RmCC8JjZTcBNyf4ZjbHQcRzHmS18hgPHcZxGs5uGzXCwt+ITizqO4zgzjouP4ziOM+N42M1xHKfRGDA820bMbdzzcRzHcWYcFx/HcZw5jKSTJN0r6X5J5xacf6ak/5P0lKS1yfF9Jf1Q0o/jSgIfSM7N+uoAHnZzHMeZo0hqAT5JWBCuH7hV0rVmdk9S7BfAnwOvzVV/CvgtM9sRZ5v5vqT/NLNb4vlZXR3APR/HcZy5y3HA/Wb2oJmNAF8GTkkLmNkWM7sV2JU7bmaWLeywOL6aO5nnJHDxcRzHaTi7gW0lXvRIui15nZ1raDXQl+z3x2OliAtyrge2ADeYWbqywKyuDuDi4ziOM3sMmNmxyevS3PmiWWJKey9mttvMjgbWAMdJOiqe+hRwKHA0sAn48KQtnybe5+M4jtNwMs9n2vQDvcn+GmDjZBsxs1/GZWxOAu4quzpAM3HPx3EcZ+5yK3CYpEMktRFm+b+2TEVJB0jaP24vAV4G/DTuz/rqAO75OI7jzFHMbFTSOcC3gBbgcjO7W9Lb4/lLJK0EbgO6gD2S3gUcCawCPh8z5hYBXzGzzMOZ9dUBXHwcx3EaTuPWVDCz64Hrc8cuSbYfI4Tj8vwEeG6VNmd9dQAPuzmO4zgzjns+juM4DadhCQd7Le75OI7jODOOi4/jOI4z43jYzXEcp+HsplEJB3sr7vk4juM4M46Lj+M4jjPjeNjNcRyn4ezBs91q456P4ziOM+O45+M4jtNwfJxPPdzzcRzHcWYcFx/HcRxnxvGwm+M4TsPxcT71cM/HcRzHmXGaJj6SeiV9R9IGSXdLemc8fmrc3yPp2DpttEj6kaTrkmPLJN0g6b74PuNrjzuO49QmSzio96qPpJMk3SvpfknnFpyXpH+K538i6Xn16s6F52gzPZ9R4N1mdgTwAuDPJB1JWDHv9cDNJdp4J7Ahd+xc4EYzOwy4Me47juPsdcSF4D4JvJKwQNzp8Tma8krgsPg6G/hUibqz/hxtmviY2SYzuyNubyeIyGoz22Bm99arL2kN8CrgstypU4DPx+3PA69tmNGO4zhzi+OA+83sQTMbAb5MeAamnAJ8wQK3APvHZbJr1Z3156jMrPkXkQ4meDpHmdm2eOwmYK2Z3ValzleB/w9YGsu9Oh7/pZntn5R7wswmuIySzib8CgA4HKgreFOgBxhoQrvNxG1uPvPNXph/NjfT3qeb2QHTaUDSNwk21mNf4Mlk/1IzuzRp5/eAk8zsrXH/DOB4MzsnKXMdcJGZfT/u3wi8Bzi4Wt2yz9Fm0vRsN0mdwNeAd2XCU6LOq4EtZna7pBOnct34B7y0bsFpIOk2M6vZbzXXcJubz3yzF+afzXPdXjM7qUFNqaj5kmXK1J01mprtJmkxQXiuNLOrJ1H1BOA1kh4muIq/JemL8dzm6FIS37c00GTHcZy5RD/Qm+yvATaWLFOr7qw/R5uZ7Sbgs8AGM/vIZOqa2XvNbI2ZHQycBnzbzN4UT18LnBm3zwS+3iCTHcdx5hq3AodJOkRSG+F5eG2uzLXAH8astxcAW81sU526s/4cbWbY7QTgDOBOSevjsfOAfYCPAwcA35C03sxeIelA4DIzO7lOuxcBX5H0FuAR4NSmWF+Opob1moTb3Hzmm70w/2yeb/ZOCTMblXQO8C2gBbjczO6W9PZ4/hLgeuBk4H5gCHhzrbqx6Vl/js5IwoHjOI7jpPgMB47jOM6M4+LjOI7jzDguPjUomt4nOVdrSov9JX1V0k/j9EK/Psft/Ys45dFdkq6StO9M2FvC5mdK+j9JT0lamztXc8qRuWSvqkw1NZdtLlO3mUzjezEr/3vO5HHxqU3R9D4ZhVNaRD4GfNPMngk8p0YbjWbS9kpaDfw5cKyZHUXomDyt+aaOUcvmXxBsW5ceVLkpR5rFpO2l+lRTM8VUbC5Tt5lM1ebZ+t9zJomLTxVUfXqfjMIpLSR1Ab9JSDPHzEbM7Jdz1d54rhVYIqkVaGfiOIKmUM9mM9tiZrcCu3Knykw50nCmam+1qaaabC4wrc+4zHeqKUzV5tn633OmhotPdS4G/grYU+X8aqAv2e+Px54BPA58LoYNLpPU0UxDIxczBXvN7FHCL8hHgE2EMQL/1UQ7Uy6mts3VqPbZN5uLmZq9YyhMNfVc4AeNMakuFzN1m6dTdzpM9bqz9b/nTAEXnwKUTO9Tq1jBMSN4Ec8DPmVmzwV20uQZY6djr8JU6qcAhwAHAh2S3lRQtqGUtLlq9YJjTR0zME17szYmPdXUdJiOzY2436kwzevO+P+eM3VcfIqpNb1PRq0pLfrNLPtl+1XCP0QzmY69LwMeMrPHzWwXcDXwwibbC+VsrkaZKUcazXTsnc5UU9NhOjZP636nwXS/FzP9v+dMERefAupM75NROKWFmT0G9Ek6PJZ7KXDPXLWXEG57gaR2SYr2Nr2TtqTN1Sgz5UhDmY698XOd0lRT02E6Nk/z7zNlpmnzjP/vOVOn6bNa702oxJQWkXcAV8YH44O5czNGGXvN7AcKy1fcQcjK+hGzOHVJarOklcBtQBewR9K7gCPNbJuqTxsy5+wFnk3BVFNmdv3MW1z+M54N26oxCZvnxP+eUx+fXsdxHMeZcTzs5jiO48w4Lj6O4zjOjOPi4ziO48w4Lj6O4zjOjOPi4ziO48w4Lj6O4zjOjOPi48xb4vT5f9rA9q6Q9FA2pqRKmd+QdI+kuxp1XcdZiLj4OPOZ/YGGiU/kL+Og3ELM7HuEwbqO40wDFx9nPnMRcKik9ZL+UVKnpBsl3SHpTkmnQJhJOvVUJK2VdEG9xiWdqrDA3o8l3dy823CchYdPr+PMZ84FjjKzowHiekSvi9Pv9AC3SJrOnG/vB15hZo9K2n/a1jqOM4Z7Ps7ehIC/l/QT4L8Ja/ysmEZ7/wNcIemPCXPIOY7TIFx8nL2JNwIHAMdEb2gzsC9hwtT0u75vmcbM7O3A+wjLN6yX1N1Qax1nAePi48xntgNLk/39CAuR7ZL0EuDp8fhmYLmkbkn7AK8u07ikQ83sB2b2fmCAyjWEHMeZBt7n48xbzGxQ0v/EZIL/BP4B+A9JtwHrgZ/GcrskfZCwdPVD2fES/KOkwwjhvBuBHzf4FhxnweJLKjhORNIVwHVm9tU65Q6O5Y6aCbscZ2/Ew26OM85W4MJ6g0yB/yCE4RzHmSLu+TiO4zgzjns+juM4zozj4uM4juPMOC4+juM4zozj4uM4juPMOP8/CfTJmd2mShcAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import cm, ticker\n",
"tau_values = np.linspace(4.05,4.17, 100)\n",
"Tm_values = np.linspace(21.4,21.7, 100)\n",
"tau_mesh, Tm_mesh = np.meshgrid(tau_values, Tm_values)\n",
"\n",
"posterior_values = np.zeros(len(tau_values)*len(Tm_values))\n",
"idx = 0\n",
"for tauval, Tmval in np.nditer([tau_mesh,Tm_mesh]):\n",
" posterior_values[idx]=posterior(tauval,Tmval,T0,temp,time,utemp) \n",
" idx = idx + 1\n",
"posterior_mesh = posterior_values.reshape((len(Tm_values), len(tau_values)))\n",
"\n",
"fig = plt.figure()\n",
"#ax1 = plt.contourf(tau_mesh, Tm_mesh, posterior_mesh, cmap=cm.jet, locator=ticker.LogLocator(), levels=100)\n",
"\n",
"import matplotlib\n",
"\n",
"## - log scale\n",
"#normalize = matplotlib.colors.LogNorm()\n",
"#ax1 = plt.pcolormesh(tau_mesh, Tm_mesh, posterior_mesh, cmap=cm.jet, norm=normalize)\n",
"## - linear scale\n",
"ax1 = plt.contourf(tau_mesh, Tm_mesh, posterior_mesh, cmap=cm.jet, levels=100)\n",
"\n",
"cbar = plt.colorbar(ax1)\n",
"cbar.set_label('f(tau,Tm)', rotation=270, labelpad=20)\n",
"#cbar.ax.locator_params(nbins=20)\n",
"#cbar.update_ticks()\n",
"plt.xlabel(\"tau [s]\")\n",
"plt.ylabel(\"Tm [C]\")\n",
"plt.grid()\n",
"plt.title(\"Posterior probability density function\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "24e4878a",
"metadata": {},
"source": [
"## Normalizzazione della posterior"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "13e75bc5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Integrale di normalizzatione (ed errore) con scipy.integrate = 1.5273411094443446e+22 43176788028416.0\n",
"Integrale di normalizzatione calcolato con un semplice loop = 1.5212378762774195e+22\n"
]
}
],
"source": [
"# Range delle variabili su cui fare inferenza\n",
"#range_tau = (3.9,4.3)\n",
"#range_Tm = (21,22)\n",
"range_tau = (4.05,4.17)\n",
"range_Tm = (21.4,21.7)\n",
"\n",
"# Integrale di normalizzazione della posterior\n",
"normalization, integral_error_norm = integrate.nquad(posterior, \n",
" [range_tau, #tau\n",
" range_Tm #Tm\n",
" ],\n",
" args=(T0,temp,time,utemp)\n",
" )\n",
"print (\"Integrale di normalizzatione (ed errore) con scipy.integrate = \", normalization, integral_error_norm)\n",
"\n",
"# Integrale a mano (come esempio)\n",
"nsteps_tau = 500\n",
"nsteps_Tm = 500\n",
"tau_values_loop = np.linspace(range_tau[0],range_tau[1], nsteps_tau)\n",
"Tm_values_loop = np.linspace(range_Tm[0],range_Tm[1], nsteps_Tm)\n",
"bin_tau = (range_tau[1] - range_tau[0]) / nsteps_tau\n",
"bin_Tm = (range_Tm[1] - range_Tm[0]) / nsteps_Tm\n",
"normalization_loop = 0\n",
"for tau_val in tau_values_loop:\n",
" for Tm_val in Tm_values_loop:\n",
" base = bin_tau * bin_Tm\n",
" altezza = posterior(tau_val,Tm_val,T0,temp,time,utemp)\n",
" normalization_loop += base * altezza\n",
"print (\"Integrale di normalizzatione calcolato con un semplice loop = \", normalization_loop)\n",
"\n",
"# Posterior normalizzata (PDF)\n",
"def posterior_norm(tau,Tm,T0,Y,X,SigmaY): \n",
" return posterior(tau,Tm,T0,Y,X,SigmaY) / normalization\n",
"\n",
"# L'argomento dell'integrale del valore atteso di tau^k \n",
"def arg_E_tau_k(tau,Tm,k,T0,Y,X,SigmaY):\n",
" return np.power(tau,k) * posterior_norm(tau,Tm,T0,Y,X,SigmaY)\n",
"\n",
"# L'argomento dell'integrale del valore atteso di Tm^k \n",
"def arg_E_Tm_k(tau,Tm,k,T0,Y,X,SigmaY):\n",
" return np.power(Tm,k) * posterior_norm(tau,Tm,T0,Y,X,SigmaY)\n",
"\n",
"# L'argomento dell'integrale del valore atteso di tau*tm\n",
"def arg_E_tauTm(tau,Tm,T0,Y,X,SigmaY):\n",
" return tau * Tm * posterior_norm(tau,Tm,T0,Y,X,SigmaY)"
]
},
{
"cell_type": "markdown",
"id": "3bac69d0",
"metadata": {},
"source": [
"## Calcolo dei valori attesi, dev. std. e covarianze"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "f9c75773",
"metadata": {},
"outputs": [],
"source": [
"E_tau, error_int_E_tau = integrate.nquad(arg_E_tau_k, \n",
" [range_tau, #tau\n",
" range_Tm #Tm\n",
" ],\n",
" args=(1,T0,temp,time,utemp)#k=1\n",
" )\n",
"E_tau2, error_int_E_tau2 = integrate.nquad(arg_E_tau_k, \n",
" [range_tau, #a\n",
" range_Tm #b\n",
" ],\n",
" args=(2,T0,temp,time,utemp)#k=2\n",
" )\n",
"Var_tau = E_tau2 - E_tau**2\n",
"Sigma_tau = math.sqrt(Var_tau)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "d4824d94",
"metadata": {},
"outputs": [],
"source": [
"E_Tm, error_int_E_Tm = integrate.nquad(arg_E_Tm_k, \n",
" [range_tau, #a\n",
" range_Tm #b\n",
" ],\n",
" args=(1,T0,temp,time,utemp)#k=1\n",
" )\n",
"E_Tm2, error_int_E_Tm2 = integrate.nquad(arg_E_Tm_k, \n",
" [range_tau, #a\n",
" range_Tm #b\n",
" ],\n",
" args=(2,T0,temp,time,utemp)#k=2\n",
" )\n",
"Var_Tm = E_Tm2 - E_Tm**2\n",
"Sigma_Tm = math.sqrt(Var_Tm)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "8beecf53",
"metadata": {},
"outputs": [],
"source": [
"E_tauTm, error_int_E_tauTm = integrate.nquad(arg_E_tauTm, \n",
" [range_tau, #tau\n",
" range_Tm #Tm\n",
" ],\n",
" args=(T0,temp,time,utemp)\n",
" )\n",
"Cov_tauTm = E_tauTm - E_tau*E_Tm\n",
"Rho_tauTm = Cov_tauTm / (Sigma_tau*Sigma_Tm)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "810d04db",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Risultato del fit con integrazione della posterior:\n",
"tau_fit = (4.113 +/- 0.011 ) [s] [0.27%]\n",
"Tm_fit = (21.547 +/- 0.026 ) [C] [0.12%]\n",
"Cov[tau,Tm] fit -0.0002288448051785963 [sC]\n",
"Rho[tau,Tm] fit -0.7688629634197679\n"
]
}
],
"source": [
"print (\"Risultato del fit con integrazione della posterior:\")\n",
"my.PrintResult(\"tau_fit\",E_tau,Sigma_tau,3,\"[s]\")\n",
"my.PrintResult(\"Tm_fit\",E_Tm,Sigma_Tm,3,\"[C]\")\n",
"print (\"Cov[tau,Tm] fit\", Cov_tauTm, \"[sC]\")\n",
"print (\"Rho[tau,Tm] fit\", Rho_tauTm)"
]
}
],
"metadata": {
...
...
%% Cell type:code id:d5a34fcc tags:
```
python
# plots will be shown inline
%
matplotlib
inline
import
matplotlib.pyplot
as
plt
import
numpy
from
numpy
import
sqrt
,
floor
import
numpy
as
np
import
pandas
as
pd
import
random
import
math
# libreria locale
import
my_lib_santanastasio
as
my
##NOTA IMPORTANTE: se cambi qualcosa in my_lib_santanastasio
# devi fare Kernel --> Restart prima di rigirare il codice
# altrimenti i cambiamenti non saranno applicati.
from
scipy
import
stats
import
scipy.integrate
as
integrate
from
scipy
import
optimize
# set global random seed
random_Gseed
=
1112
np
.
random
.
seed
(
random_Gseed
)
```
%% Cell type:code id:75ae4577 tags:
```
python
# change "virgola" (comma) with "punto" (point) in the file
myfilename
=
"
termometro_hot_to_cold_1_60C.txt
"
myfilenamemod
=
myfilename
.
split
(
"
.
"
)[
0
]
+
str
(
"
_mod.txt
"
)
#print (myfilenamemod)
reading_file
=
open
(
myfilename
,
"
r
"
,
encoding
=
"
utf8
"
,
errors
=
'
ignore
'
)
new_file_content
=
""
for
i
,
line
in
enumerate
(
reading_file
):
#print (i, line)
stripped_line
=
line
.
strip
()
new_line
=
stripped_line
.
replace
(
"
,
"
,
"
.
"
)
if
i
!=
0
:
# drop first line of file
new_file_content
+=
new_line
+
"
\n
"
reading_file
.
close
()
writing_file
=
open
(
myfilenamemod
,
"
w
"
)
writing_file
.
write
(
new_file_content
)
writing_file
.
close
()
```
%% Cell type:code id:986c2e62 tags:
```
python
df
=
pd
.
read_csv
(
myfilenamemod
,
header
=
0
,
sep
=
'
\t
'
)
#il separatore in questo caso era un "tab" (\t)
df
```
%% Output
Tempo ( s ) Temperatura ( C )
0 0.0 60.81
1 0.1 60.70
2 0.2 60.70
3 0.3 60.70
4 0.4 60.70
.. ... ...
955 95.5 20.38
956 95.6 20.38
957 95.7 20.38
958 95.8 20.38
959 95.9 20.42
[960 rows x 2 columns]
%% Cell type:code id:fcb1d497 tags:
```
python
# Rinominare colonne
df
=
df
.
rename
(
columns
=
{
"
Tempo ( s )
"
:
"
time
"
,
"
Temperatura ( C )
"
:
"
temp
"
})
df
```
%% Output
time temp
0 0.0 60.81
1 0.1 60.70
2 0.2 60.70
3 0.3 60.70
4 0.4 60.70
.. ... ...
955 95.5 20.38
956 95.6 20.38
957 95.7 20.38
958 95.8 20.38
959 95.9 20.42
[960 rows x 2 columns]
%% Cell type:code id:a290b012 tags:
```
python
# Grafico di tutti i dati
df
.
plot
(
x
=
"
time
"
,
y
=
"
temp
"
,
linestyle
=
"
None
"
,
marker
=
"
.
"
)
```
%% Output
<AxesSubplot:xlabel='time'>
%% Cell type:code id:f3822031 tags:
```
python
# Ripulisco i dati
dfmod
=
df
.
drop
(
df
[
(
df
.
time
<
10
)
|
(
df
.
time
>
30
)
].
index
)
dfmod
.
plot
(
x
=
"
time
"
,
y
=
"
temp
"
,
linestyle
=
"
None
"
,
marker
=
"
.
"
)
```
%% Output
<AxesSubplot:xlabel='time'>
%% Cell type:code id:11abfefd tags:
```
python
t0
=
dfmod
.
time
.
to_numpy
()[
0
]
T0
=
dfmod
.
temp
.
to_numpy
()[
0
]
print
(
T0
)
time
=
dfmod
.
time
.
to_numpy
()
-
t0
temp
=
dfmod
.
temp
.
to_numpy
()
utemp
=
np
.
repeat
(
0.2
,
len
(
temp
))
#incertezze sulle temperature
plt
.
errorbar
(
time
,
temp
,
yerr
=
utemp
,
linestyle
=
"
None
"
,
marker
=
"
.
"
)
plt
.
xlabel
(
"
Time [s]
"
)
plt
.
ylabel
(
"
Temperature [C]
"
)
```
%% Output
57.38
Text(0, 0.5, 'Temperature [C]')
%% Cell type:markdown id:a27f877e tags:
# Fit con il metodo dei minimi quadrati
%% Cell type:markdown id:400abe59 tags:
## Usando il metodo scipy.optimize.curve_fit
%% Cell type:markdown id:21e62f33 tags:
### Esempio con 2 parametri
%% Cell type:code id:fa78582c tags:
```
python
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html
from
scipy.optimize
import
curve_fit
```
%% Cell type:code id:ea328aab tags:
```
python
def
func_2par
(
X
,
tau
,
Tm
):
Yexp
=
Tm
-
(
Tm
-
T0
)
*
np
.
exp
(
-
X
/
tau
)
return
Yexp
xdata
=
time
ydata
=
temp
sigma_ydata
=
utemp
popt_2par
,
pcov_2par
=
curve_fit
(
func_2par
,
xdata
,
ydata
,
sigma
=
sigma_ydata
,
absolute_sigma
=
True
)
print
(
popt_2par
)
print
(
pcov_2par
)
```
%% Output
[ 4.11298595 21.54698567]
[[ 0.00012511 -0.00022676]
[-0.00022676 0.0006979 ]]
%% Cell type:code id:d7076be0 tags:
```
python
print
(
"
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.curve_fit) - 2 parameters:
"
)
my
.
PrintResult
(
"
tau_fit
"
,
popt_2par
[
0
],
np
.
sqrt
(
pcov_2par
[
0
,
0
]),
3
,
"
[s]
"
)
my
.
PrintResult
(
"
Tm_fit
"
,
popt_2par
[
1
],
np
.
sqrt
(
pcov_2par
[
1
,
1
]),
3
,
"
[C]
"
)
print
(
"
Cov[tau,Tm] fit
"
,
pcov_2par
[
0
,
1
],
"
[sC]
"
)
print
(
"
Rho[tau,Tm] fit
"
,
pcov_2par
[
0
,
1
]
/
(
np
.
sqrt
(
pcov_2par
[
0
,
0
])
*
np
.
sqrt
(
pcov_2par
[
1
,
1
])))
```
%% Output
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.curve_fit) - 2 parameters:
tau_fit = (4.113 +/- 0.011 ) [s] [0.27%]
Tm_fit = (21.547 +/- 0.026 ) [C] [0.12%]
Cov[tau,Tm] fit -0.00022676453379438262 [sC]
Rho[tau,Tm] fit -0.7674252975925171
%% Cell type:code id:12f5d9eb tags:
```
python
# Grafico del fit
x_values
=
np
.
linspace
(
np
.
min
(
time
),
np
.
max
(
time
),
100
)
y_values
=
func_2par
(
x_values
,
*
popt_2par
)
#y_values = popt_2par[1]-(popt_2par[1]-T0)*np.exp(-x_values/popt_2par[0]) # same as above
plt
.
errorbar
(
time
,
temp
,
yerr
=
utemp
,
marker
=
'
.
'
,
linestyle
=
'
None
'
,
label
=
'
data
'
)
plt
.
plot
(
x_values
,
y_values
,
linestyle
=
'
-
'
,
linewidth
=
3
,
color
=
'
red
'
,
label
=
'
fit
'
)
plt
.
xlabel
(
"
Tempo [s]
"
)
plt
.
ylabel
(
"
Temperatura [C]
"
)
plt
.
legend
()
plt
.
grid
()
plt
.
yscale
(
'
linear
'
)
```
%% Output
%% Cell type:code id:5bf4e027 tags:
```
python
## Studio dei residui
temp_atteso
=
func_2par
(
time
,
*
popt_2par
)
#temp_atteso = popt_2par[1]-(popt_2par[1]-T0)*np.exp(-time/popt_2par[0]) # same as above
d
=
temp
-
temp_atteso
d_norm
=
d
/
utemp
##print (d)
##print (d_norm)
plt
.
errorbar
(
time
,
d_norm
,
utemp
/
utemp
,
marker
=
'
.
'
,
linestyle
=
""
)
plt
.
ylabel
(
"
Residui normalizzati $d/\sigma_T=(T-T_{atteso})/\sigma_T$
"
)
plt
.
xlabel
(
"
Tempo [s]
"
)
plt
.
grid
()
```
%% Output
%% Cell type:markdown id:0a43b4ff tags:
### Esempio con 3 parametri
%% Cell type:code id:a77ac1b4 tags:
```
python
def
func_3par
(
X
,
tau
,
Tm
,
Tzero
):
Yexp
=
Tm
-
(
Tm
-
Tzero
)
*
np
.
exp
(
-
X
/
tau
)
return
Yexp
xdata
=
time
ydata
=
temp
sigma_ydata
=
utemp
popt_3par
,
pcov_3par
=
curve_fit
(
func_3par
,
xdata
,
ydata
,
sigma
=
sigma_ydata
,
absolute_sigma
=
True
)
print
(
popt_3par
)
print
(
pcov_3par
)
```
%% Output
[ 4.06770623 21.58968821 57.65442079]
[[ 0.00023173 -0.00032311 -0.00069099]
[-0.00032311 0.00078166 0.00064501]
[-0.00069099 0.00064501 0.00428592]]
%% Cell type:code id:70d51fad tags:
```
python
print
(
"
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.curve_fit) - 3 parameters:
"
)
my
.
PrintResult
(
"
tau_fit
"
,
popt_3par
[
0
],
np
.
sqrt
(
pcov_3par
[
0
,
0
]),
3
,
"
[s]
"
)
my
.
PrintResult
(
"
Tm_fit
"
,
popt_3par
[
1
],
np
.
sqrt
(
pcov_3par
[
1
,
1
]),
3
,
"
[C]
"
)
my
.
PrintResult
(
"
T0_fit
"
,
popt_3par
[
2
],
np
.
sqrt
(
pcov_3par
[
2
,
2
]),
3
,
"
[C]
"
)
print
(
"
Cov[tau,Tm] fit
"
,
pcov_3par
[
0
,
1
],
"
[sC]
"
)
print
(
"
Cov[tau,T0] fit
"
,
pcov_3par
[
0
,
2
],
"
[sC]
"
)
print
(
"
Cov[Tm,T0] fit
"
,
pcov_3par
[
1
,
2
],
"
[C^2]
"
)
print
(
"
Rho[tau,Tm] fit
"
,
pcov_3par
[
0
,
1
]
/
(
np
.
sqrt
(
pcov_3par
[
0
,
0
])
*
np
.
sqrt
(
pcov_3par
[
1
,
1
])))
print
(
"
Rho[tau,T0] fit
"
,
pcov_3par
[
0
,
2
]
/
(
np
.
sqrt
(
pcov_3par
[
0
,
0
])
*
np
.
sqrt
(
pcov_3par
[
2
,
2
])))
print
(
"
Rho[Tm,T0] fit
"
,
pcov_3par
[
1
,
2
]
/
(
np
.
sqrt
(
pcov_3par
[
1
,
1
])
*
np
.
sqrt
(
pcov_3par
[
2
,
2
])))
```
%% Output
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.curve_fit) - 3 parameters:
tau_fit = (4.068 +/- 0.015 ) [s] [0.37%]
Tm_fit = (21.59 +/- 0.028 ) [C] [0.13%]
T0_fit = (57.654 +/- 0.065 ) [C] [0.11%]
Cov[tau,Tm] fit -0.0003231109253328368 [sC]
Cov[tau,T0] fit -0.0006909904870936007 [sC]
Cov[Tm,T0] fit 0.0006450068923079409 [C^2]
Rho[tau,Tm] fit -0.7591875202707508
Rho[tau,T0] fit -0.6933545040572168
Rho[Tm,T0] fit 0.3523991930423434
%% Cell type:markdown id:faa7d7f4 tags:
## Usando il metodo scipy.optimize.minimize
%% Cell type:markdown id:dfb79f99 tags:
### Esempio con 2 parametri
%% Cell type:code id:5a18ee87 tags:
```
python
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize
from
scipy.optimize
import
minimize
```
%% Cell type:code id:0c5947d0 tags:
```
python
# Chi quadro con n misure indipendenti
def
ChiSquareOverTwo
(
theta
,
T0
,
Y
,
X
,
SigmaY
):
tau
,
Tm
=
theta
Yexp
=
Tm
-
(
Tm
-
T0
)
*
np
.
exp
(
-
X
/
tau
)
# modello di fit
#print (Yexp)
return
np
.
sum
(
(
Y
-
Yexp
)
**
2
/
SigmaY
**
2
)
/
2
```
%% Cell type:code id:022e6cc8 tags:
```
python
first_guesses
=
[
1
,
1
]
ranges
=
(
(
1
,
10
),
(
1
,
100
)
)
result
=
minimize
(
ChiSquareOverTwo
,
x0
=
first_guesses
,
args
=
(
T0
,
ydata
,
xdata
,
sigma_ydata
),
method
=
'
L-BFGS-B
'
,
bounds
=
ranges
)
```
%% Cell type:code id:cd99c43e tags:
```
python
print
(
"
Minimization completed with status:
"
,
result
.
success
)
print
(
"
Values at minimum:
"
,
result
.
x
)
import
numdifftools
as
nd
H
=
nd
.
Hessian
(
ChiSquareOverTwo
)
COV
=
np
.
linalg
.
inv
(
H
(
result
.
x
,
T0
,
ydata
,
xdata
,
sigma_ydata
))
print
(
""
)
print
(
"
Covariance matrix (inverse of Hessian):
"
)
print
(
COV
)
```
%% Output
Minimization completed with status: True
Values at minimum: [ 4.11298602 21.54698552]
Covariance matrix (inverse of Hessian):
[[ 0.00012625 -0.00022884]
[-0.00022884 0.00070165]]
%% Cell type:code id:59ebe12a tags:
```
python
print
(
"
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.minimize + numdifftools.Hessian):
"
)
my
.
PrintResult
(
"
tau_fit
"
,
result
.
x
[
0
],
np
.
sqrt
(
COV
[
0
,
0
]),
3
,
"
[s]
"
)
my
.
PrintResult
(
"
Tm_fit
"
,
result
.
x
[
1
],
np
.
sqrt
(
COV
[
1
,
1
]),
3
,
"
[C]
"
)
print
(
"
Cov[tau,Tm] fit
"
,
COV
[
0
,
1
],
"
[sC]
"
)
print
(
"
Rho[tau,Tm] fit
"
,
COV
[
0
,
1
]
/
(
np
.
sqrt
(
COV
[
0
,
0
])
*
np
.
sqrt
(
COV
[
1
,
1
])))
```
%% Output
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.minimize + numdifftools.Hessian):
tau_fit = (4.113 +/- 0.011 ) [s] [0.27%]
Tm_fit = (21.547 +/- 0.026 ) [C] [0.12%]
Cov[tau,Tm] fit -0.00022883565311786444 [sC]
Rho[tau,Tm] fit -0.7688568296304404
%% Cell type:markdown id:c4123964 tags:
### Esempio con 3 parametri
%% Cell type:code id:085c36e5 tags:
```
python
# Chi quadro con n misure indipendenti
def
ChiSquareOverTwo_3par
(
theta
,
Y
,
X
,
SigmaY
):
tau
,
Tm
,
T0
=
theta
Yexp
=
Tm
-
(
Tm
-
T0
)
*
np
.
exp
(
-
X
/
tau
)
# modello di fit
#print (Yexp)
return
np
.
sum
(
(
Y
-
Yexp
)
**
2
/
SigmaY
**
2
)
/
2
```
%% Cell type:code id:d3ef8485 tags:
```
python
first_guesses_3par
=
[
1
,
1
,
1
]
ranges_3par
=
(
(
1
,
10
),
(
1
,
100
)
,
(
1
,
100
)
)
result_3par
=
minimize
(
ChiSquareOverTwo_3par
,
x0
=
first_guesses_3par
,
args
=
(
ydata
,
xdata
,
sigma_ydata
),
method
=
'
L-BFGS-B
'
,
bounds
=
ranges_3par
)
```
%% Cell type:code id:770fbcab tags:
```
python
print
(
"
Minimization completed with status:
"
,
result_3par
.
success
)
print
(
"
Values at minimum:
"
,
result_3par
.
x
)
import
numdifftools
as
nd
H_3par
=
nd
.
Hessian
(
ChiSquareOverTwo_3par
)
COV_3par
=
np
.
linalg
.
inv
(
H_3par
(
result_3par
.
x
,
ydata
,
xdata
,
sigma_ydata
))
print
(
""
)
print
(
"
Covariance matrix (inverse of Hessian):
"
)
print
(
COV_3par
)
```
%% Output
Minimization completed with status: True
Values at minimum: [ 4.0677062 21.58968844 57.65441891]
Covariance matrix (inverse of Hessian):
[[ 0.00023771 -0.00033144 -0.00070881]
[-0.00033144 0.00079327 0.00066985]
[-0.00070881 0.00066985 0.00433903]]
%% Cell type:code id:d247ec97 tags:
```
python
print
(
"
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.minimize + numdifftools.Hessian) 3 par.:
"
)
my
.
PrintResult
(
"
tau_fit
"
,
result_3par
.
x
[
0
],
np
.
sqrt
(
COV_3par
[
0
,
0
]),
3
,
"
[s]
"
)
my
.
PrintResult
(
"
Tm_fit
"
,
result_3par
.
x
[
1
],
np
.
sqrt
(
COV_3par
[
1
,
1
]),
3
,
"
[C]
"
)
my
.
PrintResult
(
"
T0_fit
"
,
result_3par
.
x
[
2
],
np
.
sqrt
(
COV_3par
[
2
,
2
]),
3
,
"
[C]
"
)
print
(
"
Cov[tau,Tm] fit
"
,
COV_3par
[
0
,
1
],
"
[sC]
"
)
print
(
"
Cov[tau,T0] fit
"
,
COV_3par
[
0
,
2
],
"
[sC]
"
)
print
(
"
Cov[Tm,T0] fit
"
,
COV_3par
[
1
,
2
],
"
[C^2]
"
)
print
(
"
Rho[tau,Tm] fit
"
,
COV_3par
[
0
,
1
]
/
(
np
.
sqrt
(
COV_3par
[
0
,
0
])
*
np
.
sqrt
(
COV_3par
[
1
,
1
])))
print
(
"
Rho[tau,T0] fit
"
,
COV_3par
[
0
,
2
]
/
(
np
.
sqrt
(
COV_3par
[
0
,
0
])
*
np
.
sqrt
(
COV_3par
[
2
,
2
])))
print
(
"
Rho[Tm,T0] fit
"
,
COV_3par
[
1
,
2
]
/
(
np
.
sqrt
(
COV_3par
[
1
,
1
])
*
np
.
sqrt
(
COV_3par
[
2
,
2
])))
```
%% Output
Risultato del fit con metodo dei minimi quadrati (scipy.optimize.minimize + numdifftools.Hessian) 3 par.:
tau_fit = (4.068 +/- 0.015 ) [s] [0.37%]
Tm_fit = (21.59 +/- 0.028 ) [C] [0.13%]
T0_fit = (57.654 +/- 0.066 ) [C] [0.11%]
Cov[tau,Tm] fit -0.00033144281265790374 [sC]
Cov[tau,T0] fit -0.0007088058697719556 [sC]
Cov[Tm,T0] fit 0.0006698470062342376 [C^2]
Rho[tau,Tm] fit -0.7632623692140763
Rho[tau,T0] fit -0.697923473725284
Rho[Tm,T0] fit 0.3610506281921693
%% Cell type:markdown id:c7cd5a88 tags:
# Fit integrando la posterior
%% Cell type:markdown id:7cffbbf8 tags:
### Esempio con 2 parametri
%% Cell type:code id:9396f526 tags:
```
python
# Assumo prior vaga (costante) --> posterior ~ likelihood (a meno della normalizzazione)
def
posterior
(
tau
,
Tm
,
T0
,
Y
,
X
,
SigmaY
):
Yexp
=
Tm
-
(
Tm
-
T0
)
*
np
.
exp
(
-
X
/
tau
)
# modello di fit
#print (Yexp)
return
np
.
prod
(
stats
.
norm
.
pdf
(
Y
,
Yexp
,
SigmaY
)
)
```
%% Cell type:markdown id:7f6b8da3 tags:
## Grafico della posterior
%% Cell type:code id:1de92ec0 tags:
```
python
from
matplotlib
import
cm
,
ticker
tau_values
=
np
.
linspace
(
4.05
,
4.17
,
100
)
Tm_values
=
np
.
linspace
(
21.4
,
21.7
,
100
)
tau_mesh
,
Tm_mesh
=
np
.
meshgrid
(
tau_values
,
Tm_values
)
posterior_values
=
np
.
zeros
(
len
(
tau_values
)
*
len
(
Tm_values
))
idx
=
0
for
tauval
,
Tmval
in
np
.
nditer
([
tau_mesh
,
Tm_mesh
]):
posterior_values
[
idx
]
=
posterior
(
tauval
,
Tmval
,
T0
,
temp
,
time
,
utemp
)
idx
=
idx
+
1
posterior_mesh
=
posterior_values
.
reshape
((
len
(
Tm_values
),
len
(
tau_values
)))
fig
=
plt
.
figure
()
#ax1 = plt.contourf(tau_mesh, Tm_mesh, posterior_mesh, cmap=cm.jet, locator=ticker.LogLocator(), levels=100)
import
matplotlib
## - log scale
#normalize = matplotlib.colors.LogNorm()
#ax1 = plt.pcolormesh(tau_mesh, Tm_mesh, posterior_mesh, cmap=cm.jet, norm=normalize)
## - linear scale
ax1
=
plt
.
contourf
(
tau_mesh
,
Tm_mesh
,
posterior_mesh
,
cmap
=
cm
.
jet
,
levels
=
100
)
cbar
=
plt
.
colorbar
(
ax1
)
cbar
.
set_label
(
'
f(tau,Tm)
'
,
rotation
=
270
,
labelpad
=
20
)
#cbar.ax.locator_params(nbins=20)
#cbar.update_ticks()
plt
.
xlabel
(
"
tau [s]
"
)
plt
.
ylabel
(
"
Tm [C]
"
)
plt
.
grid
()
plt
.
title
(
"
Posterior probability density function
"
)
plt
.
show
()
```
%% Output
%% Cell type:markdown id:24e4878a tags:
## Normalizzazione della posterior
%% Cell type:code id:13e75bc5 tags:
```
python
# Range delle variabili su cui fare inferenza
#range_tau = (3.9,4.3)
#range_Tm = (21,22)
range_tau
=
(
4.05
,
4.17
)
range_Tm
=
(
21.4
,
21.7
)
# Integrale di normalizzazione della posterior
normalization
,
integral_error_norm
=
integrate
.
nquad
(
posterior
,
[
range_tau
,
#tau
range_Tm
#Tm
],
args
=
(
T0
,
temp
,
time
,
utemp
)
)
print
(
"
Integrale di normalizzatione (ed errore) con scipy.integrate =
"
,
normalization
,
integral_error_norm
)
# Integrale a mano (come esempio)
nsteps_tau
=
500
nsteps_Tm
=
500
tau_values_loop
=
np
.
linspace
(
range_tau
[
0
],
range_tau
[
1
],
nsteps_tau
)
Tm_values_loop
=
np
.
linspace
(
range_Tm
[
0
],
range_Tm
[
1
],
nsteps_Tm
)
bin_tau
=
(
range_tau
[
1
]
-
range_tau
[
0
])
/
nsteps_tau
bin_Tm
=
(
range_Tm
[
1
]
-
range_Tm
[
0
])
/
nsteps_Tm
normalization_loop
=
0
for
tau_val
in
tau_values_loop
:
for
Tm_val
in
Tm_values_loop
:
base
=
bin_tau
*
bin_Tm
altezza
=
posterior
(
tau_val
,
Tm_val
,
T0
,
temp
,
time
,
utemp
)
normalization_loop
+=
base
*
altezza
print
(
"
Integrale di normalizzatione calcolato con un semplice loop =
"
,
normalization_loop
)
# Posterior normalizzata (PDF)
def
posterior_norm
(
tau
,
Tm
,
T0
,
Y
,
X
,
SigmaY
):
return
posterior
(
tau
,
Tm
,
T0
,
Y
,
X
,
SigmaY
)
/
normalization
# L'argomento dell'integrale del valore atteso di tau^k
def
arg_E_tau_k
(
tau
,
Tm
,
k
,
T0
,
Y
,
X
,
SigmaY
):
return
np
.
power
(
tau
,
k
)
*
posterior_norm
(
tau
,
Tm
,
T0
,
Y
,
X
,
SigmaY
)
# L'argomento dell'integrale del valore atteso di Tm^k
def
arg_E_Tm_k
(
tau
,
Tm
,
k
,
T0
,
Y
,
X
,
SigmaY
):
return
np
.
power
(
Tm
,
k
)
*
posterior_norm
(
tau
,
Tm
,
T0
,
Y
,
X
,
SigmaY
)
# L'argomento dell'integrale del valore atteso di tau*tm
def
arg_E_tauTm
(
tau
,
Tm
,
T0
,
Y
,
X
,
SigmaY
):
return
tau
*
Tm
*
posterior_norm
(
tau
,
Tm
,
T0
,
Y
,
X
,
SigmaY
)
```
%% Output
Integrale di normalizzatione (ed errore) con scipy.integrate = 1.5273411094443446e+22 43176788028416.0
Integrale di normalizzatione calcolato con un semplice loop = 1.5212378762774195e+22
%% Cell type:markdown id:3bac69d0 tags:
## Calcolo dei valori attesi, dev. std. e covarianze
%% Cell type:code id:f9c75773 tags:
```
python
E_tau
,
error_int_E_tau
=
integrate
.
nquad
(
arg_E_tau_k
,
[
range_tau
,
#tau
range_Tm
#Tm
],
args
=
(
1
,
T0
,
temp
,
time
,
utemp
)
#k=1
)
E_tau2
,
error_int_E_tau2
=
integrate
.
nquad
(
arg_E_tau_k
,
[
range_tau
,
#a
range_Tm
#b
],
args
=
(
2
,
T0
,
temp
,
time
,
utemp
)
#k=2
)
Var_tau
=
E_tau2
-
E_tau
**
2
Sigma_tau
=
math
.
sqrt
(
Var_tau
)
```
%% Cell type:code id:d4824d94 tags:
```
python
E_Tm
,
error_int_E_Tm
=
integrate
.
nquad
(
arg_E_Tm_k
,
[
range_tau
,
#a
range_Tm
#b
],
args
=
(
1
,
T0
,
temp
,
time
,
utemp
)
#k=1
)
E_Tm2
,
error_int_E_Tm2
=
integrate
.
nquad
(
arg_E_Tm_k
,
[
range_tau
,
#a
range_Tm
#b
],
args
=
(
2
,
T0
,
temp
,
time
,
utemp
)
#k=2
)
Var_Tm
=
E_Tm2
-
E_Tm
**
2
Sigma_Tm
=
math
.
sqrt
(
Var_Tm
)
```
%% Cell type:code id:8beecf53 tags:
```
python
E_tauTm
,
error_int_E_tauTm
=
integrate
.
nquad
(
arg_E_tauTm
,
[
range_tau
,
#tau
range_Tm
#Tm
],
args
=
(
T0
,
temp
,
time
,
utemp
)
)
Cov_tauTm
=
E_tauTm
-
E_tau
*
E_Tm
Rho_tauTm
=
Cov_tauTm
/
(
Sigma_tau
*
Sigma_Tm
)
```
%% Cell type:code id:810d04db tags:
```
python
print
(
"
Risultato del fit con integrazione della posterior:
"
)
my
.
PrintResult
(
"
tau_fit
"
,
E_tau
,
Sigma_tau
,
3
,
"
[s]
"
)
my
.
PrintResult
(
"
Tm_fit
"
,
E_Tm
,
Sigma_Tm
,
3
,
"
[C]
"
)
print
(
"
Cov[tau,Tm] fit
"
,
Cov_tauTm
,
"
[sC]
"
)
print
(
"
Rho[tau,Tm] fit
"
,
Rho_tauTm
)
```
%% Output
Risultato del fit con integrazione della posterior:
tau_fit = (4.113 +/- 0.011 ) [s] [0.27%]
Tm_fit = (21.547 +/- 0.026 ) [C] [0.12%]
Cov[tau,Tm] fit -0.0002288448051785963 [sC]
Rho[tau,Tm] fit -0.7688629634197679
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment