{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br />\n",
    "\n",
    "<div style=\"text-align: center;\">\n",
    "<font size=\"7\">数値計算試験問題</font>\n",
    "</div>\n",
    "<br />\n",
    "<div style=\"text-align: right;\">\n",
    "<font size=\"4\">2025/07/09 実施</font>\n",
    "<br />\n",
    "<font size=\"4\">cc by Shigeto R. Nishitani 2025</font>\n",
    "</div>"
   ]
  },
  {
   "attachments": {
    "ex25_func_plot.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2分法，Newton-Raphson法の収束性：25点\n",
    "\n",
    "以下の関数$f(x)$の解を区間$x=0..1$において\n",
    "2分法とNewton-Raphson法で求めよ．\n",
    "また，それぞれの収束挙動をlogで同時プロットし比較せよ．\n",
    "$$\n",
    "f(x) = {\\mathrm e}^{-x}-2 \\,{\\mathrm e}^{-2 x}\n",
    "$$\n",
    "\n",
    "![ex25_func_plot.png](attachment:ex25_func_plot.png)\n",
    "\n",
    "<!---\n",
    "![ex25_func_plot.png](https://ist.ksc.kwansei.ac.jp/~nishitani/CompAInfo/25s/num_recipe/ex25_func_plot.png)\n",
    "-->"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "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 matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "np.set_printoptions(formatter={'float': '{: 0.3f}'.format})\n",
    "\n",
    "def func(x):\n",
    "    return np.exp(-x)-2*np.exp(-2*x)\n",
    "    \n",
    "def df(x):\n",
    "    return -np.exp(-x)+4*np.exp(-2*x)\n",
    "\n",
    "x1=0.0\n",
    "x2=10.0\n",
    "x = np.linspace(x1,x2,101)\n",
    "y = func(x)\n",
    "plt.plot(x,y)\n",
    "plt.grid()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6931471805599453"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy.optimize import fsolve\n",
    "x0 = fsolve(func, 0.0)[0]\n",
    "x0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5 1.0 -0.12922822263025124 0.09720887469821693\n",
      "0.5 0.75 -0.12922822263025124 0.026106232444155053\n",
      "0.625 0.75 -0.037748165201389905 0.026106232444155053\n",
      "0.6875 0.75 -0.0028476136385520157 0.026106232444155053\n",
      "0.6875 0.71875 -0.0028476136385520157 0.012319438522702841\n",
      "0.6875 0.703125 -0.0028476136385520157 0.004914818435146795\n",
      "0.6875 0.6953125 -0.0028476136385520157 0.0010791491791509178\n",
      "0.69140625 0.6953125 -0.0008727414902032216 0.0010791491791509178\n",
      "0.69140625 0.693359375 -0.0008727414902032216 0.00010606345573976883\n",
      "0.6923828125 0.693359375 -0.00038262248448772684 0.00010606345573976883\n",
      "0.69287109375 0.693359375 -0.0001381005851953665 0.00010606345573976883\n",
      "0.693115234375 0.693359375 -1.5973857910744904e-05 0.00010606345573976883\n",
      "0.693115234375 0.6932373046875 -1.5973857910744904e-05 4.505597243553705e-05\n",
      "0.693115234375 0.69317626953125 -1.5973857910744904e-05 1.4543851040493827e-05\n",
      "0.693145751953125 0.69317626953125 -7.143049408631086e-07 1.4543851040493827e-05\n",
      "0.693145751953125 0.6931610107421875 -7.143049408631086e-07 6.914947667135962e-06\n",
      "0.693145751953125 0.6931533813476562 -7.143049408631086e-07 3.1003650182714892e-06\n",
      "0.693145751953125 0.6931495666503906 -7.143049408631086e-07 1.1930409525851005e-06\n",
      "0.693145751953125 0.6931476593017578 -7.143049408631086e-07 2.3937073434510125e-07\n",
      "[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [0.6931471805599453, 0.1931471805599453, 0.056852819440054714, 0.06814718055994529, 0.005647180559945286, 0.025602819440054714, 0.009977819440054714, 0.0021653194400547138, 0.0017409305599452862, 0.00021219444005471377, 0.0007643680599452862, 0.0002760868099452862, 3.194618494528623e-05, 9.012412755471377e-05, 2.9088971304713773e-05, 1.4286068202862268e-06, 1.3830182242213773e-05, 6.200787710963773e-06, 2.3860904453387732e-06, 4.787418125262732e-07]]\n"
     ]
    }
   ],
   "source": [
    "x1=0.0\n",
    "x2=1.0\n",
    "f1,f2=func(x1),func(x2)\n",
    "list_bisec=[[0],[abs(x1-x0)]]\n",
    "for i in range(1,20):\n",
    "    x=(x1+x2)/2\n",
    "    f=func(x)\n",
    "    list_bisec[0].append(i)\n",
    "    list_bisec[1].append(abs(x-x0))\n",
    "    if (f*f1>=0.0):\n",
    "        x1,f1=x,f\n",
    "    else:\n",
    "        x2,f2=x,f\n",
    "    print(x1,x2,f1,f2)\n",
    "\n",
    "print(list_bisec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.43959456578860423 -0.18594117646945774\n",
      "0.6225751274995484 -0.03923434945945836\n",
      "0.6863677428631368 -0.0034243718517862343\n",
      "0.6930789079672248 -3.413979240607379e-05\n",
      "0.6931471735689144 -3.495515543683325e-09\n",
      "0.6931471805599454 5.551115123125783e-17\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n",
      "0.6931471805599453 0.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],\n",
       " [1.0,\n",
       "  0.25355261477134106,\n",
       "  0.07057205306039693,\n",
       "  0.0067794376968084435,\n",
       "  6.827259272046415e-05,\n",
       "  6.9910308653220454e-09,\n",
       "  1.1102230246251565e-16,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0,\n",
       "  0.0]]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1=1.0\n",
    "f1=func(x1)\n",
    "list_newton=[[0],[x1]]\n",
    "for i in range(1,20):\n",
    "    x1 = x1-f1/df(x1)\n",
    "    f1 =func(x1)\n",
    "    print(x1,f1)\n",
    "    list_newton[0].append(i)\n",
    "    list_newton[1].append(abs(x1-x0))\n",
    "    \n",
    "list_newton"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "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": [
    "import matplotlib.pyplot as plot\n",
    "\n",
    "X=list_bisec[0]\n",
    "Y=list_bisec[1]\n",
    "plt.plot(X,Y)\n",
    "\n",
    "X=list_newton[0]\n",
    "Y=list_newton[1]\n",
    "plt.plot(X,Y)\n",
    "\n",
    "plt.yscale(\"log\")\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# グラム・シュミットの直交化法とQR分解：25点"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " ## グラム・シュミットの直交化法 \n",
    " \n",
    "与えられたベクトルから正規直交基底を作るアルゴリズムとして\n",
    "グラム・シュミットの直交化法がある．\n",
    "\n",
    "その手順は，ベクトル$v_1,\\ldots,v_n$が与えられたとすると\n",
    " 1. $ u_1 = v_1 $\n",
    " 1. $ u_2 = v_2 - \\frac{u_1^{\\rm T} v_2}{u_1^{\\rm T} u_1} u_1$\n",
    " 1. $ u_n = v_n - \\frac{u_1^{\\rm T} v_n}{u_1^{\\rm T} u_1} u_1 - \n",
    "\\frac{u_2^{\\rm T} v_n}{u_2^{\\rm T} u_2} u_2 - \\cdots $\n",
    "$- \\frac{u_{n-1}^{\\rm T} v_{n}}{u_{n-1}^{\\rm T} u_{n-1}} u_{n-1} \n",
    "= v_n - \\sum_{i=1}^{n-1}\\frac{u_{i}^{\\rm T} v_{n}}{u_{i}^{\\rm T} u_{i}} u_{i} \n",
    "$\n",
    "\n",
    "で互いに直交した基底を求め，これらを\n",
    "$$\n",
    "e_i= \\frac{u_i}{(u_i^{\\rm T} u_i)^{1/2}}\n",
    "$$\n",
    " \n",
    "によって正規化すれば，$\\{e_1, e_2, \\ldots, e_n\\}$ が正規直交基底となる．\n",
    "\n",
    "次の$\\mathbb{R}^4$ベクトルから正規直交基底を作れ．\n",
    " \\begin{equation*}\n",
    "    v_1=\\left(\n",
    "    \\begin{array}{@{\\,}c@{\\,}}\n",
    "      1 \\\\\n",
    "      1 \\\\\n",
    "      0 \\\\\n",
    "      0\n",
    "    \\end{array}\n",
    "    \\right),~\n",
    "    v_2=\\left(\n",
    "    \\begin{array}{@{\\,}c@{\\,}}\n",
    "      0\\\\\n",
    "      1\\\\\n",
    "      1\\\\\n",
    "      0\n",
    "    \\end{array}\n",
    "    \\right),~\n",
    "    v_3=\\left(\n",
    "    \\begin{array}{@{\\,}c@{\\,}}\n",
    "      0\\\\\n",
    "      0\\\\\n",
    "      1\\\\\n",
    "      1\n",
    "    \\end{array}\n",
    "    \\right)\n",
    "  \\end{equation*}\n",
    "\n",
    " \n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 1 0 0]\n",
      "[-0.500  0.500  1.000  0.000]\n",
      "[-0.333  0.333  1.667  1.000]\n",
      "[ 0.707  0.707  0.000  0.000] [-0.408  0.408  0.816  0.000] [-0.167  0.167  0.833  0.500]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "np.set_printoptions(formatter={'float': '{: 0.3f}'.format})\n",
    "v1=np.array([1,1,0,0])\n",
    "v2=np.array([0,1,1,0])\n",
    "v3=np.array([0,0,1,1])\n",
    "u1=v1\n",
    "u2=v2-np.dot(u1,v2)/np.dot(u1,u1)*u1\n",
    "u3=v3-np.dot(u1,v3)/np.dot(u1,u1)*u1--np.dot(u2,v3)/np.dot(u2,u2)*u2\n",
    "print(u1)\n",
    "print(u2)\n",
    "print(u3)\n",
    "e1=u1/np.linalg.norm(u1)\n",
    "e2=u2/np.linalg.norm(u2)\n",
    "e3=u3/np.linalg.norm(u3)\n",
    "print(e1,e2,e3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.707,  0.707,  0.000,  0.000],\n",
       "       [-0.408,  0.408,  0.816,  0.000],\n",
       "       [ 0.289, -0.289,  0.289,  0.866]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def gram_schmidt(vectors):\n",
    "    basis = []\n",
    "    for v in vectors:\n",
    "        w = v - sum(np.dot(v, b)*b for b in basis)\n",
    "        if (w > 1e-10).any():  \n",
    "            basis.append(w / np.linalg.norm(w))\n",
    "    return np.array(basis)\n",
    "\n",
    "gram_schmidt([v1,v2,v3])\n",
    "\n",
    "# https://aikostudio.hatenablog.com/entry/2023/08/28/074308#google_vignette\n",
    "# PythonによるGram-Schmidt正規直交化プロセス"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## QR分解\n",
    "\n",
    "次の行列AのQR分解を求めよ．\n",
    "\n",
    " \\begin{equation*}\n",
    "    A=\\left(\n",
    "        \\begin{array}{@{\\,}rrr@{\\,}}\n",
    "         1 & 0 & 0\\\\\n",
    "         1 & 1 & 0\\\\\n",
    "         0 & 1 & 1\\\\\n",
    "         0 & 0 & 1\\\\\n",
    "        \\end {array}\n",
    "\\right)\n",
    "  \\end{equation*}\n",
    "\n",
    "Gram-Schmidtで求めた正規直交基底と比べよ．"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 0 0]\n",
      " [1 1 0]\n",
      " [0 1 1]\n",
      " [0 0 1]]\n",
      "[[-0.707  0.408 -0.289]\n",
      " [-0.707 -0.408  0.289]\n",
      " [-0.000 -0.816 -0.289]\n",
      " [-0.000 -0.000 -0.866]]\n",
      "[[-1.414 -0.707  0.000]\n",
      " [ 0.000 -1.225 -0.816]\n",
      " [ 0.000  0.000 -1.155]]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "np.set_printoptions(formatter={'float': '{: 0.3f}'.format})\n",
    "A=np.transpose(np.array([[1,1,0,0],[0,1,1,0],[0,0,1,1]]))\n",
    "print(A)\n",
    "Q,R = np.linalg.qr(A)\n",
    "print(Q)\n",
    "print(R)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 常微分方程式：25点\n",
    "フォーミュラEと呼ばれるEV車(電気自動車)のレースでは，\n",
    "停止時から毎時100キロメートルまでの加速時間は1.86秒となる．\n",
    "これは，普通のF1よりも3割速いらしい．\n",
    "日経(2025/6/4)\n",
    "\n",
    "1. 空気抵抗などの規格化した抵抗が速度の0.5として，この加速性能を達成するためには何G程度の推力が必要となるか小数点以下二桁程度で求めよ．\n",
    "1. F1で使われる車両とフォーミュラEで使われる車両の重量はほぼ同じである．\n",
    "抵抗も同じとして，クラッチロスなどがないと仮定して，F1車の推力を求めよ．\n",
    "1. 結果を検討せよ．\n",
    "\n",
    "注: 例えば「2Gの推力」とは機体(普通はロケット)の自重の2倍の力で推進していることを表し，加速度は重力加速度(9.8m/sec^2)の2倍になるとします．"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def my_plot(xx,vv,tt):\n",
    "    plt.plot(tt,xx,color='b',linestyle='--',label='position')\n",
    "    plt.plot(tt,vv,color='r',label='velocity')\n",
    "    plt.legend()\n",
    "    plt.show()\n",
    "    \n",
    "def euler2(x0,v0):\n",
    "    v1=v0+(-cc*v0+g)*dt\n",
    "    x1=x0+v0*dt\n",
    "    return [x1,v1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "27.783363945996378\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": [
    "g, dt, cc=2.19*9.8,0.01,0.5\n",
    "tt,xx,vv=[0.0],[0.0],[0.0]\n",
    "t=0.0\n",
    "for i in range(0,186):\n",
    "    t += dt\n",
    "    x,v=euler2(xx[-1],vv[-1])\n",
    "    tt.append(t)\n",
    "    xx.append(x)\n",
    "    vv.append(v)\n",
    "print(xx[-1])\n",
    "my_plot(xx,vv,tt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "27.77777777777778"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "100*10**3/60/60"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "27.84534403977935\n"
     ]
    }
   ],
   "source": [
    "g, dt, cc=1.41*9.8,0.01,0.5\n",
    "tt,xx,vv=[0.0],[0.0],[0.0]\n",
    "t=0.0\n",
    "for i in range(0,int(186*1.3)):\n",
    "    t += dt\n",
    "    x,v=euler2(xx[-1],vv[-1])\n",
    "    tt.append(t)\n",
    "    xx.append(x)\n",
    "    vv.append(v)\n",
    "print(xx[-1])\n",
    "#my_plot(xx,vv,tt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.5531914893617023"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2.19/1.41"
   ]
  },
  {
   "attachments": {
    "moores_law_plot.png": {
     "image/png": "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fRITE5k5cyZPPPEE9913H7fffjsffPABP/vZz7jxxhsDHn/s2LH07t2bxYsXU1JSwuHDh5kxYwbZ2dlkZWUBsHLlSnbu3Mknn3yCc47rrruO1atXk5iYyIIFC8jKyuLYsWOkp6fTqVOnWrdZRAIr7Yh+asNTfH3ka85NPJdx6eNiooMaYjVAQJ0twXv++efTq1cvAG655RaefvppAN8v/I8//pitW7f69ikqKqJHjx5s376d5ORkLrzwQt9r586de9LxP/jgA1555RXAc4vTM844g/3795fZZ+XKlaxcuZKOHTsCcPjwYXbu3MmhQ4cYPHgwp556KuC5dCUideva1tfGTEAoL3YDRB0twWtmAZ+XLrrnnKNv377Mnz+/zH6lf/0Hg3OOiRMncuedd5Ypf/LJJ4N2DhGR2OyDqMMleL/44gvWrl0LwKuvvsqll15aZnv37t356KOP2LVrFwBHjhxhx44dtGnThtzcXD777DOAkwJIqZ///Of8+c9/Bjwd3gcPHjxpyfD+/fszb948X99Gfn4+BQUFXH755SxZsoTCwkIOHTrEW2+9Vev2ikj9FZsBog6X4E1JSeG5556jbdu27N+/n7vvvrvM9mbNmpGRkcGIESNITU31XV6Kj49n7ty5XHvttaSnp9O8efOAx3/qqaf417/+Rfv27enUqRNbt26ladOm9OrVi0suuYTx48fTr18/brrpJnr06EH79u0ZOnQohw4dIj09nRtvvJG0tDSuvvpqunTpUuv2ikj9peW+qyE3N5eBAweSnZ0d1nqEQyS8/yJSOS33LSIiIaEAUQ2tWrWql9mDiNRPChAiIhKQAoSIiASkACEiIgEpQIiISEAKENVgZtxyyy2+58eOHaNZs2a+ZbtLrVu3joYNG/LGG2/U6jgiIuEUswGiLm4DmJiYSHZ2NoWFhQC89957JCUlldmnpKSE+++/n379+tXqOCIi4RaTAaL0NoB7juzB4Xy3AQxGkLjmmmtYtsxznPnz5zNixIgy25955hluuOGGCmdKV+U4n3zyCT169KBjx4707NnTt2z3nDlzGDVqFACbN2/mkksu4Ycffqh1m0REAonJAFGXtwEcPnw4CxYs4OjRo2zatIlu3br5tuXn57N48eKTlt+o7nHatGnDhx9+yMaNG/njH//IAw88AMC4cePYtWsXixcvZuTIkbzwwgu+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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ムーアの法則：25点\n",
    "\n",
    "次の図の青点は13種類のマイクロプロセッサの発売年と，それぞれに含まれるトランジスタ数$N$を対数スケールで表示している．\n",
    "\n",
    "![moores_law_plot.png](attachment:moores_law_plot.png)\n",
    "<!--- \n",
    "![moores_law_plot.png](https://ist.ksc.kwansei.ac.jp/~nishitani/CompAInfo/25s/num_recipe/moores_law_plot.png) \n",
    "-->\n",
    "\n",
    "それぞれのデータは次の配列で与えられる．\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "list_year=[1971,1972,1974,1978,1982,1985,1989,1993,1997,1999,2000,2002,2003]\n",
    "list_cpu_num=[2250,2500,5000,29000,120000,275000,1180000,3100000,7500000,\n",
    "         24000000,42000000,220000000,410000000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "このデータに対して，以下のモデルを用いて最小二乗法による直線当てはめを求めよ．\n",
    "$$\n",
    "\\log_{10}N = \\theta_1 + \\theta_2(t-1970)\n",
    "$$\n",
    "ここで，$t$は年，$N$はトランジスタ数である．\n",
    "なお，$\\theta_{1}$ はモデルが予測する1970年におけるトランジスタ数の対数，\n",
    "$10^{\\theta_2}$はモデルが予測する毎年のトランジスタ数の増加率である．\n",
    "\n",
    "1. そのモデルを用いて2024年のマイクロプロセッサ中のトランジスタ数を予測せよ．\n",
    "1. Apple M4 Max(2024)のトランジスタ数(約100億，$100\\times10^9$)と比較せよ．\n",
    "\n",
    "この予測は「集積回路のトランジスタ数は1年半から2年でおよそ2倍になる」というムーアの法則を満たしている．\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "array1=np.ones(13)\n",
    "array2=np.array(list_year)-1970\n",
    "AA=np.column_stack((array1, array2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def logarithmic(x):\n",
    "    return np.log10(x)\n",
    "\n",
    "bb=np.vectorize(logarithmic)(list_cpu_num)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 逆行列の求め方のヒント\n",
    "最小二乗法のデザイン行列($AA$)の逆行列の求め方にはいろいろあるがどれもこの問題では一致する．\n",
    "どれか好きなのを使ってください．\n",
    "\n",
    "### 正規⽅程式(Normal Equations)による解\n",
    "テキストで紹介している方法．\n",
    "$$\n",
    "AA^{-1} = (AA^{\\rm T}. AA)^{-1}\n",
    "$$\n",
    "\n",
    "ただし，$Ax=b$の解$x$は，\n",
    "$$\n",
    "x= AA^{-1} (AA^{\\rm T} b)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "AA_inv=np.linalg.inv(np.dot(np.transpose(AA),AA))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3.126,  0.154])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(AA_inv, np.dot(np.transpose(AA),bb))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### QR分解による解\n",
    "\n",
    "先ほどのQR分解を用いると以下の通り求められる．\n",
    "\n",
    "$$\n",
    "AA = Q.R \\\\\n",
    "AA^{-1} = R^{-1} Q^{\\rm T} \\\\\n",
    "x = AA^{-1} . b\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-0.277 -0.417]\n",
      " [-0.277 -0.392]\n",
      " [-0.277 -0.344]\n",
      " [-0.277 -0.246]\n",
      " [-0.277 -0.148]\n",
      " [-0.277 -0.075]\n",
      " [-0.277  0.023]\n",
      " [-0.277  0.120]\n",
      " [-0.277  0.218]\n",
      " [-0.277  0.267]\n",
      " [-0.277  0.291]\n",
      " [-0.277  0.340]\n",
      " [-0.277  0.364]]\n",
      "[[-3.606 -65.177]\n",
      " [ 0.000  40.975]]\n"
     ]
    }
   ],
   "source": [
    "Q,R = np.linalg.qr(AA)\n",
    "print(Q)\n",
    "print(R)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "AA_inv=np.dot(np.linalg.inv(R), np.transpose(Q))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3.126,  0.154])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(AA_inv, bb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### pseudo inverseによる解\n",
    "linalgには優決定方程式(縦長行列)の (Moore-Penrose) 擬似逆行列(pseudo-inverse of a matrix)を計算する関数としてpinvが用意されている．内部ではSVD(singular value decomposition)を使っている．\n",
    "``` python\n",
    "pseudo_inv = np.linalg.pinv(AA)\n",
    "```\n",
    "で求めたpseudo_invを$b$に左から掛けると求められる．ん？そうか．"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 3.126  0.154]\n"
     ]
    }
   ],
   "source": [
    "pseudo_inv = np.linalg.pinv(AA)\n",
    "theta = pseudo_inv.dot(bb)\n",
    "print(theta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fd8b87a5ee0>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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fRITE5k5cyZPPPEE9913H7fffjsffPABP/vZz7jxxhsDHn/s2LH07t2bxYsXU1JSwuHDh5kxYwbZ2dlkZWUBsHLlSnbu3Mknn3yCc47rrruO1atXk5iYyIIFC8jKyuLYsWOkp6fTqVOnWrdZRAIr7Yh+asNTfH3ka85NPJdx6eNiooMaYjVAQJ0twXv++efTq1cvAG655RaefvppAN8v/I8//pitW7f69ikqKqJHjx5s376d5ORkLrzwQt9r586de9LxP/jgA1555RXAc4vTM844g/3795fZZ+XKlaxcuZKOHTsCcPjwYXbu3MmhQ4cYPHgwp556KuC5dCUideva1tfGTEAoL3YDRB0twWtmAZ+XLrrnnKNv377Mnz+/zH6lf/0Hg3OOiRMncuedd5Ypf/LJJ4N2DhGR2OyDqMMleL/44gvWrl0LwKuvvsqll15aZnv37t356KOP2LVrFwBHjhxhx44dtGnThtzcXD777DOAkwJIqZ///Of8+c9/Bjwd3gcPHjxpyfD+/fszb948X99Gfn4+BQUFXH755SxZsoTCwkIOHTrEW2+9Vev2ikj9FZsBog6X4E1JSeG5556jbdu27N+/n7vvvrvM9mbNmpGRkcGIESNITU31XV6Kj49n7ty5XHvttaSnp9O8efOAx3/qqaf417/+Rfv27enUqRNbt26ladOm9OrVi0suuYTx48fTr18/brrpJnr06EH79u0ZOnQohw4dIj09nRtvvJG0tDSuvvpqunTpUuv2ikj9peW+qyE3N5eBAweSnZ0d1nqEQyS8/yJSOS33LSIiIaEAUQ2tWrWql9mDiNRPChAiIhKQAoSIiASkACEiIgEpQIiISEAKENVgZtxyyy2+58eOHaNZs2a+ZbtLrVu3joYNG/LGG2/U6jgiIuEUswGiLm4DmJiYSHZ2NoWFhQC89957JCUlldmnpKSE+++/n379+tXqOCIi4RaTAaL0NoB7juzB4Xy3AQxGkLjmmmtYtsxznPnz5zNixIgy25955hluuOGGCmdKV+U4n3zyCT169KBjx4707NnTt2z3nDlzGDVqFACbN2/mkksu4Ycffqh1m0REAonJAFGXtwEcPnw4CxYs4OjRo2zatIlu3br5tuXn57N48eKTlt+o7nHatGnDhx9+yMaNG/njH//IAw88AMC4cePYtWsXixcvZuTIkbzwwgu+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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def fit_func(x, theta1, theta2):\n",
    "    return 10**(theta1+theta2*x)\n",
    "\n",
    "y_fit = np.vectorize(fit_func)(array2, *theta)\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "fig, ax=plt.subplots()\n",
    "ax.plot(list_year, list_cpu_num, 'o', label='Data')\n",
    "ax.plot([2024], [277060328872.69775], 'x', label='predicted')\n",
    "ax.plot([2024], [100*10**9], 'o', label='M4 Max')\n",
    "ax.plot(list_year,y_fit,  'r-', label='Fitted curve')\n",
    "ax.set_yscale(\"log\")\n",
    "ax.axis([1970,2030,10**3,10**12])\n",
    "ax.legend(loc='upper left')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "277060328872.69775"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fit_func(2024-1970, *theta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.3609322215377413"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(100*10**9)/fit_func(2024-1970, *theta)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$10^{\\theta_2 x} = 2$を解く．"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.9547402315842934"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.log10(2)/0.154"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Apple M4 Max(最新のTSMC 3nmで作られたプロセッサー)においても，外挿値の0.4倍程度であり，2025年時点でもトランジスタ数は予測通りに増加している．"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "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.5"
  },
  "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": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
