{ "cells": [ { "cell_type": "markdown", "id": "32517bb8", "metadata": {}, "source": [ "# Leibniz vs. Newton\n", "* [Leibniz–Newton calculus controversy - Wikipedia](https://en.wikipedia.org/wiki/Leibniz%E2%80%93Newton_calculus_controversy)\n", "* [Madhava series - Wikipedia](https://en.wikipedia.org/wiki/Madhava_series) (https://en.wikipedia.org/w/index.php?title=Madhava_series&oldid=1141010090)\n", " - (c.1340–c.1425) [Madhava of Sangamagrama - Wikipedia](https://en.wikipedia.org/wiki/Madhava_of_Sangamagrama)" ] }, { "cell_type": "code", "execution_count": 1, "id": "4ee8651c-e30f-44c2-a891-f8ae0f059452", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting lxml\n", " Using cached lxml-5.2.2-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.4 kB)\n", "Using cached lxml-5.2.2-cp311-cp311-manylinux_2_28_x86_64.whl (5.0 MB)\n", "Installing collected packages: lxml\n", "Successfully installed lxml-5.2.2\n" ] } ], "source": [ "!pip install -U lxml" ] }, { "cell_type": "code", "execution_count": 2, "id": "78a1586d", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
No.SeriesNameWestern discoverers of the series and approximate dates of discovery[6]
01sin x = x − ⁠x3/3!⁠ + ⁠x5/5!⁠ − ⁠x7/7!⁠ + ...Madhava's sine seriesIsaac Newton (1669) and Wilhelm Leibniz (1676)
12cos x = 1 − ⁠x2/2!⁠ + ⁠x4/4!⁠ − ⁠x6/6!⁠ + ...Madhava's cosine seriesIsaac Newton (1669) and Wilhelm Leibniz (1676)
23arctan x = x − ⁠x3/3⁠ + ⁠x5/5⁠ − ⁠x7/7⁠ + ...Madhava's series for arctangentJames Gregory (1671) and Wilhelm Leibniz (1673)
34⁠π/4⁠ = 1 − ⁠1/3⁠ + ⁠1/5⁠ − ⁠1/7⁠ + ...Madhava's formula for πJames Gregory (1671) and Wilhelm Leibniz (1673)
\n", "
" ], "text/plain": [ " No. Series \\\n", "0 1 sin x = x − ⁠x3/3!⁠ + ⁠x5/5!⁠ − ⁠x7/7!⁠ + ... \n", "1 2 cos x = 1 − ⁠x2/2!⁠ + ⁠x4/4!⁠ − ⁠x6/6!⁠ + ... \n", "2 3 arctan x = x − ⁠x3/3⁠ + ⁠x5/5⁠ − ⁠x7/7⁠ + ... \n", "3 4 ⁠π/4⁠ = 1 − ⁠1/3⁠ + ⁠1/5⁠ − ⁠1/7⁠ + ... \n", "\n", " Name \\\n", "0 Madhava's sine series \n", "1 Madhava's cosine series \n", "2 Madhava's series for arctangent \n", "3 Madhava's formula for π \n", "\n", " Western discoverers of the series and approximate dates of discovery[6] \n", "0 Isaac Newton (1669) and Wilhelm Leibniz (1676) \n", "1 Isaac Newton (1669) and Wilhelm Leibniz (1676) \n", "2 James Gregory (1671) and Wilhelm Leibniz (1673) \n", "3 James Gregory (1671) and Wilhelm Leibniz (1673) " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "wiki = pd.read_html('https://en.wikipedia.org/w/index.php?title=Madhava_series&oldid=1141010090')\n", "wiki[0]" ] }, { "cell_type": "markdown", "id": "b1340a6b-d4f8-4df1-acf8-563719cd4b4e", "metadata": {}, "source": [ "## SymPyで検証する" ] }, { "cell_type": "code", "execution_count": 3, "id": "5e25595c", "metadata": { "tags": [] }, "outputs": [], "source": [ "from sympy import *\n", "from sympy.abc import x" ] }, { "cell_type": "code", "execution_count": 4, "id": "0f879b87", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x - \\frac{x^{3}}{6} + \\frac{x^{5}}{120} - \\frac{x^{7}}{5040} + \\frac{x^{9}}{362880} + O\\left(x^{10}\\right)$" ], "text/plain": [ "x - x**3/6 + x**5/120 - x**7/5040 + x**9/362880 + O(x**10)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series(sin(x), x, 0, 10)" ] }, { "cell_type": "code", "execution_count": 5, "id": "b7604d5f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1 - \\frac{x^{2}}{2} + \\frac{x^{4}}{24} - \\frac{x^{6}}{720} + \\frac{x^{8}}{40320} + O\\left(x^{10}\\right)$" ], "text/plain": [ "1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**10)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series(cos(x), x, 0, 10)" ] }, { "cell_type": "code", "execution_count": 6, "id": "15da9037", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x - \\frac{x^{3}}{3} + \\frac{x^{5}}{5} - \\frac{x^{7}}{7} + \\frac{x^{9}}{9} + O\\left(x^{10}\\right)$" ], "text/plain": [ "x - x**3/3 + x**5/5 - x**7/7 + x**9/9 + O(x**10)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series(atan(x), x, 0, 10)" ] }, { "cell_type": "code", "execution_count": 7, "id": "05f8e2b1", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "3.1165965567938323" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float(series(atan(x), x, 0, 80).removeO().subs(x, 1))*4" ] }, { "cell_type": "code", "execution_count": 8, "id": "f28deff0", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "3.1165965567938323" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float(series(atan(x), x, 0, 80).removeO().subs(x, 1))*4" ] }, { "cell_type": "code", "execution_count": 9, "id": "7563133a", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "3.1165965567938323" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float(series(atan(x), x, 0, 80).removeO().subs(x, 1))*4" ] }, { "cell_type": "code", "execution_count": 10, "id": "f6351008", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "3.1165965567938323" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float(series(atan(x), x, 0, 80).removeO().subs(x, 1))*4" ] }, { "cell_type": "code", "execution_count": null, "id": "ddf26ffa", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9fd9544e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e46e6521", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d1ad23ec", "metadata": {}, "source": [ "## Newtonによる $\\sin(x)$ の級数展開" ] }, { "cell_type": "markdown", "id": "9ec279ba-9065-4ec7-8a81-a7db089a2fce", "metadata": {}, "source": [ "### $x = \\sin(y)$ の逆関数 $y = \\arcsin(x)$ を級数展開する" ] }, { "cell_type": "markdown", "id": "e91d6aa4", "metadata": {}, "source": [ "$\\sin(y) = x$ とおく。$x$ を $x$ 軸上の点とすると、$y = \\sin^{-1}(x) = \\arcsin(x)$ は、次の図の円弧の長さに対応する。\n", "\n", "単位円の周長 $l$ と面積 $s$ は、$l : 2 \\pi = s : \\pi$ より $\\frac{l}{2} = s$ の関係がある。" ] }, { "cell_type": "markdown", "id": "6264105b", "metadata": {}, "source": [ "$$\n", " \\frac{1}{2} y = \\frac{1}{2}\\sin^{-1}(x) = \\int_{0}^{x} \\sqrt{1-x^2} - \\frac{1}{2} x \\sqrt{1-x^2}\n", "$$" ] }, { "cell_type": "code", "execution_count": 11, "id": "c67b7c95", "metadata": { "hide_input": true, "jupyter": { "source_hidden": true }, "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.patches as patches\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "x = np.cos(np.radians(30))\n", "y = np.sin(np.radians(30))\n", "\n", "fig, ax = plt.subplots()\n", "\n", "arc1 = patches.Arc([0,0], 2,2, theta1=0, theta2=30, linestyle=':')\n", "arc2 = patches.Arc([0,0], 2,2, theta1=30, theta2=90)\n", "wdg2 = patches.Wedge([0,0], 1, theta1=30, theta2=90, fill=True, alpha=0.3)\n", "ax.add_patch(arc1)\n", "ax.add_patch(arc2)\n", "ax.add_patch(wdg2)\n", "ax.set_xlim([0, 1])\n", "ax.set_ylim([0, 1])\n", "ax.set_aspect(\"equal\")\n", "plt.plot(x, 0, \"ok\")\n", "plt.plot(x, y, \"ok\")\n", "plt.plot([0,x],[y,y], 'k:')\n", "plt.plot([x,x],[0,y], 'k:')\n", "plt.text(x/2, y/2, '1')\n", "plt.text(x+.02, .04, 'x')\n", "plt.text(x-.25, .9, 'y = arcsin(x)')\n", "plt.text(x-.25, .2, 'arccos(x)')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "a14ba71e", "metadata": {}, "source": [ "* [Binomial theorem - Wikipedia](https://en.wikipedia.org/wiki/Binomial_theorem)\n", " - \"Isaac Newton is generally credited with the generalized binomial theorem, valid for any rational exponent.\"\n", " - 「アイザック・ニュートンは、一般に、任意の有理数の指数に対して有効な一般二項定理を導いたとされている。」" ] }, { "cell_type": "markdown", "id": "ae2ee797", "metadata": {}, "source": [ "$$\n", " (x + y)^r = \\sum_{k=0}^\\infty {r \\choose k} x^{r-k} y^k\n", "$$" ] }, { "cell_type": "markdown", "id": "eb078bd7", "metadata": { "hide_input": true }, "source": [ "$\\sqrt{1-x^2} = (1-x^2)^\\frac{1}{2}$ を二項級数に展開する:\n", " * [Binomial series - Wikipedia](https://en.wikipedia.org/wiki/Binomial_series)" ] }, { "cell_type": "code", "execution_count": 12, "id": "76c8c1c9-c46d-43de-8634-f9f6cf56d7e0", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x$" ], "text/plain": [ "x" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy.abc import x\n", "x" ] }, { "cell_type": "code", "execution_count": 13, "id": "ccc8f910", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left(1 - x^{2}\\right)^{0.5}$" ], "text/plain": [ "(1 - x**2)**0.5" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(1-x**2)**(1/2)" ] }, { "cell_type": "code", "execution_count": 14, "id": "f2fffeb1-c4d0-4a02-b9d6-56e398405726", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\sqrt{1 - x^{2}}$" ], "text/plain": [ "sqrt(1 - x**2)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nsimplify(_)" ] }, { "cell_type": "code", "execution_count": 15, "id": "f33123f4", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1 - 0.5 x^{2} - 0.125 x^{4} + O\\left(x^{6}\\right)$" ], "text/plain": [ "1 - 0.5*x**2 - 0.125*x**4 + O(x**6)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series((1-x**2)**(1/2))" ] }, { "cell_type": "code", "execution_count": 16, "id": "0e210613", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1 - \\frac{x^{2}}{2} - \\frac{x^{4}}{8} - \\frac{x^{6}}{16} - \\frac{5 x^{8}}{128} + O\\left(x^{10}\\right)$" ], "text/plain": [ "1 - x**2/2 - x**4/8 - x**6/16 - 5*x**8/128 + O(x**10)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nsimplify(series((1-x**2)**(1/2), x, 0, 10))" ] }, { "cell_type": "markdown", "id": "73c17a21", "metadata": {}, "source": [ "積分する。多項式なので項ごとに積分できる:" ] }, { "cell_type": "code", "execution_count": 17, "id": "85882cad", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x - \\frac{x^{3}}{6} - \\frac{x^{5}}{40} - \\frac{x^{7}}{112} - \\frac{5 x^{9}}{1152} + O\\left(x^{11}\\right)$" ], "text/plain": [ "x - x**3/6 - x**5/40 - x**7/112 - 5*x**9/1152 + O(x**11)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nsimplify(integrate(series((1-x**2)**(1/2), x, 0, 10), x))" ] }, { "cell_type": "markdown", "id": "388d75a0", "metadata": {}, "source": [ "これらによって、$\\sin(x)$ の逆関数 $\\sin^{-1}(x) = \\arcsin(x)$ の級数展開はすぐに求められる:" ] }, { "cell_type": "code", "execution_count": 18, "id": "bc834fa6", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x + \\frac{x^{3}}{6} + \\frac{3 x^{5}}{40} + \\frac{5 x^{7}}{112} + \\frac{35 x^{9}}{1152} + O\\left(x^{11}\\right)$" ], "text/plain": [ "x + x**3/6 + 3*x**5/40 + 5*x**7/112 + 35*x**9/1152 + O(x**11)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arcsin_x = 2 * integrate(series((1-x**2)**(1/2), x, 0, 10), x) - expand(x * series((1-x**2)**(1/2), x, 0, 10))\n", "nsimplify(arcsin_x)" ] }, { "cell_type": "markdown", "id": "1a7c75a4", "metadata": {}, "source": [ "$0.1$ と $1$ のときの値を求めて検算する:" ] }, { "cell_type": "code", "execution_count": 19, "id": "ad2ad883", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(0.100167421161334, 0.100167421161560)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arcsin_x.removeO().subs(x,.1), asin(.1)" ] }, { "cell_type": "code", "execution_count": 20, "id": "f97589af", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(1.31669146825397, 1.57079632679490)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arcsin_x.removeO().subs(x,1.), asin(1.)" ] }, { "cell_type": "code", "execution_count": 21, "id": "29d91af0", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "X = np.linspace(-1, 1, 100)\n", "Y = [arcsin_x.removeO().subs(x,xi) for xi in X]\n", "plt.plot(X, Y)\n", "plt.plot(X, np.arcsin(X))" ] }, { "cell_type": "markdown", "id": "28551f31", "metadata": {}, "source": [ "SymPyの```series()```による検算:" ] }, { "cell_type": "code", "execution_count": 22, "id": "11987423", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x + \\frac{x^{3}}{6} + \\frac{3 x^{5}}{40} + \\frac{5 x^{7}}{112} + \\frac{35 x^{9}}{1152} + \\frac{63 x^{11}}{2816} + \\frac{231 x^{13}}{13312} + O\\left(x^{15}\\right)$" ], "text/plain": [ "x + x**3/6 + 3*x**5/40 + 5*x**7/112 + 35*x**9/1152 + 63*x**11/2816 + 231*x**13/13312 + O(x**15)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series(asin(x),x, 0, 15)" ] }, { "cell_type": "code", "execution_count": null, "id": "c3ce1940", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "19347cd3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "09354398", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ea9687d2", "metadata": {}, "source": [ "### Newtonの力業" ] }, { "cell_type": "markdown", "id": "cde41de7", "metadata": {}, "source": [ "恒等式 $\\sin^{-1}(\\sin(x)) = x$ がなりたつ。さらに、$\\sin(x)$ の級数展開を\n", "$\\sin(x) = a_{0} + a_{1} x + a_{2} x^2 + a_{3} x^3 + \\cdots$ とおいて、上で得られた $\\sin^{-1}(x)$ の級数展開式へ代入しする。変数 $x$ の係数が、一次のみ $1$、それ以外の次数では $0$ となることから、順次 $a_{0}, a_{1}, a_{2},...$ を求める。 \n", "\n", "$$\n", " \\begin{align}\n", " \\sin(x) &\\approx a_{0} \\\\\n", " \\sin(x) &\\approx a_{0} + a_{1} x \\\\\n", " \\sin(x) &\\approx a_{0} + a_{1} x + a_{2} x^2 \\\\\n", " \\sin(x) &\\approx a_{0} + a_{1} x + a_{2} x^2 + a_{3} x^3 \\\\\n", " \\end{align}\n", "$$" ] }, { "cell_type": "code", "execution_count": 23, "id": "ba9a5d27", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[[a0, 0],\n", " [a1, 0],\n", " [a2, 0],\n", " [a3, 0],\n", " [a4, 0],\n", " [a5, 0],\n", " [a6, 0],\n", " [a7, 0],\n", " [a8, 0],\n", " [a9, 0]]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a=symbols('a:11', Real=True)\n", "sin_x=a[0]+a[1]*x+a[2]*x**2+a[3]*x**3+a[4]*x**4+a[5]*x**5+a[6]*x**6+a[7]*x**7+a[8]*x**8+a[9]*x**9\n", "sol=[[a[0],0],[a[1],0],[a[2],0],[a[3],0],[a[4],0],[a[5],0],[a[6],0],[a[7],0],[a[8],0],[a[9],0]]\n", "sol" ] }, { "cell_type": "code", "execution_count": 24, "id": "fa5745e5", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sin_x.subs(sol)" ] }, { "cell_type": "code", "execution_count": 25, "id": "1d89d031", "metadata": { "tags": [] }, "outputs": [], "source": [ "ax=Symbol('ax', real=True)" ] }, { "cell_type": "code", "execution_count": 26, "id": "0bf48a7e", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[[a0, 0],\n", " [a1, ax],\n", " [a2, 0],\n", " [a3, 0],\n", " [a4, 0],\n", " [a5, 0],\n", " [a6, 0],\n", " [a7, 0],\n", " [a8, 0],\n", " [a9, 0]]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol[1][1]=ax\n", "sol" ] }, { "cell_type": "code", "execution_count": 27, "id": "ea54f96b", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle ax x$" ], "text/plain": [ "ax*x" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sin_x.subs(sol)" ] }, { "cell_type": "code", "execution_count": 28, "id": "89652bd9", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{35 ax^{9} x^{9}}{1152} + \\frac{5 ax^{7} x^{7}}{112} + \\frac{3 ax^{5} x^{5}}{40} + \\frac{ax^{3} x^{3}}{6} + ax x$" ], "text/plain": [ "35*ax**9*x**9/1152 + 5*ax**7*x**7/112 + 3*ax**5*x**5/40 + ax**3*x**3/6 + ax*x" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bx=nsimplify(expand(arcsin_x.removeO().subs(x, sin_x.subs(sol))))\n", "bx" ] }, { "cell_type": "markdown", "id": "3d197303", "metadata": {}, "source": [ "恒等式 $\\sin^{-1}(\\sin(x)) = x$ より、多項式の係数を比較すると、恒等式が成立する条件は $a_{x} = 1$ のとき。" ] }, { "cell_type": "code", "execution_count": 29, "id": "ac4336f9", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle ax - 1$" ], "text/plain": [ "ax - 1" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cx=poly(bx-x,x).all_coeffs()[::-1]\n", "cx[1]" ] }, { "cell_type": "markdown", "id": "d9939942-2d80-4fc2-a582-e55a3b10e747", "metadata": {}, "source": [ "### 解析的に解く" ] }, { "cell_type": "code", "execution_count": 30, "id": "115fa900", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[1]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(cx[1],ax)" ] }, { "cell_type": "markdown", "id": "e589da30", "metadata": {}, "source": [ "このように、$a_{0}$ から順に係数 $a_1$, $a_2$, $a_3$... を決めていくプログラムは次のようになる:" ] }, { "cell_type": "code", "execution_count": 31, "id": "ea29e1de", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sin(x) = ax\n", "a[0] = 0\n", "sin(x) = ax*x\n", "a[1] = 1\n", "sin(x) = ax*x**2 + x\n", "a[2] = 0\n", "sin(x) = ax*x**3 + x\n", "a[3] = -1/6\n", "sin(x) = ax*x**4 - x**3/6 + x\n", "a[4] = 0\n", "sin(x) = ax*x**5 - x**3/6 + x\n", "a[5] = 1/120\n", "sin(x) = ax*x**6 + x**5/120 - x**3/6 + x\n", "a[6] = 0\n", "sin(x) = ax*x**7 + x**5/120 - x**3/6 + x\n", "a[7] = -39682539682541/200000000000000000\n", "sin(x) = ax*x**8 - 39682539682541*x**7/200000000000000000 + x**5/120 - x**3/6 + x\n", "a[8] = 0\n", "sin(x) = ax*x**9 - 39682539682541*x**7/200000000000000000 + x**5/120 - x**3/6 + x\n", "a[9] = 137786596120411/50000000000000000000\n" ] }, { "data": { "text/latex": [ "$\\displaystyle \\frac{137786596120411 x^{9}}{50000000000000000000} - \\frac{39682539682541 x^{7}}{200000000000000000} + \\frac{x^{5}}{120} - \\frac{x^{3}}{6} + x$" ], "text/plain": [ "137786596120411*x**9/50000000000000000000 - 39682539682541*x**7/200000000000000000 + x**5/120 - x**3/6 + x" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol=[[a[0],0],[a[1],0],[a[2],0],[a[3],0],[a[4],0],[a[5],0],[a[6],0],[a[7],0],[a[8],0],[a[9],0]]\n", "\n", "for i in range(10):\n", " sol[i][1]=ax\n", " print(\"sin(x) =\", sin_x.subs(sol))\n", " bx=nsimplify(expand(arcsin_x.removeO().subs(x, sin_x.subs(sol))))\n", " cx=poly(bx-x,x).all_coeffs()[::-1]\n", " s=solve(cx[i],ax)\n", " print(\"a[{:d}] =\".format(i), s[0])\n", " sol[i][1]=s[0]\n", "\n", "nsimplify(sin_x.subs(sol))" ] }, { "cell_type": "code", "execution_count": 32, "id": "0d4ffeb6", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "5039.999999999833" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1/(39682539682541/200000000000000000)" ] }, { "cell_type": "code", "execution_count": 33, "id": "ca7f9456", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "362879.9999987318" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1/(137786596120411/50000000000000000000)" ] }, { "cell_type": "code", "execution_count": 34, "id": "3633257a", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "list(map(math.factorial, range(11)))" ] }, { "cell_type": "code", "execution_count": 35, "id": "a5da9c73", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x - \\frac{x^{3}}{6} + \\frac{x^{5}}{120} - \\frac{x^{7}}{5040} + \\frac{x^{9}}{362880} + O\\left(x^{10}\\right)$" ], "text/plain": [ "x - x**3/6 + x**5/120 - x**7/5040 + x**9/362880 + O(x**10)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# SymPyのseries()を呼び出して検算\n", "series(sin(x),x, 0, 10)" ] }, { "cell_type": "code", "execution_count": 36, "id": "ffc9ba2f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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SkpKDEnGxo0bzS7Jsn71q18ZRUVFZpdhimnTphl33nnnMddGjRpl/OQnPzGpImuqra01JBnLli0zuxRLaW1tNYYPH24sXbrUmDt3rnHPPfeYXZIl/PjHPzYuuOACs8s4Y4ys9KENGzaosrJSdrtdkyZNUnZ2thYuXKiSkhKzS7OMQ4cO6Y477tBLL72kmJgYs8uxvJaWFqWkpJhdxoBzu91av369FixYcMz1BQsWaOXKlSZVZU0tLS2SFJJ/T3pz11136YorrtAll1xidimW8vbbb2vq1Km64YYblJGRoUmTJunpp582u6xTIqz0ob1790qSFi9erJ/97Gd65513lJycrLlz56qxsdHk6sxnGIYWLVqkO++8U1OnTjW7HMvbs2ePfve73+nOO+80u5QBV19fL6/Xq8zMzGOuZ2ZmqqamxqSqrMcwDN1333264IILNG7cOLPLsYxXXnlFGzZs0JIlS8wuxXL27t2rJ598UsOHD9f777+vO++8Uz/4wQ/04osvml1arwgrp2Hx4sWy2Wy93tatWyefzydJ+ulPf6qvfe1rmjJlip577jnZbDa99tprJn8X/ed0X5/f/e53cjqdeuCBB8wueUCd7utztKqqKl1++eW64YYb9J3vfMekys1ns9mO+dwwjOOuhbK7775bW7Zs0csvv2x2KZZRUVGhe+65R3/84x8VFRVldjmW4/P5NHnyZD3yyCOaNGmSvvvd7+qOO+7Qk08+aXZpvQo3u4BgcPfdd+umm27q9TFDhgxRa2urJGnMmDGB6w6HQ8XFxYO6KfB0X59f/OIXWrVq1XFnUUydOlW33HKLXnjhhf4s0zSn+/r0qKqq0vz58zVz5kw99dRT/VydNaWlpSksLOy4UZTa2trjRltC1fe//329/fbbWr58ufLy8swuxzLWr1+v2tpaTZkyJXDN6/Vq+fLlevzxx+VyuRQWFmZihebKzs4+5j1KkkaPHq3XX3/dpIpOD2HlNKSlpSktLe2Uj5syZYocDod27dqlCy64QJLk8Xi0f/9+FRYW9neZpjnd1+e///u/9Ytf/CLweVVVlS677DK9+uqrmj59en+WaKrTfX0k/5LC+fPnB0bl7PbQHPyMjIzUlClTtHTpUl177bWB60uXLtXVV19tYmXmMwxD3//+9/XGG2/o008/VVFRkdklWcrFF1+srVu3HnPtm9/8pkaNGqUf//jHIR1UJGn27NnHLXUvLS21/HsUYaUPJSQk6M4779TPf/5z5efnq7CwUI8++qgk6YYbbjC5OvMVFBQc83lcXJwkaejQofxmKH94mzdvngoKCvTrX/9adXV1gfuysrJMrMwc9913n2677TZNnTo1MMpUXl4ekj08R7vrrrv05z//WW+99Zbi4+MDo0+JiYmKjo42uTrzxcfHH9e/Exsbq9TUVPp6JP3whz/UrFmz9Mgjj+jrX/+61qxZo6eeesryo7iElT726KOPKjw8XLfddps6Ozs1ffp0ffzxx0pOTja7NFjcBx98oLKyMpWVlR0X3owQPBz9xhtvVENDgx566CFVV1dr3Lhxeu+99yz/G2B/6+ktmDdv3jHXn3vuOS1atGjgC0JQOf/88/XGG2/ogQce0EMPPaSioiI99thjuuWWW8wurVc2IxR/CgIAgKARmhPiAAAgaBBWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApf0/pdrlizHGJWAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# グラフプロットで可視化\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "X = np.linspace(-2*np.pi, 2*np.pi, 100)\n", "Y = [sin_x.subs(sol).subs(x,xi) for xi in X]\n", "plt.plot(X, Y)\n", "plt.plot(X, np.sin(X))" ] }, { "cell_type": "code", "execution_count": null, "id": "6a5c6ecb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c956f177", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b386cb5d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d9755274-0037-49f3-a927-92365ac7a8ee", "metadata": { "tags": [] }, "source": [ "### 力業の続き: 代数的に解く" ] }, { "cell_type": "markdown", "id": "e466c4e1", "metadata": {}, "source": [ "以下、力業で解く場合の続き:" ] }, { "cell_type": "markdown", "id": "b9d97b02", "metadata": {}, "source": [ "定数項は $0$ なので、$a_{0} = 0$" ] }, { "cell_type": "code", "execution_count": 133, "id": "26dda30e", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{35 a_{1}^{9} x^{9}}{1152} + \\frac{5 a_{1}^{7} x^{7}}{112} + \\frac{3 a_{1}^{5} x^{5}}{40} + \\frac{a_{1}^{3} x^{3}}{6} + a_{1} x$" ], "text/plain": [ "35*a1**9*x**9/1152 + 5*a1**7*x**7/112 + 3*a1**5*x**5/40 + a1**3*x**3/6 + a1*x" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nsimplify(expand(asx.removeO().subs(x, a[1]*x)))" ] }, { "cell_type": "code", "execution_count": 117, "id": "fa1dffdf", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle a_{1}$" ], "text/plain": [ "a1" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poly(nsimplify(expand(asx.removeO().subs(x, a[1]*x))),x).all_coeffs()[::-1][1]" ] }, { "cell_type": "markdown", "id": "8517d3d2", "metadata": {}, "source": [ "$x$ の係数は $1$ なので、$a_{1} = 1$" ] }, { "cell_type": "code", "execution_count": 134, "id": "4d90d532", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{35 a_{2}^{9} x^{18}}{1152} + \\frac{35 a_{2}^{8} x^{17}}{128} + \\frac{35 a_{2}^{7} x^{16}}{32} + \\frac{5 a_{2}^{7} x^{14}}{112} + \\frac{245 a_{2}^{6} x^{15}}{96} + \\frac{5 a_{2}^{6} x^{13}}{16} + \\frac{245 a_{2}^{5} x^{14}}{64} + \\frac{15 a_{2}^{5} x^{12}}{16} + \\frac{3 a_{2}^{5} x^{10}}{40} + \\frac{245 a_{2}^{4} x^{13}}{64} + \\frac{25 a_{2}^{4} x^{11}}{16} + \\frac{3 a_{2}^{4} x^{9}}{8} + \\frac{245 a_{2}^{3} x^{12}}{96} + \\frac{25 a_{2}^{3} x^{10}}{16} + \\frac{3 a_{2}^{3} x^{8}}{4} + \\frac{a_{2}^{3} x^{6}}{6} + \\frac{35 a_{2}^{2} x^{11}}{32} + \\frac{15 a_{2}^{2} x^{9}}{16} + \\frac{3 a_{2}^{2} x^{7}}{4} + \\frac{a_{2}^{2} x^{5}}{2} + \\frac{35 a_{2} x^{10}}{128} + \\frac{5 a_{2} x^{8}}{16} + \\frac{3 a_{2} x^{6}}{8} + \\frac{a_{2} x^{4}}{2} + a_{2} x^{2} + \\frac{35 x^{9}}{1152} + \\frac{5 x^{7}}{112} + \\frac{3 x^{5}}{40} + \\frac{x^{3}}{6} + x$" ], "text/plain": [ "35*a2**9*x**18/1152 + 35*a2**8*x**17/128 + 35*a2**7*x**16/32 + 5*a2**7*x**14/112 + 245*a2**6*x**15/96 + 5*a2**6*x**13/16 + 245*a2**5*x**14/64 + 15*a2**5*x**12/16 + 3*a2**5*x**10/40 + 245*a2**4*x**13/64 + 25*a2**4*x**11/16 + 3*a2**4*x**9/8 + 245*a2**3*x**12/96 + 25*a2**3*x**10/16 + 3*a2**3*x**8/4 + a2**3*x**6/6 + 35*a2**2*x**11/32 + 15*a2**2*x**9/16 + 3*a2**2*x**7/4 + a2**2*x**5/2 + 35*a2*x**10/128 + 5*a2*x**8/16 + 3*a2*x**6/8 + a2*x**4/2 + a2*x**2 + 35*x**9/1152 + 5*x**7/112 + 3*x**5/40 + x**3/6 + x" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nsimplify(expand(asx.removeO().subs(x, x+a[2]*x**2)))" ] }, { "cell_type": "code", "execution_count": 119, "id": "666b737a", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle a_{2}$" ], "text/plain": [ "a2" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poly(nsimplify(expand(asx.removeO().subs(x, x+a[2]*x**2))),x).all_coeffs()[::-1][2]" ] }, { "cell_type": "markdown", "id": "1bd3d3b7", "metadata": {}, "source": [ "$a_{2} = 0$" ] }, { "cell_type": "code", "execution_count": 135, "id": "9ed36eb2", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{35 a_{3}^{9} x^{27}}{1152} + \\frac{35 a_{3}^{8} x^{25}}{128} + \\frac{35 a_{3}^{7} x^{23}}{32} + \\frac{5 a_{3}^{7} x^{21}}{112} + \\frac{245 a_{3}^{6} x^{21}}{96} + \\frac{5 a_{3}^{6} x^{19}}{16} + \\frac{245 a_{3}^{5} x^{19}}{64} + \\frac{15 a_{3}^{5} x^{17}}{16} + \\frac{3 a_{3}^{5} x^{15}}{40} + \\frac{245 a_{3}^{4} x^{17}}{64} + \\frac{25 a_{3}^{4} x^{15}}{16} + \\frac{3 a_{3}^{4} x^{13}}{8} + \\frac{245 a_{3}^{3} x^{15}}{96} + \\frac{25 a_{3}^{3} x^{13}}{16} + \\frac{3 a_{3}^{3} x^{11}}{4} + \\frac{a_{3}^{3} x^{9}}{6} + \\frac{35 a_{3}^{2} x^{13}}{32} + \\frac{15 a_{3}^{2} x^{11}}{16} + \\frac{3 a_{3}^{2} x^{9}}{4} + \\frac{a_{3}^{2} x^{7}}{2} + \\frac{35 a_{3} x^{11}}{128} + \\frac{5 a_{3} x^{9}}{16} + \\frac{3 a_{3} x^{7}}{8} + \\frac{a_{3} x^{5}}{2} + a_{3} x^{3} + \\frac{35 x^{9}}{1152} + \\frac{5 x^{7}}{112} + \\frac{3 x^{5}}{40} + \\frac{x^{3}}{6} + x$" ], "text/plain": [ "35*a3**9*x**27/1152 + 35*a3**8*x**25/128 + 35*a3**7*x**23/32 + 5*a3**7*x**21/112 + 245*a3**6*x**21/96 + 5*a3**6*x**19/16 + 245*a3**5*x**19/64 + 15*a3**5*x**17/16 + 3*a3**5*x**15/40 + 245*a3**4*x**17/64 + 25*a3**4*x**15/16 + 3*a3**4*x**13/8 + 245*a3**3*x**15/96 + 25*a3**3*x**13/16 + 3*a3**3*x**11/4 + a3**3*x**9/6 + 35*a3**2*x**13/32 + 15*a3**2*x**11/16 + 3*a3**2*x**9/4 + a3**2*x**7/2 + 35*a3*x**11/128 + 5*a3*x**9/16 + 3*a3*x**7/8 + a3*x**5/2 + a3*x**3 + 35*x**9/1152 + 5*x**7/112 + 3*x**5/40 + x**3/6 + x" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nsimplify(expand(asx.removeO().subs(x, x+a[3]*x**3)))" ] }, { "cell_type": "code", "execution_count": 136, "id": "664b6e4a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0,\n", " 1,\n", " 0,\n", " a3 + 1/6,\n", " 0,\n", " a3/2 + 3/40,\n", " 0,\n", " a3**2/2 + 3*a3/8 + 5/112,\n", " 0,\n", " a3**3/6 + 3*a3**2/4 + 5*a3/16 + 35/1152,\n", " 0,\n", " 3*a3**3/4 + 15*a3**2/16 + 35*a3/128,\n", " 0,\n", " 3*a3**4/8 + 25*a3**3/16 + 35*a3**2/32,\n", " 0,\n", " 3*a3**5/40 + 25*a3**4/16 + 245*a3**3/96,\n", " 0,\n", " 15*a3**5/16 + 245*a3**4/64,\n", " 0,\n", " 5*a3**6/16 + 245*a3**5/64,\n", " 0,\n", " 5*a3**7/112 + 245*a3**6/96,\n", " 0,\n", " 35*a3**7/32,\n", " 0,\n", " 35*a3**8/128,\n", " 0,\n", " 35*a3**9/1152]" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poly(nsimplify(expand(asx.removeO().subs(x, x+a[3]*x**3))),x).all_coeffs()[::-1]" ] }, { "cell_type": "code", "execution_count": 137, "id": "a675d899", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle a_{3} + \\frac{1}{6}$" ], "text/plain": [ "a3 + 1/6" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poly(nsimplify(expand(asx.removeO().subs(x, x+a[3]*x**3))),x).all_coeffs()[::-1][3]" ] }, { "cell_type": "markdown", "id": "4e2c6160", "metadata": {}, "source": [ "$a_{3} + \\frac{1}{6} = 0$ より、$a_{3} = - \\frac{1}{6}$" ] }, { "cell_type": "code", "execution_count": 142, "id": "de3bce5c", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle a_{5} - \\frac{1}{120}$" ], "text/plain": [ "a5 - 1/120" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poly(nsimplify(expand(asx.removeO().subs(x, x-1/6*x**3+a[5]*x**5))),x).all_coeffs()[::-1][5]" ] }, { "cell_type": "markdown", "id": "9d564e97", "metadata": {}, "source": [ "$a_{5} - \\frac{1}{120} = 0$ より、$a_{5} = \\frac{1}{120}$" ] }, { "cell_type": "markdown", "id": "12e07b74", "metadata": {}, "source": [ "$a_7$ は計算精度がたりない・・・" ] }, { "cell_type": "code", "execution_count": 153, "id": "b694898c", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle a_{7} + \\frac{39682539682541}{200000000000000000}$" ], "text/plain": [ "a7 + 39682539682541/200000000000000000" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poly(nsimplify(expand(asx.removeO().subs(x, x-1/6*x**3+1/120*x**5+a[7]*x**7))),x).all_coeffs()[::-1][7]" ] }, { "cell_type": "code", "execution_count": 151, "id": "aedd8389", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5039.999999999833" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "200000000000000000/39682539682541" ] }, { "cell_type": "code", "execution_count": null, "id": "8cd0bcf3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "59e3aea7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f41f8982", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }