Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Latest commit 1e02abd Feb 14, 2020 History
1 contributor

Users who have contributed to this file

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Roots of Nonlinear functions"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## It's not always possible to analytically solve for a given variable. \n",
"\n",
"In the last [Module 03](./03_Get_Oscillations.ipynb), we created an _implicit_ Heun's method that created the following problem: How can we solve for a value of $y$, a dependent variable, when the function is a function of $y$, in an equation format it becomes\n",
"\n",
"$y=f(y,parameters)$\n",
"\n",
"where $parameters$ are known inputs to the equation, but the variable $y$ is not separable from the function $f$. We can rewrite the problem as \n",
"\n",
"$0=y-f(y,parameters).$\n",
"\n",
"Many times, we may have a deeper problem such as wanting to know when two functions are equal to each other:\n",
"\n",
"$0 = g(y,parameters) -f(y,parameters)$\n",
"\n",
"where $g(y,parameters)$ in the previous equation was $g(y)=y$. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Getting to the root of a problem\n",
"\n",
"This is a very common problem in engineering designs. You may have mathematical models for designs, but you can't explicitly solve for the variables you can control or see [1]. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Freefall example:\n",
"Consider an observation of an object, with a known shape, so its drag coefficient c=0.25 kg/m. If the object reaches a velocity of 36 m/s after 4 seconds of freefalling, what is its mass?\n",
"\n",
"$v(t)=\\sqrt{\\frac{gm}{c_{d}}}\\tanh(\\sqrt{\\frac{gc_{d}}{m}}t)$\n",
"\n",
"We can plug in the known parameters, $t=4~s$, $v=36~m/s$, $c_d=0.25$ kg/s, and $g=9.81~m/s^2$, but we cannot separate $m$ from the $\\tanh$ and $\\sqrt{}$.\n",
"\n",
"$36 = \\sqrt{\\frac{9.81m}{0.25}}\\tanh(\\sqrt{\\frac{9.81*0.25}{m}}4)$\n",
"\n",
"Instead, we can use computational methods to solve the problem by creating a new function f(m) where\n",
"\n",
"$f(m)=36 - \\sqrt{\\frac{9.81m}{0.25}}\\tanh(\\sqrt{\\frac{9.81*0.25}{m}}4)$. \n",
"\n",
"When f(m) = 0, we have solved for m in terms of the other variables (e.g. for a given time, velocity, drag coefficient and acceleration due to gravity)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"plt.rcParams.update({'font.size': 22})\n",
"plt.rcParams['lines.linewidth'] = 3"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"g=9.81 # acceleration due to gravity\n",
"\n",
"def f_m(m,v=36,t=4,c_d=0.25,):\n",
" ''' define a function f(m) that returns \n",
" v(t)-sqrt(mg/cd)*tanh(sqrt(gcd/m)*t)\n",
" \n",
" arguments:\n",
" ---------\n",
" m: mass of object\n",
" c_d: drag coefficient default=0.25 kg/m # drag coefficient\n",
" t: time of velocity measure default=4 seconds\n",
" v: velocity measure at time, t default=36 m/s\n",
" \n",
" returns:\n",
" --------\n",
" f_m: the difference between v(t) and sqrt(mg/cd)*tanh(sqrt(gcd/m)*t)\n",
" if f_m ==0, then mass is correctly chosen\n",
" '''\n",
" \n",
" f_m = v-np.sqrt(g*m/c_d)*np.tanh(np.sqrt(g*c_d/m)*t)\n",
" return f_m\n",
"\n",
"m=np.linspace(60, 200,100); # possible values for mass 50 to 200 kg\n",
"plt.plot(m,f_m(m))\n",
"plt.plot(m,np.zeros(len(m)))\n",
"plt.xlabel('mass, m (kg)')\n",
"plt.ylabel('f(m)');"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"-0.12322824302261637"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f_m(149)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"The Brute force method is plot f_m vs m and with smaller and smaller steps until f_m ~ 0, but we can do much better. \n",
"\n",
"We will look at two classes of methods, most numerical solutions use a combination of these two types of solvers:\n",
"\n",
"1. Bracketing methods\n",
"2. Open methods\n",
"\n",
"In __Bracketing__ methods, we choose an upper and lower bound and find the best solution in that range.\n",
"\n",
"In __Open__ methods, we choose an initial guess, then we have a function that brings us closer to the solution with every iteration.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"## Incremental searching ( a smarter brute force approach)\n",
"\n",
"If you consider a range of possible masses, e.g. 50 kg - 200 kg, then we can evaluate our function $f(m)$ at evenly-spaced intervals and look for x-axis crossings. If the value of $f(m_{i})$ is positive, and the value of $f(m_{i+1})$ is negative, then the correct mass is somewhere between $m_i$ and $m_{i+1}$. \n",
"\n",
"Take a look at the implementation we have below of the `incsearch` function. \n",
"\n",
"There are a few key lines to look at:\n",
"\n",
"```python\n",
" x = np.linspace(xmin,xmax,ns)\n",
" f = func(x)\n",
"```\n",
"\n",
"In these two lines, we are dividing the interval into `ns`-equally-spaced values (our default is ns=50). Then, we evaluate our function ($f(m)$) `ns` times for each value. \n",
"\n",
"```python\n",
" sign_f = np.sign(f)\n",
" delta_sign_f = sign_f[1:]-sign_f[0:-1]\n",
" i_zeros = np.nonzero(delta_sign_f!=0)\n",
"```\n",
"\n",
"On these three lines, we are looking for sign-changes in the array `f`. First, we get just the sign of each array value with `np.sign`. Then, we look at the changes in sign with the difference between f[i] and f[i-1] for i=1...len(f). Finally, we get the indices sign changes by looking for nonzero elements in `delta_sign_f`. \n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Discussion\n",
"\n",
"Why can't we just consider cases where `delta_sign_f>0`? Why do we care about all nonzero sign changes?"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"def incsearch(func,xmin,xmax,ns=50):\n",
" '''incsearch: incremental search root locator\n",
" xb = incsearch(func,xmin,xmax,ns):\n",
" finds brackets of x that contain sign changes\n",
" of a function on an interval\n",
" arguments:\n",
" ---------\n",
" func = name of function\n",
" xmin, xmax = endpoints of interval\n",
" ns = number of subintervals (default = 50)\n",
" returns:\n",
" ---------\n",
" xb(k,1) is the lower bound of the kth sign change\n",
" xb(k,2) is the upper bound of the kth sign change\n",
" If no brackets found, xb = [].'''\n",
" x = np.linspace(xmin,xmax,ns)\n",
" f = func(x)\n",
" sign_f = np.sign(f)\n",
" delta_sign_f = sign_f[1:]-sign_f[0:-1]\n",
" i_zeros = np.nonzero(delta_sign_f!=0)\n",
" nb = len(i_zeros[0])\n",
" xb = np.block([[ x[i_zeros[0]+1]],[x[i_zeros[0]] ]] )\n",
"\n",
" \n",
" if nb==0:\n",
" print('no brackets found\\n')\n",
" print('check interval or increase ns\\n')\n",
" else:\n",
" print('number of brackets: {}\\n'.format(nb))\n",
" return xb"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test our function\n",
"\n",
"To test our `incsearch` function on a known function, let's try finding all the times that $sin(x)$ crosses the x-axis from $x=-1...7$. Our function should return values at $x=0,~x=\\pi/2,~x=\\pi.$\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of brackets: 3\n",
"\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"mn=-1\n",
"mx=7\n",
"x=np.linspace(mn,mx)\n",
"plt.plot(x,np.sin(x))\n",
"\n",
"xb = incsearch(lambda x: np.sin(x),mn,mx,ns=50)\n",
"\n",
"plt.plot(xb,np.sin(xb),'s')\n",
"plt.ylabel('$\\sin(x)$')\n",
"plt.xlabel('x')\n",
"plt.title('Upper bounds={:.2f},{:.2f},{:.2f}\\nLower bounds={:.2f},{:.2f},{:.2f},'.format(*xb[0,:],*xb[1,:]));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Success - incsearch works\n",
"\n",
"You should see that `incsearch` returns intervals in the correct locations near x=0, x=$\\pi/2$ and x=$\\pi.$ Now, let's apply it to the freefall problem and discover what mass is necessary to reach 36 m/s at t=4 sec of freefall.\n",
"\n",
"Depending upon what `ns` you choose, you should see that a mass of 142-143 kg will reach 36 m/s in 4 seconds of freefall. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of brackets: 1\n",
"\n",
"Upper bound on mass = 143.94 kg\n",
"Lower bound on mass = 142.42 kg\n"
]
}
],
"source": [
"xb = incsearch(f_m,50,200,ns=100)\n",
"\n",
"print('Upper bound on mass = {:.2f} kg'.format(*xb[0,:]))\n",
"print('Lower bound on mass = {:.2f} kg'.format(*xb[1,:]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercise \n",
"\n",
"Use the `incsearch` function to find the number of times $cos(x)=0$ in the interval $x=0...8$.\n",
"\n",
"Plot x-vs-cos(x)\n",
"\n",
"and \n",
"\n",
"plot the values of `xb` and `np.cos(xb)` as $\\circ$-markers (`'o'`)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Bisection method"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"The `incsearch` function will always return a set of upper and lower bounds on the zeros of a function, but if you want to increase the accuracy of your solutions, you have to calculate $f(x)$ __a lot__. The error in the solution is always \n",
"\n",
"$error = \\frac{x_{max}-x_{min}}{ns}$\n",
"\n",
"We can reduce the number of times we have to evaluate the function with more insight. \n",
"\n",
"Let's divide interval in half until, then evaluate $f(x_{max})$, $f(x_{min})$, and $\\frac{x_{max}+x_{min}}{2}$. Now, we can look for a sign change between these three locations. We focus our attention on the bisected bracket. Look at the figure below that illustrates choosing the region of interest on the right vs left side of the interval."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"![Using the bisection method to reduce search to half of interval](../images/bisection.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Let's use the same interval we started with to illustrate a few steps in the right direction. \n",
"\n",
"$x_{max}=200$ kg\n",
"\n",
"$x_{min}=50$ kg\n",
"\n",
"$x_{mid}=125$ kg"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"f(xmin) = 4.58, f(xmid) = 0.41, f(xmax)=-0.86\n"
]
}
],
"source": [
"x=np.array([50,125,200])\n",
"fx=f_m(x)\n",
"\n",
"print('f(xmin) = {:.2f}, f(xmid) = {:.2f}, f(xmax)={:.2f}'.format(*fx))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we have reduced our region of interest to just 125-200 kg. \n",
"\n",
"## Exercise\n",
"\n",
"Divide the region 125-200 kg into two, and repeat the above step. Is the solution in the upper (163-200 kg)? or lower (125-163 kg) region? What are the values of f_m(m)?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Bisect Function"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"We can automate this process with a `bisect` function. Its a much better root locator because we can reduce the error without evaluating the function a lot of times [1, 2]. \n",
"\n",
"_Note the use of the function `break`:_\n",
"\n",
"We can use an `if`-statement to check a condition and `break` the loop if that condition is met. These break statements are often used in `while`-loops so that you can have some stopping criteria. In our case, we use the specified error, `es`, as a stopping criteria. If our relative error, \n",
"\n",
"$e_{relative} = \\frac{|x_{new}-x_{old}|}{x_{new}}$\n",
"\n",
"is less than our specified error, the loop is broken and the number of iterations halts at that point. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"## Discussion\n",
"\n",
"What is another stopping criteria that you could use?"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"def bisect(func,xl,xu,es=0.0001,maxit=50):\n",
" '''bisect: root location zeroes\n",
" root,fx,ea,iter=bisect(func,xl,xu,es,maxit,p1,p2,...):\n",
" uses bisection method to find the root of func\n",
" arguments:\n",
" ------\n",
" func = name of function\n",
" xl, xu = lower and upper guesses\n",
" es = desired relative error (default = 0.0001 )\n",
" maxit = maximum allowable iterations (default = 50)\n",
" p1,p2,... = additional parameters used by func\n",
" returns:\n",
" -------\n",
" root = real root\n",
" and a list of [fx, ea, iter]\n",
" fx = function value at root\n",
" ea = approximate relative error ( )\n",
" iter = number of iterations'''\n",
" xr = xl\n",
" ea = 100\n",
" for iter in range(0,maxit):\n",
" xrold = xr\n",
" xr = (xl + xu)/2\n",
" if xr != 0:\n",
" ea = abs((xr - xrold)/xr) * 100\n",
" else:\n",
" ea = abs((xr - xrold)/1) * 100\n",
" test = func(xl)*func(xr)\n",
" if test < 0:\n",
" xu = xr;\n",
" elif test > 0:\n",
" xl = xr;\n",
" else:\n",
" ea = 0;\n",
" if ea <= es:\n",
" break\n",
"\n",
" root = xr\n",
" fx = func(xr);\n",
" return root,[fx,ea,iter]\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The best estimate for the mass is 142.73769855499268 kg\n",
"We reached a relative error of 5.0109798921069224e-05 with 20 iterations\n"
]
}
],
"source": [
"Mass_at_36ms,out=bisect(f_m,50,200)\n",
"print('The best estimate for the mass is {} kg'.format(Mass_at_36ms))\n",
"print('We reached a relative error of {} with {} iterations'.format(out[1],out[2]))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Recursive functions\n",
"\n",
"The `bisection` function and the next two open root solvers (`newtraph` and `modsecant`) make use of a recursive function. \n",
"\n",
"Definition:\n",
"\n",
"__recursive: for a definition of recursive, see recursive.__\n",
"\n",
"Recursive functions work by updating an initial assignment each time the function is called. In the bisection method, the initial solution is assumed to be halfway between the upper and lower bound\n",
"\n",
"$x_{r} = \\frac{x_u+x_l}{2},$\n",
"\n",
"but once the upper or lower bound is updated, the value of $x_r$ is updated as well. This is why the first step in the loop is to temporarily save $x_r$ as `xrold`. With the `xrold` variable, we can track the progress of our solution. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Newton-Raphson: Open method\n",
"\n",
"Bracketing methods are great, but they are burdened by slow convergence rates. In the bisection method, we reduce our error by 50\\% with each region of interest selection, but this is rather slow. \n",
"\n",
"One of the fastest root-finding methods is the __Newton-Raphson__ method, it is an __open method__ so it does not require an upper- and lower-bound [1,2]. \n",
"\n",
"The __Newton-Raphson__ works by creating a Taylor series expansion around your initial guess of the function, \n",
"\n",
"$f(x_{0}+\\Delta x) = f(x_{0}) +\\frac{df}{dx}\\Delta x +...$\n",
"\n",
"We want to determine what step, $\\Delta x$, to take in order for $f(x_{0}+\\Delta x)=0$. So we set our right hand side to 0 and ignore the $...$ -higher order terms. \n",
"\n",
"$0 = f(x_{0}) +\\frac{df}{dx}\\Delta x$\n",
"\n",
"So our best guess for a solution is then\n",
"\n",
"$x_{solution} = x_{0}+ \\Delta x$\n",
"\n",
"where \n",
"\n",
"$\\Delta x = -f(x) \\left({\\frac{df}{dx}}\\right)^{-1}.$\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Newton-Raphson example\n",
"\n",
"Let's use the __Newton-Raphson__ method to solve an engineering problem. Consider a spherical tank of water that can be filled to a height, $h$, and has radius, $R$. \n",
"\n",
"The volume of water, $V$, in the tank is \n",
"\n",
"$V= \\pi h^2\\frac{3R-h}{3}.$\n",
"\n",
"If your tank has a radius of $R=2~m$ and you need a volume of 29 $m^3$, what height should you fill it to?\n",
"\n",
"To answer this question with the Newton-Raphson method, we first define a new function, $f(h,parameters)$\n",
"\n",
"$f(h,parameters) = V-\\pi h^2\\frac{3R-h}{3}.$\n",
"\n",
"Now we can plug in our known parameters\n",
"\n",
"$f(h) = 29-\\pi h^2\\frac{6-h}{3},$\n",
"\n",
"and calculate the derivative, \n",
"\n",
"$\\frac{d}{dh}(f(h)) = -\\pi \\frac{12h-3h^2}{3}$"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [],
"source": [
"def f_h(h,V=29,R=2):\n",
" return V-np.pi*h**2*(3*R-h)/3\n",
"\n",
"def dfdh(h,V=29,R=2):\n",
" return -np.pi*(6*R*h-3*h**2)/3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use the definitions of `f_h` and `dfdh` to calculate the height, $h$ to fill the tank."
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.974413341499149\n"
]
}
],
"source": [
"xguess = 2\n",
"deltax = -f_h(xguess)/dfdh(xguess)\n",
"print(xguess+deltax)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Discussion\n",
"\n",
"Try changing the value of `xguess`. Is there any way to choose the best `xguess` value? Are there any `xguess` values that return an Python error? Why?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create a Newton-Raphson function\n",
"\n",
"In the same way that we created bracketing method functions, we can create the Newton-Raphson method function to update our `xguess` until a desired tolerance is achieved. "
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [],
"source": [
"def newtraph(func,dfunc,x0,es=0.0001,maxit=50):\n",
" '''newtraph: Newton-Raphson root location zeroes\n",
" root,[ea,iter]=newtraph(func,dfunc,x0,es,maxit,p1,p2,...):\n",
" uses Newton-Raphson method to find the root of func\n",
" arguments:\n",
" ----------\n",
" func = name of function\n",
" dfunc = name of derivative of function\n",
" x0 = initial guess\n",
" es = desired relative error (default = 0.0001 )\n",
" maxit = maximum allowable iterations (default = 50)\n",
" returns:\n",
" ----------\n",
" root = real root\n",
" ea = approximate relative error (%)\n",
" iter = number of iterations'''\n",
" xr = x0\n",
" ea=1\n",
" for iter in range(1,maxit):\n",
" xrold = xr\n",
" dx = -func(xr)/dfunc(xr)\n",
" xr = xrold+dx\n",
" if xr!=0:\n",
" ea= np.abs((xr-xrold)/xr)*100 # relative error in %\n",
" if ea < es:\n",
" break\n",
" return xr,[func(xr),ea,iter]\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.0791382579723865\n"
]
}
],
"source": [
"hr, out = newtraph(f_h,dfdh,1)\n",
"print(hr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compare techniques\n",
"\n",
"Let's compare the relative error in finding the height, $h$, in the previous example as a function of the number of iterations in the bisection (`bisect`) method and the Newton-Raphson (`newtraph`). \n",
"\n",
"What we should see is that as we increase the number of iterations, the relative error decreases. We can compare the rate that the error decreases, $\\frac{\\Delta error}{\\# iterations},$ for our two root locators.\n",
"\n",
"We are going to set the maximum iterations, `maxit=n[i]`, to the desired value in the loop, but we want as low of an error as possible. We set our specified error to `es=0`."
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAEeCAYAAACJ7dNqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi40LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcv7US4rQAAIABJREFUeJzs3Xdc0+f2B/DPk7BH2HvLciEyRK0KouLeo67aVqtWrXZYldpf29vea6tVq61t3bXWeq3auq4TF6DWqgiIk6mgLGUohE3I8/sj7B0EAnjerxevJN+VE0A8eXKe8zDOOQghhBBCCHnVCRQdACGEEEIIIW0BJcaEEEIIIYSAEmNCCCGEEEIAUGJMCCGEEEIIAEqMCSGEEEIIAUCJMSGEEEIIIQAoMSaEEEIIIQQAJcaEEEIIIYQAoMSYEEIIIYQQAICSogN4VRgaGnJbW1tFh0EIIe1KaGhoOufcSNFxEEJeDZQYtxJbW1vcvHlT0WEQQki7whhLUHQMhJBXB5VSEEIIIYQQAkqMCSGEEEIIAUCJMSGEEEIIIQAoMSaEEEIIIQQAJcaEEEIIIYQAoMSYEEIIIYQQAJQYt30vHgNHFwHF+YqOhBBCCCGkQ6M+xm3Z0/vA3omAOAXIfw68/jsgpB8ZIYQQQkhLoBHjtiz+iiwpBoCoU8DJjwDOFRsTIYQQQkgHRYlxW9Z7PjJ6Lqx4HLYHCPxacfEQQgghhHRglBi3YZxzvJkwEkekPhUbL60Drm9XXFCEEEIIIR0UJcZtWHB0Gu6liLG86B1cLOlZvp2fXgHcPazAyAghhBBCOh5KjNswFSUBupiJIIES3it+H2FSBwAAA4fkr3l4cvO0giMkhBBCCOk4KDFuw16zN8Sp9/vj17d7oauNGeYULUes1BwAoAQJdI/Pxn927EPEkxcKjpQQQgghpP1jnLoctApPT09+8+bNJp/POcf1R5nYf+4q/JPfhxnLBACkcREmFX0Fa/tuWORrj76dDMAYa66wCSFEoRhjoZxzT0XHQQh5NcidGDPGBADsAZgA0AXwHMAzALGcsuw6vWxiXFnk7RuwOjoBmtIcAECC1BiTir5COnTgbq2L93wdMKizMSXIhJB2jxJjQkhralRizBhTBzADwDgA3gC0azksG8BlAEcB/ME5p6XaKmnOxBgA8PgapL+NhaCkEABwV2qLaUWfIQcaAIAeljr4cIgjfJ0pQSaEtF+UGBNCWlO9iTFjTBfApwDmAtABwABwACkAMiFLhkUADACYVtqfBWAHgNWccyqARQskxgAQeQo4MBPgUgDAP9JueKtoBYqgXH6Iq5UuPhriCB8nI0qQCSHtDiXGhJDWVOfkO8bYIgAxAJYBKACwAcAIAPqcc0vOeQ/Oef/SWwvIkuORAL4vPX45gJjS65CW0HkkMOaH8od9BfdwxGwP1CqtGh3x5AXe/jUEE7dcxeWYNFC1CyGEEEJI7eocMWaMSQHcBPBvAKc4Lx2WbMxFZXXIowF8DsCdcy5shljbtRYZMS5zaT1w8T/lD/N6zsFa9g72hTxBkaTqj83TRg8f+TnhNXuapEcIaftoxJgQ0prqS4wncM6PvPQTMDaec370Za/T3rVoYsw5cNofuLGtYtv4LUi1m4gtQbH448YTFJVUTZC97PSx1M8JfToZtExMhBDSDCgxJoS0JmrX1kpaNDEGAKkUOPQOcK90RTxDJ2DRdUAgQPKLfGwOisWBkCcoLqn68+7byQBLhzqhl61+y8VGCCFNRIkxIaQ1UWLcSlo8MQaAgmxgQ1egSCx7/MYhwGFI+e7E53n4OTAOf958Aom06s/d28kIy4Y6oYelbsvGSAghcqDEmBDSml565TvGmCNjbDJjbBJjrFNzBEWaSE0EuM+qeHxta5XdlnoaWD3RBYHLBmJaLysIBRU1xpei0zD2p7/x7u83Ef1U3FoRE0IIIYS0GU0eMWaMaQD4HcD4arv2A3ibc178krF1KK0yYgwAmY+ATW6Qdc0D8F4IYORU66GPM/Lww4UYHAlPROUBZMaA8T0t8OEQR9gYaLZ8zIQQUgcaMSaEtKaXGTHeCNmCH/sALAHwCYDbAKYBWPXyobU9paPjZxhjOYyxNMbYj6VvENoOfTvAeWTF4+tb6zzU2kAD373uirMfeWOUi1n5ds6BI+FJGPxdMFYevoOULFqrhRBCCCEd38uMGGcD+J5z/kWlbSoA7gDQ5JxbNk+IbUPpYid3ASQA+A8AY8h6O5/nnE9r6PxWGzEGgEeXgd9Gy+4rawBL7wPqeg2edjcpCxvOReNi5LMq21WUBHijtw0W+drDUEu1JSImhJBa0YgxIaQ11bfAx17GmGEd+9QBaAG4UXk757wIssS41vPauXcB6AEYxzk/wznfA+B9AFMZY90UG1o1tv0Bk+6y+8V5QNieRp3W3UIHu97uhUML+6JPp4ouFUUSKXb9/QjeawOxLiASWflUJUMIIYSQjqe+UopxACIZY7Or7+Cc50O2LPQbpYt5AAAYY9YAfAA8bO5A24CRAC5wztMrbTsEoBCyFQHbDsaAPgsrHl/fDpRIGn26h40+/pjXB3vf6Q1Xq4ouFXlFJfg5MA7eawOx49JDFBSXNGfUhBBCCCEKVV9i3AXAFQC/MMYCGWPVZ3CtB/A6gFjG2AHG2HEA9yFbGnpji0RbDWPMmTH2QenodiRjTMoY44yxyY04dwZj7DJjLKu0ZvgmY+y9yol+NV0ge33lOOeFAOIAdH75V9PMuk8GNEoH7rMTgcgTcp3OGEN/R0McXfQadrzpic6m2uX7svKL8fWpBxj8XbBs4p6UWv4RQgghpP2rMzHmnCdyzscDmATAHkAEY+wLxphy6f6NAD4GoAZgCoBRAJ5C1pFiR4tHLrMQwPcAZgJwBtCoNY4ZYz8D+C8ATwCXAZwD4ATgJwB/McZqW8JaD8CLWrY/B9D2VsdQVgM851Q8vralSZdhjMGvqwlOvT8AP0zrCWv9irmGSS/y8dGBCIz+8QouRae9bMSEEEIIIQrVYFeK0mWhuwLYAeALyBLkAaX7NnLOzQGYAhBxzu1La29by10A6wBMBeAAILihExhjkwAsApAKoAfnfDTnfAIARwAPAEwAsLiO02sbGmV1bFe8Xu8AAmXZ/SfXgKSwJl9KIGAY19MC55f64MsxXaGvqVK+735KNt7cdQNv7LyOu0lZLxs1IYQQQohCNKpdG+c8h3P+PoA+AAoABDHGdjDG9Er3P+Oc57RgnHXFtZNzvoJzfpBzHtfI01aW3vpzzmMqXespZCPQAPBJLSUVzyEbNa5Ot3Rf26NtCnSfWPG4ntZtjaWiJMDb/ewQvHwglgxygLpyxeD6ldh0jP7xCj7YH44nmXkv/VyEEEIIIa1Jrj7GnPObkJUfLIesX/EDxtj0lgisJTDGLAF4ACgC8Gf1/ZzzYABJkI2A96m2+wFkdcaVr6cKWZlJZEvE2ywqT8K7exjITmmWy2qrKePjoc4IXj4Q072sq6yid+xWMgZ/F4x/H7+PzNyiZnk+QgghhJCW1mBizBgTMsa6M8Y8GWMGnHMp53wDgG6QtWv7b+miF7YtHGtzcCu9vVfaWaM2IdWOLXMKwGDGmEGlbRMAqJbua5vM3QDrvrL70mLg5i/NenljkRpWT3RBwIfeGNrVpHx7UYmsxZvP2kD8dDEGeUWN74pBCCGEEKII9SbGjLFlANIARAC4DuAZY+wKY8yNc/6Ycz4Wsol33QDcY4ytqGPiWlthV3qbUM8xj6sdW2YbZJPvjjHGhjHGZgH4EcABzvl9tGW9F1Tcv7kLKC5o9qdwMNbC9jc98deCvvCwqag4ERdKsP5sNLzXBuH3f+JRJJE2+3MTQgghhDSH+hb4+ADAWgASADtL7x8H0BtAIGPMCgA454cgm5z3K4BvAIQyxrxaOO6m0iq9za3nmLJaae3KGznnLwAMKt1/GLKWdAcAzEEdGGPzS9vA3UxLU2DXhs6jAR0r2f28DOBOjSqSZuNpq4+/FvTFtlke6GSkWb49PacQnx+7hyEbgnHsVhK1eCOEEEJIm1PfiPESAIkAunDO3+Wcryxt3zYdgAjAW2UHcs7FnPPFAF6DrEPD1RaM+WWUFcI2KSvjnEdzzodzzjU554ac88Wc8zpnmXHOt3POPTnnnkZGRk0KuFkIlQCv+RWPr20BmrgUeGMwxjCsmynOfuiNbye5wFSkVr7vcWYePth/C6N+vILAyGdo6pLkhBBCCCHNrb7E2BLADc55RrXtZyrtr4JzfgOyyXn+zRNesxOX3mrVc0zZPnE9x7Q/7rMA5dIexM/uAfGXW/wplYQCTO1ljaDlA/F/I7tAV0O5fN+DlGzM3h2CqduvITQhs8VjIYQQQghpSH2J8SMA3rVMqnsbshHXWpd95pyXcM6/a47gWkB86a1NPcdYVTu2Y1DXA3rOqHjcxAU/mkJNWYh53p1waYUvFvtWbfF241EmJm35B3N/u4mo1I71XoQQQggh7Ut9ifFqAIYA7jPGTjPG9jHGwgBsgmxC3q7WCLCZhZfedmOMqddxTK9qx3YclSfhRZ0GMmt9b9NiRGrKWDbMGcErBuLNvjZQqtTi7fyDpxj+wyUsPXiLeiATQgghRCHqWxJ6D2TtyGIA+EHWt9gJwEEAfTnn6a0SYTPinD8BEAZABbJuGlUwxnwgKxFJBfBP60bXCgwdAQe/0gccuL5dIWEYa6vh3+O64+LHAzG+pzlYaX7MOXA4LAmDvwvGf05QD2RCCCGEtK5627Vxzo9xzl0BqAMw4Zxrcc6ncc4ftU54LWJ16e23jDGHso2MMWMAm0sfruGcd8y+YpUX/AjfCxRkKywUawMNfD/NDSeXDMCgzsbl24tKpPjlCvVAJoQQQkjrYu25KwBjzB0VySwgaxunDdkod/mMLs55n2rnbYZs+ecCAOcBFAMYDFm3jaMAJnPOS5ozVk9PT37z5s3mvGTTcA783BtIj5I9HrYa6LtIsTGVuv4wA2vORCL88Ysq2420VfHBYEdM7WUFZaFcizUSQto5xlgo59xT0XEQQl4N7T0xHgggsKHjOOes+jbG2AwA7wFwASCEbFnnXQC2tMRocZtJjAHZIh8nPpLd17UB3g8HBG1jXRbOOc7ef4q1ZyIRl1a13bSdoSaWDXXGSBdTMFbjR0oI6YAoMSaEtKY6E2PG2D4An3HOmzxDizFmD+A/nPMZDR7cwbWpxLgoD9jQBSgoHZmdtg/oPEqxMVUjKZHiUFgiNp6LQWp21ZX6XC114D+iM16zN1RQdISQ1kKJMSGkNdX3ufQEAA8YY78yxvrJc1HG2ADG2G4A9wGMfYn4SEtQ0QA8Z1c8bsXWbY1V1gM5cNlA+A/vDJGaUvm+iMQszNhxHW/uuoF7yVkKjJIQQgghHUl9I8Y2AL4DMBGyvsWPAFyArFvDAwAZALIhq8s1gKy+ty9ktbq2kK0y9xeAZZzzxy35ItqDNjViDABZicD3PYCyUur3bgBGzoqNqR4v8oqwJSgOv16NR5GkaqXLWFdzfDzUCTYGmnWcTQhpr2jEmBDSmhqsMS4dLf4QwDgASqh/OWUG2US2QwB+4Jxfb6Y42702lxgDwB8zgKiTsvsj1wNe8xQbTyMkv8jH9+ej8VdoIqSVfhOVBAwzeltjySBHGGmrKi5AQkizosSYENKaGpzizzn/m3M+BbLV4uYD+AMVI8YSAOmQlUzsBTAHgBXnfAYlxe2AbaUKmcQQxcUhB3Nddayd7IqAD73h19WkfLtEyrHnnwT4rAvEhrNREBcUKzBKQgghhLRH7borRXvSJkeMn4QAvwyR3dezAz64pdh4miA0IRPfno7CjfjMKtv1NJTxnq8DZvW1gapS2+i4QQiRH40YE0JaEzWFfZWZ9QCEKrL7zx8BOWmKjacJPGz0ceDdPvj17V7obKpdvv15XjFWnXyAQeuD8VdoIkqk9AaQEEIIIfWjxPhVpqQKmPWseNxOyimqY4zBt7MxTr4/ABunusJST718X9KLfCz7MwIjfriEc/efgj4hIYQQQkhdKDF+1Vn2qrjfThPjMkIBwwQ3S1z42Af/GtMV+poq5fuin+Zg3p6bmLL1H4RUK7sghBBCCAEoMSZWHScxLqOqJMTsfna4tMIXHwx2hKZKRY3xzYTnmLL1H7yzOwRRqWIFRkkIIYSQtoYS41edpVfF/aRQoESiuFiamZaqEj7yc0LwCl+8/ZotlIUVy0hfiHyG4T9cwtKDt5D4PE+BURJCCCGkraDE+FWnYwGILGT3i/OAZ/cUG08LMNRSxZdju+HC0oEY39McrDQ/5hw4HJaEQeuD8e/j95GZW6TYQAkhhBCiUJQYk6p1xk9uKC6OFmZtoIHvp7nh5JIBGOhsVL69qESKXX8/gvfaQGy6EIPcwo4zak4IIYSQxmt0YswYEzHGtBs+krQ7VpXKKTpInXF9upqLsHu2F/bP7wM3a93y7TmFEmw4Fw2fdUH4/Z94FJdI674IIYQQQjoceUaMXwA431KBEAWqXGfcgUeMq+vTyQCHF76GbbM84GCsVb49PacQnx+7hyEbgnHsVhKk1AOZEEIIeSXIkxiLAcS0VCBEgTrAQh9NxRjDsG6mOPPBAKyd1ANmOmrl+xIy8vDB/lsY89MVBEenUQ9kQgghpIOTJzF+AMCypQIhCtRBFvp4GUpCAV7vZYXAZQPx6cjO0FFXLt93Lzkbb+26gZk7ryPiyQsFRkkIIYSQliRPYrwDQH/GmEdLBUMUqEqd8atTTlGdmrIQ873tcWmFLxYNtIeacsU/katxGRj3899Y9N9QxKXlKDBKQgghhLSERifGnPNfAGwGcI4x5s8Yc2KMqbZcaKRVVelM8eqNGFeno66MFcM7I3i5L2b0toZQUNED+dSdVAzdeAkrD99GalaBAqMkhBBCSHNija2bZIyVyHFdzjlXalpIHZOnpye/efOmosOoW3YysKGL7L6yBvDJE0BIP8IyD9Ny8N3ZaJy8k1Jlu5qyALP72WGBj32V8gtCSPNgjIVyzj0VHQch5NUgTykFk+OL+iO3NyJzQFRaQl6cBzy9q9h42phORlr4eaY7jr3XD/0cDMq3FxRLsSUoDt5rA7E1OA4FxfK8fySEEEJIWyJPKYVAnq+WDJq0EKtK5RSv4AS8xnC10sV/5/bB7+94obuFqHx7Vn4x1pyOxMB1QTgQ8hgS6oFMCCGEtDuUwJIKlpQYN9YARyP8773++HG6G2wMNMq3p2YXwP/QHQz7/hLO3E2lFm+EEEJIO0KJManwii700VQCAcMYV3OcX+qD/4zvDkOtirmocWm5WLA3FBO3XMW1hxkKjJIQQgghjdXoyXflJzCmDGAygIEALEo3JwEIAvAX57y4GePrMNr85DsAkBQCqy2BkiLZ42WxgJaRYmNqR3ILJdh15RG2XXqInEJJlX0DnY2wYlhndDUX1XE2IaQ2NPmOENKa5EqMS3sY/wnABrJJdpVxAPEApnDOw5orwI6iXSTGALDTr6KP8bQ/gM4jFRtPO5SZW4SfA2Px+z8JKKpUa8wYMM7VHB8PdYaVvkY9VyCElKHEmBDSmhpdSsEYswQQAMAWQCKANQDmAZgPYDWAxwDsAAQwxizquAxp62ihj5emr6mCz0d3xcVlPpjkbglW+haSc+DorWQM+i4IX/7vHtJzChUbKCGEEEKqkKfG+BMA+gA2AXDgnH/KOf+Fc76Tc/5/ABwB/ADAoPRY0h7RQh/NxlJPA9+97oozH3hjSBfj8u3FJRy7r8bDZ20gvj8fXaPsghBCCCGKIc8CH7Gldx15HScxxgQAokuva988IXYM7aaUghb6aDEh8ZlYczoSoQnPq2w30FTBkkEOmNHbBipKNB+WkMrkLaUIDQ21FQqF8wUCwQjOuV5LxkYIaR8YY/kAbhcXF58C8IeHh0dRncfKkRjnAzjCOZ/RwHH7AEzgnKvLEXOH124SYwDY0A3ITpTdnx8MmPdUbDwdCOcc5x88w7qASEQ/zamyz0pfHR/7OWOsqzkEguol/IS8muRJjENDQ22VlZUPm5iY6Orq6opVVFSKGaN/S4S8yjjnKCkpEeTm5mpkZmaqZGdn35FIJG95eHi8qO14eYan8iErpWiIXumxpL2ihT5aDGMMfl1NcPoDb6yb3APmOmrl+55k5uPDA7cw6scrCIx6Rj2QCZGTUCicb2JiomtiYpKpqqpKSTEhBIwxKCkpSXV0dHJsbW0z9fT0eggEgjfrOl6exPg2gIGMsc71PLkzAN/SY0l7Rf2MW5xQwDDF0woXlw3EZ6O6QFdDuXzfg5RszP41BNO2X0P44+f1XIUQUplAIBihq6srVnQchJC2iTEGIyMjsVAonFXXMfIkxr8AUAFwkTE2hzGmUumJlBljswFcAKAMYEdTgyZtAHWmaDVqykLMHdAJl1b4YrGvA9SVheX7rj/KxITNV7Hg91DEPsup5yqEEADgnOupqKhQL31CSJ3U1NSKOOeGde1vdGLMOf8dwB8ATCFLfHMZY48ZYwkA8gDsBGAO4A/O+X9fLmyiUKY9AGHpKm7P44GcNIWG8yoQqSlj2TBnBC8fiDf6WENYqcb4zL1UDN0YjE8O3UZqVoECoySk7aPyCUJIfUr/RtT5h0KuKfCc85kAFkO2kIcQgCUAq9L7jwAs5py/0cRYSVuhpFJ1wh3VGbcaY5EaVo13wfmlPhjVw6x8u5QD+0OewGddIFaffoCsPBoUI4QQQpqb3L2hOOebS1uxWQHoA6AvACvOuQPnfHNzB0gUpHI/YyqnaHV2hpr4eYY7ji/uj/4OFZ/4FEqk2Bb8EAPWXsSWoDgUFJcoMEpCCCGkY5Fn5bv3GWNzyx5zzpM45zc459c550ktEx5RGFroo01wsdTB3rm9sfed3nCx0Cnfnl0gwbdnIuGzLhB/3HgMSaWlpwkhhBDSNPKMGG8AMK6lAiFtTOUJeMlhQAmtzqZI/R0Ncey9fvhphhtsDTTKtz/NLsTKw3cw9PtLOHM3hVq8EULqxBjzYIx5yHuehYWFC2PMIyoqSqXho9u+jvZ6SPOSJzFOA0BtcF4VInNAZCm7X5wHPL2r2HgIBAKG0T3McW6pD1aN7w4jbdXyfQ/TcrFgbxgmbL6Kf+IyFBglIYQoztKlS80ZYx5Lly41V3QspH2SZ63fKwB6NXgU6TisegH3SlfASwyhFfDaCGWhAG/0scFEdwvsuvII24IfQlwoG9G/9eQFpu+4Bh8nI6wY7oxu5joNXI0QQup39uzZ6KKiImZra9shZv12tNdDmpc8I8ZfAbBkjH3FqB/Oq4EW+mjTNFSUsHiQIy6t8MXc/nZQEVb8cw6OTsOoTVfwwf5wPM7IU2CUhJD2rlu3boVubm4FqqqqHaJWq6O9HtK85EmM3QH8DuAzAHcZY98wxt5ljL1Z21fLhEtaFS300S7oaargs9FdEbh8ICZ7WKLy29Zjt5IxeEMQ/nXsLtJzChUXJCGkTVm/fr1hly5duqqrq7vp6ur2HDp0qH1ISIhabcfWVZObnp4uXLx4sYWDg0M3dXV1NzU1NXcTE5MeXl5ezitXrjSt7VqxsbHKs2fPtrK1te2upqbmrqWl5ebu7t5506ZNBlJp7ZOIpVIpdu7cqeft7e2or6/vqqys7G5sbNyjb9++Tt98841R2XGMMY+NGzeaAcDGjRvNymqqq5dW1FdjnJ2dLfD39zd1dnbuqqGh4aauru7WuXPnrp988ompWCyukTOdOHFCmzHm4eXl5VxYWMj8/f1N7ezsuqmqqrrr6+u7jhs3zi4mJoZqmdsR1tjJOowxKQCOiqbI9Z7IORfWt/9V4+npyW/evKnoMOQjKQJWWwIlpQnVslhAy6j+c4jCRT8VY+2ZKJx/8LTKdg0VIeYN6IR53p2gpSpPFRUhisMYC+Wcezbm2IiIiHhXV9f0lo6pvSqbeDdnzpxnu3fvNvbw8MgxMTEpunPnjmZCQoKqmpqa9OjRozHDhg2rstSmhYWFS3JyskpkZOQdZ2fnIgAQi8UCNze3LnFxcWr6+voSV1fXXE1NzZKnT5+qxMbGquXm5goLCwvDKl/n+PHj2jNmzLDPyckRWltbFzo5OeXn5uYKIiIitPLy8gTjx4/POHLkSHzlcwoKCtioUaM6Xbx4UVcoFMLV1TXH3Ny8KD09XTk6Olo9MzNTiXMeCgCTJk2yvXfvnkZUVJS6s7Nzfrdu3co/Lhs/fvyLWbNmvajr9QBASkqKko+Pj1NMTIy6SCQq8fLyEjPGcO3aNW2xWCx0dnbODw4OjjIxMSnvk3nixAntMWPGOLm5ueWqqalJIyIiNL28vMRKSko8PDxcKyMjQ8nU1LTozp079w0NDam/ZhsRERFh6OrqalvbPnn+d9yDBpLhjo4xNhHAUgCdAWgBSAJwBMB/OOdZioytRZQt9PHkuuxx4g2g8yjFxkQa5GSijZ1veeJmfCa+PROJkPjnAIC8ohL8cCEGe68lYPEgB8zobQ1VJXr/SsirZt++fYYnTpyIGjFiRA4gG5FdsmSJxebNm03ffvttu7i4uLsaGhr1/n//22+/6cXFxakNHDgw6+zZs7HKysrl+yQSCU6dOqVd+fiEhATlN954wz4/P1+4adOm+Pfeey9DIJANwMbGxiqPGTPG8ejRowabNm0Sv//+++UziBcuXGh58eJFXRsbm8IjR47Eurm5FVR+ngMHDpRPpDh06FD80qVLzaOiotRHjhz5YsOGDcnyfF/eeecd65iYGHUPD4+cM2fOxJYlsmlpacJhw4Y5hoeHa86dO9f6+PHjj6qfGx4ertmtW7e86OjoOxYWFhIAyMjIEHp7ezvdv39fY926dUbffvttqjzxEMVodGLMOX+7BeNoL/QBXIKsdV0mABcA/wLQA8BQBcbVcix7VSTGTygxbk88bfVx8N2+uPDgGdYGRCL6qWwQKCO3CF8dv49frjzCsqHOGOtqDoGApg2Qjs/2k5NytyprK+LXjAptrmvNmjUrrSwpBgCBQIAffvgh6X//+59eYmKi6m+//aa3cOHCzPqu8fTpUyUA8PX1za6cFAOAkpISxo4dW6WL1Zo1a4yzs7OFCxYsSF2yZEmV1jnh3Tv7AAAgAElEQVQODg7F27Zti/fx8emybds247LEOCkpSWnv3r1GAoEAf/31V5WkuOx5Zs6c2SyDUtHR0SpnzpzREwgE2LFjR0Ll0V0jI6OSHTt2xHt5eXU7deqUfmxsbKKDg0OViXuMMezatSu+LCkGAAMDg5KPPvoodd68eZ2Cg4NFACgxbgfkWeBjLGNsREsG09Zxzndyzj/lnB/mnAdxzn8EsBKAH2OsY7aGqVJnTAt9tDeMMQzpaoLTH3hj/RRXWOiql+9LfJ6PDw/cwshNlxEY9Yx6IBPyinj77bdr9HRUUlLChAkTMgEgODhYu+ZZVfXp0ycXAH788UfTzZs366enp9f78dOFCxd0AGD69OnPa9vfv3//PA0NDWlkZKRGXl4eA4CTJ09qSyQS1rNnzxxPT8+C2s5rLufPn9finMPV1TW3egIOAB4eHgUuLi65UqkU586dq/H9MTMzK/Ly8sqvvt3FxaUAAJ4+fapcfR9pm+SZfHcEwIctFUg7VvYHpmP+0lfuTJFEC320V0IBw2QPS1z42AefjeoCPY2KX9fIVDFm/xqCaduvIexxrf9nEUI6kMp1tZXZ2toWAUBycnKDk8VGjRqVs2DBgtTMzEzl9957z87Y2Linvb19t+nTp9scOnRIVP34J0+eqAKAj49Pl8qT4sq+hEKhR15enkAqlZaPRickJKgCgIODQ4smxQCQlJSkAgBWVlZ1zlK2sbEpLD22xv/3ZmZmtX5PdXV1SwCgqKhInnyLKJA8NcaZAFp0UgNjzBnAcMj6JXsCcIJsst8UzvlfDZw7A8BCyMoahAAiAfwKYAvnvFnXy2WMCSFLhLsB+ALAcc55QnM+R5shMgN0rICsJ4AkX7bQB/UzbrfUlIWYO6ATXu9lhR2XHmLn5UfIL5Z9Ynj9USYmbr6KYd1MsHyYMxyMGxw0IqRdac5yhI6MMdaoj4+2bNmS9MEHH6QdPHhQ9+rVq1qhoaFa+/fvN9y/f79hv379sgMDA2PKyiykUikDgFGjRj1XVVWt9/9kNTW1Vv/4quwTs/q60db3qVpZvTRp/+RJjG8A6N5SgZRaCOADeU9ijP0MYBGAAgAXABQDGAzgJwCDGWNTOOfNORs0A0BZwf8ZANOb8dptj2UvWWIM0EIfHYRITRkfD3XGrL42+PFCLP648RgSqeyPfsC9pzh3/ymmeFjhQz9HmOmoN3A1Qkh7Eh0drdK3b98aH/vHx8erAICpqWmjF77o3Llz0RdffPEMwDMACAgI0Hrrrbc6/f3336IffvjBcNmyZeml1yx6/Pix6pdffpnc2LKIshHa2NjYWtvINSdLS8siAHj8+LFqXceUjXpbWFjQwiAdmDxvcb4F0I0x9k5LBQPgLoB1AKYCcAAQ3NAJjLFJkCXFqQB6cM5Hc84nAHAE8ADABACLazlPhzHWuRFfGrU87UAA/QC8C9mo8fHSUeSOyYoW+uiojLXV8J/x3XF+qQ/GuFaUyUs5cODmEwxcF4TVpx7gRV6tnxISQtqh3377zaD6NolEgmPHjukDgI+Pj7jmWY0zbNiwnKlTp6YDQERERPn/n76+vlkAsG/fPv3GXmvUqFFiJSUlfuvWLa2wsLBGJccqKipSQPZ65DFkyJAcxhgiIiI0b9++XSM5DgsLU7t9+7amQCCAn59fk78/pO2Td+x/K4DtjLHTjLH5jLFhjDHv2r6aEkzp5LYVnPODnPO4Rp62svTWn3MeU+laTyEbgQaATxhj1V/rBMgS54a+Xqslzluc86uc8+2l1/Etve2YLCutBE4LfXRItoaa+HG6G04s6Y8Bjobl2wslUmy79BAD1gZic1As8ouoDSch7d2ePXuMAgICtMoeS6VSLF261Pzx48eqxsbGxW+++WaDkw327Nmje/r0aa2Skqp/E3JyclhpB4byEV8A+Oyzz1K1tLRKfvzxR9PVq1cbFRfXHHS9cOGC5q5du/TKHltYWEhmzpyZJpVKMWXKFPvqCatEIsG+ffuqrHtfNpobFRUl10ddTk5ORcOGDXsulUoxb948m4yMjPLBrvT0dOH8+fNtpFIpRo4cmVm9IwXpWOQppQhCxQIfw1B/ezIu57WbhDFmCcADQBGAP2sEwXkwYywJgAWAPgCuVtq3G8DuZgjjFgApZCPcHZNpD0CoKlvo43k8kJNGC310UN0tdPD7O71xNTYda85E4nairBOSuECCtWei8NvVeHww2Amve1pCSUg1dYS0R9OnT08fOXKks6enp9jY2Lj47t27GvHx8WpqamrSXbt2PdTS0mqwxjcoKEj7119/NdbT05N07do1z8DAQCIWi4VhYWFaWVlZQjs7u4KPPvqofF6Sg4ND8b59++JmzZpl/+mnn1pv3LjRzMHBIV9fX78kNTVV+fHjx6ppaWnKo0aNej5nzpzyxHzLli2J8fHxqsHBwTru7u7devbsmWtmZlaUkZGhHBUVpZ6Zmak0Y8aM8trxcePGZa1YsUJ69uxZXU9PT2dbW9tCoVDIx44d+6Kh1m67du167OPjo3bjxg1te3t7l969e4sB4Nq1a9rZ2dlCZ2fn/J07dz5u2nedtBfyJK+X0PYW+HArvb3HOa9RL1UqBLLE2A2VEuNm1A+ykfeHLXDttoEW+njlvOZgiGPv9cPpu6lYHxCFh+m5AICn2YX49Mgd7Lz8EMuGOWNEd9N6J6sQQtqeHTt2PHF0dCz49ddfjW7fvq2poqLChwwZ8uLrr79Orq3lWG3mzp2brqamJr1+/bpWdHS0+osXL5S0tbVLrK2tCyZPnpy5ZMmSdD09vSqT7MaMGSO+ffv23XXr1pmcO3dOJyIiQksikTBDQ8NiW1vbwrlz5z6bOXNmldFqdXV1fuHChdht27bp//7774b379/XiIiI0NTX15c4OzvnjR079kXl462trSUHDx6MXbVqldn9+/c1wsLCtDjnsLCwKG4oMTYzM5OEhIREfv311yZHjx7Vu3Tpkqj0moULFy7M/PTTT5+JRKJmncxP2p5GLwmtCIyxIAA+qKMrBWPsfQA/ADhaWldc2zV+APA+gO8458teMp4AyCb33QNQCFmyvRxACoBenPOiasfPBzAfAKytrT0SEtpx44qA/wP++Ul2v9+HgN9Xio2HtJriEin+vJmI789H45m4aicjV0sd+A/vjNccDOs4m5CXQ0tCE0KaW31LQrf3z0LLaqRy6zmmbHWf5ug9dR3AGwD2Q9bX+U0AmwEMqJ4UAwDnfDvn3JNz7mlk1M5LD2ihj1eWslCAGb2tEbzcFyuGO0NbreKDpojELMzYeR2zfrmOu0kdb1V0Qgghr5YmJ8aMMRXGmBljrNEzTFtA2We4rTLszTn/gnPeg3OuXfrlwjn/knOe3RrPr1CVF/pIDgfa8CcNpGWoqwixaKADLq/wxXzvTlBRqvjzcTkmHaN/vIL3/whHQkZ971MJIYSQtkvuxJgx9iZjLASyUdpEAOsr7ZvMGNvHGLNrxhjrU9YyRaueY8r2UXuVlyEyA1RKB92L84C8TMXGQxRGV0MFn47sgqBlA/G6pyUElUqM/xeRjMHfBeOLY3eRJq5zASlCCCGkTZIrMWaM7YZsNTkPAPmoGLEt8wTANACTmyO4RogvvbWp5xiraseSptKxqLifnaS4OEibYK6rjrWTXRHwoTeGdjUp3y6Rcuz5JwE+6wKx4WwUxAXU2YgQQkj70OjEmDH2FmQ1tRGQLdesU/0Yzvl1AMkARjRXgA0IL73txhirq2dhr2rHkqYSVSwAgexkxcVB2hRHE21sf9MThxa+Bi+7isqqvKISbLoYC591QfjlyiMUSqgHMiGEkLZNnhHjeZCVI4zhnIfxuttZxAGwfdnAGoNz/gRAGAAVAFOq72eM+QCwhGxVvH9aI6YOTVR5xDhRcXGQNsnDRg8H5vfBr2/3QmfTirmumblF+M+J+xi0PhiHQhNRIqX6dEIIIW2TPImxC4BrnPOGPkNPBmDa9JDktrr09lvGWPkiG4wxY8g6RgDAGs459R58WVUSYxoxJjUxxuDb2Rgn3x+ADa+7wkK34oOcpBf5+PjPCIzadBkXI5+iLbeKJIQQ8mqSJzFWRkXrs/oYAGhSUSFjzJ0xdq3sC4B76a5vqm0vV9rfeAtkyfgdxthxxthhADEAugI4CuCnpsRDqqlcY5xFNcakbkIBw0R3S1xc5oMvRneFvqZK+b7IVDHm7L6JqduuITShwZVnCSGEkFYjz8p3jwF0r+8AxpgQQDfIyimaQgSgdy3bHes7iXO+iDF2BcB7kC0IIgQQCWAXgC00WtxMqtQYU2JMGqaqJMSc/naY4mmJHZceYueVR8grktUa34jPxKQtV+HX1QQrhjnD0aQ5Wo0TQgghTSfPiHEAAAfG2Bv1HPMuADMAJ5sSDOc8iHPOGvqq49x9nPN+nHMR51yTc+7BOf+ZkuJmJLKsuE+JMZGDtpoylg51RvByX7zZ1wZKlXq8nbv/FMO+v4Tlf0Yg+UWjVqMlhBBCWoQ8ifE6yCbf7WKMfcMYKytzUGOMdWGMfQFgA4AMAD82c5ykLajelYJqRImcjLRV8e9x3XHhYx+Mda34fZJy4M/QRAxcH4SvT97H89waC0kSQgghLa7RiTHnPBHABMjqjP0BhEC24txUAHcBfAmgAMBkzvmzZo+UKJ6aqGKRD0kBLfJBmszGQBObprvhxJL+8HaqWC69SCLFjsuP4L02ED8HxiKvSKLAKAkhhLxq5Frgg3MeCNmEtvUA7kG2yEcRZDXFPwLozjkPbu4gSRtCi3yQZtTdQgd75nhh37zecLWsaI0uLpRgXUAUfNYFYe+1BBSXUEUUIYSQlif3ktCc81TOuT/nvAfnXItzrs45d+Kcf1A6qkw6MpqAR1rAa/aGOPpeP2yZ6Y5Ohprl29PEhfjs6F0M3XgJJ24nU4s3QgghLUruxJi84kQ0YkxaBmMMI1zMcPYjb3wzwQXG2qrl+x6l52LxvnCM+/lv/B2brsAoCWm/LCwsXBhjHowxj/3799dYvbaMo6NjN8aYx4kTJ6hVTBNV/l6XfamqqrqbmZm5jBw5stPJkye1FB0jAJw4cUKbMebh5eXlrOhY2gpKjIl8RNTLmLQsJaEAM3pbI3i5L1YMd4a2WkVXyduJWZi58zpm/XIdd5OyFBglIe3bF198YVFS0n6WaS9LLhUdh7z69++fPXHixIyJEydm9O/fPwsATp8+rTd69Gjnr776yljR8ZGaKDEm8tGh1e9I61BXEWLRQAdcXuGLd707QVWp4s/V5Zh0jP7xChbvC0N8eq4CoySk/VFTU5PGxMSob926VV/RsXR0/v7+qYcOHYo/dOhQ/IULF+Li4+Pvzpw5Mw0Avv76a8u4uDhlRcdIqqLEmMiHaoxJK9PVUMHKkV0QtHwgpnpaoVILZJy4nYIhG4Lx2dE7eCYuUFyQhLQjc+bMeQYAq1evtigoKKh1bQDSMlRVVfnWrVufaGpqSouLi9nx48dFio6JVEWJMZEPLfJBFMRMRx3fTu6Bsx95Y1g3k/LtEinH3muP4bM2COsDopBd0KQV6Ql5ZUydOvW5i4tLblJSksr69euNGj6jwqFDh0SDBg1yMDAwcFVWVnY3MjLqMWbMGLsbN26oVz4uJSVFSSAQeBgaGrpWv8aqVauMy0ojwsLC1CrvCw0NVWOMeTg7O3cFgKVLl5pXLqGoXrdb+VypVIqff/5Z38vLy1kkEvVUVVV1t7Ky6j5r1izr2NjYWkdmK19nx44dej179uysoaHhpqmp6da3b1+ngICAZq8F1tLS4ra2tgUA8PTp0xpxRUdHq6xcudK0d+/eTqampj1UVFTcdXR0evbu3duprlH+yrXC2dnZgkWLFllYWlq6qKiouJuamvZ46623rFJTU4X1xVVYWMj8/f1N7ezsuqmqqrrr6+u7jhs3zi4mJkaltuMPHz4sGjhwoIO+vr6rkpKSu46OTk87O7tuU6ZMsb1y5YpG9eOzs7MF/v7+ps7Ozl01NDTc1NXV3Tp37tz1k08+MRWLxTXy0cqvSd7YXgYlxkQ+tMgHUTAHY21sm+WJw4teQ2+7iv8j8otL8FNgLHzWBmLn5YcoKG4/9ZOEtLavv/46CQA2btxolpWV1ahcYPbs2VaTJ092vHTpksja2rrQz8/vhZGRUfGJEyf0vb29uxw4cKB8Qp+ZmZnE2dk5PyMjQ6l60hwYGFg+qe/06dNVRkzPnDkjAoABAwZkA4Cbm1vexIkTM8r2l9Xrln2VbZdKpRg/frzd4sWL7cLDwzVdXFxy/fz8XnDO2d69e408PT27BQcH10jWynz44YfmCxYs6KSsrMx9fX2zTExMiq5du6Y9ZswYp/Pnz2vWdV5TicViIQCYmJjUeCe/c+dOgzVr1likpKSodOrUKX/o0KEvHBwc8kNDQ7UXLlxoN3v2bKu6rltcXMwGDBjgtHv3bmMnJ6f8QYMGvSgsLGR79uwx7tOnT5cnT54o1XaeRCJhvr6+jj/99JOZra1tobe3d5ZAIMD//vc/fW9vb+f09PQqSfWmTZsMJk2a5Hj58mUdGxubwhEjRjz38PDIUVVV5YcOHTI4depUlZ9rSkqKkqenZ+e1a9dapKamqvTr1y97wIAB2cnJySrffvutRa9evTo/ffq01sRd3theFiXGRD5qIkC19PedFvkgCuRurYf98/vg19m90Nm0YvL887xirDr5AIO/C8ZfoYkokdKbN0KqGzNmjLhfv37ZmZmZSv/+979NGjp+7dq1Rrt37zZ2cHAoCAkJuR8eHh556tSph/fv33+wZ8+eOIlEgnnz5tmlpaWVJyllye2ZM2fK/4FKJBLcuHFD297evkAoFPKLFy9W6XxRljQPGTJEDACzZs16cejQofiy/WX1umVfleM7fvy4voGBgeSff/65//fff8ecOHHiYXx8/J233nrrWVZWlnDGjBn2+fn5tZaO7N692zgoKOhBSEhI1MmTJx/GxMTcmzZtWnpxcTH74osvzGs7p6lu3ryplpSUpKqkpMTHjBmTXX3/qFGjskJCQu49fvz47tWrV2NOnDjxMDQ0NCo8PPyuqalp0e7du40vXrxYa7J+69YtzaysLKV79+7dvXjxYuyZM2cePnz48E7fvn3FCQkJqu+++651beeFh4drZmdnC6Ojo+8EBgbGnjt3Li4qKupu165d81JTU1XWrVtX5ZOFtWvXmgPAmTNnIsPDwyOPHz/+6OLFi7GRkZH3Y2Jibk+aNOlF5ePfeecd65iYGHUPD4+cuLi4O+fOnYs7e/ZsXFxc3B03N7fcqKgo9blz5zZLbC+r1ncOhNRLZA6klf5bzk4ENA0UGw95ZTHG4OtsDB9HIxyLSMJ3Z6OR+DwfAJD0Ih/L/ozAjksPsXyYMwZ3MQZjVE75SvtSp911NSj3ZVZoc19yzZo1Sd7e3qJt27aZfvzxx2nm5ua1LjUpkUiwfv16MwDYv39/nJubW5WC/lmzZr04d+5c+u+//260fft2g//7v/97BgBDhgzJ3rFjh0lgYKDoiy++eAYAly5d0szJyRG+9dZbaVeuXNG+ceOGtkQigZKSUnnSLBQK+YgRI8TyvJaff/7ZBABWrlyZ5OnpWR6fkpIStm7dmhgQEKCbnJyssnv3br2FCxfWGNFZsWJF0oABA/LKHguFQqxfvz5p//79hqGhodqFhYVMVVX1pd5lp6WlCQMDAzVXrFhhLZVKsXr16if29vY1Rox9fHzyajvfxcWlcNmyZSnLli2zOXDggN6gQYNqnXm8evXqJ3Z2duXX1dPTk27fvj2hZ8+e3QMCAvRiY2OVHRwcqjwvYwy7du2Kt7CwKP8dMDAwKPnoo49S582b1yk4OFgEILVsX0ZGhpK2tnaJn59fjRhKX1P59aOjo1XOnDmjJxAIsGPHjgRDQ8Pyj/OMjIxKduzYEe/l5dXt1KlT+rGxsYkvG9vLknvEmDEmYIyNYoytYoxtY4zNqbTPiDHmxBhr1mFt0saIqDMFaVsEAoYJbpa48LEP/jWmKww0K8rOop6KMXfPTUzZ+g9uxtMnHISU6d+/f97IkSOf5+bmCj777DOzuo77559/NNLS0pQdHBwKPDw8ap3lOnDgQDEAXLt2rXwkc/jw4TlKSko8JCREu7hYluucPXtWGwCGDh2a7ePjk52TkyMMCgrSBIDLly9riMVioaura66Ojk6jl7uMi4tTTkxMVBUIBFi4cGFG9f1qamp84sSJmQAQHBxca2/mSZMm1ej/aGFhIRGJRCVFRUWsro/5GzJmzBinsjpmY2PjnlOnTnVMSUlR+fPPP2P8/f3T6jovLy+P7d27V/f99983nzFjhs2kSZNsJ02aZHvkyBE9AIiNjVWt7Txtbe2S6dOn13gt3bt3L3R1dc2RSqU4d+5cje+BmZlZkZeXV3717S4uLrXWQvfo0SNXLBYLJ0yYYPv333+rS6V1/7jOnz+vxTmHq6trbvU3VQDg4eFR4OLikttcsb0suUaMGWPuAPYDsAfAAHAAygB2lR4yFsB2AOMBHG++MEmbQp0pSBulqiTE7H52mOJphR2XHmLn5YfILZINTtxMeI7JW//BkC7GWD6sM5xNae0CQtasWZN05swZ3f/+979Gn3zyyVMnJ6ei6sfExMSoAkBsbKxaQ72EMzIyyvMKkUgkdXV1zQ0NDdUKDAzUHDp0aG5wcLBIVVWV+/n55QiFQr5p0yazgIAA0ZAhQ3LPnj0rAgBvb2+5RosTEhJUAMDQ0LBYQ0Oj1lFde3v7QgBISUmpNYlycHCo8boBQEtLqyQ7O1uYn59fPpA4f/58y8qvEwAMDAwk27dvr7H6b//+/bONjY2LOed49uyZ8s2bN7ULCwvZ/Pnz7ZydnSO7d+9eWP2c8+fPa77xxhv29SV8OTk5tSbqFhYWtb4OALC0tCwKCwtDYmJijQlrZmZmtZ6nq6tbAgBFRUVVBlK3bNnyeOzYsY5Hjx41OHr0qIGWllZJjx49cgcNGpQ9b968DGtr6/LR3aSkJBUAsLKyqvFay9jY2BRGRERoJiUl1XjN8sb2shqdGDPGbACcA6AH4CSAYABrqx12CMDPoMS4Y9Op1JmCFvkgbZCWqhI+8nPCrL42+OliLP57PQHFJbL/L88/eIYLkc8wyd0SH/k5wUJXvYGrkQ6jBcoR2rvu3bsXTp06NX3fvn1Gn3zyifnhw4fjqx8jkchyHGNj4+L+/fvXqImtzNnZucqIoI+PT3ZoaKjW2bNnRf37988LDw/Xcnd3F6urq/PBgwfnqqmpSYOCgkQAUko/EsewYcPqfY7qypaKr69UqqHl5IXCxg8Inzx5Ui85OblKcmlubl4EoEZi7O/vnzp69OjyRD8hIUHZz8/PMSYmRn3GjBl2t27dihQIKvI6sVgsmDZtmkNGRobS66+/nr548eK0rl27Furq6pYIhUIcPnxYNGnSJEfOeZPrwhhjNb4ZlWNoDHd394K4uLi7hw8fFl24cEH7xo0bWtevX9e+evWqaP369ea///573OTJk7OBl//5yBvby5JnxPj/IEuKF3PONwMAY6xKYsw5f8EYewCgV/OFSNqc6p0pCGmjDLVU8eXYbpjTzw4bzkXhWEQyOJc1U/krNBH/i0jGm31s8J6vA/Q0m73rDyHtwjfffJNy+PBhg2PHjhmEhITUqNW0tbUtAgAjI6PiyhPeGmPYsGHZGzZsMA8KChKdO3cup7CwkPn6+ooBWYmDp6dnzvXr17VTU1OFYWFhWurq6lJfX1+5Vu0piy8tLU05Pz+fqaur18iyHj16pAoAZmZmL93PMSkp6U5Tz7WxsSk+cODAQy8vr6537tzR3Lp1q/6iRYvKa7wCAgK0MjIylLp165Z34MCBhOrnR0dH11pCUSm2Ov+QlY0Um5ubN0tPS1VVVT59+vSsstKNtLQ0ob+/v/mvv/5qvGjRItvJkyffBmQj1QDw+PHjOmN/8uSJKgBYWFgovN+mPGn4MAAPypLiejwBUGetEukAqtQY04gxafusDTTw/TQ3nFjSHz5OFROYiyRS7LzyCN5rA/HTxRjkFdU694iQDs3Gxqb4nXfeeSaVSuHv729Zfb+Pj0+erq6uJDIyUuPu3bv1JmbV+fr65mpoaEgjIiI0jx49qgtUHREeOHBgdnFxMfvXv/5lVlhYyDw9PXNqm+SmpKTEAaCsVrkye3v7YktLy0KpVIqtW7fWmA1eWFjIjhw5ol/6WuQq02gJbm5uBbNmzUoDgDVr1phXfk3p6elKQN3lA3/++We9qxWKxWJh5bZ5Ze7fv68SERGhxRiDn59fzku9gDoYGRmVbNmyJVEgECAtLU05OTlZCQCGDBmSwxhDRESE5u3bt2v8/oSFhandvn1bUyAQwM/PT+E/H3kSYxMAdxtxXAEAKt7ryCgxJu1UN3Md/DbHC3/M6wNXK93y7eJCCdafjYbPuiDsvZaA4pJGz/shpEP46quvUnV0dEoCAwN1qtegqqqq8qVLl6aUlJRgwoQJDoGBgbUu3rBt2zb96gt2KCsro1evXmKJRML++OMPI5FIVNKvX7/yrgvDhw/PBoDffvvNGAB8fX1rLaMwNjYuBoDw8PBaa58WLVr0FABWr15tHh4eXh6DRCLBokWLLJOTk1XMzc2L3n777eeN/Z60pFWrVqVoampKnzx5orp58+byZL579+4FAHDt2jXtyq+jpKQEy5YtMwsLC2twwZGVK1daJiQklNfqZmVlCebPn29TUlICPz+/F46OjnXWITeGWCwWfPnllyZliW9lBw8e1JFKpdDS0ioxMDAoAQAnJ6eiYcOGPZdKpZg3b55NRkZGed1Kenq6cP78+TZSqRQjR47MrN6RQhHkKaUQQ5YcN8QOQHrTwiHtQm2LfFAbLNKO9LU3wNFFryHgXirWBkThYZrsk9s0cSE+O3oXv1x5hI+HOmFkdzMIBK68t80AACAASURBVPS7TTo+AwODkiVLlqSsWrXKsqCgoMag2eeff/4sISFB5ZdffjEZNGhQFycnp3wbG5tCqVSKlJQUlYcPH6oVFBQI/vzzzxh3d/cqdca+vr7ZwcHBOoWFhczHx0dcuZ63b9+++bq6upIXL14oAXXXF48YMeL5L7/8YjJ8+HCn1157TaypqVkCAGXlBv7+/mlXr17VOnHihH7v3r279u7dW6yrqyu5deuWZmJioqpIJCrZt29fXG1lFopgbm4uWbBgQep3331nvn79erNFixZlKCsro3///nm+vr5ZgYGBOn369Onau3dvsUgkKomIiNBISUlRWbBgQerWrVtN67puz549c0tKStC1a9fuffr0yVZRUeHXr1/Xfv78uZKVlVXhjh07apRnyKuwsJB99dVXlqtWrbJ0dHTMt7OzKxAIBIiPj1e9d++eBgB8/vnnSZVH/nft2vXYx8dHrbSHtUvv3r3LuphoZ2dnC52dnfN37tz5+GVjaw7yjBiHA/BkjNVZJsEYcwbQE8CNlw2MtGG0yAfpABhjGN7dDGc/9MaaiS4wFVUMdD1Kz8XifeEY9/PfuBJD7/PJq2HlypXPaluJrczOnTsTT506FTV69OjM7OxsYVBQkM7169e18/PzBYMHD87asmXLo6FDh9b4mH748OHlH48PGjSoSuIrEAjQt29fMQDo6upK+vTpU6MtFwB8//33SXPnzn2qoaEhDQgI0D148KDhwYMHDStf59ixY49++umnRz169Mi9deuWZkBAgJ5UKmUzZ85MCw0NvVdXf2BF+fzzz58aGBhIEhMTVX/66afy13Lq1Km4Tz/9NMna2rrwxo0b2n///be2o6NjwdmzZ6NGjRpV78REZWVlfuXKleiZM2emRUZGaly4cEFXWVmZz5o1K+369euRlbtFNJWOjk7Jt99++3j48OHPCwoK2OXLl0UXLlzQEYvFwjFjxmReuHAhcsWKFVVa0ZmZmUlCQkIily9fnmxsbFx06dIl0aVLl0SmpqZF/v7+STdu3Ig0MTFpE8uVsoZmapYfyNg0APsABAGYwjnPYIxJAezmnM9hjIkg60TRH8A4zvmJFoq5XfL8//buO06q8uz/+OfapQVhsYBKRykCFlDAii6IDSP2bqKYmNgSa9D4yxNjkidRYoyaCPqQqJiYxFiJJWrQ0ESIAlYEBRXpRYUFhKVevz/uM+wwzszu7M7u7Ox836/XvM6cfs05lGvuuc599+/vM2bMyHUY2TPqMFg1N7y/fDK07ZPbeERqqHzLNsa+voDRE+aztnzn/zsGdmvNzSf15MAOXyvdk1pmZjPdvX9Vtn3nnXcW9OnTR99kpOA8//zzLYcNG9ZjwIAB6994440Pcx1PfffOO++07tOnT5dk66rcYuzujwHPAIOAT8zs2WjV4Wb2D+BT4GjgcSXFBUCDfEgD06xxMVeUdmXKTcdyRWlXmjaq+OfxtfmfM+y+17j6b7P49POMHpgXEZE8kmnncOcR+i5uBJwSLesJnAO0AO4Bvp216KT+iq8zLvta140ieatV88b8eGhPJo4YxPkDOhJfYvzCu8s4/neT+J9x77FyXdIBwEREJI9llBi7+1Z3/zHQATgbuAm4BfgW0NHdb3B39XdUCOIH+VCLsTRAbVt9gzvOOoh/X1/KSftXPOuydbvz6PSFlP5mIr99+UPWluf8IWoREcmSjIaEjnH31cDTWY5F8omGhZYC0W3PFjzw7X68tXA1I1+ay/RPwsOmG7ds474JYVS9qwd341uHd6ZZ46qPniUiki2nnHLKOnfXyI5ZUOUWYzO70sx2rXxLKQiqMZYCc3Cn3fj79w5n7KUD6NW2ZMfy1Ru28L8vzGHIXZN4YsYitm2vF71BiYhINWRSSjEKWGZmj5nZSZZu0Gtp+OITY9UYS4EwMwbttycv/HAg957fl467V4w1sGTNRkY8+S5D753M+A9WUNUef0REpP7IJDF+GjDgXOAFYLGZ3WFmvWolMqnfWiW0GCsJkAJSVGSc1rc9r94wiNuG9WaPXSoGCvtoxXq+9+cZnPPANGYsUB/fIiL5JJPu2s4G2gI/AGZG728C3jez6WZ2hUotCkjTlhWDfGzbBBu+yG08IjnQpFERw4/ah0k3Dea647qzS5OKGuMZn63m7Aemcdkjb/Lh8nVpjiLZpJZ6EUkn+jci5T8UmfZKsdrdR7v7oUBvQtdtS4FD2bnUYmj1Q5a8sVOdsR7Ak8LVomkjrjuuB5NuGszwI7vQuLii0uyVOSs56d7J3Pj4OyxeXa8G3mpwzGz15s2bG+c6DhGpv8rLy5uYWcqBgDLtx3gHd58bdd3WCRgK/APYTii1eK66x5U8slPPFHoAT6R1i6bcdur+/OfGQZxxcHtiT2K4w1OzFnPsbyfxy+c/4MuvNuc20AZq+/btL65Zs6ZlruMQkfrJ3Vm1alXLbdu2/SXVNtVOjONO4u7+MvAr4NFosR7MKwSt9ACeSDIdd2/O3ef15YUfHs2g/drsWL5523YefO1TSn8zgT+8Oo8Nm9XtezZt27ZtzIoVK9asWLFi902bNjVWWYWIuDtbt24tLisra7FgwYLdV69e/e727dv/nGr7avVjHGNmuwEXAsOBQ+JWTa3JcSVPqMs2kbR6tyth7KWHMv2TL7jjxbm8vWgNAOs2beWu8R/xyLTPuHZIN84/tBONi2vcTlHw+vXrt2DmzJlnLlu27PsrVqwY6u6tcx2TiOSemW0A3t6yZcu/gMf69euX8mc7y/QbtZkVAScTkuFvAk0ILcSLgT8DY919fvVCb7j69+/vM2bMyHUY2TXrz/DsD8P7g86DM8fkNh6ReszdeXn2Cu58eS4fr/pqp3Wd92jOjSfsxykHtqWoSD+4xTOzme7eP9dxiEhhyGSAjwPN7C5gCfBP4EzCU32PAScCnd39f5QUFxC1GItUmZlx0gF78/J1xzDyrAPZu6TZjnWffbGBa/7+FqeOeo0p81blMEoRkcKWSSnFO4RE2IDpwFjgMXdfWwtxST7QIB8iGWtUXMR5AzpxWt/2PPL6AkZP/JiyjVsAeH/JWr794Bsc1W0PbjqxJ306qgdMEZG6lElR2zJC92y93P1Idx+jpLjAaZAPkWpr1riYy0u7MnnEYK4c1JWmjSr+OZ46/wtOGzWVq/46k09Wrc9hlCIihSWTxLiju9/i7h/WWjSSXzTIh0iNtWremJtP6smkEYO54NCOFMfVGP/rveUcf/dkbnn6PVasLc9hlCIihSGTke+212Ygkqc0yIdIVuzdqhm3n3kQ/77+GE4+cO8dy7dtd/7+xkJK75zAb16au6PsQkREsi9ljbGZdYreLnH3bXHzVeLuC2sUmeSHknawak54X7YE2vbJbTwiea5rmxaMvqgfby9aw8gX5zLtk/BLTPmW7Yye+DF//e9Crh7clYuP6EKzxsWVHE1ERDKR7uG7BYSR7HoDH0XzVS0i9UqOLQ1FK7UYi9SGvh135W/fO4wp8z5n5Etzmb00PNJRtnELv/7XXB6euoDrj+vBmYe0p5H6QBYRyYp0yetCQoK7JWG+oJnZhcCNhC8MG4BZwAXunnLc7QZNpRQitcbMOKZHGwZ2a81z7y7lrn9/xMIvNwCwrKycm556lzFTPmHEiftxQu+9MFMfyCIiNZEyMXb3LunmC5GZ3Qz8ArgT+BFQAgwCmuYwrNxSX8Yita6oyDitb3uGHtCWx95cyO9fncfn68PATfNXrufyv8zkkE67cvNJPTls3z1yHK2ISP5SuUMVmVkP4H+Bq909foi3f+YopPqhpF3F+zK1GIvUpiaNirj4iC6cdUgHHnztU8ZM/oT1m7YCMGvhGs4bM51je+7JiBP3o1fbkhxHKyKSfzIZ+e5WMzu1CtsNM7NbaxZWvXQpUE4Y2ERiWnWoeK9SCpE6sUvTRlwzpDuTRgziO0ftQ5O4GuP/zF3Jyb+fwg3/eJtFUdmFiIhUTSZPbNwGnF6F7U4FfpZpIGa2n5lda2aPmtlcM9tuZm5mZ1dh3wvNbIqZlZnZejObYWZXm1k2n0g5AvgQGG5mC81sq5nNMrPjsniO/BPfYqxBPkTq1B4tmnLrsN68emMpZx7cnliJsTs8/dYShtw1iZ8/N5sv1m/KbaAiInmiNh5lLqZ6D+ldCdwDXATsRxh6ulJmNgr4K9AfmAKMB3oA9wFPmlm2+jPaO4rrNuAnwDeBlcALZtYtS+fIP01bQtNW4b0G+RDJiY67N+d35/XlX9cczbE999yxfPO27Tw8dQGld07k3lfm8VVUdiEiIsnVRmLcFajOUNHvEx5qOw/oBkyqbAczOwu4ClgOHOTup7j7GUB3YA5wBvCDJPu1MrOeVXg1j9utGGgBXObuf3H3l6Pjryb0UlG4dmo1VjmFSK70alvCQ8MH8PjlR3BIp113LF+/aSt3v/IRpXdO4JHXF7B5q8ZrEhFJJu3Dd0lqhfumqR9uBPQCBgITMw3E3f+UcO6q7HZLNL3Z3efFHWuFmV0ZxfFjM/tDwsh9ZwAPV+H4xwOvRO+/jKYT4s6z0cymE7puK1yt2muQD5F65NB9duepK49k/AcruPPlD5m3cj0An6/fzM+enc2Dr33KjSf0YNhB7SgqUhdvIiIxlfVKcRuhLCL2L2ff6JXOBkKXZrXKzDoA/YDNwBOJ6919kpktAdoDhwOvx60bS+YP0c0GBiQLBWiW4bEaFrUYi9Q7ZsYJ++/NkF578dSsxdwz/iOWlpUDsPDLDVz72NuMmfwJN53Uk2O6t1YfyCIiVJ4Y/4KKxPhW4G1Sd0+2GVgCvOzuK7IWYWoHR9PZ7r4xxTZvEhLjg4lLjKvpeULPFEOi90SlFkcAT9bw2PlNg3yI1FvFRca5/Ttyap92/GXaZ4yaOJ81G8K4TbOXruWSh97giH334OahPenbcddKjiYi0rClTYzd/bbY+6iE4m13/3ltB1VF+0TTz9JsszBh25oYB7wB/MnMfkx48O56oDnwuywcP39pkA+Req9Z42K+d8y+nDugI2Mmf8yDr31K+ZZQYTbtky84fdRUhh6wNz86cT+6tmmR42hFRHKjyg/fuXuRu3+nNoPJUOxf7q/SbLM+mras6cmiGuVvAi8BdwNPEb5YDHL3+cn2MbPvR13HzVi1alVNQ6i/NMiHSN5o9Y3GjDixJ5NGDObCwzpRHFdj/OL7yznh7snc8vS7LI/KLkRECklt9EpRV2L/mtdZx7nu/rm7D3f33dz9G+4+2N1npNl+jLv3d/f+bdq0qasw654G+RDJO3uVNOPXZxzI+OuP4ZsHtt2xfNt25+9vLGLQbycw8qW5lG3cksMoRUTqVrWGhDazXoS+gktI0d+wu/+5BnFVxbpomu43v9i6dWm2kZpKNsiHHuQRyQv7tmnBqIsO4fLFaxj50lymzg99kZdv2c79Ez/mb/9dyFWDunLJkV1o1jhb3cKLiNRPGSXGZnYkMIbQLVvKzQituLWdGC+Ipp3TbNMxYVupDbFBPjaVVQzysUvrXEclIhk4qMOu/PWyw5kybxUjX5rL+0tCd/RlG7dw+4tzGfv6Aq47rjtnHdKBRsX5/GOjiEhqVf7Xzcx6Av8m9Nk7Dfg0WvUYMAPYFs2Po/aTYoC3oun+ZvaNFNsMSNhWastOdcaLcxeHiNTI0d3b8OzVA/nDBQfTeY+KMY6WlZVz81PvcdK9U3jp/eW4hn8XkQYok6/9Pyb0wHC5uw8kDL+Mu1/k7ocBfYCZhBKLa7IdaCJ3XwTMApoA5ySuN7NSoANhVLxptR1PwWulnilEGoqiImNYn3a8ckMpvzz9AFq3aLpj3fyV67ni0Zmcef/rTP9EQ8CLSMOSSWI8CJjn7n9MttLd5wCnAJ2An9Y8tCq5PZqONLNusYVmticwOpq9I2HUO6kNGuRDpMFpXFzEtw/vzKQRg7jx+B60aFpRfffWwjWcP2Y6lz78BnOWrc1hlCIi2ZNJYrw38H7c/DYAM9vRlODuK4FJhCGXM2Jmh5jZ9NgLOCRa9euE5Tu4+5PA/VFs75nZc2b2NDCPUPIxDrgv01ikGkrUM4VIQ7VL00b8cEh3Jt80mO8O3IcmcTXGEz5cxcm/n8L1/3ibRV9uyGGUIiI1l8nDd+vZuQeKWBNBW3Z+uG0jYbS5TJUAhyVZ3j3dTu5+lZm9BlwNlALFwFzgIeB+tRbXEfVlLNLg7b5LE356Sm8uPaoLd4+fx9NvLcY9dETzzFtLeP7dpVx0WGd+cGy3ncovRETyRSYtxoup6OUBQvIJMDi2wMwaE5LbjEezcPeJ7m6VvVLs+zd3P8rdS9x9F3fv5+6jlBTXIdUYixSMDrs1565z+/DStcdwXK89dyzfss0Z+/oCSn8zgXte+Yj1m7bmMEoRkcxlkhhPJfQAURLNv0Aop7jbzK40s2GE0eA6AK9lN0yp93YaFlq9UogUgv32bsmfLhnAE1ccQb/Ou+1Y/tXmbdzzyjxKfzOBsVM/ZfNWtVGISH7IJDF+GlhCeAgPd19CePithFDHO47w8F0Z8JOsRin1X7JBPkSkIAzosjtPXnEEf7y4Pz32qhhz6YuvNnPbcx8w5HcTGf/BihxGKCJSNVWuMXb3V0mo93X3n5nZu8DZwO6E8op73H1BNoOUPLDTIB+b4avPoUUDHgZbRHZiZhzfey+O7bknT89azN3jP2JpWTkAi77cyLpyDS0tIvVftYaEjufuTxFKKKTQlbSDVWXh/dolSoxFClBxkXFO/44M69OOR6d/xn0T5rN3STNO61udZ7JFROpWjRNjkR1atYdVc8L7tUuhXd/cxiMiOdOscTGXHb0v5w7oyMq15RQXJX12WkSkXlFiLNmjQT5EJEFJs8aUNGuc6zBERKokZWJsZv+pwXHd3YfUYH/JRxrkQ0RERPJYuhbjQTU4rrokKEQa5ENERETyWLrEeHCadSJfp0E+REREJI+lTIzdfVJdBiINgAb5EBERkTyWyQAfIulpkA8RERHJY9XqlcLM9geOANoAs9392Wh5EdDI3TdnL0TJGxrkQ0RERPJYRi3GZtYp6q3iXeD/gP8FTo/b5IfARjNTjxSFaqc6Yz2AJyIiIvmjyomxmbUGJhN6q3gPuB9I7LH9cUKPFKdlKT7JN+rLWERERPJUJi3GtwCdgJHAwe7+g8QN3H0ZMAcYmJ3wJO+UqGcKERERyU+ZJMbDgE+B/+ee9qmqRUC7NOulIYtPjMvUM4WIiIjkj0wS447ArEqSYoC1wG7VD0nymvoyFhERkTyVSWK8Edi1Ctt1BtZULxzJe6oxFhERkTyVSWL8PtDPzFql2sDM2gN9gFk1DUzyVEmHivdKjEVERCSPZJIY/43QYvx/ZtYkcWXUh/HvgabAo9kJT/JOSduK92uXwvbtuYtFREREJAOZJMZ/AqYC5wJzzOz30fIDzGwkoTeKM4BJhCRaClFskA8Ig3xs+CK38YiIiIhUUZUTY3ffCpxM6Kt4HyDWXVt/YATQHRgHnFaFB/SkIdMgHyIiIpKHMhoS2t3XAeeb2c+BocC+QDGhi7YX3f2t7IcoeaekHaz8ILxfuwTa9c1tPCIiIiJVUOXE2MxKAHf3de4+h1A6IfJ1GuRDRERE8lAmNcZrgFdqKxBpQDTIh4iIiOShTBLjdcC82gpEGhAN8iEiIiJ5KJPEeA7QodKtRDTIh4iIiOShTBLjPwIDzaxfbQUjDYQG+RAREZE8lEl3bQ8Co4HxZnazmfUws6a1F5rkrZ1ajDXIh4iIiOSHTHql2BY3++vohZkl29zdPaOu4KQBadoCmrWC8rKKQT5atMl1VCIiIiJpZVJKYRm8MjmuNEQ7ddmmnilERESk/suklKIok1dtBi15QH0Zi4iISJ5RAiu1I77OuEwP4ImIiEj9p8RYakcr9UwhIiIi+UWJsdQO9WUsIiIieUaJsdSOpiUV77dszF0cIiIiIlWkxFhEREREBCXGIiIiIiKAEmMREREREUCJsYiIiIgIoMRYRERERARQYiwiIiIiAigxFhEREREBlBiLiIiIiABKjEVEREREADB3z3UMBcHMVgGf5TqOAtca+DzXQUhW6Z42PIn3tLO7t8lVMCJSWJQYS8Ewsxnu3j/XcUj26J42PLqnIpJLKqUQEREREUGJsYiIiIgIoMRYCsuYXAcgWad72vDonopIzqjGWEREREQEtRiLiIiIiABKjCXPmdl+ZnatmT1qZnPNbLuZuZmdXYV9LzSzKWZWZmbrzWyGmV1tZvp7kSNm1tjMhpjZXWY23cyWmdlmM1tiZk+a2aBK9tc9rYfM7Idm9riZzTGzL8xsi5mtMrNXzOxbZmYp9iuK7t+M6H6WRff3grr+DCJSGFRKIXnNzO4Brk2y6hx3fzLNfqOAq4By4FVgCzAEaAk8E+2/LfsRSzpmdhwwPppdDswEvgJ6AwdEy3/p7rcm2Vf3tJ4ys8XAnsD7wBLCPe0MHAYY8E/gTHffHrdPMfA0cCqwlnBPmxLuaVPgD+5+TR1+DBEpAEqMJa+Z2WVAD2AGIYl6ECglTWJsZmcBTxISr2PcfV60fC9gAtALuM7d7639TyDxzOxYQnJ7r7tPSVh3HvBXoBg41t0nxK3TPa3HzGwg8Ja7f5WwfH9CwrsX8B13fzhu3Y3Ab4EPCPd7RbS8OzAl2ud0d/9n3XwKESkESoylQTGziVSeGM8A+gGXuPufE9aVAhMJCVb7+BYsyT0z+xPwXeAhd/9u3HLd0zxlZj8FfgH83d0vjJYVA0sJrcyl7j45YZ9LgLHAm+5+aN1GLCINmerupKCYWQdCArUZeCJxvbtPIvzUuzdweN1GJ1XwVjTtEFuge5r3tkbT8rhlRxCS4sWJSXHkCUKpzAAza1/L8YlIAVFiLIXm4Gg62903ptjmzYRtpf7oHk2XxS3TPc1TZrYPcEU0+1zcqth9epMk3H0DMDua7Vs70YlIIWqU6wBE6tg+0fSzNNssTNhW6gEz2xsYHs0+FbdK9zRPmNmlhFKnxoRW/yMJDTS3u/szcZtW9Z72RfdURLJIibEUmhbR9Ks026yPpi1rORapIjNrBDwKtAJedff41kXd0/xxFHBJ3PxW4KfA7xK20z0VkZxQKYUUmlh/qXrqNL88QOimaxHwrYR1uqd5wt0vc3cDmgP7A/cAtwHTzaxd3Ka6pyKSE0qMpdCsi6Yt0mwTW7cuzTZSR8zsXkJPFMuBIe6+PGET3dM84+4b3f0Ddx8B3AL0Ae6L20T3VERyQomxFJoF0bRzmm06JmwrOWJmdwHXAKsISfG8JJstiKa6p/kp1nfxMDNrHL1fEE11T0WkTikxlkIT6+5rfzP7RoptBiRsKzlgZr8BbgC+AI539w9SbKp7mt/WEGqNGwG7R8tmRdMByXYws+ZUjISoeyoiWaPEWAqKuy8i/KfbBDgncX00GEQHws/20+o2OokxszuAEcBqQlL8TqptdU/z3jGEpHgN8Hm0bBqwEuhgZsck2eccQs8Wb7r7kjqJUkQKghJjKUS3R9ORZtYtttDM9gRGR7N3aIS03DCzXwI3ExKl4929Ki2Cuqf1lJkdbWYXmVnTJOuOIgzjDvCgu28DiKZ3Rsvvj+5jbJ/uwB3R7K9qL3IRKUQaElrympkdQkXiA9Cb0H3TPODL2EJ3Pzxhv9HAlYTRtl4hjKI1BCgBxgFnx/6TlrpjZqcC/4xmZ1AxiEOiue5+R/wC3dP6ycyGE+qI1xBa9pcT/o52Jfx9BXiBMIz7xrj9ioFngGHAWuBVQivxcUAz4A/ufk3dfAoRKRRKjCWvmdkgYEJl20VdRCXueyFwNXAgUAzMBR4C7lfLYm7EJVGVmeTug5Lsr3taz0Sj210KHA10A1oTumNbTvjy86i7j0uxbxFwVbR/T2Ab8C4w2t3/VvvRi0ihUWIsIiIiIoJqjEVEREREACXGIiIiIiKAEmMREREREUCJsYiIiIgIoMRYRERERARQYiwiIiIiAigxFhEREREBlBiL7GBmY83Mo0EmGiwz283M7jezhWa2JfrMSQdYSNivIK5PTPRZ1dG7iEgBUWIsUnj+CFwBbAWeBB4B/lPdg5nZ8CiJHJud8GpfoSX5IiJSNY1yHYCI1B0zawycBpQDfd19bQa73wLcASyrjdjqoV65DkBEROqWEmORwtKW8Pd+SYZJMe6+jMJJinH3ubmOQURE6pZKKSQr4usxzew8M5tmZuvNbJ2ZvWpmA5Ps0yXab0FVjpvmfMPNbIaZfWVmy83sQTNrE61rZmY/N7OPzKw8qqv9VdRymu7z9DWzcWb2uZltMLOZZnZpJfucaGbPmtkKM9tsZsvM7O9mdmC6z25mjczsR2b2TvQZ1qQ7T8JxOpvZaDP7xMw2mdlqM5tgZhcmu2bAZ9Fs59g1jF5dqnCur5UfRPfu4Wj2koRjjk3Yv7GZXWFmU6I4y81snpn9Lna/ErbfUaJhZnuY2e/N7NPo2o6L2+4sM3vIzGab2ZrouPPNbJSZdUw4ZpfoOlwSLXo4Ieb4z5ayxtjMWpvZSDOba2YbzWytmU03s6vM7GsNDgmfpaWZ3Rl9lk1mtsRCzffuKc51vpn9x8y+tFAT/rmZvRd9vq7J9hERkepRi7FklZn9AvgJ8BrwAnAQcCww0MwGufu0LJ9vJHAdMAl4CTgS+A7Q38yOAl4m/CQ+CZgPlAL/D2gDfD/FYQ8D7geWAOOBPaP9HjKzg939miRx3AtcQ6jbfRNYDHQDzgdON7Oz3P1fyT4C8BRwEjAZ+ADoVMXPflj0mXcFPgWeAfaIYh1kZicBl7h7LLl7BGgBnAV8RagvjllflXMm8SRwOHAU8DHhvsfseG9mJYQ/DwOBMmAmsAY4BLgeOMvMSt19QZJztCZc01bAFGAG8EXc+n8QSkM+AF4BmgJ9gauAc83sKHf/KO5zPhLF0RWYSvhzERP/Pikz60aonG27QwAAB4JJREFUye4ILAeeA5oDg4FRwBlmdoq7b0qye6vonO0J9/v9KJYrgEPN7HB33xJ3rtuAnwFbgNeBpYT73SX6fFMI111ERLLB3fXSq8YvwKPXF0C/uOVFwJho3fiEfbpEyxdUdtw051sO9IpbvhswN1r3HiFxaBW3vi8hydgOdE445ti4494LFMetOwxYG607OWG/K6Ll7wM9E9adHp1vNbBbks8ea8XtluH1bgYsjPa/OyHWA4AV0brLM73mac4Zuz7DE5YPj5aPTbPvY9E2TyRch2JgZLRuYorjOuELTssUxz4XaJ6wrBHwy2jfF6v6War4Z++NaN3jQLO45R2BD6N1t6f5LC8ALeLWtYu7lxfFLW8KbADWAT2SxNEd2Kemf3f10ksvvfSqeKmUQrLtZ+4+Mzbj7tuB/4lmj66shKEabnX3OXHnWw08EM32Br7v7mVx698G/kVoqS1NccylwE3uvi1uv/8SElAILZwAmFkxcGs0e64n1KW6+zjg/witfN9Kcb5b3L3SlsoE5xASsc+SxPo+cFs0+6MMj5t1ZtYbOI8Q68XRPQIgivsW4F2gNFnZCeGLxeXuvi7Z8d39cXffkLBsq7v/lHAvTzCzlln6LEcDAwjJ6hXuXh53zkWEXy8ArjazZkkOsR74rruvj9tvKXBfNDskbtsS4BvAx17R4k3cfvPc/dOafB4REdmZEmPJtucTF7j7SkKLaVPCT/3Z9FKSZbEk87P4pDnOvGjaLsUxn/DkP4P/JZoOjKsj7Ut4oG22u3+Q4niToukRKdY/k2J5OrGk/q8e99N7nIcJLZDdzKx9NY6fTUOj6fPuvjFxZfTlKVZ2kewazfLkJRY7mFkPM7smqkN+KKrlHUtoOS4ilLVkQ+y6P+fuXyaudPcXCQ8otgT6Jdl/prsvT7I89oVqx59Jd18FLAD6mNldZtazJoGLiEjlVGMs2bYwxfK1hDKHZK1oNbE4ybL1adbFr08VS6pWuIWEEoxmhAR/BbBvtG7/VA9qxfnaA2bAymTJYhXEkt2ksbp7uZktjbZrT6iXzpXYNbrazK6uZNtk1+izJMsAiL6gjAYuI/wKkEpJJeetqrTXPfIJ4ctSsi8k6f5+wNf/TF5MqEG/AbjBzFYB0wmlJY/G/xoiIiI1p8RYsipq/csKM6v0F41Kzpe1WJKdOpoWR9MlhAe/0knW/Vd1kmKoSALTJePpEsW6FLtGMwl12OnMTrIs3TW6FvgeoWTiBsIDaitjLf5m9jqhFTpb16Km1z2jP5PuPiXqMeQUYBDh4dJTgGHAbWZ2gru/lckxRUQkNSXGkkubo2mLFOs711UgCbqkWN6J8LN8ORD7GX1RNF3m7sNrN6ydxFrD9022MqpvbRvN5rK1GCqu0QR3H5HlY58TTS9396+V8ZC9EoqYtNc9sk80zcp1j+qnH49emFlbQr37eYReMI7MxnlEREQ1xpJbqwjJ8R7J+rEFTq7jeGLOMbMmSZZfFE2nuvvW6P0bhJ44Do668aorsbrlC5L1m0vop9eA+e5e24lx7AtOqi/aL0bT01PEWhOxvn8XJa4ws+NJXpoBlcecSuy6DzOz3ZKc80TCF5L1hBbyrPMw0MpPotk+tXEOEZFCpcRYciZ6aGxKNPsLM9vxE7SFAUF+kZPAQm3oHfGlHGY2gPBTPYSu3IAdn+GXhHKBcWZ2aOLBzGwXM7vAzLI5xPAThGRwH+D2hFh7Az+PZn+bxXOmEku8k34+d58FjCO03j5uZh0StzGztmZ2XTUS51h5ypUJ16ArFb2TZBxzKu4+hdCncktglJk1jTtne+CeaPa++B4rqsPC4C2XRX1AJxoWTVPWX4uISOZUSiG5ditwNKEv4FIzm00ooegH/JqKrt7q0gOEwROGmdkMQqtjKeHvy2h3fy5+Y3e/18w6E7px+6+ZvUsYdKGI0KVaT8IAEEOBZL1kZCx6uO5cQmvsjwiDSrxJaEEdBDQh9KIxJhvnq8R0Qn/Sh0TXazahi7Wp7r5jVDzgWeAMYKiZvUNI6koI16gX4Xo9QBgkpapuJwyOcjkw2MzeIlyDUmBaFFeyUoN/Ev7sXWdmBxBKJBx4yN1fr+ScFwITgAsIf2Zfo2KAj12AV6noLq8mdgP+SEjA3yY88FdE6IZwf8I1vikL5xERkYhajCWnoiRkCCGZ6EhF+cTFUT+0ufBfQjI1FziRMKrbe4SHvH6QbAd3v4GQjD1GSGi+SUhQmxNGRruIitbxrHD36YTu4h4gtFifSRiIZDqhz+RL3L2ynjKyEccmQnL6AqEF+1vAd4nrJ9rd1xLu88WEEd+6RvH2IyTCDwAnZtrK6mEkxUOjc7cCTgM6AL8i3LtkXdnF+rM+j9D6Gxst8btAjyqccz5wMHAnoWTiNMK9nk348zE0RXd/mfqY8GXrRUKyfwrhOhcTvvD0TVFXLSIi1WR18P+miIiIiEi9pxZjERERERGUGIuIiIiIAEqMRUREREQAJcYiIiIiIoASYxERERERQImxiIiIiAigxFhEREREBFBiLCIiIiICKDEWEREREQGUGIuIiIiIAPD/ATC91LCvK8+GAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"n=np.arange(3,30)\n",
"\n",
"err_bisect = np.zeros(len(n))\n",
"err_newtraph=np.zeros(len(n))\n",
"\n",
"for i in range(0,len(n)):\n",
" root,out = bisect(f_h,0,4,es=0,maxit=n[i])\n",
" err_bisect[i] = out[1]\n",
" \n",
" root,out = newtraph(f_h,dfdh,1,es=0,maxit=n[i])\n",
" \n",
" err_newtraph[i] =out[1]\n",
"\n",
"plt.semilogy(n,err_bisect,label = 'bisection')\n",
"plt.semilogy(n,err_newtraph, label = 'Newton-Raphson')\n",
"plt.xlabel('number of iterations')\n",
"plt.ylabel('relative error (%)')\n",
"plt.legend(loc='center left', bbox_to_anchor=(1, 0.5));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Discussion\n",
"\n",
"There is a drastic difference between the `bisection` function and the `newtraph` function. How many iterations are necessary for the bisection method to reach an error of $10^{-3}$ \\%? How many iterations are necessary for the Newton-Raphson method to reach an error of $10^{-3}$ \\%? \n",
"\n",
"Are there any benefits to the bisection method? When would the Newton-Raphson method not work? or not be appropriate?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Secant Methods"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"The key to the Newton-Raphson method is its evaluation of the derivative of the function, but we can't always evaluate the derivative. Many numerical functions, such as the solution to differential equations that we worked on in notebooks [01](./01_Catch_Motion.ipynb), [02](./02_Step_Future.ipynb), and [03](03_Get_Oscillations.ipynb) do not have analytical derivatives. Instead, we will approximate the derivative with a modified secant method.\n",
"\n",
"Approximation of derivative:\n",
"\n",
"$f'(x) \\approx \\frac{f(x+\\delta x)-f(x)}{\\delta x}$\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Modified Secant method"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Change the x evaluations to a perturbation $\\delta$ [1,2]. \n",
"\n",
"$x_{i+1}=x_{i}-\\frac{f(x_{i})(\\delta x_{i})}{f(x_{i}+\\delta x_{i})-f(x_{i})}$"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"def mod_secant(func,dx,x0,es=0.0001,maxit=50):\n",
" '''mod_secant: Modified secant root location zeroes\n",
" root,[fx,ea,iter]=mod_secant(func,dfunc,xr,es,maxit,p1,p2,...):\n",
" uses modified secant method to find the root of func\n",
" arguments:\n",
" ----------\n",
" func = name of function\n",
" dx = perturbation fraction\n",
" xr = initial guess\n",
" es = desired relative error (default = 0.0001 )\n",
" maxit = maximum allowable iterations (default = 50)\n",
" p1,p2,... = additional parameters used by function\n",
" returns:\n",
" --------\n",
" root = real root\n",
" fx = func evaluated at root\n",
" ea = approximate relative error ( )\n",
" iter = number of iterations'''\n",
"\n",
" iter = 0;\n",
" xr=x0\n",
" for iter in range(0,maxit):\n",
" xrold = xr;\n",
" dfunc=(func(xr+dx)-func(xr))/dx;\n",
" xr = xr - func(xr)/dfunc;\n",
" if xr != 0:\n",
" ea = abs((xr - xrold)/xr) * 100;\n",
" else:\n",
" ea = abs((xr - xrold)/1) * 100;\n",
" if ea <= es:\n",
" break\n",
" return xr,[func(xr),ea,iter]\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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IBLtyYkxWoxFUdySnJzsN2LEiBNCDFJTU/0AOnbsWOXiIb179y584oknDgAHAObNmxd03XXXnfLTTz+FTJ06NezBBx/MtMcs3LVrV6unnnoqraohGF27di0ASElJcZlCry7p1KlTIcCuXbtauZNxeM+jo6O1uEoLpVp/gYwxVwF3AamAN9AJ6Gyv7wDuMsZcXcc6Kk2E6sU966RBpWHx8hLiY0J5elJ/fn1kDB/dNJw/xHci2L+8j2DbgVz+viCZs15eSuK/fuSdH34n/Ui9P+1VlGbHBx980L7ivuLiYr755ptQgNGjR+ec2KtqjBs3Lveyyy7LBEhKSgp07D/77LOPAHzyySdVmWMFwIQJE3J8fHzM2rVrg1avXl0lA9rPz68UrPOpDmPHjs0VEZKSklqvW7fuBAN69erV/uvWrWvt5eXFueeeW+ProzRtqv38wBjzujEmFstoPg0YAXQ2xnQ3xrxe1woqTQdn43ll+kpKjYcnauUmDarxrDQsPt5enNkjnL9NjmPl42N5+5qhJLgoxrJuzxGembOZES8s4g9v/cLHv+4k66jLkERFOen48MMPw+fNmxfk2C4tLeWBBx6I2rVrV6uIiIiia6+91uWkvgpjtJ07d25QSUn51MW5ubniyCzh8BwDPP744+lBQUElr732Wsfnn38+vKjoROftokWLWk+fPv14po/o6Ojiq666KqO0tJRLL700tqJRW1xczCeffNLGeZ/DK7x169ZqlTDt2bNn4bhx4w6VlpZy8803dz148ODxL5XMzEzvW265pWtpaSnjx4/P6t69u3qeWyhVDtsQkXuAPGPMOwDGmL3A3vpSTGl6dG/bnXat2nGo4BCHCg6RcjiFnu16uhYO7122npkMJUXgrZOIlYanlY835/XryHn9OpJXWMzCzQeYuTaNZckHKCqxYhONgeU7sli+I4snZ25kZPcwEuOiOK9fB4K1GItyknLFFVdkjh8/vld8fHxORERE0YYNGwJTU1P9/f39S6dPn/57UFBQpTHHS5cuDX7vvfci2rVrV9y3b9+89u3bF+fk5HivXr066MiRI97dunU7dv/992c65Lt37170ySefbL/mmmtiH3300S6vvPJKZPfu3fNDQ0NL0tPTfXft2tUqIyPDd8KECYduvPHG48b7G2+8sSc1NbXVsmXL2gwZMqTfoEGDjkZGRhYe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cXFx5bp9JkyY0PH777/3MPX9AaCiooIWLlzoaWtrq/nrr79OGiajx44dU1haWtbKy24n7r1799q+9dZbAQDo888/z3zzzTevyWQ3CxVSUlKsDWNbtGjRhSeffPKGg4ODRreuuroa06ZN85k/f773a6+95r9v376zxs5r4cKFXvPmzct46623apLxb775psOUKVOCPv/8c+9p06blOzg4aLy9vVXr1q3LiI+PD8zKylKMHz/+2htvvFFg7JhNzZyyjfUACMATALYAuExEs4moS8O7sfauq2tX2FnaAQByy3KRVZJ1c6OT383X5YXNHBljjLH6zJgxI1uXOAOAu7u7+oUXXsgHgPPnz9ssWbIkU5c4A8C9995bMWjQoBtCCOzYsaNmpuHS0lL68ccf3QHgs88+y9IlzgBgb28vVqxYkWljY6NJS0uz27Fjh51u29dff+1WXl4u6927d6l+4gwAL7/8cuGwYcOa5Zvw5ORk6y1btrj4+PhUrV279qIuAQUACwsLLFiwIDssLKwiKSnJPjExsaYc46uvvvLUxpqnS5x1+yxcuPCyu7t7NcxQWFgor6yslHXs2FFprBe3e/fuys6dO9f8wXK7cf/73//2VqvVNHHixNy33367VuIMAFFRUZX6PxcAMGHChEL9xBkALC0t8eWXX15xd3ev/vPPPx0LCwuN5pwjR44s1E+cAWDy5MnXO3XqVFlaWir/448/bE38iJqNOUPVjQHgDeA1AMna1+8COE5EB4loEhE1WIPE2icLmQWiPKJqlmuPumG0NI4xxlgLe/jhh4sN14WGhioBwNvbu8owgQKA4OBgJQBcuXKlps71zz//tCsvL5e5u7tXP/roo3WO6e3trRo6dGgRAOzevdtBbz8HAHjqqaeM9i4+++yzzdLruGnTJicAGDp06A17e/s637jL5XLExsaWAsC+ffvsAKnXNSUlxR4AXnzxxTpx2tjYiAcffNCsHiMfHx+Vj49P1enTp21efvllv9TU1Do9wHcat0qlwoEDBxwBYPLkyWaVlRw9elQxa9Ysj+eff77j448/HhgfHx8YHx8fqFarSaPR4OTJk3XqsQHg/vvvv2FsfXBwcCUAZGVlGa2ZbknmjrZRCOAbAN8QUWcAzwN4BkAsgN4A5mnLOr4XQvyvkWNlbVisVyz2Z+8HICXPY8LGtHBEjDFWV2OXPrRl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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"n=np.arange(3,30)\n",
"\n",
"err_bisect = np.zeros(len(n))\n",
"err_newtraph=np.zeros(len(n))\n",
"err_modsec=np.zeros(len(n))\n",
"\n",
"for i in range(0,len(n)):\n",
" root,out = bisect(f_h,0,4,es=0,maxit=n[i])\n",
" err_bisect[i] = out[1]\n",
" \n",
" root,out = newtraph(f_h,dfdh,1,es=0,maxit=n[i])\n",
" err_newtraph[i] =out[1]\n",
" \n",
" root,out = mod_secant(f_h,0.001,1,es=0,maxit=n[i])\n",
" err_modsec[i] =out[1]\n",
"\n",
"plt.semilogy(n,err_bisect,label = 'bisection')\n",
"plt.semilogy(n,err_newtraph, label = 'Newton-Raphson')\n",
"plt.semilogy(n,err_modsec, label = 'modified secant')\n",
"plt.title('Convergence rates of solvers')\n",
"plt.xlabel('number of iterations')\n",
"plt.ylabel('relative error (%)')\n",
"plt.legend(loc='center left', bbox_to_anchor=(1, 0.5));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The modified secant can converge as quick as the Newton-Raphson method, but there is no universal $\\delta x$ that works well for every problem. Typically, it is set as a small number and then varied based upon the conergence rate for the problem. \n",
"\n",
"# Shooting method\n",
"\n",
"Now, we have multiple solving methods to revisit our __Initial Value Problems__. In notebooks [01](./01_Catch_Motion.ipynb) and [02](02_Step_Future.ipynb) we measured the displacement of a ball as a function of time. We _assumed_ the initial velocity was 0 in the case of the dropped object, or we approximated the velocity based upon the first two measured displacements and a finite difference approximation. \n",
"\n",
"Consider the case of the tennis ball that was dropped in the ['data/fallingtennisball02.txt file'](../data/fallingtennisball02.txt). After it strikes the ground, we don't really _know_ the velocity. What we _do know_ is that the position was $\\approx 0$ at t=0.58 s and it was $\\approx 0$ m at t=1.43 s. Solving our differential equation without an initial velocity is known as a \"shooting\" method."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![The shooting method imagined as a catapult aiming at a target](../images/shooting.png)\n",
"\n",
"Solving this type of problem where the __boundaries__ are known is referred to as a _Boundary value problem_. Typically, boudary value problems happen over a distance, rather than points in time, but we will come back to those in the fifth module on boundary value problems. \n",
"\n",
"For now, let's reframe our engineering problem into a root-finding problem. We have a length of time of interest:\n",
"\n",
"t=0.58 - 1.43 sec\n",
"\n",
"in this time, the ball had just struck the ground and is traveling upwards. What is the initial velocity necessary to keep it in the air for $\\Delta t = 0.85~s$ ?\n",
"\n",
"We know that the ball is acted upon by gravity and the force of drag, but we do not an analytical solution for the position as a function of time. First, let's look at the data we have. "
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"at time t=0.58 s, y=-0.0152 m\n",
"at time t=1.42 s, y=-0.0110 m\n"
]
},
{
"data": {
"image/png": "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1157LeXl5QHzlJaWxvSYq1atAgIrQV+2bdvGQQcdVG9fnWFOtPTt29fv/qysLHr27MnGjRvZsGEDBQUFHmXYs2dPsrOz/Zbr378/gCdvrOjTp4/f/R06dGDXrl1UVFR49q1duxaAwYMHh1V33T249957uffee4PmNQOZ2JE0SlBVZwIRvclVdSow1c/+1cDPYiFXMnLDSQfz/rKtVNUoc9fs4u2vt3Dc0B6JFis5yenm3wgmp3GrIxmYN28eV111FRkZGUyfPp1TTz2VwsJC2rVrh4jwm9/8hjvuuKOuez9m1NTUAHDyySfTpUuXoHn9zSoeTkunqdR96NWde7APv2iuTzhTBPka58SaunswevRohg0L7gs8dOjQuMmRakSkBEWkMzARp2XVHegI7AK2Al8AM1XVQhLEmb5dcrhwfDEPfbwagLvfWc6xB3cnLc1ag434ZeOuu2Tm2WefRVX5yU9+wnXXXdcofcUKf1NjNp3evXuzbNkyrrrqKk4++eS4HCMYgfzXKisr2bzZmfqzV69eABQWFgKwadMmDhw4QJs2bRqVW73a+W8UFHi9oOqsWvft828UXtdyixV1reNly5aFlb93794ATJw4kenTp8dUFiMwIT9rRCRDRH4gIh8BW4CncCKtXAJ8H7jU3X4a2CIiH4rIuSKSNK3M1sjVE/vTNtMZg1myuZQ3F3+bYImMWLBz507A+0L0Zdu2bbz99ttR1VunAAL53J144okAPPPMM1HV31Teeustv118Tz75JLW1tfTv39+j/AoLC+nXrx+1tbU8/vjjjcpUVVXxxBNPAFBSUuLZ37VrV7KystixY4ffY/nz2WsKxx9/PACPP/54vW7SQNTdgxdeeCHgfTJiT1AlKCIXAquBx4EjgW04kVZuB64DrnDXdwAvuekTgP8Aq0TkgrhJnuJ0yW3DlCOKPdt3v/MNNTbdUounbvxoxowZ9Vose/fu5ZJLLmH37ugMoepaREuWLPGbfsUVV9C7d28effRRbr75Zr/jkYsWLeLhhx+O6vihKC8v50c/+hEHDhzw7Fu5ciU33XQTAD/96U/r5b/22msBuOmmm1i6dKlnf01NDddffz1r166lqKions9kZmYmRx11FOD4+/l2mc6aNYvf/e53MT2n0047jREjRrBmzRrOP/989uzZUy997969vPvuu57tUaNGcfrpp7Ni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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"filename = '../data/fallingtennisball02.txt'\n",
"t, y = np.loadtxt(filename, usecols=[0,1], unpack=True)\n",
"tbounce = t[580:1425]\n",
"ybounce = y[580:1425]\n",
"\n",
"print('at time t={:.2f} s, y={:.4f} m'.format(tbounce[0],ybounce[0]))\n",
"print('at time t={:.2f} s, y={:.4f} m'.format(tbounce[-1],ybounce[-1]))\n",
"plt.plot(t,y)\n",
"plt.plot(tbounce,ybounce,'s',label='after bounce 1')\n",
"plt.legend()\n",
"plt.title('Time between bounce 1 and 2')\n",
"plt.xlabel('time (s)')\n",
"plt.ylabel('height y(t) (m)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, let's look at the `fall_drag` function we created that described the motion of the tennis ball. Remember, this function returns the derivative of the state. So if we input\n",
"\n",
"state = $[x,~v]$\n",
"\n",
"it will return\n",
"\n",
"d(state)/dt = $\\left[v,~-9.81+\\frac{F_{D}}{m}\\right]$"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [],
"source": [
"def fall_drag(state,C_d=0.47,m=0.0577,R = 0.0661/2):\n",
" '''Computes the right-hand side of the differential equation\n",
" for the fall of a ball, with drag, in SI units.\n",
" \n",
" Arguments\n",
" ---------- \n",
" state : array of two dependent variables [y v]^T\n",
" m : mass in kilograms default set to 0.0577 kg\n",
" C_d : drag coefficient for a sphere default set to 0.47 (no units)\n",
" R : radius of ball default in meters is 0.0661/2 m (tennis ball)\n",
" Returns\n",
" -------\n",
" derivs: array of two derivatives [v (-g+a_drag)]^T\n",
" '''\n",
" \n",
" rho = 1.22 # air density kg/m^3\n",
" pi = np.pi\n",
" \n",
" a_drag = -1/(2*m) * pi * R**2 * rho * C_d * (state[1])**2*np.sign(state[1])\n",
" \n",
" derivs = np.array([state[1], -9.81 + a_drag])\n",
" return derivs"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To get the position as a function of time, we can use any of the integration methods that we defined in [03_Get_Oscillations](./03_Get_Oscillations.ipynb). Here we copy in the second-order Runge-Kutta explicit method. "
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [],
"source": [
"def rk2_step(state, rhs, dt):\n",
" '''Update a state to the next time increment using modified Euler's method.\n",
" \n",
" Arguments\n",
" ---------\n",
" state : array of dependent variables\n",
" rhs : function that computes the RHS of the DiffEq\n",
" dt : float, time increment\n",
" \n",
" Returns\n",
" -------\n",
" next_state : array, updated after one time increment'''\n",
" \n",
" mid_state = state + rhs(state) * dt*0.5 \n",
" next_state = state + rhs(mid_state)*dt\n",
" \n",
" return next_state"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Defining our problem for Python \n",
"\n",
"Now, we can finally ask our engineering question in a Python way. \n",
"\n",
"We need a function, $f(v_0)$, such that when we input the correct velocity for the initial condition, $f(v_0^{correct})=0$\n",
"\n",
"So we define a new function with `def`"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [],
"source": [
"def f_v(v0,y0=ybounce[0],yT=ybounce[-1],T=(tbounce[0],tbounce[-1]),N=50):\n",
" ''' define a function f(v) that returns \n",
" ymeasured(T)-ypredicted(T)\n",
" here, the time span is based upon the tbounce variable defined above from \n",
" the first bounce to the second bounce\n",
" \n",
" arguments:\n",
" ---------\n",
" v0: the unknown initial vy velocity component\n",
" y0: the known initial position\n",
" yT: the known final position\n",
" T: a list of two times (beginning time, end time)\n",
" N: the number of time steps to integrate the RK2 method default = 50\n",
" \n",
" returns:\n",
" --------\n",
" error: the difference between vmeasured(T) and vpredicted(T)\n",
" when f_v(v0)= 0, the correct initial velocity was chosen\n",
" '''\n",
" \n",
" \n",
" # initialize array\n",
" t_sol=np.linspace(T[0],T[1],N)\n",
" dt=t_sol[1]-t_sol[0]\n",
" num_sol_drag = np.zeros([N,2])\n",
"\n",
" # Set intial conditions\n",
" num_sol_drag[0,0] = y0\n",
" num_sol_drag[0,1] = v0\n",
"\n",
" for i in range(N-1):\n",
" num_sol_drag[i+1] = rk2_step(num_sol_drag[i], fall_drag, dt)\n",
" error = num_sol_drag[-1,0]-yT\n",
" #plt.plot(t_sol,num_sol_drag[:,0])\n",
" return error"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Take a look at the pieces of this function:\n",
"\n",
"1. Create an array of time `t_sol`\n",
"\n",
"2. Set initial conditions to `y0` and `v0` <- __here `v0` is our unknown value__\n",
"\n",
"3. Use Runge-Kutta second order to integrate the function for `t_sol[0]` to `t_sol[-1]`\n",
"\n",
"4. Create an output, `error` of the difference between the measured y(T), `yT`, and the current solution for y(T), `num_sol_drag[-1,0]`\n",
"\n",
"When `error` is 0, we have chosen the correct initial velocity, `v0`.\n",
"\n",
"To see what the output looks like, below we can take out the integration part and plot the results for a guess of `v0`."
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"# initialize array\n",
"N=50\n",
"T=(tbounce[0],tbounce[-1])\n",
"t_sol=np.linspace(T[0],T[1],N)\n",
"dt=t_sol[1]-t_sol[0]\n",
"num_sol_drag = np.zeros([N,2])\n",
"num_sol_drag[0,0] = ybounce[0]\n",
"num_sol_drag[0,1] = 3\n",
"\n",
"for i in range(N-1):\n",
" num_sol_drag[i+1] = rk2_step(num_sol_drag[i], fall_drag, dt)"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(t,y)\n",
"plt.plot(t_sol,num_sol_drag[:,0],'s')\n",
"plt.title('Predicted motion after bounce')\n",
"plt.xlabel('time (s)')\n",
"plt.ylabel('height y(t) (m)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercise\n",
"\n",
"Enter your best guess for `v0`. What is the error between the measured `yT` and your predicted y(T)? _Hint: use our function, `f_v`, and plot the results._"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Solving the engineering problem\n",
"\n",
"Now, we have all the components we need for this \"shooting\" problem. We can't evaluate a derivative easily and the bisection method is too slow. Therefore, we will use the `mod_secant` function to find the correct initial velocity. \n",
"\n",
"Below is the solution. _Just one line of code!_"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.175915400675785 m/s is the correct initial velocity to match the height at beginning and end of bounce\n",
"the solve took 3 iterations\n"
]
}
],
"source": [
"v0,out = mod_secant(f_v,0.0001,7,es=0.000001) # <-- solution line\n",
"print(v0, 'm/s is the correct initial velocity to match the height at beginning and end of bounce')\n",
"print('the solve took ',out[2],' iterations')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercise\n",
"\n",
"Change the value of the `dx` and `x0`. Does it change the final result? Does it change the time it took to arrive at the solution or the number of iterations?"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mSignature:\u001b[0m \u001b[0mmod_secant\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mes\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.0001\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaxit\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m50\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mDocstring:\u001b[0m\n",
"mod_secant: Modified secant root location zeroes\n",
"root,[fx,ea,iter]=mod_secant(func,dfunc,xr,es,maxit,p1,p2,...):\n",
"uses modified secant method to find the root of func\n",
"arguments:\n",
"----------\n",
"func = name of function\n",
"dx = perturbation fraction\n",
"xr = initial guess\n",
"es = desired relative error (default = 0.0001 )\n",
"maxit = maximum allowable iterations (default = 50)\n",
"p1,p2,... = additional parameters used by function\n",
"returns:\n",
"--------\n",
"root = real root\n",
"fx = func evaluated at root\n",
"ea = approximate relative error ( )\n",
"iter = number of iterations\n",
"\u001b[0;31mFile:\u001b[0m ~/Documents/UConn/ME3255/ME3255-CompMech/CompMech03-IVPs/notebooks/<ipython-input-76-6b9e51d2227c>\n",
"\u001b[0;31mType:\u001b[0m function\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mod_secant?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# What we've learned\n",
"\n",
"* How to find the 0 of a function, aka root-finding\n",
"* The difference between a bracketing and an open methods for finding roots\n",
"* Two bracketing methods: incremental search and bisection methods\n",
"* Two open methods: Newton-Raphson and modified secant methods\n",
"* How to measure relative error\n",
"* How to compare root-finding methods\n",
"* How to frame an engineering problem as a root-finding problem\n",
"* Solve an initial value problem with missing initial conditions (the shooting method)\n",
"\n",
"* _Bonus: In the Problems you'll consider stability of bracketing and open methods._\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References\n",
"\n",
"1. Chapra, Steven _Applied Numerical Methods with Matlab for Engineers._ McGraw Hill. \n",
"\n",
"2. _Computational Physics with Python_, lecture notes by Eric Ayars, California State University, Chico. Available online on the author's website: https://physics.csuchico.edu/ayars/312/handouts/comp-phys-python.pdf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Problems\n",
"\n",
"1. One of the main benefits of a bracketing method is the stability of solutions. Open methods are not always stable. Here is an example. One way engineers and data scientists model the probability of failure is with a [sigmoid function e.g. this Challenger O-ring case study](https://byuistats.github.io/M325_Hathaway/textbook/challengerLogisticReg.html)\n",
"\n",
"$$\\begin{equation}\n",
" \\sigma(T) = \\frac{e^{a_0-a_1 T}}{1+e^{a_0-a_1 T}}\n",
"\\end{equation}$$\n",
"\n",
"The Challenger explosion was a terrible incident that occurred due to the failure of an O-ring. The post-mortem data analysis showed that at low temperatures the O-rings were brittle and more likely to fail. We can use the function $\\sigma(T)$ to determine the point at which there is a 50\\% chance of O-ring failure. Using the pass-fail data, the two constants are\n",
"\n",
"$a_0 = 15.043$\n",
"\n",
"$a_1 = 0.232$\n",
"\n",
"a. Plot the function $\\sigma(T)$ for $T=0-100^{o}F$. Where do you see the function cross 50\\% (0.5)?\n",
"\n",
"b. Create two functions `f_T` and `dfdT` where `f_T`=$f(T)=\\sigma(T) - 0.5$ and `dfdT`=$\\frac{df}{dT}$\n",
"\n",
"c. Use the `incsearch` and `newtraph` functions to find the root of f(T). When does Newton-Raphson fail to converge? Why does it fail? _Hint: if you're stuck here, take a look at this [youtube video finding an interval of convergence for the Newton-Raphson method](https://youtu.be/zyXRo8Qjj0A). Look at the animation of how the method converges and diverges._"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. In the examples shown above, we determined the initial velocity after the first bounce by specifying the beginning y(0) and end y(T) for an object subject to gravity and drag. Repeat this analysis for the time period just after the second bounce and just before the third bounce. The indices are given below for t[1430:2051] = 1.43-2.05 seconds.\n",
"\n",
" a. What is the velocity just after the second bounce?\n",
"\n",
" b. What is the coefficient of restitution for the second bounce? _Hint: use the ratio of the last velocity from above to the initial velocity calculated here._\n"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.4300000000009008 2.051000000004969\n"
]
},
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fe2de6f9410>]"
]
},
"execution_count": 177,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"i0=1430\n",
"ie=2051\n",
"print(t[i0],t[ie])\n",
"plt.plot(t,y)\n",
"plt.plot(t[i0:ie],y[i0:ie],'s')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"celltoolbar": "Slideshow",
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}