{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " 等号 \n", "
\n", "
\n", " cc by Shigeto R. Nishitani, 2017-10-31 \n", "
\n", "\n", "* file: ~/python/doing_math_with_python/equals.ipynb" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# 等号(equals)の意味\n", "\n", "等号は,数学でいろいろな意味を持つことを中学校で学びます.\n", "それぞれの状況による意味の違いを人間は適当に判断していますが,\n", "プログラムであるpythonでは無理です.\n", "pythonでは,それぞれ違った記号や操作として用意され,\n", "人間がpythonに明示的に指示する必要がある.\n", "\n", "## 変数への代入= (equal)\n", "変数に値を代入する時には= (equal)を使います.例えば," ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a=3\n", "b=2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n" ] } ], "source": [ "print(a+b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "代数演算に変数名のまま使うには,Symbolあるいはsymbolsでpythonに教えてやる必要があります." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy import *\n", "a,b,c,x = symbols('a,b,c,x')\n", "\n", "eq1 = a*x**2 + b*x + c" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2 \n", "a⋅x + b⋅x + c\n" ] } ], "source": [ "pprint(eq1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "値の代入はsubsで定義辞書を渡すことになります." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9⋅a + 3⋅b + c\n" ] } ], "source": [ "pprint(eq1.subs({x:3}))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "b⋅x + c + 2⋅x \n" ] } ], "source": [ "pprint(eq1.subs({a:2}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "まちがって代入すると,それ以降のsubsが効かなくなるので,注意してください." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2 \n", "a⋅x + b⋅x + c\n", " 2 \n", "a⋅x + b⋅x + c\n" ] } ], "source": [ "a=3\n", "pprint(eq1)\n", "pprint(eq1.subs({a:2}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "その場合は,symbolsなどで元に戻す必要があります." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a = symbols('a')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "b⋅x + c + 2⋅x \n" ] } ], "source": [ "pprint(eq1.subs({a:2}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 方程式の解(solve)\n", "\n", "> 3x=2を満たすxを求めよ\n", "\n", "は片方の辺へ移項して,解きます." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3⋅x - 2\n" ] } ], "source": [ "eq1 = 3*x - 2\n", "pprint(eq1)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2/3]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(eq1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2次方程式も同じようして解けます." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2 \n", "a⋅x + b⋅x + c\n" ] } ], "source": [ "eq1 = a*x**2 + b*x + c\n", "pprint(eq1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{a: -(b*x + c)/x**2}]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(eq1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "おやおや,おかしいですね.とくべき未知数(x)を指定するのを忘れています." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(eq1,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "出力としてpythonの辞書形式で戻す場合には,dict=Trueが必要になります." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{x: (-b + sqrt(-4*a*c + b**2))/(2*a)}, {x: -(b + sqrt(-4*a*c + b**2))/(2*a)}]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(eq1,x, dict=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "連立方程式も同じようにして解けます." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{x: 3/2, y: -1/2}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = symbols('y')\n", "solve({x+y-1,x-y-2},{x,y})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "解析的に解けないときは,数値解を求める必要があります.これはpythonによる数値計算で詳述します.簡単なコマンドはなさそうです." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "ename": "NotImplementedError", "evalue": "multiple generators [exp(x), log(x)]\nNo algorithms are implemented to solve equation log(x) - exp(-x)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNotImplementedError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0msolve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/Users/bob/anaconda3/lib/python3.6/site-packages/sympy/solvers/solvers.py\u001b[0m in \u001b[0;36msolve\u001b[0;34m(f, *symbols, **flags)\u001b[0m\n\u001b[1;32m 1051\u001b[0m \u001b[0;31m###########################################################################\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1052\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mbare_f\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1053\u001b[0;31m \u001b[0msolution\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_solve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0msymbols\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mflags\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1054\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1055\u001b[0m \u001b[0msolution\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_solve_system\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msymbols\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mflags\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/bob/anaconda3/lib/python3.6/site-packages/sympy/solvers/solvers.py\u001b[0m in \u001b[0;36m_solve\u001b[0;34m(f, *symbols, **flags)\u001b[0m\n\u001b[1;32m 1617\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1618\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1619\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'\\n'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnot_impl_msg\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1620\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1621\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mflags\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'simplify'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNotImplementedError\u001b[0m: multiple generators [exp(x), log(x)]\nNo algorithms are implemented to solve equation log(x) - exp(-x)" ] } ], "source": [ "solve(log(x)-exp(-x),x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "両辺ともに長い式の時には,右辺(rhs),左辺(lhs)なんかを使ってまとめたりします." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2 2 \n", "sin (x) - 2⋅cos (x) + 3⋅cos(x) - cos(2⋅x)\n" ] }, { "data": { "text/plain": [ "[0, -I*log(-2/5 - sqrt(21)*I/5), -I*log(-2/5 + sqrt(21)*I/5)]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rhs = sin(x)**2 + 3*cos(x)\n", "lhs = 2*cos(x)**2 + cos(2*x)\n", "eq1 = rhs -lhs\n", "pprint(eq1)\n", "solve(eq1,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 恒等式\n", "式の変形にも等号が使われます.例えば,\n", "$$\n", "(x-2)^2 = x^2 -4x +4\n", "$$\n", "なんかです.これは左辺と右辺がどんな$x$に対しても\n", "成り立っていること,恒等式であることを表現しています.\n", "\n", "このような式の変形においても,問題としては\n", "> $(x-2)^2$を展開(expand)せよ\n", "\n", "となります.ですので," ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy import *\n", "\n", "x = Symbol('x')\n", "eq1 = (x-2)**2" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "(x - 2) \n", " 2 \n", "x - 4⋅x + 4\n" ] } ], "source": [ "pprint(eq1)\n", "pprint(eq1.expand())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "となります.因数分解,微積分なども同様にそれぞれのコマンドが用意されています.これは別の章で詳しく解説します." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 課題" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3点を通る2次方程式\n", "\n", "3点(1,2),(-3,4),(-1,1)を通る2次方程式を求めよ." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy import *\n", "a,b,c,x = symbols('a,b,c,x')\n", "f = a*x**2 + b*x + c" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "eq1 = f.subs({x:1})-2" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "eq2 = f.subs({x:-3})-4\n", "eq3 = f.subs({x:-1})-1" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{a: 1/2, b: 1/2, c: 1}\n" ] } ], "source": [ "s1 = solve({eq1,eq2,eq3},{a,b,c})\n", "print(s1)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x**2/2 + x/2 + 1\n" ] } ], "source": [ "f1 = f.subs(s1)\n", "print(f1)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngP4fOLM+4m5TAbQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy.plotting import plot\n", "\n", "plot(f1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 関数と点の同時plot\n", "\n", "得られた関数と与えられた点を同時にplotするのに苦労した.\n", "func内で上で得られたf1を使いたかったが,だめ.\n", "symbolと値の取り扱いが混ざってしまうのかな.\n", "\n", "とりあえず,関数をベタ打ちすると以下のとおり表示OK.\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8VGW+x/HPb9IbCZAESAdCMbQAkQ4ilgUbiooFQRdX\nxNVVt91dL1vdZe/d9a59V0TFgohYsGNhRQXpoXcIhISEkpCQkELqPPePDLuIQBKYmTPl93695sWU\nQ853XuiXh3Oe8xwxxqCUUsq32KwOoJRSyvm03JVSygdpuSullA/ScldKKR+k5a6UUj5Iy10ppXyQ\nlrtSSvkgLXellPJBWu5KKeWDAq3acWxsrElLS7Nq90op5ZXWrVt31BgT19x2lpV7Wloa2dnZVu1e\nKaW8kojktWQ7PSyjlFI+SMtdKaV8kJa7Ukr5IC13pZTyQVruSinlg1pc7iISICIbROTjM3wmIvK0\niOSIyGYRGeDcmA7z5kFaGthsTb/Om+eS3SillLdrzVTIh4AdQJszfDYO6OZ4DAaec/zqPPPmwbRp\nUF3d9Dovr+k1wKRJTt2VUkp5uxaN3EUkCbgaePEsm4wHXjNNVgExItLJSRmbzJjxn2I/qbq66X2l\nlPIST/1rD6v3lbh8Py09LPMk8F+A/SyfJwIHTnld4HjvO0Rkmohki0h2cXFxq4KSn9+695VSysPk\nl1TzxL92szq31OX7arbcReQaoMgYs+5Cd2aMmW2MyTLGZMXFNXv17HelpLTufaWU8jBvZR/AJnDT\nwCSX76slI/fhwHUish94ExgjIq+ftk0hkHzK6yTHe84zcyaEh3/nLXtYWNP7Sinl4Roa7byzroBR\n3eNIiAlz+f6aLXdjzCPGmCRjTBpwK7DEGHPHaZt9CExxzJoZApQbYw45NemkSTB7NqSmYkQoaBPH\nFw//SU+mKqW8wtI9xRw+XsOtFyc3v7ETnPfCYSIyHcAYMwtYBFwF5ADVwA+dku50kybBpEkI8KsX\nV5FXUs2VdoPNJi7ZnVJKOcuCtQdoHxHMmJ4d3LK/Vl3EZIz52hhzjeP5LEex45glc78xpqsxpo8x\nxuXLPU7MSqbg2AlW7HX9WWellLoQRRU1fLmjiBsHJhEc6J5rR732CtUf9OpIdFgQb67V2TJKKc+2\ncH0hDXbDxCz3HJIBLy730KAAbuifyBfbjnCsqs7qOEopdUbGGN5ae4Cs1Lakx0e6bb9eW+4At1yc\nTF2jnYUbnDsxRymlnGVNbin7jlYx0U0nUk/y6nK/qFMbMpNjmL8mH2OM1XGUUup75q/JJyo0kGv7\nJrh1v15d7gC3DUomp6iSdXnHrI6ilFLfUVZdx6Kth7k+M5Gw4AC37tvry/2avglEhgTyxho9saqU\n8iwL1xdS12DntkHuv5Le68s9IiSQ8ZkJfLL5EOXV9VbHUUopoOlE6ptr8+mXHENGwpkW03Utry93\ngNsGpVDbYOf9jXpiVSnlGdbnH2P3kUpuc/OJ1JN8otx7J0bTJzFaT6wqpTzG/DUHiAgO4Np+7j2R\nepJPlDs0jd53Hq5gw4Eyq6Mopfxc+Yl6Pt58kPH9E4kIOe9VXi6Iz5T7dZkJRAQHMH+1nlhVSlnr\n/Q2F1NTbue1i65Yk95lyjwwJZHz/RD7afFBPrCqlLGOMYd7qPPolRdMnKdqyHD5T7gC3D0qhpt7O\nwg0FVkdRSvmp7LymE6m3D7b2RkI+Ve69E6PJTI5h3mo9saqUssa8VXlEhQRadiL1JJ8qd4DbB6eQ\nU1TJGjfco1AppU5VWlXHoi2HmTAgkfBga06knuRz5X5t3wSiQgOZpydWlVJu9s66A9Q12rl9cKrV\nUXyv3MOCA7hxQBKfbT1MSWWt1XGUUn7CbjfMX9O0tG+PjlFWx/G9cgeYNDiFukY7b2XriVWllHus\n2FtC7tEqy0+knuST5d6tQxSDO7fjjTV5NNr1xKpSyvXmrtpP2/AgrurTyeoogI+WO8DkoakcKD3B\n0t3FVkdRSvm4Q+UnWLz9CBMvTiY0yL1L+56Nz5b7lRkdiYsKYe6qPKujKKV83PzV+RjgDg84kXqS\nz5Z7cKCN2y5O5qtdRRworbY6jlLKR9U12Jm/9gCX9ognuV241XH+rdlyF5FQEVkjIptEZJuI/PEM\n24wWkXIR2eh4/M41cVvntsEp2ER0WqRSymW+2H6Y4opaJg/xnFE7tGzkXguMMcb0AzKBsSIy5Azb\nLTPGZDoejzo15XnqFB3G5RfF81b2AWrqG62Oo5TyQXNX5pHcLoxR3eOsjvIdzZa7aVLpeBnkeHjN\nFJTJQ9Iorarj062HrI6ilPIxu49UsDq3lEmDUwmwidVxvqNFx9xFJEBENgJFwGJjzOozbDZMRDaL\nyKci0supKS/AsK7t6RIXwasr9MSqUsq5Xlu5n+BAGxOzrLnb0rm0qNyNMY3GmEwgCRgkIr1P22Q9\nkGKM6Qs8A7x/pp8jItNEJFtEsouL3TNF0WYTpgxJZeOBMjbpjTyUUk5yvKaehesLua5fAu0igq2O\n8z2tmi1jjCkDvgLGnvb+8ZOHbowxi4AgEYk9w++fbYzJMsZkxcW57/jUjQOTiAgO4NWV+922T6WU\nb3snu4DqukbuGpZmdZQzaslsmTgRiXE8DwOuAHaetk1HERHH80GOn1vi/LjnJyo0iBsHJvHxpkO6\n3oxS6oLZ7Ya5q/IYkBJD70TrbshxLi0ZuXcCvhKRzcBamo65fywi00VkumObm4CtIrIJeBq41XjY\ngupThqZS12jnzbUHrI6ilPJyS/cUk3u0ijs9dNQO0OyCw8aYzUD/M7w/65TnzwLPOjeac6XHRzEi\nPZbXV+Vx76guBAb47PVbSikXe21lHrGRIYzr7RnryJyJXzXclKGpHCqvYfH2I1ZHUUp5qbySKr7a\nVcTtg1MIDvTcCvXcZC5w2UUdSGobxssr9lsdRSnlpV5dkUeACJM8ZGnfs/Grcg+wCVOGprImt5Rt\nB8utjqOU8jKVtQ28nX2Aq/p0okObUKvjnJNflTvALVkphAUF8Mry/VZHUUp5mXfXFVBR28APh6dZ\nHaVZflfu0eFB3DgwkQ82HdRpkUqpFrPbDa+s2E9mcgz9U9paHadZflfuAHcNS6Ouwc4bulqkUqqF\nvtndNP3RG0bt4Kflnh4fxchuscxdlUddg93qOEopLzBneS7xUZ49/fFUflnuAFOHd6aoolZXi1RK\nNSunqIJle44yeUiqR09/PJV3pHSBS7rH0SU2gjnf5uJhF9MqpTzMy8ubVn+8zcOnP57Kb8vdZhN+\nODyNTQXlrMs7ZnUcpZSHOlZVx7vrC7ghM5HYyBCr47SY35Y7NK0WGR0WxIvLcq2OopTyUG+syaem\n3s7dIztbHaVV/Lrcw4MDuX1wCl9sP0x+id5EWyn1XXUNdl5dsZ+R3WLp3iHK6jit4tflDnDn0DRs\nIry8QkfvSqnv+njzQYoqavnRyC5WR2k1vy/3jtGhXNO3E2+tPcDxmnqr4yilPIQxhpe+zaVbfCSj\nun3v3kMez+/LHeDuEV2oqmtkwRpd610p1WTVvlK2HTzO1BGdcdyLyKtouQN9kqIZ1Lkdr6zYT32j\nXtSklIIXl+2jXUQwN/RPtDrKedFyd5g2sguFZSdYtEUvalLK3+UUVfDlziKmDE0lNCjA6jjnRcvd\nYUzPeLrGRTB76T69qEkpP/fislxCAm1MHpJqdZTzpuXuYLMJ94zswraDx1m512Pu7a2UcrOiihoW\nri/k5qwk2nvRRUun03I/xfX9E4mNDGb2sn1WR1FKWeS1FXnU2+3cPcL7pj+eSsv9FKFBAdw5NI2v\ndxWz63CF1XGUUm5WXdfA3FV5XJnRgc6xEVbHuSBa7qe5Y0gqoUE2XtDRu1J+5+3sAspP1DNtlHeP\n2kHL/XvaRgRzS1YyH2ws5FD5CavjKKXcpKHRzgvL9jEwtS0DU9tZHeeCNVvuIhIqImtEZJOIbBOR\nP55hGxGRp0UkR0Q2i8gA18R1jx+N7ILdwJxvdUkCpfzFJ1sOUXDsBNMv6Wp1FKdoyci9FhhjjOkH\nZAJjRWTIaduMA7o5HtOA55ya0s2S24VzTd9OvLE6n/JqXZJAKV9njGHWN/tIj4/ksp7xVsdximbL\n3TSpdLwMcjxOnwg+HnjNse0qIEZEvONeVGdx76iuVNU18vrqPKujKKVc7Jvdxew4dJxpo7pgs3nf\nUgNn0qJj7iISICIbgSJgsTFm9WmbJAKnLsxS4HjPa2UktOGS7nG8vDyXmvpGq+MopVxo1jd76dgm\nlOszvbq2vqNF5W6MaTTGZAJJwCAR6X0+OxORaSKSLSLZxcXF5/Mj3Gr6JV05WlnHO+sKrI6ilHKR\njQfKWLWvlLtHdPaa+6O2RKu+iTGmDPgKGHvaR4VA8imvkxzvnf77ZxtjsowxWXFxca3N6nZDurSj\nX3IMs5fuo0EXFFPKJ836ei9RoYFedX/UlmjJbJk4EYlxPA8DrgB2nrbZh8AUx6yZIUC5McbrV+AS\nEX48uiv5pdV8oguKKeVzcooq+GzbYe4alkZkSKDVcZyqJSP3TsBXIrIZWEvTMfePRWS6iEx3bLMI\n2AfkAC8AP3ZJWgtccVEHusVH8tzXe3VBMaV8zHNf7yMsKIAfDveu+6O2RLN/VRljNgP9z/D+rFOe\nG+B+50bzDDab8ONLu/LTBZtYsrOIyy7qYHUkpZQTHCit5v2Nhdw5NI12EcFWx3E63zl74ELX9k0g\nqW0Yz36Vo6N3pXzEC8v2YRO4Z5TvjdpBy71FAgNs3HtJVzbkN51VV0p5t6KKGt5ce4AJ/ZPoFB1m\ndRyX0HJvoZsHJhEbGcI/vsqxOopS6gLN+XY/DY12po/2jaUGzkTLvYVCgwKYNqoz3+YcZUP+Mavj\nKKXO07GqOuau3M9VfTp5/bK+56Ll3gqTBqfSNjyIZ5bo6F0pb/Xy8lyq6hp5YEy61VFcSsu9FSJC\nArl7RGeW7Cxia2G51XGUUq10vKael1fsZ2yvjvTs2MbqOC6l5d5KU4al0SY0kGeW7LE6ilKqlV5d\nvp+KmgafH7WDlnurtQkN4q7hnfl82xF2HDpudRylVAtV1jbw0vJcLusZT+/EaKvjuJyW+3mYOjyN\niOAAntWZM0p5jddX5VFWXc9PLutmdRS30HI/DzHhwUwZlsaiLYfYc0RvpK2Up6uua+CFpfsY2S2W\nzOQYq+O4hZb7ebpnZBfCggJ46ks99q6Up5u7Mo+Sqjoevtw/Ru2g5X7e2kUEc+ewND7ZcojdOnpX\nymNV1zXwvGPU7gs3vm4pLfcLcM/ILoQHBfC0jt6V8livrcyjtKqOhy/vbnUUt9JyvwA6elfKs1XV\nNjB76T5GdY9jYGpbq+O4lZb7BTo5etdj70p5nv+M2v3nWPtJWu4XqG1EMHcNb5o5s/OwzntXylNU\n1jYwe+leRnWPY0CKf43aQcvdKe4Z2YXI4ECeWLzb6ihKKYeXv83lWHU9P7/Cv461n6Tl7gQx4cHc\nPbLpqtUtBbrmjFJWK6+uZ/ayfVx+UQf6+cm89tNpuTvJ1BGdiQkP4u+Ld1kdRSm/98KyfVTUNPAz\nPx21g5a707QJDeLeUV35elcx6/L0bk1KWaWkspY5y3O5um8nMhJ8e+XHc9Fyd6I7h6USGxnM37/Q\nY+9KWeX5pfuoqW/kp344Q+ZUWu5OFB4cyI9Hp7NibwnLc45aHUcpv3O4vIZXV+zn+sxE0uOjrI5j\nqWbLXUSSReQrEdkuIttE5KEzbDNaRMpFZKPj8TvXxPV8tw9OISE6lL99thNjjNVxlPIrTy/Zg90Y\nfurHx9pPasnIvQH4uTEmAxgC3C8iGWfYbpkxJtPxeNSpKb1IaFAAD1/RnU0F5Xy+7bDVcZTyG7lH\nq1iw9gC3D0ohuV241XEs12y5G2MOGWPWO55XADuARFcH82YT+ifSNS6C//tiNw2NdqvjKOUXHl+8\nm+AAGw+M8e9j7Se16pi7iKQB/YHVZ/h4mIhsFpFPRaSXE7J5rcAAG7+4sgc5RZUs3FBodRylfN7W\nwnI+2nSQqSPSiIsKsTqOR2hxuYtIJPAu8LAx5vTr7NcDKcaYvsAzwPtn+RnTRCRbRLKLi4vPN7NX\nGNu7I32Tonly8W5q6hutjqOUT/u/L3YRHRbEtFFdrY7iMVpU7iISRFOxzzPGLDz9c2PMcWNMpeP5\nIiBIRGLPsN1sY0yWMSYrLi7uAqN7NhHhV2N7crC8htdX5VkdRymftXJvCV/vKua+0V2JDguyOo7H\naMlsGQFeAnYYYx4/yzYdHdshIoMcP7fEmUG90fD0WEZ2i+WZJTmUV9dbHUcpn2O3G/7n0x10ig7l\nrmFpVsfxKC0ZuQ8HJgNjTpnqeJWITBeR6Y5tbgK2isgm4GngVqPzAAH49bieHK+p55/f6M20lXK2\nT7YcYnNBOT+/sgehQQFWx/Eogc1tYIz5FpBmtnkWeNZZoXxJr4RobshM5OXl+7lzaBoJMWFWR1LK\nJ9Q12Hns81307BjFDf11At/p9ApVN/jZlU0XVDyuSwIr5TRvrM4jv7SaX43rSYDtnONPv6Tl7gZJ\nbcO5a1ga764vYMchvaGHUhfqeE09Ty/JYWiX9ozu7tuTM86Xlrub3D86neiwIGZ+skOXJVDqAv3z\nq72UVtXx31ddhGMuhzqNlrubRIcH8eCYbnybc5Svd/n2HH+lXOlAaTVzlucyoX8ifZKirY7jsbTc\n3eiOIal0jo1g5qIduiyBUufpb5/vwibwix/0sDqKR9Nyd6PgQBu/HteTnKJK5q89YHUcpbzOhvxj\nfLTpINNGdtGZZ83QcnezKzM6MKhzO55cvJvjNXphk1ItZYzhz5/sIC4qhHsv0WUGmqPl7mYiwm+v\nzqCkqo5/LNELm5RqqY83H2Jd3jF+fkV3IkKavUTH72m5W6BPUjQ3D0xizvJcco9WWR1HKY93oq6R\n//10J70S2nBzVrLVcbyClrtFfjm2B8EBNmZ+ssPqKEp5vNlL91FYdoLfX9tLL1hqIS13i8RHhfLA\nmG78a8cRlu3RqZFKnc3BshM8900OV/ftxKDO7ayO4zW03C00dUQaqe3DefSj7To1Uqmz+N9Pd2IM\nPDKup9VRvIqWu4VCAgOYcdVF7CmqZK6u+a7U96zdX8qHmw5y7yVdSWqr90VtDS13i12R0YGR3WJ5\nfPFujlbWWh1HKY/R0Gjnt+9vJSE6lOmXdLE6jtfRcreYiPCH63pRU9/IXz/daXUcpTzGvNX57Dxc\nwW+vySA8WKc+tpaWuwfoGhfJ1BGdeXtdAevzj1kdRynLHa2s5e9f7GJEeixje3e0Oo5X0nL3EA+O\n6UaHNiH8/oNtNNp11Ujl3x77bBfVdY384boMXfXxPGm5e4iIkEBmXJ3BlsJy5q/JtzqOUpbZkH+M\nBdkHuHtEZ9Ljo6yO47W03D3ItX07Maxre/722U49uar8UkOjnRnvbaVjm1B+clk3q+N4NS13DyIi\nPDq+NyfqG/mLXrmq/NCrK/PYfug4v782g0hdP+aCaLl7mPT4SO4d1ZWFGwpZsfeo1XGUcpvD5TU8\n/sUuRveI05OoTqDl7oEeGJNOSrtwfvv+Vuoa9MpV5R/+9PF2GuyGR6/rrSdRnUDL3QOFBgXwx/G9\n2Ftcxeyle62Oo5TLfb2riE+2HOInY9JJaa9XojpDs+UuIski8pWIbBeRbSLy0Bm2ERF5WkRyRGSz\niAxwTVz/cWmPeK7u04mnl+Swr7jS6jhKuUx1XQO/eX8r6fGR3DNKr0R1lpaM3BuAnxtjMoAhwP0i\nknHaNuOAbo7HNOA5p6b0U7+/NoOQQBv//d4WjNG578rHzJsHaWmEhQbz5l9u5XnbLkICA6xO5TOa\nLXdjzCFjzHrH8wpgB5B42mbjgddMk1VAjIh0cnpaPxPfJpT/vuoiVu0r5e3sAqvjKOU88+bBtGmQ\nl4cYQ9LxYrrO+GnT+8opWnXMXUTSgP7A6tM+SgROveNzAd//C0Cdh1uykhmU1o6Zi3ZQXKFz35WP\nmDEDqqu/+151ddP7yilaXO4iEgm8CzxsjDl+PjsTkWkiki0i2cXFeoOKlrDZhL9M6MOJukb+8NE2\nq+Mo5Rz5Z7kK+2zvq1ZrUbmLSBBNxT7PGLPwDJsUAqfe2DDJ8d53GGNmG2OyjDFZcXFx55PXL6XH\nR/LgZel8svkQn209bHUcpS5YfWLSmT9ISXFvEB/WktkyArwE7DDGPH6WzT4EpjhmzQwByo0xh5yY\n0+/de0lXMjq14bcfbKWsus7qOEqdt0a74dnLp3IiKOS7H4SHw8yZ1oTyQS0ZuQ8HJgNjRGSj43GV\niEwXkemObRYB+4Ac4AXgx66J67+CAmw8dnNfjlXV8ejH262Oo9R5e23lfp7qcDGbf/cYpKaCSNOv\ns2fDpElWx/MZzS7eYIz5Fjjn5WKmaZ7e/c4Kpc6sV0I0943uyjNLcri2bwKX9oy3OpJSrZJfUs3f\nPmtaYmDQXVfBb35idSSfpVeoepkHxqTTLT6SRxZuoby63uo4SrWY3W745TubCLAJf7mhjy4x4GJa\n7l4mJDCAv0/sR3Flrc6eUV7l5RX7WZ1byu+uzSAhJszqOD5Py90L9U2K4f5L03lvQyGfbdXz1srz\n5RRV8rfPdnJZz3huHniWmTLKqbTcvdQDl6bTK6ENM97bqjf2UB6todHOz9/eRFhwAP8zQQ/HuIuW\nu5cKDrTx+MRMKmoamKFrzygP9tzXe9l0oIw/X9+b+DahVsfxG1ruXqxHxyh+fmV3Pt92RNeeUR5p\n04EynvpyD9f2S+CavglWx/ErWu5e7kcjuzCkSzv+8NE28kqqrI6j1L9V1zXw8IKNxEeF8Ofxva2O\n43e03L1cgE14fGImgTbh4QUbaWjUOzcpz/Cnj3ewv6SKv0/MJDo8yOo4fkfL3QckxIQx84Y+bMgv\n45klOVbHUYrF248wf00+00Z1YWjX9lbH8Uta7j7i2n4JTOifyDNL9rAmt9TqOMqPHS6v4b/e2URG\npzb87IruVsfxW1ruPuTR63uT0i6ch97coIuLKUs02g0PvbmB2gY7z9zeX++sZCEtdx8SGRLIM7cN\n4GhlLb98Z7NOj1Ru9+ySHFbnlvLo+N50jYu0Oo5f03L3MX2SovnV2J4s3n6EuavyrI6j/Mia3FKe\n+nI3N/RP5MYBeiM2q2m5+6C7R3RmTM94/vzxDrYUlFsdR/mBkspaHpy/gZR24fzp+t56FaoH0HL3\nQSLC/93cj/aRwfz4jXW6eqRyqUa74eEFGymtruMfkwYQGdLsSuLKDbTcfVS7iGCevX0Ah8pq+MU7\nm/T4u3KZZ5bsYdmeo/zxul70Soi2Oo5y0HL3YQNT2/LIVRexePsRXli2z+o4ygd9u+coT325hwn9\nE7n14uTmf4NyGy13Hzd1eBrjenfkr5/tYuXeEqvjKB9SWHaCB9/cQHpcJH++QY+zexotdx8nIvzt\npr6ktQ/ngTfWc7DshNWRlA+oqW9k+tx11DfYmTV5IOHBepzd02i5+4Go0CCen5xFbYOd+15fR019\no9WRlBczxvCb97eypbCcx2/J1PnsHkrL3U+kx0fy94n92FRQzu8+2KonWNV5e31VHu+sK+DBy7px\nRUYHq+Oos9By9yM/6NWRn4xJ563sAl5dsd/qOMoLrdxbwh8/2s6YnvE8fFk3q+Ooc9By9zM/vbw7\nV2R04NGPt7N0d7HVcZQXyS+p5r5560iLjeDJWzOx2fQEqidrttxFZI6IFInI1rN8PlpEykVko+Px\nO+fHVM5iswlP3JJJ9w5R3P/GevYWV1odSXmBipp67n51LQAvTsmiTaiuz+7pWjJyfwUY28w2y4wx\nmY7HoxceS7lSZEggL0zJIjjAxj2vZusKkuqcmlZ63Eju0Sr+OWkAabERVkdSLdBsuRtjlgK6QLiP\nSW4XzqzJAyk4doJ7566jtkFn0KjvM8bwx4+2sWRnEX+4rhfDusZaHUm1kLOOuQ8Tkc0i8qmI9Drb\nRiIyTUSyRSS7uFiP91rt4rR2PHZzX1bnlvLrd7foDBr1PS99m8trK/OYNqoLdwxJtTqOagVnlPt6\nIMUY0xd4Bnj/bBsaY2YbY7KMMVlxcXFO2LW6UOMzE/nFld15b0MhT/xrj9VxlAf5bOthZi7awbje\nHfn12J5Wx1GtdMHlbow5boypdDxfBASJiP7bzYvcf2k6E7OSePrLPSxYm291HOUB1uWV8tCbG8hM\njuGJW3RmjDe64GuGRaQjcMQYY0RkEE1/YegiJl5ERJh5Qx+KKmp5ZOEW2oYHc2WvjlbHUhbZfaSC\nqa9kkxATxotTsggN0lvleaOWTIWcD6wEeohIgYjcLSLTRWS6Y5ObgK0isgl4GrjV6MFbrxMUYOOf\nkwbQJymGn8zfoDfZ9lOFZSeY8tIaQgJtvDZ1EO0jQ6yOpM6TWNXDWVlZJjs725J9q7Mrrarjplkr\nKK6o5a17h3JRpzZWR1JuUlJZy8TnV1J0vJa3puufvacSkXXGmKzmttMrVNV3tIsI5rWpg4gMCWTy\nS6v1Iic/UX6inilz1lBw7AQv3pmlxe4DtNzV9yS1Def1Hw0G4I4XV3OgtNriRMqVqmobmPrKWnYf\nqWDW5IEM7tLe6kjKCbTc1Rl1jYtk7t2Dqa5rZNKLqzlcXmN1JOUCNfWNTJubzcYDZTxzW38u7RFv\ndSTlJFru6qwu6tSGV6cOorSqjtteWKUF72Nq6hu557VsVuwt4bGb+jK2dyerIykn0nJX55SZHMOr\nUwdRXFGrBe9DThb7tzlH+duNfZkwIMnqSMrJtNxVswamtv13wd86eyWHyvVWfd7sRF0jP3q1qdgf\nu6kfN2fpja19kZa7apGBqW157e5BlFTWcfOsleSVVFkdSZ2Hipp67pyzhuV7m4r9poE6YvdVWu6q\nxQaktOWNe4ZQVdvAzbNWsudIhdWRVCscq6pj0ourWZ9/jKdv7a/F7uO03FWr9EmKZsG9QwGY+PxK\nNheUWZxItcSR4zXcMnslOw9X8PzkgVzbL8HqSMrFtNxVq3XvEMXb04cSERLIrbNX8fWuIqsjqXPI\nKapgwj9FSWCKAAAKJklEQVRXUHDsBK/cdTGXXaQ3tfYHWu7qvKS2j2DhfcNIax/Bj17N5p11BVZH\nUmeQvb+UG59bSW2DnQXThjIsXRds9Rda7uq8xbcJZcG9QxjSpT2/eHsTT3+5R2/44UE+3XKISS+u\npl1EMAvvG0afpGirIyk30nJXFyQqNIg5d13MhP6JPL54Nw8v2EhNvd6yz0rGGJ5dsof75q2nV0Ib\n3r1vGCntw62OpdzsgtdzVyo40MbfJ/aja3wkj32+i/zSamZPziIuSpeLdbea+kYeWbiF9zYUcn1m\nAv97Y19dj91P6chdOYWIcP+l6Tw3aQA7Dh3nume/ZUP+Matj+ZWDZSe45fmVvLehkF9c2Z0nbsnU\nYvdjWu7Kqcb16cQ704cRYBNueX4V89fobfvcYcXeo1z7zLfsLa5i1h0DeWBMN0T01nj+TMtdOV3v\nxGg+emAEg7u045GFW/jl25uormuwOpZPstsNz329lzteXE1MeBDv3z+csb31FolKj7krF2kbEcwr\nPxzEE4t384+vc9hwoIxnb+9Pz456EwhnKa6o5WdvbWTZnqNc3acTf72pL5Eh+r+0aqIjd+UyATbh\nFz/owdypgymrrmf8s8uZuypPp0s6wdLdxYx7ahlrckv5yw19ePb2/lrs6ju03JXLjegWy6cPjWRw\nl/b89v2t3PnyWl06+DxV1zXwm/e3MGXOGtqGB/HBA8O5fXCKHl9X36PlrtwiLiqEV+66mD+N78Xa\n3FKufOIb3ttQoKP4Vli7v5RxTy1j3up8fjSiMx/9ZIQe5lJnpeWu3MZmEyYPTWPRQyPp1iGKny7Y\nxJ0vryW/RO/Rei7l1fU8snALN89aSaPdMP+eIfzmmgyd5qjOqdlyF5E5IlIkIlvP8rmIyNMikiMi\nm0VkgPNjKl/SOTaCt+4dyh+uzWDd/lKufPIbnvt6L3UNdqujeRRjDB9uOshlj3/DgrX53DOyM1/8\ndBRD9AbWqgVaMnJ/BRh7js/HAd0cj2nAcxceS/m6AJtw1/DOLP7ZJYzsFsdfP9vJD55cyr+2H8HM\nmwdpaWCzNf06b57Vcd1uS0E5E59fyYPzN9ApOpQPHxjBjKszCA/Wk6aqZZr9L8UYs1RE0s6xyXjg\nNdN08HSViMSISCdjzCEnZVQ+LCEmjBemZPHVriL+9PF2PvzVY4z84h+E1DlOuOblwbRpTc8nTbIu\nqJsUlp3gycW7eWd9Ae3Cg/mfCX2YmJVMgE1PmKrWccYwIBE4cMrrAsd7Wu6qxS7tEc+I9FhqHpv0\nn2I/qboaZszw6XI/WlnLP7/ay+ur8gC4e3hnHry8G21CgyxOpryVW/+NJyLTaDp0Q0pKijt3rbxA\nUICNoKIzjwlMfj6+OHY9WHaCF5bt4801B6htaOSmgUk8dHl3EmPCrI6mvJwzyr0QOPX26UmO977H\nGDMbmA2QlZWlc+DU96WkNB2KOU1hVCy/eXkNU4d3ZkR6LDYvP0yxtbCcV1bs54ONhdgNjM9M4Mej\n00mPj7Q6mvIRzij3D4EHRORNYDBQrsfb1XmbObPpGHv1f6ZHmrBwtt3/K7YWljNlzho6x0Zwx5BU\nJvRPpG1EsIVhW+dEXSOfbzvMayv3sz6/jLCgAG4flMI9o7qQ1FbXW1fOJc1dRCIi84HRQCxwBPg9\nEARgjJklTZfGPUvTjJpq4IfGmOzmdpyVlWWys5vdTPmjefOajrHn5zeN5GfOhEmTqG1o5NMth3l1\n5X425JcRFCBc2iOeCQMSGd0j3iPnfTfaDWtyS3lvQwGLthymsraBtPbhTB6axk0Dk4gO02PqqnVE\nZJ0xJqvZ7ay6QlDLXV2I7QePs3B9Ae9vPMjRylrCgwMY3SOOKzM6Mqp7HO0sHNFX1zWwal8Jn289\nwr92HKGkqo6I4ADG9enEhP6JDOnS3usPKynraLkrv9DQaGfF3hI+33aYL7YfobiiFoCMTm0Y0S2W\nrNS29EuOoUObUJdlKK+uZ3NhGevzyli+9ygb8o9R32iIDAnk0p7xXJnRgcsuitc56soptNyV37Hb\nDZsKyliec5TlOSWsyztGXWPTVa8d24TSs1MU6XGRdI2PJLltOB2jQ+jQJpSoFkw3rKlv5MjxGg6X\n11BYdoK9xZXsLapi15EKco9WASACvROiGZbenuFdYxncpR0hgZ53qEh5Ny135fdq6hvZfug4G/PL\n2FRQxu4jlewrrqT2tGUOggNsRIYGEhESQEhgwL+nXNY32qmsbaSytp6a+u/+nkCbkNo+nPT4SPom\nxZCZHEOfpGidl65crqXlrv9OVD4rNCiAASltGZDS9t/v2e2GwrITFJad+PdI/Fh1PZW19VTVNlLb\n0PjvbQNtNiJCAokKDaRNaCAd2oTSMTqUTtFhpLYPJyhA191TnkvLXfkVm01IbhdOcjudeqh8mw49\nlFLKB2m5K6WUD9JyV0opH6TlrpRSPkjLXSmlfJCWu1JK+SAtd6WU8kFa7kop5YMsW35ARIqB79+V\noWVigaNOjOMN9Dv7B/3O/uFCvnOqMSauuY0sK/cLISLZLVlbwZfod/YP+p39gzu+sx6WUUopH6Tl\nrpRSPshby3221QEsoN/ZP+h39g8u/85eecxdKaXUuXnryF0ppdQ5eG25i8ifRGSziGwUkS9EJMHq\nTK4mIo+JyE7H935PRGKszuRqInKziGwTEbuI+OyMChEZKyK7RCRHRH5tdR53EJE5IlIkIlutzuIO\nIpIsIl+JyHbHf9MPuXJ/XlvuwGPGmL7GmEzgY+B3Vgdyg8VAb2NMX2A38IjFedxhKzABWGp1EFcR\nkQDgH8A4IAO4TUQyrE3lFq8AY60O4UYNwM+NMRnAEOB+V/45e225G2OOn/IyAvD5kwfGmC+MMQ2O\nl6uAJCvzuIMxZocxZpfVOVxsEJBjjNlnjKkD3gTGW5zJ5YwxS4FSq3O4izHmkDFmveN5BbADSHTV\n/rz6NnsiMhOYApQDl1ocx92mAgusDqGcIhE4cMrrAmCwRVmUG4hIGtAfWO2qfXh0uYvIv4COZ/ho\nhjHmA2PMDGCGiDwCPAD83q0BXaC57+zYZgZN/8Sb585srtKS76yUrxCRSOBd4OHTjkA4lUeXuzHm\n8hZuOg9YhA+Ue3PfWUTuAq4BLjM+Mo+1FX/OvqoQSD7ldZLjPeVjRCSIpmKfZ4xZ6Mp9ee0xdxHp\ndsrL8cBOq7K4i4iMBf4LuM4YU211HuU0a4FuItJZRIKBW4EPLc6knExEBHgJ2GGMedzl+/PWwZ+I\nvAv0AOw0rS453Rjj06MdEckBQoASx1urjDHTLYzkciJyA/AMEAeUARuNMT+wNpXzichVwJNAADDH\nGDPT4kguJyLzgdE0rZB4BPi9MeYlS0O5kIiMAJYBW2jqLYD/NsYscsn+vLXclVJKnZ3XHpZRSil1\ndlruSinlg7TclVLKB2m5K6WUD9JyV0opH6TlrpRSPkjLXSmlfJCWu1JK+aD/B4sW7cnCeazwAAAA\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#from sympy.plotting import plot\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "def func(x):\n", " return x**2/2 + x/2 + 1\n", "\n", "xx = np.linspace(-3,2, 100)\n", "plt.plot(xx, func(xx))\n", "px=[1,-3,-1]\n", "py=[2,4,1]\n", "plt.plot(px,py,'o', color='r')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": { "height": "12px", "width": "252px" }, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": "block", "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }