{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from scipy.optimize import curve_fit" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# simpleFit.py\n", "# G. Cowan / RHUL Physics / October 2017\n", "# Simple program to illustrate least-squares fitting with curve_fit" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# define fit function\n", "def func(x, *theta):\n", " theta0, theta1 = theta\n", " return theta0 + theta1*x" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# set data values\n", "x = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0])\n", "y = np.array([2.7, 3.9, 5.5, 5.8, 6.5, 6.3, 7.7, 8.5, 8.7])\n", "sig = np.array([0.3, 0.5, 0.7, 0.6, 0.4, 0.3, 0.7, 0.8, 0.5])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# set default parameter values and do the fit\n", "p0 = np.array([1.0, 1.0])\n", "thetaHat, cov = curve_fit(func, x, y, p0, sig, absolute_sigma=True)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "chisq = 8.25153611783541 , ndof = 7\n" ] } ], "source": [ "# Retrieve minimized chi-squared, etc.\n", "numPoints = len(x)\n", "numPar = len(p0)\n", "ndof = numPoints - numPar\n", "chisq = sum(((y - func(x, *thetaHat))/sig)**2)\n", "print (\"chisq = \", chisq, \", ndof = \", ndof)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " Fitted parameters and standard deviations:\n", "thetaHat[ 0 ] = 2.2576981889195182 +- 0.29218909382046193\n", "thetaHat[ 1 ] = 0.7409333605720615 +- 0.05723132195270343\n" ] } ], "source": [ "# Print fit parameters and covariance matrix\n", "print (\"\\n\", \"Fitted parameters and standard deviations:\")\n", "sigThetaHat = np.sqrt(np.diag(cov))\n", "for i in range(len(thetaHat)):\n", " print (\"thetaHat[\", i, \"] = \", thetaHat[i], \" +- \", sigThetaHat[i])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " i, j, cov[i,j], rho[i,j]:\n", "0 0 0.08537446654762271 1.0\n", "0 1 -0.014376325915897156 -0.8597063424480256\n", "1 0 -0.014376325915897159 -0.8597063424480258\n", "1 1 0.0032754242124539935 0.9999999999999999\n" ] } ], "source": [ "print (\"\\n\", \"i, j, cov[i,j], rho[i,j]:\")\n", "for i in range(len(thetaHat)):\n", " for j in range(len(thetaHat)):\n", " rho = cov[i][j] / (sigThetaHat[i]*sigThetaHat[j])\n", " print (i, \" \", j, \" \", cov[i][j], \" \", rho)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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3s87pH379rz88ssALF26lJKSEh555JHDeq1w0GkxEUk4TZs2JTU1lbp169KmTZsDPiYpKYmUlJQDPqaio48+mgceeGDv7dtuu43u3btzzz337G179tlnadGiBQsWLOCkk06iuLiYUaNG0aVLF8DvkHm46tatS4sWLQBo1apV4H0uOnIRkfByLphLwHr06LHP7YULFzJr1iwaN26891J+5LNq1SoArrvuOoYOHUrfvn3Jy8tj+fLlEa+7tihcRETCoFGjRvvcLisro3///ixatGify+eff763X2fs2LEsW7aMs88+mw8//JDjjz+ev//97wDUqeO/niuOXtu1a1eEPk3N6bSYiMgBJCUlsWfPnsN67gknnMC0adPIyMigfv36B3zcL37xC37xi19w1VVXccUVV/Dkk09y6aWXkpaWBkBJScne/160aNEh6wUOu+Zw0pGLiMgBZGZmMm/ePIqKili/fv3ejviqGD58OD/++CN//vOfmTt3LqtXr+bdd98lJyeHzZs3s23bNoYPH05hYSFFRUXMnTuX2bNn07VrV8D3v7Rv356xY8eycuVK3n77be66666DvmdGRgZmxhtvvMG6devYsmVLjT5/TShcREQOYNSoUSQlJdG1a1fS0tJYs2ZNlZ975JFH8q9//Ys6derwxz/+keOOO47hw4eTnJxMcnIydevW5YcffuDiiy/mmGOO4ZxzzqFnz548+OCDANSvX58XXniB1atX0717d26//XbGjx9/0Pc86qijGDduHLm5ubRu3ZoRI0bU6PPXhLko6AgLWlZWlovG5RNERCLNzBY657Jq+jo6chERkbBTuIiISNgpXEREJOwULiIiEnYKFxERCTuFi4iIhJ3CRUREwk7hIiIiYRcX4WJmdczsWjNbbmbbzewrM3vAzBod+tkiIhJucREuwEPAg8AyYCTwEnAV8LqZxctnFBGJGTG/KrKZHYcPlFeccwMrtH8J/DdwPvBcQOWJiCSkePir/gLAgIf3a58ElAIXRrogEZFEFw/hciJQBsyr2Oic2w4sCt0vIiIRFA/hciSw3jm3o5L7vgFamllShGsSEUloMd/nAqQAlQULwPYKj9lZ8Q4zywFyQjd3mNmS2ikvZrQE1gddRMD0M9DPINE/P8Ax4XiReAiXUqDVAe5rUOEx+3DO5QP5AGa2IBz7F8Qy/Qz0MwD9DBL9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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set up plot\n", "matplotlib.rcParams.update({'font.size':18}) # set all font sizes\n", "plt.clf()\n", "fig, ax = plt.subplots(1,1)\n", "plt.gcf().subplots_adjust(bottom=0.15)\n", "plt.gcf().subplots_adjust(left=0.15)\n", "plt.errorbar(x, y, yerr=sig, xerr=0, color='black', fmt='o', label='data')\n", "plt.xlabel(r'$x$')\n", "plt.ylabel(r'$y$', labelpad=10)\n", "xMin = 0\n", "xMax = 10\n", "yMin = 0\n", "yMax = 10\n", "plt.xlim(xMin, xMax)\n", "plt.ylim(yMin, yMax)\n", "xPlot = np.linspace(xMin, xMax, 100) # enough points for a smooth curve\n", "fit = func(xPlot, *thetaHat)\n", "plt.plot(xPlot, fit, 'red', linewidth=2, label='fit result')\n", "\n", "# Tweak legend\n", "handles, labels = ax.get_legend_handles_labels()\n", "handles = [handles[1], handles[0]]\n", "labels = [labels[1], labels[0]]\n", "handles = [handles[0][0], handles[1]] # turn off error bar for data in legend\n", "plt.legend(handles, labels, loc='lower right', fontsize=14, frameon=False)\n", "\n", "# Make and store plot\n", "plt.show()\n", "plt.savefig(\"simpleFit.pdf\", format='pdf')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.10" } }, "nbformat": 4, "nbformat_minor": 2 }