{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Parabolic fit\n", "==============\n", "\n", "#### Given two list of x and y coordinates, and a list of errors on y, find the parabola that minimizes the sum of distances (in the y direction) between the parabola and the(x,y) points.\n", "

" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sympy import *" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "xx, yy, aa, bb, cc = symbols('xx yy aa bb cc')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "xdata = np.array([1, 2, 3, 4, 5])\n", "ydata = np.array([1., 2.3, 3., 3.7, 3.])\n", "yerr = np.array([0.5, 0.5, 0.5, 0.5, 0.5])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want to find the parameters $a$, $b$ and $c$ of the parabola $y = c x^2 + b x + a$ which minimize:\n", "$ \\chi^2 = \\sum_i \\frac{(y_i - c x_i^2 - b x_i - a)^2}{\\sigma_i^2}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The minimum condition can be derived expanding $(yy - cc \\cdot xx^2 - bb \\cdot xx - aa)^2$, and equating the derivatives with respect to $aa$, $bb$, $cc$ to zero. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "aa**2 + 2*aa*bb*xx + 2*aa*cc*xx**2 - 2*aa*yy + bb**2*xx**2 + 2*bb*cc*xx**3 - 2*bb*xx*yy + cc**2*xx**4 - 2*cc*xx**2*yy + yy**2" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = expand((yy - cc*xx**2 - bb*xx - aa)**2)\n", "s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the three derivatives:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2*aa + 2*bb*xx + 2*cc*xx**2 - 2*yy" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s_aa = diff(s,aa)\n", "s_aa" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2*aa*xx + 2*bb*xx**2 + 2*cc*xx**3 - 2*xx*yy" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s_bb = diff(s,bb)\n", "s_bb" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2*aa*xx**2 + 2*bb*xx**3 + 2*cc*xx**4 - 2*xx**2*yy" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s_cc = diff(s,cc)\n", "s_cc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$a$, $b$ and $c$ are the solutions of the linear system:\n", "$\\begin{bmatrix}\n", "\\sum_i \\frac{1}{\\sigma_i^2} & \\sum_i \\frac{x_i}{\\sigma_i^2} & \\sum_i \\frac{x_i^2}{\\sigma_i^2}\\\\\n", "\\sum_i \\frac{x_i}{\\sigma_i^2} & \\sum_i \\frac{x_i^2}{\\sigma_i^2} & \\sum_i \\frac{x_i^3}{\\sigma_i^2}\\\\\n", "\\sum_i \\frac{x_i^2}{\\sigma_i^2} & \\sum_i \\frac{x_i^3}{\\sigma_i^2} & \\sum_i \\frac{x_i^4}{\\sigma_i^2}\\\\\n", "\\end{bmatrix}$\n", "$\\begin{bmatrix} a\\\\b\\\\c \\end{bmatrix}$ = \n", "$\\begin{bmatrix} \n", "\\sum_i \\frac{y_i}{\\sigma_i^2} \\\\ \\sum_i \\frac{x_i y_i}{\\sigma_i^2}\\\\\\sum_i \\frac{x_i^2 y_i}{\\sigma_i^2}\n", "\\end{bmatrix}$\n", "\n", "Compute numerically the entries of the left-hand-side matrix:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "yerrSq = yerr*yerr\n", "sum_one_over_yerrSq = (1./yerrSq).sum()\n", "sum_x_over_yerrSq = (xdata/yerrSq).sum()\n", "sum_x2_over_yerrSq = (xdata*xdata/yerrSq).sum()\n", "sum_x3_over_yerrSq = (xdata*xdata*xdata/yerrSq).sum()\n", "sum_x4_over_yerrSq = (xdata*xdata*xdata*xdata/yerrSq).sum()\n", "sum_y_over_yerrSq = (ydata/yerrSq).sum()\n", "sum_xy_over_yerrSq = (xdata*ydata/yerrSq).sum()\n", "sum_x2y_over_yerrSq = (xdata*xdata*ydata/yerrSq).sum()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 20., 60., 220.],\n", " [ 60., 220., 900.],\n", " [ 220., 900., 3916.]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat = np.array([[sum_one_over_yerrSq,sum_x_over_yerrSq,sum_x2_over_yerrSq],\n", " [sum_x_over_yerrSq,sum_x2_over_yerrSq,sum_x3_over_yerrSq],\n", " [sum_x2_over_yerrSq,sum_x3_over_yerrSq,sum_x4_over_yerrSq]])\n", "mat" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Invert the matrix:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.15 , -0.825 , 0.125 ],\n", " [-0.825 , 0.66785714, -0.10714286],\n", " [ 0.125 , -0.10714286, 0.01785714]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat_inv = np.linalg.inv(mat)\n", "mat_inv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.00000000e+00, 3.66373598e-15, -9.02056208e-16],\n", " [-3.10862447e-15, 1.00000000e+00, -2.31759056e-15],\n", " [ 2.62012634e-14, 7.51620988e-14, 1.00000000e+00]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(mat,mat_inv)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the entries of the right-hand-side vector:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 52. , 177.6, 685.6])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "noti = np.array([sum_y_over_yerrSq,sum_xy_over_yerrSq,sum_x2y_over_yerrSq])\n", "noti" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute $a$, $b$ and $c$:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1.02 , 2.25428571, -0.28571429])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(mat_inv,noti)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-1.0199999999999534\n", "2.2542857142857002\n", "-0.2857142857142829\n" ] } ], "source": [ "a, b, c = np.dot(mat_inv,noti)[0],np.dot(mat_inv,noti)[1],np.dot(mat_inv,noti)[2]\n", "print(a)\n", "print(b)\n", "print(c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot, adding extra points for the parabola:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "thickxdata = np.arange(0.8,5.4,0.1)\n", "plt.plot(thickxdata,c*thickxdata*thickxdata+b*thickxdata+a,xdata,ydata,'o')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "hide_input": false, "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.8.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }