diff --git a/18_initial_value_ode/.tmp.swp b/18_initial_value_ode/.tmp.swp deleted file mode 100644 index 17b8a7e..0000000 Binary files a/18_initial_value_ode/.tmp.swp and /dev/null differ diff --git a/20_derivatives/20_derivatives.ipynb b/20_derivatives/20_derivatives.ipynb index 463f55e..5f4d362 100644 --- a/20_derivatives/20_derivatives.ipynb +++ b/20_derivatives/20_derivatives.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "metadata": { "collapsed": false, "slideshow": { @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": { "collapsed": true, "slideshow": { @@ -144,9 +144,170 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAABcSAAAXEgFnn9JSAAAA\nB3RJTUUH4QsVEjIBhA7nwgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJ\nbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAyMS1Ob3YtMjAxNyAxMzo1MDowMR/QZ5EAACAA\nSURBVHic7d19XJP1/j/wd+LiTomhIktmQxRS0pPiUslyMwMf3qRpqacbQevRF286x6S07Hsc+Ihz\n6uvXo50s0zJH1vkJhaWmpvhlw4w8DiEpNEUCnDEYcSN5ABk3vz+u2lkDxsZurpu9nn/JtWufvTfH\nXlyfva/PdVtXVxcBAACwbQDbBQAAABAhkAAAgCMQSAAAwAkIJAAA4AQEEgAAcAICCQAAOAGBBAAA\nnIBAAgAATkAgAQAAJyCQAACAExBIAADACQgkAADgBAQSAABwAgIJAAA4AYEEAACcgEACAABOQCAB\nAAAnIJAAAIATEEgAAMAJCCQAAOAEBBIAAHACAgkAADhhINsF2KWzs/O7776rra0lolmzZrFdDgAA\nuB7XA+mjjz46dOjQxYsX29vbmS2XL19mtyQAAHAHrk/ZFRYWFhcXDx8+fPbs2WzXAgAAbnRbV1cX\n2zXYcvny5VGjRolEIiKKjo4mHCEBAAgU16fsmBACAADB4/qUHQAAeAkEEgAAcIKQA6mivpXtEgAA\nwF5c/w7JGVGvHgm6/s2QK0fZLgQAPKcpfNoN6dSwbz8UtdSxXQtHcbY1TMiBFP7N9q7H//eJtc+r\nEiLYroXHoqOjOfv25Qu8hs6z8zVU6wxpJ8v/37KxishkD1TFR1zuFBPylJ2opU6zapK6wJB2opzt\nWgDA7Zg02rdsrCJSzHYt0B9CPkIiIlmIn2bVJOWuQiLCcRKAgKWdKFcXGJBGvCbYQDIZ9eMDOwiZ\nBMAZJqPeVKsPiIlz+cgrDlzSljWUv+r6kcGTuL5SgyU7V2po0mTd0Ga2lHxjbBswYsQIIhqyJKX+\nD48odxUmTZYgkwA8z/xbKRomZbYMWZISpFziksGRRg7h8jeaXA+kgoKC9957j/m3VqslIoVCwfy4\ncuXKKVOmWO2vVy0WDZOKQqVDlqRER0d//9WplpJvmkvyiaj1ideRSQCeZ/lbSUQmo978Wxm2doeT\ngyONHMXlQOL6lJ3RaGRyyMz845w5c6x2Zt73lm9xUahUFCoNUi6py9pG/3xZs+p1zN0BeJLt38rq\nneucySTlO4VEhDQSDK4fIdmvLmtbc0m+NC3bvMXqD4HqnesCYuIwdwfgMd1/K60wv5X9m7tj0kiz\nelL/6/NKXD5CEk7bd3NJ/h2KpTZ2CFIuuaHNZHoctGUNKw5c8lhtAN7Jzt/KfoyMNBIk4QRSS8k3\n/jHTbOwgGiZtN14nIlmI375l4yrqW5BJAG5l/2+lQ5BGQiWQQDIZ9cy3pjb2YW41GfX0WyYRETIJ\nwE0c/a20E9JIwAQSSERkqu37PW2q1Zt/PWQhfqr4CJnYLyI9382lAXgpR38r+4Q0EjaBBJIoVOof\nM41pJO1NkyYrSPG7705lIX6JcknSZAkyCcDl+vdb2ZuK+lakkeAJJJCI6A7F0iZNlo0dbmgzu58i\njkwCcJ/+/VZ2V1HfuuLARVmIP9JI2IQTSP4x00Sh0rqsbT3eWr1zHRH12F1qmUm4hBKAC/X7t9KS\nOY32LRvr+hKBS4RzHhIRmYz6Jm2WyahnzmywXKnBVKu3cTIEg1mcUbNqkizEzzMFAwie1W8lWazU\nYM9vJdLI5bh8HpKgAol+e/c3l+Qza9mF3t4pGiYNUi5h1izpEzIJwOUsfytFw6SmWr2dv5UV9a0R\n6fmp8RE4jd2FEEgsMBn1f5yt/LTwqqN3RCYBuIlDq30zabRv2dgkucTdhXkVLgcS19ey6zdRqPS7\nf/v0447M32LKXYXIJADXYlaxs2dPpJF3Ek5TgwupEiKSJkuUuwrR4wDgedqyBqSRdxLsEZKTcJwE\n3TFX5AIPiCL62xf0N7bL4CzOzrk5CYHUK1VCxF0hfspdhbgoMpgJ9YMAeETAfxghkGxhZgxWHLiE\nTAIAcDcEUh+QSQAAnoGmhr4lySWaVZNWHLiUdqKc7VoAAAQLgWQX5rJ+6gIDMgkAwE0QSPZCJgEA\nuBUCyQHmy58jk0DYDAbD/v37//Wvf3FkHOfHrKys3L9/v17vwJUAOTK4V0EgOYa51CyOk0DYSkpK\nli9fvn//fvvvUltb+/nnn1dWVjo5jjtqI6KzZ88uX778/Pnzjj6cRqMZMWKERqNxx+BgBYHkMMzd\nAXR34cKFRx999NSpU5YbQ0NDH3300QkTJrBVlfOys7MbGhpmzJjBdiFeAW3f/cFkknJXIf22pgMA\ndDdhwoSDBw+yXYVTDh06tGDBggED8Le7JyCQ+gmZBKzQ6/Varfb06dNtbW133HHHnDlzZs+ebbmD\nwWA4ffr01KlThw8f/sEHH+h0uoEDBz711FNWf+P3OY6ln3766cyZM7GxsaNHj7bcXldXd+rUqVGj\nRg0ZMiQvL4+Izp07N2jQIObWpUuX1tTUaLXa0aNHx8bGWt7x5s2bn332mVarbW9vl0gkCQkJSqWy\nH4XZUFxcrFar6+rqxo0bt3LlSoeejlwuZ7acP3/++vXr8+bN621kIrIanIg++eSTzs7Oxx9/3DLG\nvvrqq6qqqgcffFAiwQJ9vesSrqioKHc/RHldi+y1r939KMARHnhH2Xbr1i0i8vHxGTVq1NSpU319\nfYlo/vz5HR0d5n2OHj1KRNu2bRs7dqy/v39oaKhIJCKi119/3f5xcnJyiGjNmjXMj0ajUSQSJSQk\nWNWzdetWIjp+/Lharfb39ycif3//wb/pPg7j9OnTYWFhRBQWFqZQKAIDA4no6NGjdj7BHse0snv3\nbiISiUQzZ84MDw8PDQ3dsmULEX322Wf2PB3zltTUVB8fnxs3bvQ2cvfBu7q63nzzTSJKSUkx3+vM\nmTNEpFAobNRsPyffh6y/jW1AIDlL8fb5feeqPPBAwDrWf5NNJtMHH3xgMpnMP77wwgtEtH37dvM+\nTCAFBgampqYyn+PV1dVjxowRiUT19fV2jtP9Q3/58uVEVFFRYVnPmDFjwsPDLe/y/vvvW+7QfZxr\n164NHjw4NDQ0NzfXvDE/P7+kpMTOJ9hnIH333Xc+Pj4xMTHV1dXMlr/+9a8+Pj6WmdHn02FMnDhx\n1qxZNkbucfCurq4FCxYQ0ZEjR7q6uoxGY1hYWGhoqOW9nIFA4iXPvO6aq/WKt8974IGAddz8TQ4L\nC7P8Y58JJKs/xnft2mX1iWl7nO4f+szf+Js3bzZvyc3NJaItW7ZY3qXPQPrzn/9MRFlZWf1+gn0G\n0nPPPUdE586ds9x43333Wb4CfT6drq6ua9euEdHbb79te+Tug3d1ddXX148cOXLo0KHV1dWzZs0i\nopycHPufsm0CDiR8h+QsmdhfW9aoLWvASnfeJu1EeepJ93Za9nj17q+//lqn0125csVkMhHRwIED\nz549a7XP/PnzLX8MDw8nol9++cXRcczuv//+8ePHv//++yqVivlq5P333/fx8Xn22WcdekZardbX\n13fx4sU29nGosO40Gs3gwYPN3wMxFi1adO7cOYeezpEjR+j3r2SPI3cfnIjEYnFWVtb9998/YcIE\no9G4adMmJpbANgSSs2QhfqnxERm6agSSt1El9JAWbtXQ0LBo0SKtVuvv7y+XywcPHkxEbW1tnZ2d\nVnsOGzbM8kerJjH7x7GUnJy8Zs2aw4cPL1y4sLa2NjMzc86cOY5+RX/lyhWxWNxb01r/CrNy/fr1\niRMnWm0cOXKk1ZY+n052dvbEiROl0v9c4rbHkXscnIimTJmSnJz89ttvjx07Nj093f76vRl6GV0g\nUS7RljWwXQUIX3p6ular/fDDD5ubm/Py8r744osvvvji7rvv9sw4SUlJgYGB7777LhFlZGR0dHSs\nXbvW0YceOHBge3u7awuzMmDAgLq6OquN3R/U9tO5efNmXl6e1YFmjyP3ODgRXb169cMPPySiS5cu\nWZ2eBb1BILmALMRPJvZT6wxsFwLu1Y/PX9c6derU0KFDn376afOWzs5OnU7nmXECAgKWL19+4sSJ\nysrKPXv2yGSy+Ph4Rx96+vTpDQ0NtbW1LizMSmxs7I8//mgVEt0Hsf10jhw50tHRYTW12OPIPQ7e\n1tb22GOPdXZ2njlzJiws7Mknn6ypqXHoWXgnBJJrqBIiMhBIQrdz5052C/D19W1pabGcv9qzZ09L\nS4vHxklOTiai5cuXl5aWWp1/c+eddxJRn8vnzJs3r6Oj44033nBtYZZmz55tMpmYQx9GQ0NDZmZm\n9z1tPJ3Dhw+PHDnSao2J7iP3Nvi6desuXLjw5ptv3n///QcOHDAajcuWLXPoWXgnBJJrmFsb2C4E\nhGz27Nn//ve/lyxZotFodDrd3/72tw0bNowdO9Zj40yYMCEuLu706dM+Pj5My5nZ3XffHRoamp2d\n/cYbb+zfv7+3teaSk5OnT5++bdu2p59++tixY1999dUXX3yxevXqkydPuuoJPv/88yNHjtywYcM/\n/vGP4uLiY8eOPfzww+bTde15Op2dnYcOHXr00Uf7HLnHwQ8ePLhr164nnnjimWeeIaIZM2akpqZq\ntdq0tDSHnog3YrvNz4083N2Y+uWPSf/voicfETyM9X7ZW7duPfHEE+Zf3vDw8JycnLlz5zJnoTKY\ntu8PP/zQ8o5WG/scx0ZrtVqtJqIFCxZ0v+n06dPTp09nzmZlPlt6HOeXX35Zs2YNc7ouY+TIkRcu\nXLDzCdpzYmxZWZll98Hy5cs/+ugj6qnxvcenw7xcPTZqW43cffBr166JxeIxY8b88ssvlndUKBRE\npNVqbZRtJwG3fSOQXAarNggeR36Tq6urjx8/znyCe36c1157rbcPa4eYTCatVnv8+PFr1665pLDu\nSkpKjh8/bjQabezT49N57rnnBg8ebLk8RG8j2x7cTQQcSLd1dXU5fZTFUdHR0ZcvX/bkIyrfKVQl\nRKD/W6g8/47imra2tjFjxvj6+l65coXtWlygt6fzzDPPjBo16tVXX2WrMNucfB9y+W2M85BcKVEu\nSTtRrliNQAKh+eGHH3Jzcz/++ONr164x3cy8Zvvp7N27l5WqAE0NrqSIFKO1AQRJq9WuX7/++vXr\nr7/+umVbNk8J7OkIBqbsXGzFgUtEtG+Zw41PwH1cnusA7yHgKTscIbmYKj4CR0gAAP2AQHIxZtUG\nZBIAgKMQSK7HtDawXQUAAM8gkFwPrQ0AAP2AQHI9WYhfklySoatmuxAAAD5BILkFWhvAismoby7J\nZ7sKD6msrNy/f79er+fFsMAdCCS3QGsDmDVpsvSqxeWrp9TsfKF81ZTyVVOaNFlsF+VeZ8+eXb58\neZ8rf3en0WhGjBih0WhcOyzwBVZqcBes2gBEpFctFg2TBsTESdOyichk1LeUfNNckt9ckh+2dgfb\n1XFOdnZ2Q0PDjBkz2C4E2IEjJHdRRIorGlpxkOTNmDQKW7tjyJIUZosoVBqkXBK2docoVFq9cx27\n5XHQoUOHFixY0NsFzkHwcITkLrIQP0WkOO9qI9Za9U51WduIqLfDoCFLUqp3rmvSZAUpl9g/psFg\nOH369NSpU4cPH/7BBx/odLqBAwc+9dRTlocUer0+Pz9/+vTpI0aM6G2jeRyxWKxWq4uKisRi8bPP\nPjtu3Dgiunr16v79+ysqKkaPHr169eohQ4b0WVhxcbFara6rqxs3bpzVle5++umnM2fOxMbGjh49\n+nevT13dqVOnRo0aJZfLmS3nz5+/fv36vHnz7BmWiD755JPOzs7HH3/cMsC++uqrqqqqBx98UCKR\n9Fk2cA7by427EeurrGuu1uOCFELi0Dvq2uZFN3Izbezw7++/vrZ5kUMFMNfp2bZt29ixY/39/UND\nQ5mrCr3++uvmfQ4cOEDdLvxjtZEZZ+vWrTKZLDAwMDQ0lIhEIpFWqz169Kivr+8dd9whFouJ6M47\n7/z5559tV7V7927m7jNnzgwPDw8NDd2yZYv54YxGo0gkSkhIsLrX1q1biej48ePmLampqT4+Pjdu\n3LBn2K6urjfffJOIUlJSzCOcOXOGiBQKhUOvKu8I+PITCCT3Urx9XnO1nu0qwDUcekddXixpq7G+\n0o+ltpprPybf51ABTJAEBgampqYyV+uprq4eM2aMSCSqr//1bWZ/IAUGBm7dupXZUlBQ4OvrGxMT\nM3LkyNzcXGYj84m/adMmGyV99913Pj4+MTEx1dXVzJa//vWvPj4+lg+3fPlyIqqoqLC845gxY8LD\nwy23TJw4cdasWfYP29XVtWDBAiI6cuRIV1eX0WgMCwsLDQ0130WoBBxImKt1L6za4J1MRr1omFQU\nKrWxD3OryehwE7NcLlepVMw81fDhw9evX28ymfLy8hwdZ9q0aS+++CLz79jY2EceeaSkpOT5559X\nKpXMxj/96U++vr75+ba61d96662Ojo59+/YNHz6c2fLKK6/ExsZa7sNcHfyDDz4wb9FoNKWlpZZX\nDdfr9UVFRearhtszLBHt27dv5MiRK1asqKmpeeKJJ6qrqz/++GPzXYB3EEjuhdYGr2Wq7TtpTLV6\n26HVo/nz51v+GB4eTkS//PKLo+PMnTvX8sehQ4cS0b333mu58Z577vn+++9tDKLRaAYPHmz+Hoix\naNEiyx/vv//+8ePHv//++52dncyW999/38fH59lnnzXvc+TIEbJ4avYMS0RisTgrK6uhoWHChAmn\nTp3atGnTrFmzbFQLHIdAci9zawPbhYBHiUKl/jHTbJ8J26TJClI40NFgNmzYMMsf+92TZtWtwIzj\n6+truZH5JsmG69evjx8/3mrjyJEjrbYkJydXVVUdPnyYiGprazMzM+fMmWPZd5CdnT1x4kSpVOrQ\nsEQ0ZcqU5ORko9E4duzY9PR029UCxyGQ3C5RHqYuMLBdBXjaHYqltk+AvaHNDIiJ80wx7e3tbhp5\nwIABdXV1fT5cUlJSYGDgu+++S0QZGRkdHR1r164133rz5s28vDzLIz87hyWiq1evMpd8vXTp0qlT\np5x4KsA+BJLbKSLFWLXBC/nHTBOFSpnm7+6Yk5Ac6vm2E3Ogc+vWLcuN165dc/kDMWJjY3/88Uer\nqNDpdFa7BQQELF++/MSJE5WVlXv27JHJZPHx8eZbjxw50tHRsXjxYkeHbWtre+yxxzo7O8+cORMW\nFvbkk0/W1NS45okBGxBITrFzgTK0NnghUaiUmZFjzjdiNpqM+iZNVvXOdaZaPbN2g8vJZDIi+uqr\nr8xbmpub9+3b547HIqLZs2ebTCbm0IfR0NCQmZnZfc/k5GQiWr58eWlpqdVJRYcPHx45cuSECRMc\nHXbdunUXLlx4880377///gMHDhiNxmXLlrnkeQErcGJsPzVpsm5oM1tKvhEN+3XWe8iSlN7+4FVE\nitNOllfUt8pC/DxYI7CMyaQmbdYNbWb12+tEw6SmWr1o2K+LNbjpQeVy+dixY99++22pVDpx4sSb\nN2++9tprfn7ueuM9//zz77777oYNGzo7OxUKxfXr1zdv3jxo0CCj0Wi154QJE+Li4k6fPu3j42PZ\nX9fZ2Xno0CHLLXYOe/DgwV27dj3xxBPPPPMMEc2YMSM1NTU1NTUtLU2lUrnp+YJbIZD6w9EFypi1\nVjN0BlVChMeLBTaJQqVDlqQMoRSTUW+q1XvmS6OsrKwFCxa8/PLLROTj47N+/frY2Fg3HToMGjRI\no9E89thjf/7zn5kty5cvj4+Pf+qpp7rv/Nxzz+Xn58+bN8+yM/vLL79saWmxXKDBnmH1ev2zzz47\nZswY5vxZhkql0mq1qampCoUCC+LxEtsnQrmRm87/urZ5keGtP/d408+Z/9vbTVi1QQC4fEZhd0VF\nRcePHzcvfOBuJSUlx48fNxqNNvZ57bXXiCgnJ8dy43PPPTd48GDmPN/+DettBHxiLI6QHNPvBcrM\nrQ1Y2g48w+qMIncbN24csxReb9ra2vbs2TNmzBirU4Xa29s3btzYW/N6n8OCkCCQHNNckn+HYqmN\nHYKUS+qytvX4ZRIuSAHe6YcffsjNzf3444+vXbvGtGhb2rt3LytVAQehy84xLSXf+MdMs7GDaJi0\n3Xi9x5uYVRvcUxcAd2m12vXr11+/fv31119/+umn2S4HuAuB5AAnFyhjWhvQ/w3eJjk5ubW1tbKy\ncuPGjWzXApyGQHKMkwuUqRIisGoDAECPEEgOcH6BMqzaAADQGzQ1OIZZoMzG2SQ3tJm2ux7Q2sBr\n0dHRbJfAUWvXrt25cyfbVQC/IZAc4x8zzVSrr8vaNmRJSvdb7VmgjFm1wV31gTtdvnyZ7RJcxmTU\nN2mziKi3d7I9ixvdlpLbtW2m+cfnn3/etUWCt8GUnWOcX6CMaW1Q6/BNErDJ+Xdy2onyJLnE9j4A\nDrmtq6vLM49UVVWVk5NTWloaHBysUCgmT55sz70uXLhQW1vbffv48eP7vC5kdHS0m/6kZf66bC7J\nZ9ayMy9Q1uMfm91pyxpWHLhU/qqHLj0A0Btn3skR6fn7lo3Fid68474PRud5KJCys7M3b95suZj8\nzJkzd+zYYXU1sO7Wrl2bk5PTffv27dvnzJlj+74eeN37t0BZRX3rigMXVQkR+GUGjnD0nazWGdJO\nluOPKj7iciB54jukgoKCTZs2BQUFpaenK5XKysrKtLS03Nzc9PT0LVu22DOCSqUKDAy03OLhZVF6\nIwrt47SkHjGXkc3QVSOQgCMcfSfnlTWq4rFSMLiYJwLpjTfeIKK0tDTmklyjR4/etWtXfHx8Zmbm\nypUrmcu32DZnzpzg4GB31+lJiXKJclch21UA9JNaZ0Aggcu5vamhsrKyuLhYLBZbzrANGjSIuVzx\nsWPH3F0AN6G1AfhLrTMkySW4uBe4nNsDqaSkhIimTJlitV0ulxPRxYsX7RzHZDK1tLS4tjZ2qRIi\n0P8NfJR2sjxRHsZ2FSBAbp+yKy0tJSKx2PrLEolEQkRFRUX2DDJ79uyGhgYi8vPzi4+PX7NmjT0T\nfRwnE/vjghTAO8xhPd604A5uP0Kqqakhorvuustqe0REBBHdvHmzzxGGDh06efLkhQsXPvzww7ff\nfvvhw4cXLlx47tw5d1TrSebWBrYLAXAA2hnAfdx+hNTR0UFEgwcP7vHWzs5O23d/8cUXLQ+Gbt26\nlZqaevDgwZSUFK1W6+PjY/vulgu9cLDTEa0NwDtoZ+Ajvix55fZAEolERFRVVWW1nYmiPhPFamrO\n19c3PT29qKiovLxco9FYXXqyOw6GkCVzawPOeAdeQDsDT1l+EnI5nNw+ZRcZGUlERqPRajvT7BAe\nHu7ogAMGDJg4cSI50hDBZWhtAB5BOwO4ldsDSSqVElH35X+YLUxcOeq2224jolu3bjldHftkYn8i\nwgUpgPvUOkNFfSvaGcB93B5IcXFxPj4+Z86caW5uttzOLAg0derUfozJdO7FxMS4pEJ2yUL8kiZL\n0NoA3JdX1rhv2Vi2qwAhc3sgBQQEzJ07t729fffu3eaNpaWlOTk5gYGBzOmxjH379m3cuLGw8D9f\n8tfU1FjFGBHt3r27uLjY399/+vTp7i7eMxLlEhwhAfepdQYcHoFbeWLpoPXr13/99dfvvvuu0WhU\nKpV6vX7v3r0dHR0bN24cNGiQebezZ89qtdq4uLhJkyYxW86fP//SSy8plUqZTCaTySoqKvLz85kv\nn9LS0oKCgjxQvAegtQG4D+0M4AGeCCSJRPLhhx9u2LDh4MGDBw8eJCKxWLxly5alS21dWZWIwsLC\nJBKJ1Wrf48aNS0lJEczhEUOVEIGrywCXpZ0sx3wduJvnrofkeVxeZd1KRX1rRHq+ZvVETIkAB2nL\nGpTvFFleHBb4i8sfjLhiLCfIQvxS4yPQ2gDclKGrTsXJsOB+CCSuQGsDcJZaZ0jEfDK4HwKJK5jW\nBmQScA3aGcBjEEgcwrQ2sF0FwO9gdQbwGAQSh8jE/tqyRhwkAXdoyxqwOgN4DAKJQ2QhfklyrNoA\nHJKhq8bZCOAxCCRuUcVH4AgJuAMXmwBPQiBxC1obgDvQzgAehkDinES5BK0NwAUZOsOMyGC2qwAv\ngkDiHEWkGK0NwDptWYO2rBFfIIEnIZA4B60NwAVoZwDPQyBxEVobgHVoZwDPQyBxEVobgF1oZwBW\nIJA4Cq0NwCK0MwArEEgchdYGYAvaGYAtCCSOYlob8q42sl0IeB20MwBbEEjcpYqPUBcY2K4CvA7a\nGYAtCCTuQmsDeB7aGYBFCCROQ2sDeBjaGYBFCCROU0SKKxpacZAEnlFR34p2BmARAonTZCF+ikgx\nWhvAM9JOliONgEUIJK5LlIehtQE8Q1vWgHYGYBECiesUkWK0NoAHqHUGmdgP7QzAIgQSD6C1ATwg\nQ2dIxHwdsAqBxANMawPbVYDAoZ0BWIdA4gGckATuxpx+xHYV4O0QSPyAWTtwK5x+BFyAQOIHzNqB\nW2nLGhWRYrarAG+HQOIHzNqB+2C5IOAIBBJvKCLFmLUDd8gra8R8HXABAok3EuUSzNqBO6h1BszX\nARcgkHgDs3bgDpivA+5AIPGJIlKcoatmuwoQFMzXAXcgkPgkUS7BERK4FubrgDsQSHyCWTtwLbXO\noIgMxnwdcAQCiWcwawculFfWiPXrgDsQSDwzY3QwjpDAVbRlDZivA+5AIPEMrkYBrqLWGSrqWzFf\nB9yBQOIfXEMWXCIPy3sDxyCQ+GfG6GBcQxach+vDAtcgkPhHJvavqG/FrB04A/N1wEEIJP6Rhfgl\nySWYtQNnYL4OOAiBxEuJ8jDM2oEztGUNifIwtqsA+B0EEi9h1g6cVFHfioZv4BoEEi/JQvwUkcGY\ntYP+wQXLgZsQSHylSojAERL0T9rJcszXAQchkPhKJvbH5ZGgfzBfB9yEQOIrZqFVtQ6tDeAYzNcB\nZyGQeEyVEJGBQAIHZegMuAAScBMCiccwawf9oMUZSMBVCCQew+WRwFGYrwMuQyDxW6JcknainO0q\ngDcwXwdchkDiN0WkGLN2YD9tWSP664CzEEj8hlk7sB8zX4cFVYGzEEi8p4gUCkuQYwAAH5FJREFU\nY9YO7JFX1oj5OuAyBBLvJcolmLUDe6h1BszXAZchkHgPs3ZgD8zXAfchkIRAESnO0FWzXQVwGubr\ngPsQSEKQKJfgCAlsw3wdcB8CSQgwawe2qXUGRWQw5uuA4xBIAoFZO7Ahr6wxEQs0AOchkARixuhg\nHCFBb7RlDZivA+5DIAmEIlKMWTvokVpnqKhvxXwdcB8CSTgUkWJc1By6y8Py3sATCCThmDE6WF2A\nyyOBNW1Zgyo+gu0qAPqGQBIOmdi/or4Vs3ZgCfN1wCMIJOGQhfglySWYtQNLmK8DHkEgCUqiPAyz\ndmBJW9aQKA9juwoAuyCQBAWzdmBJW9ZQUd+Khm/gi4FsF2CXqqqqnJyc0tLS4OBghUIxefJktivy\nKJNRb6rVB8TE9bmnLMRPERmcdxUXYRMO+//3u8vQVWO+DniEB4GUnZ29efPm9vZ25sf33ntv5syZ\nO3bs8PX1ZbcwD2jSZN3QZraUfCMaJmW2DFmSEqRcYuMuqoSItBPlKkJXFe/143/firasYd+yse6p\nDsD1uD5lV1BQsGnTpoCAgLfeeuv7778/evTofffdl5ubm56eznZpbqdXLW4uyQ+IiYv6tCpi17/C\n0z4dsiSluSS/euc6G/eSif21ZY2YteO7/v3vW8F8HfDLbV1dXWzXYMvjjz9eXFy8ffv2OXPmMFtu\n3rwZHx9fV1d34sQJmUxm477R0dGXL1/2RJVuoFctFg2Thq3d0f2muqxtJqO+x5sYyncKFZFiVQIO\nkvjKmf99M7XOkFfWiCMksMLlD0ZOHyFVVlYWFxeLxWJzGhHRoEGD5s+fT0THjh1jrzT3qsvaRkS9\nfegMWZJCRE2arN7urkqIwBESfzn5v2+WoTPgAkjAL5wOpJKSEiKaMmWK1Xa5XE5EFy9eZKEmj2gu\nyb9DsdTGDkHKJTe0mb3dKhP746Lm/OXk/76ZFmcgAd9wOpBKS0uJSCy2ngSXSCREVFRUxEJNHtFS\n8o1/zDQbO4iGSduN13u7FZdH4jUn//cZzAXLXVoXgNtxOpBqamqI6K677rLaHhERQUQ3b95koSb3\nMxn1omFSUajUxj7MrSajvrcdEuWStBPlri8O3Mwl//uE+TrgJ063fXd0dBDR4MGDe7y1s7OzzxGi\no6PN/+bs93jdmWptfdaY97HxsaWIFKedRCDxkvP/+0SkLWvUrJ7kuqKA3yw/CbmM04EkEomIqKqq\nymo7E0U+Pj59jsCjEDIThUr9Y6YxLb+97dOkyQpS2DofxTxrh65ffnHJ/z7m68CK5Schl8OJ01N2\nkZGRRGQ0Gq22M80O4eHhLNTkEXcoltpuo7qhzezz1H3M2vGU8//7eWWNmK8DPuJ0IEmlUiKqra21\n2s5sYeJKkPxjpolCpUz7b3fMqZF9nrGviBSj146PnP/fV+sMODIGPuJ0IMXFxfn4+Jw5c6a5udly\ne05ODhFNnTqVpbrcThQqZeZkqneuM/+xbDLqmzRZ1TvXmWr10rTsPgdBrx1POfm/z8zX4QJIwEec\nDqSAgIC5c+e2t7fv3r3bvLG0tDQnJycwMJA5PVaomE8lUaj0hjbzymN3lq+aUr56Sl3WNlGo1J40\nYigixRm6arfWCe7gzP8+5uuAv7i+dJDBYFi8eHFdXd2iRYuUSqVer9+7d29dXd2WLVuWLrV18iBx\ne4UMh/R7veeK+lblrsLyV/uzUDRwhKP/+7el5Ja/GocjJOgNlz8YuR5IRHT16tUNGzYwjQxEJBaL\nX3jhhT7TiLj9unuM8p1CVUIEvlHwEli/DvrE5Q9GTrd9M0aPHn3w4EG2q+ArZtYOgeQlMF8HvMbp\n75DAeYlyCfoavAfOPANeQyAJHHrtvIdaZ5CJ/fDtEfAXAkn4FJHivKuNbFcBbpdXhkvXA78hkIRv\nxuhgdYGB7SrA7bRlDYlYMQj4DIEkfIpIMWbtBE+tM1TUt2K+DngNgeQVZCH+mLUTtjxcjg/4D4Hk\nFRLlYZi1EzZtWUOiPIztKgCcgkDyCjKxf0V9K2bthEpb1lBR34qOBuA7BJJXkIX4KSKDMWsnVBm6\naszXgQAgkLyFKiECR0hChfk6EAYEkreQif21ZY3IJEHCfB0IAwLJW2DWTqhwwXIQDASSF8GsnSCl\nnSzHgqogDAgkLyIT++Oi5sJTUd+KIyQQBgSSF2EWWlXrcEKScGC+DoQEgeRdEuWSDASSgGToDJiv\nA8FAIHkXRaQYs3ZCosWKQSAgCCTvgssjCQnm60BgEEheJ1EuSTtRznYV4AKYrwOBQSB5HczaCYYW\nV+QDYUEgeR3M2gkDM1+HCyCBkCCQvJEiUoxZO77LK2vEfB0IDALJGyXKJZi14zu1zoD5OhAYBJI3\nwqwd32G+DgQJgeSlFJHiDF0121VAP2G+DgQJgeSlEuUSHCHxF+brQJAQSF4Ks3b8pdYZFJHBmK8D\n4UEgeS/M2vFUXlljIhZoACFCIHmvGaODcYTER9qyBszXgSAhkLyXIlKMWTveUesMFfWtmK8DQUIg\neTVFpBgXNeeXPCzvDcKFQPJqM0YHqwtweSQ+0ZY1qOIj2K4CwC0QSF5NJvavqG/FrB1fYL4OhA2B\n5NVkIX5Jcglm7fgC83UgbAgkb5coD8OsHV9oyxoS5WFsVwHgLggkb4dZO77QljVU1Lei4RsEDIHk\n7WQhforIYMzacV/eVczXgcAhkIBUCRE4QuI+dYEB83UgbAgkIJnYX1vWWFGPKyRxGubrQPAQSPDr\nrB0OkriMuQAS21UAuBcCCYiIVAkRGTr02nFXhs6ACyCB4CGQgIjptcNFzTlMizOQwAsgkIAIl0fi\nNszXgZdAIMGvEuWStBPlbFcBPcB8HXgJBBL8ShEpxqwdN2G+DrwEAgl+xcza4SCJa9JOlCONwEsg\nkOA/VAkRWNeOa3A+LHgPBBL8B64hyzVqnUEm9sP5sOAlEEjwO2ht4JQMnSER83XgNRBI8DtobeAU\ntDOAV0Egwe8wrQ1qrNrAATj9CLwNAgmsqRIi0k5i1o59aSfL0c4AXgWBBNZkYn+0NrCOOUhFOwN4\nFQQSWJOF+CkixRm6arYL8Wp5ZY2q+Ai2qwDwKAQS9CBRLsERErvUOgMOj8DbIJCgB2htYBfTziAL\n8WO7EACPQiBBz9DawCK0M4B3QiBBz2RifyLCxJ3noZ0BvBYCCXomC/FLmixBa4PnoZ0BvBYCCXqF\n1gZWoJ0BvBYCCXqF1gbPQzsDeDMEEtiC1gYPQzsDeDMEEtiC1gZPUusMFfWtmK8Dr4VAAlvQ2uBJ\neWWN+5aNZbsKANYgkKAPaG3wGLQzgJdDIEEf0NrgGWhnAEAgQd9UCREZCCQ3QzsDAAIJ+iYT+2vL\nGjFx5z7asga0MwAgkKBvshC/1PgItDa4T4auOhWrM4DXG+jJB6uqqsrJySktLQ0ODlYoFJMnT7bn\nXhcuXKitre2+ffz48cOHD3d1jdCzRLlEuauQ7SoES60zlL8ax3YVACzzXCBlZ2dv3ry5vb2d+fG9\n996bOXPmjh07fH19bd/xvffey8nJ6b59+/btc+bMcX2h0BOmtUFb1oBpJZdDOwMAw0OBVFBQsGnT\npqCgoPT0dKVSWVlZmZaWlpubm56evmXLFntGUKlUgYGBllvuvfde9xQLPUuUS9JOlCtWI5BcLENn\nSJRL2K4CgH0eCqQ33niDiNLS0uLj44lo9OjRu3btio+Pz8zMXLlypUwm63OEOXPmBAcHu7tOsEER\nKV5x4BIOklxLW9agLWvUrJ7EdiEA7PNEU0NlZWVxcbFYLLacYRs0aND8+fOJ6NixYx6oAZwnC/FL\nkmPVBhfL0FUn4fAIgIg8E0glJSVENGXKFKvtcrmciC5evGjnOCaTqaWlxbW1gUNU8RFo/nYttc6A\nqx8BMDwxZVdaWkpEYrH1PI9EIiGioqIiewaZPXt2Q0MDEfn5+cXHx69Zs8aeiT5wLbQ2uBbaGQAs\neeIIqaamhojuuusuq+0RERFEdPPmzT5HGDp06OTJkxcuXPjwww/ffvvthw8fXrhw4blz59xRLdjG\ntDawXYVAZOgMMyLxzSjArzxxhNTR0UFEgwcP7vHWzs5O23d/8cUXLQ+Gbt26lZqaevDgwZSUFK1W\n6+PjY+O+0dHR5n9fvnzZ/pqhN2htcBW0M4DHWH4ScpkrAyk1NdV8mhERTZ06dd68eUQkEomIqKqq\nymp/JopsJwoRWU3N+fr6pqenFxUVlZeXazSaWbNm2bgvQsjlzK0NCCQnoZ0BPMbyk5DL4eTKQMrO\nzm5razP/ePvttzOBFBkZSURGo9Fqf6bZITw83NEHGjBgwMSJE8vLyy9evGg7kMAdVPERWLXBeVid\nAcCKKwOpsPB3H1IDBvz6BZVUKiWi7sv/MFuYuHLUbbfdRkS3bt3qx33BSWhtcB7aGQC6c2VTg+j3\nzHNxcXFxPj4+Z86caW5uttyfWRBo6tSp/XgspnMvJibG6aqhP9Da4CS0MwB054kuu4CAgLlz57a3\nt+/evdu8sbS0NCcnJzAwkDk9lrFv376NGzdaHmnV1NRYxRgR7d69u7i42N/ff/r06e4uHnqkiBTj\nghT9xrQz4AskACseWjpo/fr1X3/99bvvvms0GpVKpV6v37t3b0dHx8aNGwcNGmTe7ezZs1qtNi4u\nbtKkX1uPzp8//9JLLymVSplMJpPJKioq8vPzmS+f0tLSgoKCPFO/NzAZ9aZafUCMXd9qMK0NeVcb\nvXnWzqFXzBLaGQB65KFAkkgkH3744YYNGw4ePHjw4EEiEovFW7ZsWbp0qe07hoWFSSQSq9W+x40b\nl5KSgsMjV2nSZN3QZraUfCMaJmW2DFmSEqRcYvteifKwFQcuqRK8cZWB/r1iZtqyBs0qdHsDWLut\nq6uL7RrcJTo6Gm3ffdKrFouGSUWh0iFLUojIZNS3lHzTXJJPRGFrd9i+r/KdQlVChLcdJDnzihGR\nWmfIK2vct2ys2wsF6AmXPxgRSF6N+Wzt8WO0Lmubyai3/Qmr1hkydAavOrXTyVeMiJTvFCbKJZiy\nA7Zw+YMRlzD3XnVZ26j3P+qZP/+bNFk2RlBEiisaWr2ntcH5V6yivhXtDAC9QSB5r+aS/DsUtr7D\nC1IuuaHNtLGDLMRPESnOu9ro6tI4yvlXLO1kOdIIoDcIJO/VUvKNf8w0GzuIhknbjddtD5IoD1MX\nGFxaF3c5/4ppyxpwsQmA3iCQvJTJqGe+mbexD3Oryai3sY8iUsys2uDi+rjH+VdMrTPIxH5YnQGg\nNwgk72WqtZU05n1sfwSTN63a4OQrlqEzJGK+DqB3CCQvJQqV+sdMY5qVe9OkyQpS9H1uDdPaUFHf\n6rrquMj5VwztDAC2IZC81x2KpbZbwm5oM+1ZhoBZazVDJ/xvkpx5xVYcuIQ0ArANgeS9/GOmiUKl\nTCtzd9U71xGRnasPqBIivKG1wZlXTFvWkCgPc2NxAPyHQPJeolApM79UvXOd+Q9/k1HfpMmq3rnO\nVKuXpmXbOZSXtDb0+xVj2hm8bUkLAEdhpQZvZzLqm7RZzSX5zMpsplq9aJg0SLmEOc3Tft6zakM/\nXjGszgDcweUPRgQS/Krfa1czKupblbsKveoSqPa/Yrel5HZtm+mBkgD6xOUPRkzZwa9EodJ+pxH9\n1trgJf3fDDtfsbQTWJ0BwC4IJHAZL2ltcJS6wIB2BgB7IJDAZbyktcEhaGcAsB8CCVzJe1ZtsBNW\nZwCwHwIJXIlZtYHtKjgEqzMA2A+BBK7kha0NNqCdAcAhCCRwMbQ2mKGdAcAhCCRwMbQ2MNDOAOAo\nBBK4niJSnKGrZrsKluWVNaKdAcAhCCRwvUS5BEdIap0Bh0cADkEggesxrQ1qL7ggRW/UOkOSXIKL\nwwI4BIEEbqFKiEg76b29dmkny9HOAOAoBBK4hUzs77WtDcyhIebrAByFQAK3kIX4eW1rQ15Zoyo+\ngu0qAPgHgQTu4rWtDWhnAOgfBBK4i3e2NqCdAaDfEEjgRl7Y2oB2BoB+QyCBG8nE/kTkPRN3ap2h\nor4V83UA/YNAAjeShfglTZZ4T2tDXlnjvmVj2a4CgK8QSOBeXtXagHYGAGcgkMC9vKe1Ae0MAE5C\nIIHbqRIiMrwgkNDOAOAkBBK4nUzsry1rFPbEnbasAe0MAE5CIIHbyUL8UuMjhN3akKGrTsXqDADO\nQSCBJwi+tUGtM+DqRwBOQiCBJwi7tQHtDAAugUACDxFwawPaGQBcAoEEHiLU1ga0MwC4CgIJPEQW\n4pckF+CqDRm66iR8ewTgCggk8BxVfITwjpDUOgOufgTgEggk8BymtUFImYR2BgAXQiCBRyXKJWkn\nhHNBigydYUZkMNtVAAgEAgk8ShEprmhoFUYmKd8pJCJ8gQTgKggk8ChZiJ9m1SRtWcOKA5fYrsUp\nTBppVk9iuxAA4UAggafJQvz2LRtXUd/C30xCGgG4AwIJWMDrTEIaAbgJAgnYwWSSTOwXkZ7Pdi0O\nQBoBuA8CCVgjC/FLlEuSJkv4kklIIwC3QiABm/iSSRX1rcp3CmUh/kgjAPdBIAHLLDOpor6V7XJ6\nUFHfuuLARVmI/75lY9muBUDIEEjAPlmInyohImmyRLmrkGuZhDQC8BgEEnAFBzOpor5VuatQESlG\nGgF4wEC2CwD4D1VCBBEpdxVqVk1ifYG4ivrWiPT8fcvGYi0GAM/AERJwC0eOk5BGAJ6HQALOYT2T\nkEYArMCUHXARi3N32rIG5TtFmtUTcRFYAA/DERJ4lMmoby6x65QjVUKEKj5CuauwH9dPsv9RrCCN\nAFiEIyTwkCZN1g1tZkvJN6JhUmbLkCUpQcolNu7CzJitOHBp37KxdiZEPx7FDGkEwC4EEniCXrVY\nNEwaEBMnTcsmIpNR31LyTXNJfnNJftjaHTbu6FAm9ftRCGkEwAG3dXV1sV2Du0RHR1++fJntKuDX\nnOgxEuqytpmMenvSYsWBS0mTJcx3Sy5/FKQReA8ufzDiOyRwr7qsbUTUWxgMWZJCRE2aLNuDKCLF\nmlWT1AWG3i4168yjII0AOAKBBO7VXJJ/h2KpjR2ClEtuaDP7HIe51GxvmdTvR1HrDCsOXEIaAXAB\nAgncq6XkG/+YaTZ2EA2Tthuv2zOU+fLn3TOpf4+i1hnSTpbb3zEBAG6FQAI3Mhn1omFSUajUxj7M\nrSaj3p4Bmcv6WR0n9e9RkEYAXIMuO3AvU23fSWOq1duOE0vMcZJyVyH9dv5sPx4l7US5usCANALg\nFBwhgRuJQqX+MdNsn6PapMkKUth1npCZ1fdJjj7KigOX1AWG8lfjkEYAnIJAAve6Q7HUdhPdDW1m\nQEyco8NaZZL9j7LiwCVtWUP5qw4/IgC4G28CqbOz88KFC6dOnTp16hTbtYAD/GOmiUKlTFt2d9U7\n1xGRnSspWLHMJDsfBWkEwGU8ODH2o48+OnTo0MWLF9vb25ktdp7VxeXzv7yKyahv0maZjPqAmDgm\ne8xrKJhq9cyqCv3GXEMvabJk08SBth9F+U4hEWlWT3LJkwLgKS5/MPKgqaGwsLC4uHjEiBHjx4//\n8ssv2S4HHCYKlQYpljRps25oM6vfXicaJjXV6kXDpEHKJX2u0dAn5jhpxYGLROJNvT8K0giA+3hw\nhHT58uVRo0aJRCIiio6OJhwh8ZnJqDfV6vvxpZFtFfWtKw5clIX4M9cat3oUpBGAGZc/GHnwHVJ0\ndDSTRsAK5o8AVxGFSl2eRvTb+UkV9S0rDlyyehQupJFrX0PvhNfQG/AgkADswWSSTOzHZBKDC2kE\nAHZCIIFwyEL8EuUSmdgvIj2fkEYAfMODpgYA+zGZRES3peQmySXMV0oAwAs8aGqw5GhTg5vLAY4y\n+Q8xBQwJqLvCdiEAXMTZpgauHCGlpqaaTzMioqlTp86bN8/JMTn7ogMAQHdcCaTs7Oy2tjbzj7ff\nfrvzgQQAADzClUAqLCy0/HHAAHRbAAB4F64EEs40AgDwcjgQAQAATuDKEZINBQUF7733nuWW//qv\n/2L+sXLlyilTprBRFAAAuBgPAsloNGq1Wsst5h/nzJnj+XoAAMAdeHYeEgAACBW+QwIAAE5AIAEA\nACcgkAAAgBN40NTgqKqqqpycnNLS0uDgYIVCMXnyZLYr4p+SkpLi4uJLly4R0d133/3AAw9IpVK2\ni+KxCxcu1NbWEtGsWbPYroV/KioqTp8+feXKlYEDB8bGxsbGxt55551sF8U///rXv3Q6XXV1tZ+f\n36RJkxQKRUBAANtFWRNaU0N2dvbmzZstl8WbOXPmjh07fH19WayKRy5cuLBu3bqqqiqr7UlJSa+8\n8gorJfHdjz/+uGDBAmZlLKyv6JBbt26lpaVlZ2dbbcfL6JD6+vpVq1Z9++23lhuDgoL+/ve/P/DA\nA2xV1SNBTdkVFBRs2rQpICDgrbfe+v77748ePXrffffl5uamp6ezXRpv/PTTT0ajceHChW+99dbh\nw4cPHz788ssvBwYGqtXqf/zjH2xXx0uvvPJKSEgI21Xw0tq1a7Ozs+++++5t27YdPXr0888/3759\n+0MPPcR2XTyTkpLy7bffxsbGfvrpp99///3p06eTk5ObmprWrl3b/U9PlnUJyGOPPRYVFXX06FHz\nll9++WXatGlRUVHl5eXs1cUnP/30U21trdXG06dPR0VF/eEPf+jo6GClKv5Sq9VRUVG5ublRUVFR\nUVFsl8Mn//znP6Oiov74xz+2tbWxXQuP1dXVRUVFjRs3rqGhwXL7c889FxUVpVar2SqsR8I5Qqqs\nrCwuLhaLxZZnyw4aNGj+/PlEdOzYMfZK45M777xz6NChVhsfeOABPz+/lpYW5osQsJNer9++ffsj\njzwyffp0tmvhnz179hDRX/7yFyx06YwffviBiIKDg4ODgy23M1+ul5eXs1NWL4QTSCUlJUTUfSUh\nuVxORBcvXmShJqHo7Ozs7OwkIqv3NNi2efPmgICAV199le1C+OfSpUtVVVV33XXX2LFjichkMrW0\ntLBdFC/J5fKBAwfevHnTZDJZbr9y5Qr9FkvcIZxAKi0tJSKxWGy1XSKREFFRURELNQlFbm5uW1tb\nVFQUekPsl5mZmZ+f/8orryDF++Hq1atEdM899+Tn58+fP/+ee+659957J02a9Nprr928eZPt6vhE\nJBKtWbOmtbV148aNjY2NRNTZ2ZmdnX348OFx48YlJCSwXeDvCKftu6amhojuuusuq+0RERFEhDdx\nv9XX16tUKiJ68cUX2a6FN2pra994440HH3yQmTEGR1VWVhLRlStXVqxYMWbMmKVLl3Z2dn799df7\n9+8/f/78gQMH8LeR/VavXi2RSPbu3RsXF+fn52cymXx9fVeuXLlq1SquTYcKJ5A6OjqIaPDgwT3e\nysw4gaOam5tXr179888/r1y5csaMGWyXwxv//d//3dnZ+dprr7FdCF/V19cTUWlp6cyZM3ft2sVs\nbG5ufvLJJy9evLh79+4//elPrBbIJzU1NYcPHy4tLb3zzjujoqIaGxu//fbbY8eO3XfffUqlku3q\nfkc4U3ZM1HfvYmSiyMfHh4WaeO7WrVurVq0qKip65JFHNm7cyHY5vHHo0CGtVvvCCy8MHz6c7Vr4\niplpJ6K//OUv5o0BAQHr168n9Cg5oqWlZdmyZfn5+ampqRqNZvfu3ZmZmcePHyei5OTkc+fOsV3g\n7wjnCCkyMpKIjEaj1Xam2SE8PJyFmvjMZDIlJyefPXs2ISFh69atbJfDJ//zP/8jFotHjBhx6tQp\nZov5TG1my+TJk/HFkm2hoaFE5O/vb7Uow3333UdE165dY6csHvryyy+rqqpmzpz5xz/+0bxx1KhR\nL730UkpKyu7du5mXlCOEE0jM2jbd+5KZLUxcgZ1MJtPq1avz8/MffvhhnA/rqKampra2tjVr1nS/\nidn48ccfc627iWtGjhzJdgkCwfRzmY84zZj24wsXLrBQU++EE0hxcXE+Pj5nzpxpbm62XKMpJyeH\niKZOncpeaTzT0dGxevXq06dPP/jgg2+++Sbb5fDP1q1brb6z7OjoYFpCtm/fTkSjRo1ipzL++MMf\n/hAUFNTU1FRfX2+5zsV3331HRGFhYeyVxjNBQUFE1NraarWdaRthbuUO4XyHFBAQMHfu3Pb29t27\nd5s3lpaW5uTkBAYGotnJTp2dnc8//zyTRu+88w6+e+uH2bNnz/m92bNnMzcxP2IloT4NGDBg6dKl\nRPTOO+9Ybmd+u3GpaPvFxcURUU5OjtXs0UcffWS+lTsEtbiqwWBYvHhxXV3dokWLlEqlXq/fu3dv\nXV3dli1bmDc39Omzzz57+eWXiWjq1Kl+fn5Wt65du3b8+PFs1MVvJpPpnnvuIawK6ojm5uZFixaV\nl5c/9NBD8+bN6+jo+Pjjj4uKikaMGPH5559z7U97LluxYkV+fv6QIUOeeOKJqKiopqamTz755Ntv\nvx08ePBnn33GqYX8BRVIRHT16tUNGzYwjQxEJBaLX3jhBaSR/T799FMbKwvs2bMHzd/9gEDqn59/\n/nnz5s3/93//Z97y0EMPbdmypfvqVmBDS0vL3//+93/+85+Wl0GIjY3dsmXL6NGjWSysO6EFEqOi\noqKysjIwMHDSpEkDBghnWhLACzU2NjJfHTFfLLFdDl91dnYWFhb++9//HjBgwMSJEwcNGsR2RT0Q\nZiABAADv4OgBAAA4AYEEAACcgEACAABOQCABAAAnIJAAAIATEEgAAMAJCCQAAOAEBBIAAHACAgkA\nADgBgQQAAJyAQAIAAE5AIAEAACcgkAAAgBMQSAAAwAkIJAAA4IT/Dx6iJyjnuam4AAAAAElFTkSu\nQmCC\n", + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t7\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tanalytical dy/dx\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tanalytical dy/dx\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tnum dy/dx\n", + "\n", + "\t\n", + "\t\tnum dy/dx\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -155,22 +316,23 @@ ], "source": [ "x=linspace(0,2*pi,11);\n", + "xx=linspace(0,2*pi,100);\n", "% analytical derivatives\n", "y=sin(x);\n", - "dy=cos(x);\n", - "ddy=-sin(x);\n", + "dy=cos(xx);\n", + "ddy=-sin(xx);\n", "\n", "% numerical derivatives\n", "dy_n=(y(2:end)-y(1:end-1))./diff(x);\n", "ddy_n=(y(3:end)-2*y(2:end-1)+y(1:end-2))./diff(x(2:end)).^2;\n", "\n", - "plot(x,dy,x(1:end-1),dy_n,'o')\n", + "plot(xx,dy,x(1:end-1),dy_n,'o')\n", "legend('analytical dy/dx','num dy/dx')" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "metadata": { "collapsed": false, "slideshow": { @@ -180,9 +342,169 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t7\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tanalytical d2y/dx2\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tanalytical d2y/dx2\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tnum d2y/dx2\n", + "\n", + "\t\n", + "\t\tnum d2y/dx2\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -190,76 +512,8 @@ } ], "source": [ - "plot(x,ddy,x(2:end-1),ddy_n,'o')\n", - "legend('analytical dy/dx','num dy/dx')" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'gradient' is a function from the file /usr/share/octave/4.0.0/m/general/gradient.m\n", - "\n", - " -- Function File: DX = gradient (M)\n", - " -- Function File: [DX, DY, DZ, ...] = gradient (M)\n", - " -- Function File: [...] = gradient (M, S)\n", - " -- Function File: [...] = gradient (M, X, Y, Z, ...)\n", - " -- Function File: [...] = gradient (F, X0)\n", - " -- Function File: [...] = gradient (F, X0, S)\n", - " -- Function File: [...] = gradient (F, X0, X, Y, ...)\n", - "\n", - " Calculate the gradient of sampled data or a function.\n", - "\n", - " If M is a vector, calculate the one-dimensional gradient of M. If\n", - " M is a matrix the gradient is calculated for each dimension.\n", - "\n", - " '[DX, DY] = gradient (M)' calculates the one-dimensional gradient\n", - " for X and Y direction if M is a matrix. Additional return\n", - " arguments can be use for multi-dimensional matrices.\n", - "\n", - " A constant spacing between two points can be provided by the S\n", - " parameter. If S is a scalar, it is assumed to be the spacing for\n", - " all dimensions. Otherwise, separate values of the spacing can be\n", - " supplied by the X, ... arguments. Scalar values specify an\n", - " equidistant spacing. Vector values for the X, ... arguments\n", - " specify the coordinate for that dimension. The length must match\n", - " their respective dimension of M.\n", - "\n", - " At boundary points a linear extrapolation is applied. Interior\n", - " points are calculated with the first approximation of the numerical\n", - " gradient\n", - "\n", - " y'(i) = 1/(x(i+1)-x(i-1)) * (y(i-1)-y(i+1)).\n", - "\n", - " If the first argument F is a function handle, the gradient of the\n", - " function at the points in X0 is approximated using central\n", - " difference. For example, 'gradient (@cos, 0)' approximates the\n", - " gradient of the cosine function in the point x0 = 0. As with\n", - " sampled data, the spacing values between the points from which the\n", - " gradient is estimated can be set via the S or DX, DY, ...\n", - " arguments. By default a spacing of 1 is used.\n", - "\n", - " See also: diff, del2.\n", - "\n", - "Additional help for built-in functions and operators is\n", - "available in the online version of the manual. Use the command\n", - "'doc ' to search the manual index.\n", - "\n", - "Help and information about Octave is also available on the WWW\n", - "at http://www.octave.org and via the help@octave.org\n", - "mailing list.\n" - ] - } - ], - "source": [ - "help gradient" + "plot(xx,ddy,x(2:end-1),ddy_n,'o')\n", + "legend('analytical d2y/dx2','num d2y/dx2')" ] }, { @@ -282,8 +536,17 @@ "\n", "backward:\n", "\n", - "$f(x_{i-1})=f(x_{i})-f'(x_{i})h+\\frac{f''(x_{i})}{2!}h^2-\\frac{f'''(x_{i})}{3!}h^3+...$\n", - "\n", + "$f(x_{i-1})=f(x_{i})-f'(x_{i})h+\\frac{f''(x_{i})}{2!}h^2-\\frac{f'''(x_{i})}{3!}h^3+...$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ "solving for $f'(x_{i})$:\n", "\n", "$f'(x_{i})=\\frac{f(x_{i+1})-f(x_{i-1})}{2h}+O(h^{2})$\n", @@ -293,9 +556,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 23, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "slide" + } }, "outputs": [ { @@ -351,57 +617,72 @@ "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t-0.5\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t0\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t0.5\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t1\n", "\t\n", "\n", "\n", + "\t\t\n", + "\t\t1.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", "\t\t\n", + "\t\t-1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", "\t\t0\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t1\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t2\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t3\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t4\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t5\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t6\n", "\t\n", "\n", @@ -419,55 +700,55 @@ "\n", "\n", "\n", - "\t\n", + "\t\n", "\tanalytical dy/dx\n", "\n", "\n", "\n", - "\t\n", + "\t\n", "\t\tanalytical dy/dx\n", "\t\n", "\n", "\n", - "\t\n", + "\t\n", "\t\n", "\t fwd dy/dx\n", "\n", - "\t\n", + "\t\n", "\t\t fwd dy/dx\n", "\t\n", "\n", "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", "\n", "\t\n", "\tcent dy/dx\n", "\n", - "\t\n", + "\t\n", "\t\tcent dy/dx\n", "\t\n", "\n", "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", "\n", "\t\n", "\n", @@ -493,26 +774,29 @@ "x=linspace(0,2*pi,11);\n", "% analytical derivatives\n", "y=sin(x);\n", - "dy=cos(x);\n", - "ddy=-sin(x);\n", + "dy=cos(xx);\n", + "ddy=-sin(xx);\n", "\n", "% forward difference\n", "dy_f=(y(2:end)-y(1:end-1))./diff(x);\n", "% central difference\n", "dy_c=(y(3:end)-y(1:end-2))./diff(x(2:end))/2;\n", "\n", - "plot(x,dy,x(1:end-1),dy_f,'o',x(2:end-1),dy_c,'s')\n", - "legend('analytical dy/dx',' fwd dy/dx', 'cent dy/dx','North')" + "plot(xx,dy,x(1:end-1),dy_f,'o',x(2:end-1),dy_c,'s')\n", + "legend('analytical dy/dx',' fwd dy/dx', 'cent dy/dx','Location','North')\n", + "axis([-1 7 -1 2])" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": { - "collapsed": true + "slideshow": { + "slide_type": "slide" + } }, - "outputs": [], - "source": [] + "source": [ + "# Thanks\n" + ] } ], "metadata": { diff --git a/21_boundary_value_problems/.ipynb_checkpoints/21_boundary_value_problems-checkpoint.ipynb b/21_boundary_value_problems/.ipynb_checkpoints/21_boundary_value_problems-checkpoint.ipynb new file mode 100644 index 0000000..3b0945f --- /dev/null +++ b/21_boundary_value_problems/.ipynb_checkpoints/21_boundary_value_problems-checkpoint.ipynb @@ -0,0 +1,552 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Boundary Value problems\n", + "\n", + "*ch. 24" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Need to solve for y given $\\frac{d^2 y}{dx^2}$, but only y(0) and y(L) known" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# First finite difference example in ME3255:\n", + "\n", + "## Buckling beam in [HW4 problem 8](https://github.uconn.edu/rcc02007/ME3255F2017/tree/master/HW4)\n", + "\n", + "![beam buckling](./images/buckling_beam.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Differential equation\n", + "\n", + "$\\frac{d^{2}y}{dx^{2}}+p^{2}y=0$\n", + "\n", + "or, substituting the central difference approximation:\n", + "\n", + "$\\frac{y_{i+1}-2y_{i}+y_{i-1}}{\\Delta x^{2}}+p^{2}y_{i}=0$\n", + "\n", + "boundary conditions are that y(0)=y(L)=0\n", + "\n", + "So, given n-discrete points, the solution of $y_{1}-y_{n}$ was solved with an eigenvalue analysis\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "critical buckling load=1192 N\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tdisplacement from neutral axis(m)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tneutral axis\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n=10;\n", + "E=76E9; I=4E-8; L= 5; % constants from HW4\n", + "dx=L/(n+1);\n", + "K=2*diag(ones(n,1))-diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);\n", + "[y,e]=eig(K);\n", + "P=e*E*I/dx^2;\n", + "\n", + "fprintf('critical buckling load=%1.0f N',min(diag(P)))\n", + "\n", + "plot([0:dx:L],[0;y(:,1);0])\n", + "xlabel('neutral axis')\n", + "ylabel('displacement from neutral axis(m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# This approach is the ''Finite Difference Method''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "![finite difference method](./images/beam_finite.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Differential equations are approximated as finite differences (through cental, forward, or backward difference approximations). \n", + "\n", + "Resulting set of equations are then solved using linear algebra " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Changing boundary conditions\n", + "\n", + "![beam boundaries](./images/beam_bcs.png)\n", + "\n", + "What if the beam is clamped on one end and simply-supported on the other? (derivative is 0 at x=0 $\\frac{dy(0)}{dx}=0$ and y=0 at x=L y(L)=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$\\frac{y_{i+1}-2y_{i}+y_{i-1}}{\\Delta x^{2}}+p^{2}y_{i}=0$\n", + "\n", + "at y=1, $\\frac{y_{2}-y_{0}}{2\\Delta x}=0$ $\\rightarrow~y_{2}=y_{0}$\n", + "\n", + "so, $\\frac{2y_{2}-2y_{1}}{\\Delta x^{2}}+p^{2}y_{1}=0$" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "critical buckling load=362 N\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tdisplacement from neutral axis(m)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tneutral axis\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n=10;\n", + "E=76E9; I=4E-8; L= 5; % constants from HW4\n", + "dx=L/(n+1);\n", + "K=2*diag(ones(n,1))-diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);\n", + "K(1,2)=-2; %2y2-2y1=-dx^2*p^2\n", + "[y,e]=eig(K);\n", + "P=e*E*I/dx^2;\n", + "[~,i]=min(diag(P));\n", + "fprintf('critical buckling load=%1.0f N',min(diag(P)))\n", + "\n", + "plot([0:dx:L],[y(2,i);y(:,i);0]) % sub in x=0 BC as y(2) b/c y(2)=y(0)\n", + "xlabel('neutral axis')\n", + "ylabel('displacement from neutral axis(m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Thanks" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/21_boundary_value_problems/21_boundary_value_problems.ipynb b/21_boundary_value_problems/21_boundary_value_problems.ipynb new file mode 100644 index 0000000..3b0945f --- /dev/null +++ b/21_boundary_value_problems/21_boundary_value_problems.ipynb @@ -0,0 +1,552 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Boundary Value problems\n", + "\n", + "*ch. 24" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Need to solve for y given $\\frac{d^2 y}{dx^2}$, but only y(0) and y(L) known" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# First finite difference example in ME3255:\n", + "\n", + "## Buckling beam in [HW4 problem 8](https://github.uconn.edu/rcc02007/ME3255F2017/tree/master/HW4)\n", + "\n", + "![beam buckling](./images/buckling_beam.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Differential equation\n", + "\n", + "$\\frac{d^{2}y}{dx^{2}}+p^{2}y=0$\n", + "\n", + "or, substituting the central difference approximation:\n", + "\n", + "$\\frac{y_{i+1}-2y_{i}+y_{i-1}}{\\Delta x^{2}}+p^{2}y_{i}=0$\n", + "\n", + "boundary conditions are that y(0)=y(L)=0\n", + "\n", + "So, given n-discrete points, the solution of $y_{1}-y_{n}$ was solved with an eigenvalue analysis\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "critical buckling load=1192 N\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tdisplacement from neutral axis(m)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tneutral axis\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n=10;\n", + "E=76E9; I=4E-8; L= 5; % constants from HW4\n", + "dx=L/(n+1);\n", + "K=2*diag(ones(n,1))-diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);\n", + "[y,e]=eig(K);\n", + "P=e*E*I/dx^2;\n", + "\n", + "fprintf('critical buckling load=%1.0f N',min(diag(P)))\n", + "\n", + "plot([0:dx:L],[0;y(:,1);0])\n", + "xlabel('neutral axis')\n", + "ylabel('displacement from neutral axis(m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# This approach is the ''Finite Difference Method''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "![finite difference method](./images/beam_finite.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Differential equations are approximated as finite differences (through cental, forward, or backward difference approximations). \n", + "\n", + "Resulting set of equations are then solved using linear algebra " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Changing boundary conditions\n", + "\n", + "![beam boundaries](./images/beam_bcs.png)\n", + "\n", + "What if the beam is clamped on one end and simply-supported on the other? (derivative is 0 at x=0 $\\frac{dy(0)}{dx}=0$ and y=0 at x=L y(L)=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$\\frac{y_{i+1}-2y_{i}+y_{i-1}}{\\Delta x^{2}}+p^{2}y_{i}=0$\n", + "\n", + "at y=1, $\\frac{y_{2}-y_{0}}{2\\Delta x}=0$ $\\rightarrow~y_{2}=y_{0}$\n", + "\n", + "so, $\\frac{2y_{2}-2y_{1}}{\\Delta x^{2}}+p^{2}y_{1}=0$" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "critical buckling load=362 N\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-0.1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tdisplacement from neutral axis(m)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tneutral axis\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n=10;\n", + "E=76E9; I=4E-8; L= 5; % constants from HW4\n", + "dx=L/(n+1);\n", + "K=2*diag(ones(n,1))-diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);\n", + "K(1,2)=-2; %2y2-2y1=-dx^2*p^2\n", + "[y,e]=eig(K);\n", + "P=e*E*I/dx^2;\n", + "[~,i]=min(diag(P));\n", + "fprintf('critical buckling load=%1.0f N',min(diag(P)))\n", + "\n", + "plot([0:dx:L],[y(2,i);y(:,i);0]) % sub in x=0 BC as y(2) b/c y(2)=y(0)\n", + "xlabel('neutral axis')\n", + "ylabel('displacement from neutral axis(m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Thanks" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/21_boundary_value_problems/images/beam_bcs.svg b/21_boundary_value_problems/images/beam_bcs.svg new file mode 100644 index 0000000..f839951 --- /dev/null +++ b/21_boundary_value_problems/images/beam_bcs.svg @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + P + P + + + + + + + + + + + x + y + + + + + + + + + + diff --git a/21_boundary_value_problems/images/beam_finite.png b/21_boundary_value_problems/images/beam_finite.png new file mode 100644 index 0000000..d40ce85 Binary files /dev/null and b/21_boundary_value_problems/images/beam_finite.png differ diff --git a/21_boundary_value_problems/images/beam_finite.svg b/21_boundary_value_problems/images/beam_finite.svg new file mode 100644 index 0000000..6f08919 --- /dev/null +++ b/21_boundary_value_problems/images/beam_finite.svg @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + P + P + x + + + + + + + + + + + + + + + + + + + diff --git a/21_boundary_value_problems/images/buckling_beam.png b/21_boundary_value_problems/images/buckling_beam.png new file mode 100644 index 0000000..1a7ef47 Binary files /dev/null and b/21_boundary_value_problems/images/buckling_beam.png differ diff --git a/21_boundary_value_problems/octave-workspace b/21_boundary_value_problems/octave-workspace new file mode 100644 index 0000000..a2e67d3 Binary files /dev/null and b/21_boundary_value_problems/octave-workspace differ