{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# フィボナッチ数列\n",
    "\n",
    "授業担当：劉雪峰"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 数列の定義と作成\n",
    "\n",
    "フィボナッチ数列（Fibonacci sequence）は、次のように再帰的に定義されます。\n",
    "\n",
    "- $F_1 = 1$\n",
    "- $F_2=1$\n",
    "- $F_n = F_{n-1} + F_{n-2}\\quad \\quad  (n\\geq 3)$\n",
    "\n",
    "フィボナッチ数列の項を具体的に書くと、\n",
    "$$\n",
    "1,1,2,3,5,8,13, \\cdots\n",
    "$$\n",
    "\n",
    "<div style=\"border: 1px solid #FFF;padding:20px\">\n",
    "\n",
    "<h3>フィボナッチ数列と兎の問題</h3>\n",
    "\n",
    "\n",
    "フィボナッチ数列は、以下の兎の問題に例えられることが多いです。\n",
    "<ul>\n",
    "<li>1つがいの兎は、産まれて2か月後から毎月1つがいの兎を産む。</li>\n",
    "\n",
    "<li> 兎が死ぬことはない。</li>\n",
    "\n",
    "<li> この条件のもとで、産まれたばかりの1つがいの兎は1年の間に何つがいの兎になるか？</li>\n",
    "\n",
    "</ul>\n",
    "\n",
    "毎月のつがい数（F(n)）について、これまでにいる兎（前月のつがい数=F(n-1)）＋2ヶ月前の兎が新しく産む兎（2ヶ月前のつがい数=F(n-2)）となっています。即ち、$F(n)=F(n-1)+F(n-2)$です。よって、フィボナッチ数列が現れていることがわかります。\n",
    "\n",
    "</div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## フィボナッチ数列を作成するプログラム\n",
    "\n",
    "フィボナッチ数列の第10項まで作成してみます。\n",
    "\n",
    "- ``\n",
    "F=[1,1]\n",
    "``\n",
    "は2つの成分をもつ配列を作成します。配列の各成分は１です。\n",
    "\n",
    "- 配列の最初の値と2番目の値はそれぞれ $F[0], F[1]$ で表されます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第1月のつがい数は1です。\n",
      "第2月のつがい数は1です。\n",
      "第3月のつがい数は2です。\n",
      "第4月のつがい数は3です。\n",
      "第5月のつがい数は5です。\n",
      "第6月のつがい数は8です。\n",
      "第7月のつがい数は13です。\n",
      "第8月のつがい数は21です。\n",
      "第9月のつがい数は34です。\n",
      "第10月のつがい数は55です。\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#演習1\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "N=10\n",
    "n_list=range(1,N+1)\n",
    "F=[1,1]\n",
    "print(\"第%d月のつがい数は%dです。\"%(1,F[0]))\n",
    "print(\"第%d月のつがい数は%dです。\"%(2,F[1]))\n",
    "\n",
    "#第3月からのつがい数(F[2],F[3],...,F[N-1])はforループで作成します。\n",
    "for n in range(2,N):\n",
    "    F.append(F[n-1]+F[n-2])\n",
    "    print(\"第%d月のつがい数は%dです。\"%(n+1,F[n]))\n",
    "    \n",
    "plt.plot(n_list,F,'r.-')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習 1\n",
    "\n",
    "$N=10,15,20,25$に対して数列を考察しなさい。\n",
    "\n",
    "- 第$N$項までのフィボナッチ数列$F$を作りなさい。\n",
    "- 数列$F$のグラフを描きなさい。\n",
    "\n",
    "以下のことを考えてください。\n",
    "\n",
    "- 数列は発散しますか？\n",
    "- フィボナッチ数列のグラフは次のどの関数のグラフに似ていますか？　\n",
    "\n",
    "$$f(x)=x^a, f(x)=a^x, f(x)=\\log(x)$$  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#ここにコードを書いてください。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. フィボナッチ数列の式を推定する\n",
    "\n",
    "以下のコードでは、数列Fのlog値を計算してグラフを描いています。$\\log(F)$のグラフはどのような関数のグラフに近いでしょうか？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#演習2\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "\n",
    "N=10\n",
    "F=[1,1]\n",
    "n_list=[1,2]\n",
    "for n in range(2,N):\n",
    "    F.append(F[n-1]+F[n-2])\n",
    "    n_list.append(n+1)\n",
    "\n",
    "log_F=[]\n",
    "for n in range(N):\n",
    "    log_F.append(math.log(F[n]))\n",
    "plt.plot(n_list, log_F, marker='o')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習 2\n",
    "\n",
    "- (2.1) $\\log(F)$に当てはまる直線(フィッティング直線)を求めてください。即ち、$\\log(F)$のグラフに近い直線$y=ax+b$の係数$a$と$b$を求めてください。解く方法は自由です。\n",
    "\n",
    "$$\n",
    "\\log(F_n)\\approx a\\times n+b\n",
    "$$\n",
    "\n",
    "- (2.2) $n$ ~ $\\log(F_n)$ のグラフは直線に近いので、$F_n$を以下のように近似できます。\n",
    "\n",
    "$$\n",
    "\\log(F_n)\\approx a \\times n+b \\Rightarrow \n",
    "F_n \\approx \\exp(a)^n \\times \\exp(b)\n",
    "$$\n",
    "- (2.3) $c:=\\exp(b), r:=\\exp(a)$とおく。$n$の値が大きくなる時、$c$と$r$の値を計算してください。また、$r$の値と黄金比との関係を検討してください。\n",
    "\n",
    "$$\n",
    "\\mbox{黄金比}=\\frac{\\sqrt{5}+1}{2}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 補足 1：多くの点に当てはまる直線 y=ax+b の係数 a と b を求める方法\n",
    "\n",
    "良さそうな$a,b$に対応する直線$y=ax+b$のグラフを描いて、それを$n$ ~ $\\log(F_n)$のグラフと比較し、より良い近似になる係数$a,b$の値を見つけます。\n",
    "\n",
    "例えば、「$a=0.45,b=-0.40$」に対応する直線のグラフを描いてみます。\n",
    "係数$a,b$の値を調整しながら、もっと良い$a,b$の値を推定してください。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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hwkToHnzRl96Z00nHerrIhI5CupYNWMGtGsH48e7+eiyMjcnHSYtU5JP6nURiZx6g9oYM8EYs8cYsz4aBUk9du2Cn/wE+vSB886DFStg6FA444ywfkxudjrJSU1qvZac1ITc7PSwfo6I1C+UjnoSoGeMvWat657btoX33nPz0StXupuHEdA7I43BfTqSVtNBp6UkM7hPR3pnpEXk80SkbvU+8GKtXWyMaRWFWqQuf/875ORASQlce617cKVNm4h/bO+MNHpnpFFSUsKjd3aP+OeJyPEZa239b3JBPdta2+EE78kBcgBSU1M7T506NVw1eqKiooJmHu+DYQ4d4oJp02g1aRI2KYktDz3ErhtvbNCa6Mbww1j4icajNo3HEY0Zi6ysrNXW2szjftNaW+8X0ApYH8p7rbV07tzZxrri4mJvC1i1ytpOnawFa/v0sTYQ8KwUz8fCZzQetWk8jmjMWACrbB2ZqlUffvPll5CbC1ddBZ9+CtOnu6+WLb2uTEQ8ok2Z/GThQjcX/fHHcP/98MILbktSEUlooSzPexN4H0g3xuwwxvSLfFkJ5vPP4d573TroJk2guBjGjlVIiwgQ2qqPO6JRSEKyFt55Bx59FD77DPLy4Pe/h2Q9VCIiR2jqwys7drhzC2fNcmuh586FTp28rkpEfEg3E6OtutqdV9iundubY9gwWL5cIS0idVJHHU0ffOBuEi5d6uajx4yBiy/2uioR8Tl11NFw8CA8+6zbinTDBpg4EebNU0iLSEjUUUfaihVw331ud7vbboORIyE11euqRCSGKKgjpaLCreAYOdI9rDJzJtx6a0g/WlAaYGjhZnaWB2mZkkxudro2QxJJYArqSJg7Fx58ELZtg4cfdjvdnXVWSD96+Aisw6erHD4CC1BYiyQozVGH02efQd++cOONbi300qXw8sshhzToCCwR+TYFdThYC2+84faKfustePJJWLsWunU76UvpCCwROZaCurG2bYObb4Y774RLLoE1a+Dpp+G00xp0OR2BJSLHUlA3VFUVjBoF7dvD4sXupuGyZdChzi27Q6IjsETkWLqZ2BAbNrgld8uXQ8+e8OqrcNFFYbn04RuGWvUhIocpqE/G11/DoEFHVnFMmQI//zkYE9aPOXwElogIKKhD95e/uC560ya46y4YMQJatPC6KhFJAJqjrs/+/fDII3D11XDgAMyZA3/6k0JaRKJGQX0is2e7m4WvvAK//KWbm+7Z0+uqRCTBaOrjePbsoe0f/gBFRW4VxzvvQJcuXlclIglKHfXRrIXJk6FtW1osWQLPPAOrVyukRcRTCurDtm6F7Gy45x5o25ZV48a5TZW+8x2vKxORBKegPnTIreDo0MGti37lFVi8mC/DtC5aRKSxEnuOet06t+Ru1Sq45RYX0hde6HVVIiK1JGZH/dVX8MQTkJkJn3ziNlKaNUshLSK+lHgd9aJFkJMDH37o5qOHD4fmzb2uSkSkTonTUe/bBw88AN27Q2WlOwF84kSFtIj4XmIEdUGB2yt6/HgYONCdX3jDDV5XJSISkvie+ti1Cx59FKZPdyeAv/sudO7sdVUiIiclPjtqa+G116BdO/cY+ODBsHKlQlpEYlL8ddQffeRuFhYXw7XXwrhx0KaN11WJiDRY/HTUhw7B889Dx47uOKxx49xeHQppEYlx8dFRr1njHlwpLYU+feCll6BlS6+rEhEJi9juqL/8En7zG7jqKvj0U3fTcPp0hbSIxJXY7aiLitxc9JYtcP/98MILkJLidVUiImEXex31F19Av35w/fVwyinupuHYsQppEYlbsRPU1sK0ae7BlcmTIS/PbarUvbvXlYmIRFRsTH0EAtC/P8yc6dZCz50LnTp5XZWISFT4u6OuroZXX3UPrsybB8OGuT2jFdIikkD821Fv3uxuEi5Z4vblGDMGLr7Y66pERKLOfx31wYPw3HNw+eWwfr3b4W7ePIW0iCQsf3XUK1a4B1fKyuC222DkSEhN9boqERFPhdRRG2N6GmM2G2M+MsY8HolC3lu0gS9/eC27tu7kt33/QMFvh3sS0gWlAboNKaIssI9uQ4ooKA1EvQYRkaPV21EbY5oALwM9gB3ASmPMLGvtxnAVUVAaIG/BdjJ7/47SlpdRcdoZzMovA6B3Rlq4Pia0OvLLCFZWwYUQKA+S50EdIiJHC6Wjvgr4yFr7sbX2IDAV6BXOIoYWbiZYWcWS1ldScdoZAAQrqxhauDmcHxNyHUfzog4RkaMZa+2J32DMT4Ge1tr7an7fF+hirX3kmPflADkAqampnadOnRpyEWWBfXV+r2Pa2SFfp7GOriM1GXYHvanDbyoqKmjWrJnXZfiGxqM2jccRjRmLrKys1dbazON9L2w3E621Y4GxAJmZmbb7STwx+MSQIgLlwW+9npaSzKN3hn6dxjq6jsc6HmJ42ame1OE3JSUlnMy/z3in8ahN43FEpMYilKmPAHDhUb+/oOa1sMnNTic5qUmt15KTmpCbnR7Oj4mZOkREjhZKR70SaGOMaY0L6NuBn4eziMM36oYWbmZneZCWKcnkZqdH/Qbe0XXAv0jzqA4RkaPVG9TW2kPGmEeAQqAJMMFauyHchfTOSPNFIB6uo6SkJKGnO0TEP0Kao7bW/hn4c4RrERGR4/DfI+QiIlKLglpExOcU1CIiPqegFhHxuXqfTGzQRY3ZC2wL+4Wj61zgM6+L8AmNRW0aj9o0Hkc0Ziwusta2ON43IhLU8cAYs6quxzkTjcaiNo1HbRqPIyI1Fpr6EBHxOQW1iIjPKajrNtbrAnxEY1GbxqM2jccRERkLzVGLiPicOmoREZ9TUIuI+JyC+ijGmAuNMcXGmI3GmA3GmAFe1+QHxpgmxphSY8xsr2vxkjEmxRjzjjHmA2PMJmPMD7yuyUvGmF/X/DlZb4x50xhzutc1RZMxZoIxZo8xZv1RrzU3xsw3xvy95p/nhOOzFNS1HQIes9a2A74P9DfGtPO4Jj8YAGzyuggfGAnMtdZeBlxBAo+JMSYN+CWQaa3tgNsC+XZvq4q6SUDPY157HFhorW0DLKz5faMpqI9ird1lrV1T8+t/4f4ger9JtoeMMRcANwPjva7FS8aYs4FrgNcArLUHrbXlnhblvVOBZGPMqcAZwE6P64kqa+1i4PNjXu4FTK759WSgdzg+S0FdB2NMKyAD+KvHpXjtReA3QLXHdXitNbAXmFgzDTTeGNPU66K8Yq0NAMOAT4BdwD5r7Txvq/KFVGvtrppffwqkhuOiCurjMMY0A6YDv7LW7ve6Hq8YY24B9lhrV3tdiw+cClwJjLbWZgAHCNNfa2NRzdxrL9z/wFoCTY0xd3lblb9Yt/Y5LOufFdTHMMYk4UL6dWttvtf1eKwbcKsx5h/AVOA6Y8wUb0vyzA5gh7X28N+w3sEFd6K6Adhqrd1rra0E8oGuHtfkB7uNMecD1PxzTzguqqA+ijHG4OYgN1lrR3hdj9estXnW2gusta1wN4qKrLUJ2TVZaz8FthtjDh9Jfz2w0cOSvPYJ8H1jzBk1f26uJ4Fvrh5lFvCLml//ApgZjosqqGvrBvTFdY5ra75u8roo8Y1HgdeNMX8DOgGDvC3HOzV/s3gHWAOU4bIkoR4lN8a8CbwPpBtjdhhj+gFDgB7GmL/j/tYxJCyfpUfIRUT8TR21iIjPKahFRHxOQS0i4nMKahERn1NQi4j4nIJaRMTnFNQiIj73/2MI9/W6pOdSAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#補足1\n",
    "x_list=range(1,N+1)\n",
    "a=0.45; b=-0.40\n",
    "y_list=[]\n",
    "for x in x_list:\n",
    "     y_list.append(a*x+b)\n",
    "plt.scatter(n_list, log_F, marker='o')\n",
    "plt.plot(x_list, y_list, \"r-\")\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 補足 2：2点を通る直線 y=ax+b の係数 a と b を求める方法\n",
    "\n",
    "2点$(x_1,y_1), (x_2,y_2)$を通る直線を求めます。\n",
    " \n",
    " $$\n",
    " y = y_1 + (x-x_1)\\frac{y_2-y_1}{x_2-x_1} =   \\left(\\frac{y_2-y_1}{x_2-x_1} \\right) x +  \\left( y_1 -x_1 \\frac{y_2-y_1}{x_2-x_1} \\right)\n",
    " $$\n",
    " \n",
    " よって、2点の座標を使って、$y=ax+b$の係数$a,b$を求めることができます。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#補足2\n",
    "x1=2; x2=7\n",
    "y1=math.log(F[1]); y2=math.log(F[6])\n",
    "a=(y2-y1)/(x2-x1)\n",
    "b=y1-x1*a\n",
    "\n",
    "y_list=[]\n",
    "x_list=[x1,x2]\n",
    "for x in x_list:\n",
    "     y_list.append(a*x+b)\n",
    "\n",
    "plt.plot(n_list, log_F, 'o')\n",
    "plt.plot(x_list, y_list, \"r.-\")\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. [オプション] 最小二乗法による点列に当てはまる直線の計算方法\n",
    "\n",
    "\n",
    "### 最小二乗法とは \n",
    "\n",
    "*与えられた点列$(x_i,y_i)_{i=1}^N$に対して、一次関数$y=ax+b$を用いた良い近似となるように、残差の二乗和を最小とするような係数を決定する方法です。*\n",
    "\n",
    "### 定式化 ###\n",
    "\n",
    "数式で考えるとき、以下の式を最小化する$a,b$を求める問題となります。\n",
    "\n",
    "$$\n",
    "V(a,b)=\\sum_{i=1}^N (ax_i + b - y_i)^2\n",
    "$$\n",
    "\n",
    "### 解法 ###\n",
    "\n",
    "行列を利用して、上記の最小化問題を考えます。\n",
    "\n",
    "$$\n",
    "\\mathbf{x}=\\left(\\begin{array}{c} x_1 \\\\ x_2 \\\\ \\vdots \\\\ x_N \\end{array}\\right),\\quad \n",
    "\\mathbf{y}=\\left(\\begin{array}{c} y_1 \\\\ y_2 \\\\ \\vdots \\\\ y_N \\end{array}\\right)\n",
    "$$\n",
    "\n",
    "$$\n",
    "V(a,b)= (a \\mathbf{x}  + b - \\mathbf{y})^T ( a \\mathbf{x}  + b - \\mathbf{y})\n",
    "$$\n",
    "さらに、以下の$A$と$\\alpha$を定義します。\n",
    "$$\n",
    "\\mathbf{A}=\\left(\\begin{array}{cc} x_1 & 1 \\\\ x_2 & 1 \\\\ \\vdots  & \\vdots \\\\ x_N  & 1 \\end{array}\\right),\\quad \n",
    "\\alpha = \\left(\\begin{array}{c} a  \\\\ b \\end{array}\\right)\n",
    "$$\n",
    "このとき、$a \\mathbf{x} + b = A\\alpha $なので、\n",
    "\n",
    "$$\n",
    "V(\\alpha)=(A \\alpha - \\mathbf{y})^T ( A \\alpha- \\mathbf{y})\n",
    "$$\n",
    "\n",
    "2変数関数$V(\\alpha)$が最小値を取るとき、$V$の$\\alpha=(a,b)$に関する微分は$0$になります。即ち、以下の式が成り立ちます。\n",
    "\n",
    "$$\n",
    "(A^TA) \\alpha - A^T \\mathbf{y} = 0\n",
    "$$\n",
    "\n",
    "$A^TA$が正則であれば、$\\alpha$を次のように算出できます。\n",
    "\n",
    "$$\n",
    "\\alpha = (A^TA)^{-1} (A^T\\mathbf{y})\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習 3（オプション）\n",
    "\n",
    "1) 以下の点列に対して、点列に当てはまる直線$y=ax+b$を求めなさい。\n",
    "\n",
    "- x=1, y=4.44357\n",
    "- x=2, y=5.07900\n",
    "- x=3, y=6.53377\n",
    "- x=4, y=8.57194\n",
    "\n",
    "2) $n$~$\\log(F_n)$のグラフに当てはまる直線を求めなさい。\n",
    "<!-- \n",
    "a=1.5;\n",
    "b=2;\n",
    "x=1:4;\n",
    "y=a *x + b + rand(1,4);\n",
    "printf(\"x=%d, y=%5.5f\\n\", [x;y])\n",
    "-->\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以下は演習3の解答例です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a= 1.3839000000000024  b= 2.697499999999991\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#演習3\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "A=np.ones((4,2)) #全ての成分が1であるような4*2の行列を作成する。\n",
    "y=np.zeros((4,1)) #全ての成分が0であるような4*1の行列を作成する。\n",
    "\n",
    "A[:,0]=np.array([1,2,3,4])\n",
    "y[:,0]=np.array([4.444, 5.079, 6.534, 8.572])\n",
    "\n",
    "x_list=A[:,0] #行列の第1列を取って、xにする。\n",
    "y_list=y[:,0]\n",
    "plt.plot(x_list,y_list,'o')\n",
    "\n",
    "alpha=np.linalg.inv(A.T@A)@(A.T@y) #A.T@y:行列Aの転置とベクトルyの積、@:行列の積計算の演算子\n",
    "\n",
    "a=alpha[0,0]; b=alpha[1,0];\n",
    "print(\"a=\",a,\" b=\",b)\n",
    "\n",
    "new_y_list=a*x_list+b #Numpyの配列は一体として四則演算などの数学関数の計算ができます。\n",
    "\n",
    "plt.plot(x_list,new_y_list,'r-.')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. [オプション] フィボナッチ数列の式を求める\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### $F_n$の式を推定（１） ###\n",
    "\n",
    "$F_n = cr^n$を仮定して、この式を$F_n=F_{n-1}+F_{n-2}$に代入すると、$r$に関する方程式が得られます。\n",
    "\n",
    "$$\n",
    "r^2=r+1\n",
    "$$\n",
    "\n",
    "よって、\n",
    "$$\n",
    "r=\\frac{1+\\sqrt{5} }{2}, \\quad r=\\frac{1-\\sqrt{5} }{2}\n",
    "$$\n",
    "\n",
    "数列$F_n$は無限大に発散するので、$r$は正の値を取ります。よって、\n",
    "$$\n",
    "F_n = c \\left[\\frac{1+\\sqrt{5} }{2}\\right]^n\n",
    "$$\n",
    "上記の式はフィボナッチ数列になりませんが、フィボナッチ数列の主要項となります。\n",
    "\n",
    "### $F_n$の式を推定（２） ###\n",
    "\n",
    "$Z_n:=F_n - c \\left[ \\frac{1+\\sqrt{5} }{2}\\right]^n$を考察します。\n",
    "\n",
    "$Z_n$は次の式を満たします。\n",
    "\n",
    "$$\n",
    "Z_n =Z_{n-1} + Z_{n-2}\n",
    "$$\n",
    "よって、\n",
    "$Z_n$も以下の形式を持っていると推定できます。\n",
    "$$\n",
    "Z_n = \\tilde{c} \\tilde{r}^n\n",
    "$$\n",
    "この式を満たす$\\tilde{r}$は$\\tilde{r}^2=\\tilde{r}+1$の解となりますので、\n",
    "$$\n",
    "\\tilde{r} = \\frac{1-\\sqrt{5} }{2}\n",
    "$$\n",
    "よって、$F_n$に関して新しい式が考えられます。\n",
    "$$\n",
    "F_n = c \\left[ \\frac{1+\\sqrt{5} }{2} \\right] ^n + \\tilde{c} \\left[\\frac{1-\\sqrt{5} }{2}\\right]^n\n",
    "$$\n",
    "条件$F_1=1,F_2=1$を利用すると、以下のことが分かります。\n",
    "\n",
    "$$\n",
    "c = \\frac{1}{\\sqrt{5}}, \\quad \n",
    "\\tilde{c} = - \\frac{1}{\\sqrt{5}}\n",
    "$$\n",
    "\n",
    "即ち、\n",
    "\n",
    "$$\n",
    "F_n = \\frac{1}{\\sqrt{5}} \\left( \\left[ \\frac{1+\\sqrt{5} }{2} \\right] ^n -  \\left[\\frac{1-\\sqrt{5} }{2}\\right]^n \\right)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. コーヒーブレイク\n",
    "\n",
    "フィボナッチ数列によるゴールデン･スパイラルの図を描く。Nを他の値にしてグラフを描いてみよう。\n",
    "<!--\n",
    "N=8;\n",
    "F=[1,1];\n",
    "for k=3:N\n",
    "   F(k) = F(k-1) +F(k-2);\n",
    "end\n",
    "\n",
    "x_indx=[-(-1).^(1:(N/2));(-1).^(1:(N/2))];\n",
    "y_indx=[-(-1).^(1:(N/2));-(-1).^(1:(N/2))];\n",
    "\n",
    "x=[0];y=[0];\n",
    "\n",
    "hold on\n",
    "text( -1,0.3, '1');\n",
    "for k=1:N-1\n",
    "  x(k+1)=x(k) + x_indx(k)*F(k+1);\n",
    "  y(k+1)=y(k) + y_indx(k)*F(k+1);\n",
    "  x1 = min(x(k), x(k+1));  x2 = max(x(k), x(k+1));\n",
    "  y1 = min(y(k), y(k+1));  y2 = max(y(k), y(k+1));\n",
    "  x_list = [x1,x2,x2,x1,x1];\n",
    "  y_list = [y1,y1,y2,y2,y1];\n",
    "  fill(x_list(1:4), y_list(1:4),k-1);\n",
    "  plot(x_list, y_list,'-');\n",
    "  plot([x(k),x(k+1)],[y(k),y(k+1)],'-');\n",
    "  text( (x1+x2)/2, (y1+y2)/2, num2str(F(k+1)));\n",
    "end\n",
    "daspect ([1 1])\n",
    "-->"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import math\n",
    "N=7\n",
    "N_list=range(1,N+1)\n",
    "F=[]\n",
    "x_indx=[]\n",
    "y_indx=[]\n",
    "for k in range(0,N+1):\n",
    "    if(k<2):\n",
    "        F.append(1) \n",
    "    else:\n",
    "        F.append(F[k-1] +F[k-2]) \n",
    "    y_indx.append(pow(-1,int(k/2)))\n",
    "    x_indx.append(pow(-1,int((k+1)/2)))\n",
    "    \n",
    "import matplotlib.patches as pat\n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)    \n",
    "\n",
    "x=[0];y=[0];\n",
    "#text( -1,0.3, '1');\n",
    "for k in range(0,N):\n",
    "    x.append(x[k]+ x_indx[k]*F[k+1])\n",
    "    y.append(y[k]+ y_indx[k]*F[k+1])\n",
    "    s1=90*(k-1)\n",
    "    x0=x[k]-F[k+1]*math.cos(s1/180*math.pi)\n",
    "    y0=y[k]-F[k+1]*math.sin(s1/180*math.pi)\n",
    "    c=pat.Arc( xy= (x0, y0), width=2*F[k+1], height=2*F[k+1],theta1=s1, theta2=s1+90)\n",
    "    ax.add_patch(c)\n",
    "    x_list = [x[k],x[k+1],x[k+1],x[k]]; #x座標のリスト\n",
    "    y_list = [y[k],y[k],y[k+1],y[k+1]]; #y座標のリスト\n",
    "    plt.fill(x_list,y_list,alpha=0.5)\n",
    "    plt.text((x[k]+x[k+1])/2, (y[k]+y[k+1])/2,'%d'%F[k+1])\n",
    "#plt.plot(x,y)\n",
    "\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "** Created by Xuefeng LIU, 2017/04/23, modified on 2018/04/22. **\n",
    "\n",
    "** The original matlab code is revised to python language by Wada Kaoru. 2020/04 **\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"border:1px dotted #4444FF;padding:10px\">\n",
    "計算機演習A・Bのノート　授業担当：劉雪峰\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "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.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
