{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Data fitting\n", "\n", "As you may have noticed from your labs the world works a bit different from the textbook. In textbooks you are usually asked to predict what your reactor will give you if you know the rate of the reaction. In real world, sometimes we want to estimate the rate of the reaction by running the experiment and analyzing the concentrations. To do that we need to learn how to fit our data. \n", "\n", "Hopefully, you are already persuaded and eager to learn how to use Python to fit your data, if not - please go back to the Dr. Yadav's Lecture 8.\n", "\n", "So the here is the problem we want to solve:\n", "\n", "You and your friend have an assignment from your boss to analyze how fast a secret chemical $A$ can react into another secret chemical $B$. \n", "\n", "$$A \\to B$$\n", "\n", "You and your buddy have run an experiment for the reaction in a batch reactor and got this data points below. We assume your friend likes Python as much as you do and as a good friend he has imported everything into Python arrays.\n", "\n", "```python\n", "time_array = array([ 0., 125., 250., 375., 500., 625., 750., 875., 1000.,\n", " 1125., 1250., 1375., 1500., 1625., 1750., 1875., 2000., 2125.,\n", " 2250., 2375., 2500., 2625., 2750., 2875.])\n", " \n", "C_A_array = array([10.28148623, 8.92676003, 7.47370739, 7.20498621, 6.01448975,\n", " 4.85174028, 4.68868558, 4.01410753, 3.94055544, 3.04186757,\n", " 2.40544184, 2.62290428, 2.18704979, 1.31502537, 1.03730156,\n", " 2.28837979, 0.45062549, 1.43886825, 1.26808295, 1.24125421,\n", " 0.28353151, 0.90117414, 0.74132173, 0.73710597])\n", "```\n", "\n", "You know that `time_array` corresponds to time and `C_A_array` to $C_A(t)$.\n", "\n", "You also know that it is the first order reaction, i.e:\n", "\n", "$-r_A = k C_A$\n", "\n", "Now $\\dfrac{d C_A}{dt} = - k C_A$ and the solution is $C_A(t) = C_{A0} \\cdot e^{-k t}$\n", "\n", "Your boss says that you and your friend need to give him a reaction constant $k$ otherwise your whole company won't be able to deliver a new product and will experience significant difficulties (especially after the recent tax reform). You suspect $C_{A0} = 10 moles/L$, but it would be nice to check that as well.\n", "\n", "What should we do?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting your data\n", "\n", "The first thing you want to do is to plot your data. Lets do that using Python:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np # our matlab-like module\n", "import matplotlib.pyplot as plt # plotting modules\n", "%matplotlib inline\n", "plt.style.use('presentation') # just have in your script for prettier plotting\n", "# if 'presentation' doesn't work use 'seaborn' or 'ggplot'\n", "\n", "time_array = np.array([ 0., 125., 250., 375., 500., 625., 750., 875., 1000.,\n", " 1125., 1250., 1375., 1500., 1625., 1750., 1875., 2000., 2125.,\n", " 2250., 2375., 2500., 2625., 2750., 2875.])\n", " \n", "C_A_array = np.array([10.28148623, 8.92676003, 7.47370739, 7.20498621, 6.01448975,\n", " 4.85174028, 4.68868558, 4.01410753, 3.94055544, 3.04186757,\n", " 2.40544184, 2.62290428, 2.18704979, 1.31502537, 1.03730156,\n", " 2.28837979, 0.45062549, 1.43886825, 1.26808295, 1.24125421,\n", " 0.28353151, 0.90117414, 0.74132173, 0.73710597])\n", "\n", "plt.plot(time_array, C_A_array, 'ko', label='data') # ko = black o (black circles)\n", "\n", "plt.xlabel('$t\\ [s]$') # we use $ $ to tell Python to use Latex you can just use plt.xlabel('t [s]')\n", "plt.ylabel('$C_A\\ [moles/L]$') # here the slash \\ creates a space between C_A and [moles]\n", "plt.legend() #brings up the legend\n", "plt.savefig('problem1.png') #saving the graph\n", "plt.show() # will show it below " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How do we find k\n", "\n", "Ok! Looks something like an exponent. That is a good sign. But how do we find the $k$ parameter????\n", "Luckily, your friend have heard something about least squares method.\n", "\n", "The idea is simple:\n", "\n", "What if ... we take an arbitrary parameter $k = 0.01$ and see what it would give us? Lets see...\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "k_test_1 = 0.01\n", "C_A_test_1_array = 10.*np.exp(-k_test_1*time_array) # this is our analytical solution\n", "\n", "# our data\n", "plt.plot(time_array, C_A_array, 'ko', label='data') # ko = black o (black circles)\n", "# first guess \n", "plt.plot(time_array, C_A_test_1_array, 'r-', label='test 1') # r- = solid red line\n", "\n", "plt.xlabel('$t\\ [s]$') # we use $ $ to tell Python to use Latex you can just use plt.xlabel('t [s]')\n", "plt.ylabel('$C_A\\ [moles/L]$') # here the slash \\ creates a space between C_A and [moles]\n", "plt.legend()\n", "# plt.show()\n", "\n", "#lets see what we get:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see the fit isn't that great! To know the exact value we can calculate the squared difference between each data point and our predicted curve (red curve and black data) and call this parameter $\\chi^2$:\n", "\n", "$$\\chi^2 = \\Sigma (data[i] - test[i])^2 = \\Sigma (black[i] - red[i])^2$$\n", "\n", "If the $\\chi^2$ parameter is really small then we have a good fitting. So the game of curve fitting becomes the game of selecting the parameter $k$ so it produces the smallest $\\chi^2$ parameter.\n", "\n", "Lets see what is it equal to:\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "chi2 = 284.08995409151896\n" ] } ], "source": [ "# Lets go over each value of the both arrays and add the difference into the chi2 \n", "chi2 = 0\n", "for i in range(len(C_A_array)):\n", " chi2 = chi2 + (C_A_array[i] - C_A_test_1_array[i])**2\n", "print('chi2 = {0}'.format(chi2))\n", "# you can just use print(chi2) if you want. \n", "# chi2 = 284.0954414312236 - that is a lot!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After many iterations of choosing k we came to a better guess value $k = 0.001$. Lets try it out:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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upbabTcYO7Z2fexY+OabZEVjjDFhrV69mgceeCDq/e+5554GB3GeNGkSe+21FyLCzz//HPU54sUSXSxccQX06eP+vXYt2ADPxpgUE89Ed8QRR/D666+z++67R338eLJEFwseDzz4YO36tGlgswAbYxoiEr+lAddccw1+v59+/fpx1VVXAXDnnXcycOBAcnJyuOEG1ztr7dq1nHjiiRx44IH06dOHZ555hvvuu4/vvvuOIUOGMGTIkHrHPuigg+jVq1dcflWx0DbZAWSMI4+E88+Hxx9365dfDgsWuNaZxhiTZLfddhsLFixg3rx5AMycOZMlS5bw4YcfoqqMGDGCd955hxUrVrDrrrvyyiuvALBmzRq22WYb7r77bmbNmsUOO+yQzMuIit3RxdIdd8B2wSE3v/gCbr89ufEYY0wDZs6cycyZMznooIPo378/n3/+OUuWLKFv3768/vrrXH311cyePZttttkm2aG2mCW6WOrWDW69tXb91lthyZLkxWOMSU21o+XGfok4BOXaa69l3rx5zJs3j6VLl3LRRRexzz77MHfuXPr27cu1117LjTfeGMdfRGJYoou1iy+GQw5x/964kaoLL6Rw1Ch8Ph9ZWVn4fD4KCwvx+/3JjdMY06rUnXJn2LBhPProo1tmK//222/56aef+O677/B6veTn5/PnP/+Zjz/+OOz+6cQSXay1aeOm78lyv1rvu++yavJkKioqUFUqKiooLi4mJyeHMmuwYoxJkK5du3LEEUfQp08frrrqKo477jjOPvtsDjvsMPr27UteXh4VFRXMnz+fQw45hH79+jF+/Hiuu+46AAoKCsjNzQ3bGOW+++6jR48eLF++nJycHC6++OJEX16jRJtxq5spBgwYoHPmzInrOdacey7blJQA8C3QG6isU8br9VJeXm4jkhvTCnz22Wfst99+yQ4jqcL9DkRkrqoOiOd57Y4uTm70ePgh+O/uuMny6goEAkycODFxQRljTCtkiS5OJj/3HH8KWb8C6FunTCAQoCR412eMMSY+LNHFSWVlJU8BbwbX2wIPAnW7c9Y8CDbGZL7W+KioRjKv3RJdnHTu3BmA0cDG4LYjgIsaKGeMyWwdOnTgl19+aZXJTlX55Zdf6NChQ1LObyOjxEl+fj7FxcV8HghwF/DX4Pa7gdeBZYDH42HkyJHJCtEYk0A1rRJXrFiR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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "k_test_2 = 0.001\n", "C_A_test_2_array = 10.*np.exp(-k_test_2*time_array) # this is our analytical solution\n", "\n", "# our data\n", "plt.plot(time_array, C_A_array, 'ko', label='data') # ko = black o (black circles)\n", "# first guess \n", "plt.plot(time_array, C_A_test_2_array, 'r-', label='test 1') # r- = solid red line\n", "\n", "\n", "plt.xlabel('$t\\ [s]$') \n", "plt.ylabel('$C_A\\ [moles/L]$') \n", "\n", "plt.legend()\n", "plt.show()\n", "\n", "#lets see what we get:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wow! That is perfect! lets see what $\\chi^2$ is equal to:\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "chi2 = 3.7755933932096144\n" ] } ], "source": [ "chi2 = 0\n", "for i in range(len(C_A_array)):\n", " chi2 = chi2 + (C_A_array[i] - C_A_test_2_array[i])**2\n", "print('chi2 = {0}'.format(chi2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now it looks like something small - (and hence the graph looks to fit the data). In the ideal world of no random noises, $\\chi^2=0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now lets see how we can do the same thing using the stuff our friends from SciPy prepared for us:\n", "\n", "## Solving everything using SciPY - easy to use fitting" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:11: RuntimeWarning: overflow encountered in exp\n", " # This is added back by InteractiveShellApp.init_path()\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Huraah! our parameter k = [0.0010353]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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uypMnux+GmNaNH36dA455BDGjBnDnDlz+POf/wy0beTy5o4zdOhQFi5c2Oz+q1atonfv3mGduyl33323DWYbJktQbXXHHe5qClzHXX+PeGNM8/7xj3/w8ssvM3v2bEaOHMk111wDtC1BReo4kZQoCaqqqireIbSaJai26tkTJkyoX7/qKmhhigJjEopI9JYmTJgwga+++oqRI0cybdo0HnnkES677LJGp9aoVV1dTY8ePVBVNmzYQFpaGvPnzwdg8ODBrFixosXjPPXUUxx++OEcdNBBLFjQ3JRz7nxXXXUVAwcOJDs7m/vvvx9wo7efcMIJ9OvXjz59+vD8888DsGnTJk499VT69u1L7969efLJJ5k+fTrffvstxx13HMcdd9x257jmmmvo1asX2dnZXOnvvrJy5UqOPPJIBg4cyPXXX183GO+bb77JiNo7NsBll13GI488AsAtt9zCwIED6d27N/n5+bWDFzB06FCuu+46hgwZwt/+9jfWrl3LWWedxcCBAxk4cCDvvPMOAG+99RY5OTnk5ORw2GGHNRhWKq6i3RM4EZc2jSTRmB9/VN1ll/oRJqZPj+zxjYmwBiMD1P7dRmNpxgEHHKBr165VVdWHH35YJ06cqKqq559/vj711FON7jNs2DBdunSpvvDCCzpgwAC97bbbdMuWLdq9e/cWjzNkyBC94oorVFX1pZde0hNOOGG7469cuVIPPfRQVVW9//779dZbb1VV1S1btmj//v31q6++Up/Pp2VlZaqqunbtWs3KytKamhotKirScePG1R1rw4YN29Uz0Lp16/Sggw7SmpoaVVVdv369qqqedtpp+uijj6qq6owZM7Rjx46qqjpv3jw99dRT6/afOHGiPvzww3XHqpWXl6dz5sypq/Oll15a99ro0aN1wYIFqqq6evVq7dmzp6qqjhgxQt9++21VVS0vL1efz9cgVhtJIpl16dKwFd9NN8H6xgZcN8a0xeDBg5k/fz7z58/n2muv5e233+ajjz5i4MCBIe1/5plnAtC/f39WrVrVbNlXX32Vf/3rX+Tk5DBo0CDWrVvHf//7X1SV6667juzsbE488UTWrFnDDz/8QJ8+fXjttde4+uqrWbBgAbvsskuzx8/MzKRDhw6MGzeOZ555Bq/XC8A777zD6NGjAUIeKX7evHkMGjSIPn368MYbbzSYfuScc86p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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# step 0: importing all the jibber-jabber modules\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "from scipy.optimize import curve_fit # this guy will help us fit everything\n", "\n", "#step 1: define the function you want to fit:\n", "\n", "def func(t, k):\n", " return 10. * np.exp(-k * t)\n", "\n", "\n", "# step 2: define the arrays you want to fit\n", "\n", "time_array = np.array([ 0., 125., 250., 375., 500., 625., 750., 875., 1000.,\n", " 1125., 1250., 1375., 1500., 1625., 1750., 1875., 2000., 2125.,\n", " 2250., 2375., 2500., 2625., 2750., 2875.])\n", " \n", "C_A_array = np.array([10.28148623, 8.92676003, 7.47370739, 7.20498621, 6.01448975,\n", " 4.85174028, 4.68868558, 4.01410753, 3.94055544, 3.04186757,\n", " 2.40544184, 2.62290428, 2.18704979, 1.31502537, 1.03730156,\n", " 2.28837979, 0.45062549, 1.43886825, 1.26808295, 1.24125421,\n", " 0.28353151, 0.90117414, 0.74132173, 0.73710597])\n", "\n", "# step 3 run the curve fitting:\n", "\n", "popt, pcov = curve_fit(func, time_array, C_A_array, p0=(0.1))\n", "# parameters optimized, parameters covariance matrix (we don't need it for now) = \n", "# curve_fit(our function, our x data, our y data, p0=(our initial guess for the parameters))\n", "\n", "# step 4 print your parameters\n", "\n", "print('Huraah! our parameter k = {0}'.format(popt))\n", "\n", "# step 5 plot your results:\n", "\n", "plt.plot(time_array, C_A_array, 'ko', label='data')\n", "plt.plot(time_array, func(time_array, popt), 'r-', label='fit with least squares')\n", "plt.xlabel('$t\\ [s]$') \n", "plt.ylabel('$C_A\\ [moles/L]$') \n", "\n", "plt.legend()\n", "plt.show()\n", "\n", "#step 6 report to your boss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok great! We have saved our company and we have found the paramter. \n", "We were also asked to find $C_A0$ which supposed to be around $\\sim 10$. How do we do that? Ok, lets use our 6-step process:\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:10: RuntimeWarning: overflow encountered in exp\n", " # Remove the CWD from sys.path while we load stuff.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Huraah! our parameter C_A0 = 10.156458090006836, k = 0.0010522403405579899\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# step 0: importing all the jibber-jabber modules\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.optimize import curve_fit # this guy will help us fit everything\n", "\n", "#step 1: define the function you want to fit:\n", "\n", "# here you can see I have two parameters, so the fitted popt will have two as well\n", "def func(x, C_A0, k):\n", " return C_A0 * np.exp(-k * x)\n", "\n", "\n", "# step 2: define the arrays you want to fit\n", "\n", "time_array = np.array([ 0., 125., 250., 375., 500., 625., 750., 875., 1000.,\n", " 1125., 1250., 1375., 1500., 1625., 1750., 1875., 2000., 2125.,\n", " 2250., 2375., 2500., 2625., 2750., 2875.])\n", " \n", "C_A_array = np.array([10.28148623, 8.92676003, 7.47370739, 7.20498621, 6.01448975,\n", " 4.85174028, 4.68868558, 4.01410753, 3.94055544, 3.04186757,\n", " 2.40544184, 2.62290428, 2.18704979, 1.31502537, 1.03730156,\n", " 2.28837979, 0.45062549, 1.43886825, 1.26808295, 1.24125421,\n", " 0.28353151, 0.90117414, 0.74132173, 0.73710597])\n", "\n", "# step 3 run the curve fitting:\n", "\n", "popt, pcov = curve_fit(func, time_array, C_A_array, p0=(8, 0.1))\n", "# curve_fit(our function, our x data, our y data, p0=(our initial guesses for C_A0 and k))\n", "# since from the graph we kind of see C_A0 is around 8-10\n", "\n", "# step 4 print your parameters\n", "\n", "print('Huraah! our parameter C_A0 = {0}, k = {1}'.format(popt[0], popt[1]))\n", "\n", "# step 5 plot your results:\n", "\n", "plt.plot(time_array, C_A_array, 'ko', label='data')\n", "plt.plot(time_array, func(time_array, popt[0], popt[1]), 'r-', label='fit with least squares')\n", "plt.xlabel('$t\\ [s]$') \n", "plt.ylabel('$C_A\\ [moles/L]$') \n", "\n", "plt.legend()\n", "plt.show()\n", "\n", "#step 6 report to your boss\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Last remarks: there are 2 main things to consider when fitting the data:\n", "\n", "_1_ What kind of model you are fitting your data with. Make sure you use your engineering 6-th sense for that\n", "\n", "_2_ What kind of parameters we are expecting. So from plotting the data we can see that the half-life of our curve is around 1/500 seconds - so our initial parameter should be around 0.002. Sometimes hitting the right initial parameter could be really important!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 2:\n", "\n", "Fitting another function:\n", "\n", "\n", "$dC_A/dt = - k$\n", "\n", "The exact solution here would be\n", "\n", "$C_A =C_{A0} - kt$\n", "\n", "Our Experimental data is:\n", "\n", "```python\n", "import numpy as np\n", "time_array = np.array([ 0. , 0.30612245, 0.6122449 , 0.91836735, 1.2244898 ,\n", " 1.53061224, 1.83673469, 2.14285714, 2.44897959, 2.75510204,\n", " 3.06122449, 3.36734694, 3.67346939, 3.97959184, 4.28571429,\n", " 4.59183673, 4.89795918, 5.20408163, 5.51020408, 5.81632653,\n", " 6.12244898, 6.42857143, 6.73469388, 7.04081633, 7.34693878,\n", " 7.65306122, 7.95918367, 8.26530612, 8.57142857, 8.87755102,\n", " 9.18367347, 9.48979592, 9.79591837, 10.10204082, 10.40816327,\n", " 10.71428571, 11.02040816, 11.32653061, 11.63265306, 11.93877551,\n", " 12.24489796, 12.55102041, 12.85714286, 13.16326531, 13.46938776,\n", " 13.7755102 , 14.08163265, 14.3877551 , 14.69387755, 15. ])\n", "\n", "C_A_array = np.array([10.07639696, 9.91832079, 9.88786894, 9.86452614, 9.94122765,\n", " 9.84390408, 9.67133 , 9.83831594, 9.85882335, 9.80157275,\n", " 9.84539316, 9.55091516, 9.61587477, 9.66549779, 9.49617392,\n", " 9.55431562, 9.35852625, 9.49039332, 9.38783532, 9.44147304,\n", " 9.40256963, 9.29987479, 9.14910022, 9.40193543, 9.15306236,\n", " 9.35110886, 9.21753824, 9.04908686, 9.23874406, 9.02922114,\n", " 9.01426505, 9.07687961, 9.03789781, 8.74373902, 8.93811106,\n", " 8.89792648, 8.92497756, 8.9052101 , 8.69154187, 8.83577787,\n", " 8.6515694 , 8.8865218 , 8.43442155, 8.63970657, 8.5779596 ,\n", " 8.6386648 , 8.64805349, 8.37248495, 8.60161561, 8.64226331])\n", "```\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Home work:\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Your boss asked you to try another reaction and get parameters from there.\n", "\n", "$$2A ->B$$\n", "\n", "Your boss told you that it is probably a second order reaction $-r_A = k [C_A]^2$.\n", "\n", "Your friend has helped you out with the design equation and the exact solution for the current system:\n", "\n", "$dC_A/dt = r_A = -k C^2_A$\n", "\n", "The exact solution here would be\n", "\n", "$1/C_A = kt + 1/C_{A0}$\n", "\n", "Your friend suggested that it would be better to plot $1/C_A$ instead of $C_A$. You think it is a great idea. Conveniently, your data is presented in the neccesseary format:\n", "\n", "Time:\n", "\n", "```python\n", "time_array = array([ 0. , 0.41666667, 0.83333333, 1.25 , 1.66666667,\n", " 2.08333333, 2.5 , 2.91666667, 3.33333333, 3.75 ,\n", " 4.16666667, 4.58333333, 5. , 5.41666667, 5.83333333,\n", " 6.25 , 6.66666667, 7.08333333, 7.5 , 7.91666667,\n", " 8.33333333, 8.75 , 9.16666667, 9.58333333, 10. ])\n", "```\n", "\n", "and $1/C_A(time)$:\n", "\n", "```python\n", "CA_inv_array = array([0.09955774, 0.10041539, 0.10164106, 0.10040534, 0.10151214,\n", " 0.1027833 , 0.10252228, 0.10259392, 0.10369246, 0.10371607,\n", " 0.10400771, 0.10517007, 0.10549644, 0.10558765, 0.10639114,\n", " 0.10600782, 0.10506377, 0.10734534, 0.10655902, 0.10820498,\n", " 0.1077726 , 0.10985819, 0.10912644, 0.11053292, 0.10939707])\n", "```\n", "\n", "Your task is to find parameters $k$ and $C_A0$ from the experimental data.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bonus: How to make your data noisy or where did I get the data points above?\n", "\n", "Let's say you want to practice these problems at home. How do you generate data to test your fitting skills?\n", "Easy. The only thing you need to do is to generate a signal and add a random noise to it.\n", "\n", "So lets say you want to test your algorithm on a linear curve:\n", "\n", "y = k*x + b, where k and b are constants" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#step 1: define the function\n", "def f(x, k, b):\n", " return x*k + b\n", "\n", "#step 2: define the parameters\n", "k = 0.5\n", "b = -2\n", "N_points = 100\n", "\n", "#step 3: define arrays ( x_data and y_pure data )\n", "x_data = np.linspace(0,10, N_points)\n", "\n", "y_pure = f(x_data, k, b)\n", "\n", "plt.plot(x_data, y_pure, 'go--')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Now lets add a bit of noise to it\n", "plt.plot(x_data, y_pure, 'go--',label='pure data')\n", "\n", "noise = 0.4*np.random.normal(0, 1, N_points) #0.4 - is how noisy is the data\n", "#which looks like this:\n", "\n", "plt.plot(x_data,noise,'k--',label='noise')\n", "\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/bazilevs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:2022: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not compatible \"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#so your resulting data will look like this:\n", "y_noisy_data = y_pure + noise\n", "\n", "plt.plot(x_data, y_noisy_data, 'go',label='noisy data')\n", "\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.legend()\n", "\n", "#voila!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }