{ "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": 29, "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[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/sympy/solvers/solvers.py\u001b[0m in \u001b[0;36msolve\u001b[0;34m(f, *symbols, **flags)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[0;31m###########################################################################\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1093\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mbare_f\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1094\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[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1095\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1096\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[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/opt/anaconda3/lib/python3.8/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 1692\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1693\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[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1694\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[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1695\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1696\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[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(5) - log(-2 - sqrt(21)*I)), I*(log(5) - log(-2 + sqrt(21)*I))]" ] }, "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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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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.8.5 ('base')", "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.5" }, "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 }, "vscode": { "interpreter": { "hash": "f3f87633aac09da3bda522f97956bee375b5501d1579e6458804e567301cb62a" } } }, "nbformat": 4, "nbformat_minor": 2 }