{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 多項式による曲線の表現：ベジェ曲線\n",
    "\n",
    "CADなどの分野では、滑らかな曲線または曲面を表現するために多項式が多く使用されます。\n",
    "\n",
    "コンピュータで使用される文字のフォントも多項式で表されています。\n",
    "\n",
    "今回の授業では、バーンスタイン多項式（Bernstein polynomial）を紹介して、ベジェ曲線（Bézier curve）の作成方法を学びます。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. バーンスタイン多項式\n",
    "\n",
    "$n$ 次***バーンスタイン基底関数***は次のように定義されます。\n",
    "\n",
    "$$\n",
    "B_{i,n}(x) = {n \\choose i} x^{i} (1-x)^{n-i}, \\qquad i=0,\\ldots,n\n",
    "$$\n",
    "\n",
    "ここで ${n \\choose i}$ は**二項係数** $_nC_i$ を意味します。\n",
    "\n",
    "$\\{1,x,x^2,\\cdots, x^n \\}$ が $n$ 次多項式空間（ベクトル空間）の基底となることはよく知られています。\n",
    "$n$ 次バーンスタイン基底関数も $n$ 次の多項式空間の基底となっています。\n",
    "即ち、任意の $n$ 次多項式 $y(x)$ は基底関数 $B_{i,n}(x)$ の線形結合によって与えられます。\n",
    "\n",
    "$$\n",
    "y(x) = \\sum_{i=0}^{n} C_{i} B_{i,n}(x)\n",
    "$$\n",
    "\n",
    "上記の式で表される多項式は、$n$ 次の***バーンスタイン多項式***と呼ばれます。\n",
    "係数 $C_i$ は***バーンスタイン係数***、または***ベジェ係数***と呼ばれます。\n",
    "\n",
    "\n",
    "## 例1：バーンスタイン基底関数\n",
    "\n",
    "- 3次バーンスタイン基底関数のグラフを描画してください。\n",
    "\n",
    "$$\n",
    "B_{0,3} = (1-x)^3  , \\quad B_{1,3} = 3x(1-x)^2,　\\quad B_{2,3} = 3x^2(1-x) , \\quad  B_{3,3} = x^3\n",
    "$$\n",
    "\n",
    "- $1^3=(x+(1-x))^3$ の右辺を展開して、各項と上記の3次バーンスタイン基底関数を比較してください。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "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",
    "\n",
    "#[0,1]の分割点を作成します。\n",
    "x = np.linspace(0,1,101)\n",
    "\n",
    "color_list = [\"r\",\"g\",\"b\",\"k\"]\n",
    "\n",
    "B = []\n",
    "\n",
    "B.append( (1-x)**3 )\n",
    "B.append( 3*x*(1-x)**2 )\n",
    "B.append( 3*x**2*(1-x) )\n",
    "B.append( x**3 )\n",
    "\n",
    "for k in range(0,4): \n",
    "    plt.plot(x,B[k],color_list[k])\n",
    "    \n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## バーンスタイン多項式による曲線の表示\n",
    "\n",
    "\n",
    "バーンスタイン基底関数を用いて、基底の線形結合で得られる曲線を描いてみます。\n",
    "\n",
    "多項式の例：\n",
    "\n",
    "$$\n",
    "y(x)= 1\\cdot B_{0,3}(x) + 2\\cdot B_{1,3}(x) + 3\\cdot B_{2,3}(x)+ 1\\cdot B_{3,3}(x)\n",
    "$$\n",
    "\n",
    "特殊な多項式：　定数１をとる関数\n",
    "\n",
    "$$\n",
    "f(x)=B_{0,3}(x) + B_{1,3}(x) + B_{2,3}(x)+ B_{3,3}(x)  = \\sum_{i=0}^{3} B_{i,3}(x)\n",
    "$$\n",
    "\n",
    "特殊な多項式：　$y=x$の直線\n",
    "\n",
    "$$\n",
    "g(x)=0\\cdot B_{0,3}(x) + \\frac{1}{3}B_{1,3}(x) +  \\frac{2}{3}B_{2,3}(x) +  \\frac{3}{3} B_{3,3}(x) = \\sum_{i=0}^{3}\\frac{i}{3} B_{i,3}(x)\n",
    "$$\n",
    "\n",
    "\n",
    "### 補足\n",
    "\n",
    "plot関数を使って、複数のグラフを一括で描画することができます。\n",
    "\n",
    "```\n",
    "plot( x1_list, y1_list, option_1, x2_list, y2_list, option_2, ... )\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAzHUlEQVR4nO3dd1yV5f/H8deFKA7cgzRy5Z7kHqgglub+mppYWg7UvihKpaaWuUrLUVrOX/nNlSu1AFeRorh3aq4wd2pFboYI1++PG0WNpcC5z/g8Hw8eD7jPzTmfS/TtzXWu+/oorTVCCCFsn5PZBQghhMgcEuhCCGEnJNCFEMJOSKALIYSdkEAXQgg74WzWCxcpUkSXLl36qb73zp075MmTJ3MLsnIyZscgY3YMGRnz/v37/9ZaF03uMdMCvXTp0uzbt++pvjcsLAwvL6/MLcjKyZgdg4zZMWRkzEqpcyk9JlMuQghhJyTQhRDCTkigCyGEnTBtDj05cXFxXLx4kZiYmFTPy58/P8ePH7dQVZkjZ86cuLu7kz17drNLEULYKasK9IsXL5I3b15Kly6NUirF827dukXevHktWFnGaK2JjIzk4sWLlClTxuxyhBB2yqqmXGJiYihcuHCqYW6LlFIULlw4zd88hBAiI6wq0AG7C/P77HVcQgjrYVVTLkLYsqioKK5cucLff//NtWvX+Oeff7h9+zZRUVFERUURFxdHQkICCQkJZMuWjRw5cpAjRw5y585N/vz5yZcvH2fPnsXd3R03NzdcXV3lQkA8EQn0dLh8+TJ+fn6EhISkeE5ISAh79uxh3LhxFqxMWFJ8fDznzp3jxIkTnDx5ktOnT3PmzBnOnj3LpUuXuHHjRqa+nqurK6VKlaJUqVKULVuWSpUqUalSJapUqcIzzzwjYS/+RQI9HaZNm4afn1+q57Rp04YPPviA9957j9y5c1uoMpFVYmNjOXz4MHv27OHQoUMcOnSIo0ePPvI+SP78+SlTpgwVKlSgefPmFC9enOLFi1O0aFEKFSpEwYIFyZs3L7lz5yZXrly4uLiglEIpRUJCAnFxccTGxhIVFcWNGze4ceMGYWFhuLm5cfXqVS5dusS5c+c4d+4c4eHh3Lp168FrFytWDA8PD2rXrk2DBg1o2LAhRYsmeze4cCAS6A8ZPXo0hQoVYsiQIQCMGjWKYsWKsWrVKiZMmADAZ599xpEjR5g/fz5HjhzB19eXPXv2kDt3bry8vAgJCaFr164mjkI8jX/++Ydt27YRHh5OeHg4Bw8e5O7duwAULlyYmjVr8tZbb1G1alUqVapExYoVKVKkyFO/npOTEy4uLri4uJAvXz6eeeYZwJi2Se6WcK01ly9f5uTJkxw5coRDhw5x8OBBJk+ezL179wCoUKEC3t7e+Pj44O3tnaH6hG2y2kAfMmQIhw4dSvax+Ph4smXL9sTP6eHhweeff57i471796ZTp04MGTKEhIQEli1bxooVK1i4cCEuLi4ADB48GC8vL9asWcNHH33E3LlzH1yR16lTh/DwcAl0GxATE0N4eDihoaGEhoZy8OBBtNbkyJGDevXqMXjwYOrVq0e9evV47rnnTJ/eUEpRokQJSpQogbe394Pj0dHR7N+/nx07dhAeHs63337L3LlzUUpRv3592rZtS9u2balRo4bpYxBZz2oD3QylS5emcOHCHDx4kKtXr/LCCy8QGxv7yK+yTk5OfPPNN9SoUYP+/fvTuHHjB48VK1aMP/74w4zSRTpcvnyZ4OBg1q5dS2hoKFFRUWTPnp1GjRoxduxYvLy8qFu3Ljlz5jS71HTLlSsXnp6eeHp6MmzYMO7du8e+ffvYuHEja9eu5f333+f999+nXLlydO7cma5du+Lh4SHhbqesNtBTu5LOyhuL+vbtyzfffMOVK1fo3bs3uXLl+tf68d9++w1XV9d/hXdMTAy5cuXKkrrE0zl37hwrV65kzZo17Ny5E601pUqV4s0336R169Z4eXnZ1datzs7ONGjQgAYNGvDhhx9y5coVgoODWblyJZMnT2bSpElUrVqVnj178tprr/Hss8+aXbLIRFa3Dt1s//nPf9iwYQN79+6lZcuWVKhQgbNnzz54/MaNGwQEBLB161YiIyP57rvvHjx26tQpqlWrZkLV4mFXrlxh+vTpNGrUiNKlSzN06FCio6MZO3YsR44c4cyZM8ycOZM2bdrYVZgn55lnnsHPz48ff/yRK1euMHv2bPLnz8/w4cMpWbIkHTp0YP369cTHx5tdqsgEEuiPyZEjB97e3nTt2pVs2bKRJ08enn/+eSIiIgAIDAzE39+fChUq8PXXX/Pee+/x559/ArB582batGljZvkOKyYmhuXLl9OmTRvc3d0ZMmQIUVFRTJw4kdOnT3PgwAE++OADqlWr5rDTDUWKFGHAgAFs376dU6dOMXz4cHbt2kXr1q0pV64c06ZNy/Sll8LCtNamfNSuXVs/7tixY/86lpybN2+m67ynER8fr2vWrKlPnTr14Njq1av1qFGjUv2+K1eu6ObNm6d6TnrHl5zNmzc/9ffaqvSM+fDhwzogIEAXLFhQA9rd3V2PGDEiQ3/WZrL0zzk2NlavWLFCN23aVAM6b968esiQIfr8+fMWq0H+bj8ZYJ9OIVflCv0hx44do1y5cvj4+FC+fPkHx//zn/+QVru88+fPM3Xq1CyuUIBxNb548WIaNWpEjRo1mDNnDi1btuSnn37i7NmzfPzxx1SuXNnsMm1Cjhw56NKlC1u2bGHfvn20b9+eL7/8kueffx4/Pz9Onz5tdoniCUigP6RKlSr8/vvvyQZz3759U/3eunXr4uHhkUWVCYBLly4xatQonnvuOXr06EFkZCTTpk3jjz/+YOnSpbRo0eKplrMKQ+3atVm8eDERERH4+fmxaNEiKlSoQO/evTl3LsWuZ8KKpBnoSqnnlFKblVLHlFK/KqUGJ3OOUkrNUEpFKKUOK6VqZU25whHt27eP1157jdKlSzNp0iQ8PT0JDQ3lxIkTBAYGUrhwYbNLtCulSpVi5syZnDlzhsGDB/Ptt99Svnx5Bg0axNWrV80uT6QiPVfo94B3tNZVgAaAv1KqymPnvAyUT/zoB8zO1CqFw9Fas3v3bpo3b07dunUJCQkhICCAiIgI1qxZg4+Pj8O+uWkpxYsXZ9q0aURERNCrVy9mz55N+fLlmTRpkmwFbaXSDHSt9WWt9YHEz28Bx4HHF692ABYmztnvAgoopYpnerXC7sXHx7N8+XI8PDx47733OHXqFFOmTOHChQtMnTpVGoSYwN3dnblz5/Lrr7/i7e3NiBEjqFixIt999x3Ge3TCWqgn+YEopUoDW4FqWuubDx0PASZprbclfv0zMFxrve+x7++HcQWPm5tb7WXLlj3y/Pnz56dcuXJp1vG0t/6bLSIi4qmXhd2+fRtXV9dMrsh6xMfHExoaypIlS7hw4QLPPfccnTp1ok2bNg7Vts8Wfs4HDx5k5syZnD59mjp16jBo0CBKliz51M9nC2PObBkZs7e3936tdZ1kH0xp+cvjH4ArsB/olMxjIYDnQ1//DNRJ7fmsddliVpJli/8WFxenFyxYoMuVK6cBXbNmTb1ixQp97949ux1zamxlzHFxcfqLL77Q+fPn19mzZ9cffPCBjomJearnspUxZyZTly0qpbIDq4AlWuvVyZxyCXjuoa/dE4/ZnBkzZlC5cmVee+01vv/++zT3N3/33XfZtGmThaqzHwkJCaxcuZJq1arxxhtvkCdPHtasWcPBgwfp0qWLTf4G5kicnZ0ZOHAgJ0+e5NVXX2X8+PF4eHiwfft2s0tzaOlZ5aKAr4HjWutpKZwWBPRMXO3SALihtb6ciXVazKxZs/jpp59YsmQJn376Kf/9739TPX/QoEFMmjTJQtXZPq01GzZsoE6dOnTt2hVnZ2dWrVrFgQMH6Nixo7zRaWPc3NxYtGgR69evJzo6Gk9PTwYPHkxUVJTZpTmk9GzO1RjoARxRSh1KPDYSKAmgtZ4DrANaAxFAFNArw5UNGQIpbJ+bKz4enuYKzsMDUtn0a8CAAfz++++8/PLLvP7667i4uDzYU7pDhw688sor9OzZk7lz57J161aWLFlCqVKliIyM5MqVKw/2tBbJ27t3L8OHD2fz5s2UKVOGRYsW4evrK1fjdqBVq1YcPXqUkSNHMmPGDDZs2MDChQupX7++2aU5lPSsctmmtVZa6xpaa4/Ej3Va6zmJYU7i1I6/1vp5rXV1/dibobZizpw5lChRgs2bN1OsWDFq1UpaTj9v3jzGjRtHeHg4U6dO5YsvvnjwWK1ateRXzVScPXuWbt26Ua9ePY4cOcKMGTM4ceIEr7/+uoS5HXF1dWXGjBmEhoYSHR1No0aNGDNmzIMGHCLrWe32ualdSUdn4fa5912+fPmRfdDd3NwYN24c3t7erFmzhkKFCj14TPZBT97NmzeZOHEin332GU5OTrz//vsMHTqUfPnymV2ayEI+Pj4cOXKEgIAAxo4d+2D1UqlSpcwuze7Jrf8pSG4f9CNHjlC4cGHZBz0NCQkJzJ8//8FNKK+++iqnTp1i/PjxEuYOIn/+/CxYsIAlS5Zw+PBhPDw8WL06ufUUIjNJoKegcuXKD7bMBdizZw/r16/n4MGDTJkyhTNnzjx4TPZBT7Jjxw7q1atHnz59KFeuHHv37mXBggW4u7ubXZowQffu3Tl06BAVKlTglVde4Z133iEuLs7ssuyWBHoKmjZt+qDPZGxsLH5+fsyfP58SJUowdepUevfujdaauLg4IiIiqFMn+XX+juLPP/+kV69eNG7cmCtXrrBkyRK2bdvm8H8uAsqWLUt4eDiDBg1i2rRpeHt7c+mSTa5qtnoS6I85e/YsRYoUIXfu3LRo0YKff/4ZFxcXfvnllwdvkrZv357NmzejlCIkJITOnTvj7Gy9b0dkpfj4eGbOnEmFChVYsmQJw4cP58SJE3Tv3l2WIIoHcuTIwYwZM1i6dCmHDh2iTp067Nixw+yy7I4EeipGjhyZ5nrae/fu8c4771ioIuuyf/9+6tevz8CBA6lTpw6HDx9m0qRJDncbt0i/bt26sXv3blxdXfHy8uKrr74yuyS7IoGeCjc3N9q3b5/qOV26dKFAgQKWKchK3Lp1i4CAAOrVq8elS5dYunQpP/30E5UqVTK7NGEDqlatyp49e/D29sbPz48ZM2bI0sZMIoEunkhQUBBVqlThyy+/ZMCAARw/fpxu3brJ9Ip4IgULFmTt2rW8/fbbrFmzhg4dOnDr1i2zy7J5EugiXa5cuUKXLl3o0KEDBQoUYMeOHcycOdPhfjsRmcfZ2ZmpU6cSGBjIxo0b8fT05MKFC2aXZdMk0EWqtNYsXLiQKlWqEBwczEcffcSBAwdo0KCB2aUJO9G+fXvWrl3LmTNnaNiwIUeOHDG7JJslgf4EhgwZwtatW1M9p0WLFly7ds1CFWWtixcv0qZNG9544w0qV67MoUOHGDlypEPtTy4so2XLlmzfvh2tNU2aNGHLli1ml2STJNDTKTIykl27dtG0adNUz+vRowezZs2yUFVZQ2vN/PnzqVq1Klu2bGH69Ols3bpV3vQUWap69ers3LmT4sWL89JLL7Fq1SqzS7I5EujJGD9+PBUrVsTT0xNfX1+mTJnCqlWraNWqFQA3btygYsWKnDx5EgBfX1/+7//+DzB+fVy6dKlptWfUpUuXaNOmDX369MHDw4PDhw8TEBAgm2gJiyhZsuSDG9K6du3K//73P7NLsilWezdMKrvnEh+fKyt2zwWMLV5XrVrFL7/8QlxcHLVq1aJ27dps376dzp07A8Y+FV9++SVvvvkmgwcP5tq1a/j5+QHGu/exsbFERkbaVDd6rTXLli3D39+fmJgYpk+fzsCBA3Fykv/zhWUVLlyYH3/8kU6dOtG7d29u3rzJ4MGDzS7LJsi/1sds376dDh06kDNnTvLmzUu7du2Af++++OKLL1K9enX8/f3/dXOEre2+GBkZSbdu3ejevTsVK1bk0KFDBAQESJgL0+TJk4egoCA6derEkCFDGD9+vNkl2QSrvUJP7Ur61q3oLN8+93GP776YkJDA8ePHyZ07N9euXXtk8ylb2n1x48aN9OrVi7///puPP/6YoUOHOuw2BsK6uLi4sHz5cvr06cPo0aOJi4tj7Nixcs9DKuQS7DGNGzcmODiYmJgYbt++TUhICPDv3Rc/++wzKleuzLfffkuvXr0e7CCntebKlSuULl3ajPLTLTo6moCAAFq1akXBggXZvXs3I0aMkDAXVsXZ2Zn//e9/9O7dm/Hjx/P+++/fb0QvkiH/eh9Tt25d2rdvT40aNXBzc6N69erkz5+f+vXrM3fuXPr27cvJkyf56quv2LNnD3nz5qVp06ZMmDCBsWPHsn//fho0aGDVwXj48GF8fX05duwYgwcPZuLEiTbzG4VwPE5OTvzf//0f2bJl4+OPPyYhIYGPP/5YrtSTYb2pY6J3332XMWPGEBUVRdOmTalduza1atVixIgRXL9+nYoVK3L8+PEH50+bltQ7e9GiRWk2ljaL1prp06czfPhwChUqxIYNG2jZsqXZZQmRJicnJ+bMmYOTkxOTJk3CxcWFMWPGmF2W1ZFAT0a/fv04duwYMTExvPHGGw+2zZ06dSrnz59P9Xb3atWq4ePjY6FK0+/+fuXr1q2jbdu2zJ8//5E3eYWwdk5OTsyaNevBXLqLiwsjRowwuyyrIoGejG+//TbZ4+npYH5/+aI1CQ0NpUePHly7do0vvvgCf39/+XVV2CQnJyfmzZtHTEwMI0eOJGfOnAQGBppdltWwukDXWttl2JjxRs69e/f48MMPmThxIpUqVWLjxo3UqFHD4nUIkZmyZcvGggULiI2N5e233yZ//vz07t3b7LKsglUFes6cOR/ckGNPoa61JjIykpw5c1rsNS9cuICvry/bt2+nT58+TJ8+nTx58ljs9YXISs7OzixZsoRbt27h5+dHgQIF6NSpk9llmc6qAt3d3Z2LFy/y119/pXpeTEyMRcMxM+TMmdNijZJDQkJ44403uHv3LkuWLKF79+4WeV0hLMnFxYXVq1fz4osv4uvry7p166zy/StLsqpAz549O2XKlEnzvLCwMF544QULVGRb4uLiGDVqFJMnT8bDw4MVK1ZQvnx5s8sSIsvkyZOHkJAQmjVrRseOHdmyZcuDRQyOSG4sshOXLl3C29ubyZMnM2DAAHbu3ClhLhxCoUKF2LhxI4UKFaJNmzacPXvW7JJMI4FuB0JDQ3nhhRf45Zdf+Pbbb5k9e7bNTUkJkRElSpRg/fr1xMTE0KpVKyIjI80uyRQS6DYsISGB8ePH89JLL1GsWDH27t2Lr6+v2WUJYYoqVaoQFBTE2bNnad++/SN7LzkKCXQb9c8//9C2bVtGjx5N9+7d2b17tzSgEA6vSZMmLF68mB07dtCrVy8SEhLMLsmiJNBt0MGDB6lduzahoaHMmjWLRYsWyZJEIRJ17tyZSZMmsWzZMofbHsCqVrmItC1YsIABAwZQpEgRwsPD03X3qhCOZtiwYfz222+MHz+ecuXK0bNnT7NLsgi5QrcRcXFx+Pv78+abb9KoUSMOHDggYS5ECpRSzJo1i+bNm+Pn58eOHTvMLskiJNBtwOXLlwkMDGTWrFkMHTqUjRs3ysZaQqQhR44cfPfdd5QsWZJOnTpx4cIFs0vKchLoVm7nzp3UqlWL06dPs2LFCj799FOr3mtdCGtSsGBBgoKCiIqKomPHjkRFRZldUpaSQLdi8+bNo1mzZuTJk4dZs2bRpUsXs0sSwuZUrlyZpUuXcvDgQXr37m3XHY8k0K3Q3bt3eeutt+jfvz/Nmzdn79696doSQQiRvDZt2jBx4kSWL1/O1KlTzS4ny0igW5mrV6/i4+PDnDlzGD58OGvXrqVgwYJmlyWEzRs2bBidO3dm+PDhbNq0yexyskSaga6Umq+U+lMpdTSFx72UUjeUUocSP0ZnfpmO4cCBA9StW5f9+/ezdOlSJk2aRLZs2cwuSwi7oJRi/vz5VKpUiVdffdUu3yRNzxX6N0CrNM4J11p7JH6My3hZjmf58uV4enoCsG3bNrp162ZyRULYn7x587J69WpiY2N55ZVXiI2NNbukTJVmoGuttwL/WKAWh5SQkMD7779Pt27dqFWrFvv27XPo7T+FyGoVK1Zk4cKF7N27l7ffftvscjKVSs87vkqp0kCI1rpaMo95AauAi8AfwLta619TeJ5+QD8ANze32suWLXuqom/fvo2rq+tTfa81iY6O5uOPP2bbtm20bt2aIUOGkD179mTPtZcxPwkZs2Mwa8xz5sxh+fLlfPDBBzRv3tyir52RMXt7e+/XWtdJ9kGtdZofQGngaAqP5QNcEz9vDfyWnuesXbu2flqbN29+6u+1FmfPntU1atTQTk5Oevr06TohISHV8+1hzE9KxuwYzBrz3bt3daNGjbSrq6s+ceKERV87I2MG9ukUcjXDq1y01je11rcTP18HZFdKFcno89qzHTt2UK9ePc6dO8f69esJCAiwqx6qQtiC7Nmzs3z5cnLmzEnnzp3t4qajDAe6UuoZlZhGSql6ic/pmLvLp8OiRYvw9vYmX7587Nq1i5deesnskoRwWO7u7ixevJijR48SGBhodjkZlp5li0uBnUBFpdRFpVQfpdQApdSAxFM6A0eVUr8AM4Buib8WiIckJCQwcuRIevbsSePGjWX/ciGsRMuWLRk2bBjz5s1j5cqVZpeTIWluCqK1TrUFjtb6S+DLTKvIDkVFRdGjRw9Wr16Nn58fM2fOTPHNTyGE5U2YMIEtW7bg5+dH3bp1KV26tNklPRW5UzSL/fHHHzRt2pQ1a9Ywbdo05s6dK2EuhJXJnj07S5cuRWuNr68vcXFxZpf0VCTQs9ChQ4eoX78+J06c4IcffiAwMFDe/BTCSpUpU4Z58+axa9cuJkyYYHY5T0UCPYuEhIQ8uPNz+/bttGvXzuSKhBBpefXVV+nZsycTJkywyaYYEuiZTGvN9OnT6dChA5UqVWLPnj3UrFnT7LKEEOn0xRdfULJkSV5//XVu3rxpdjlPRAI9E927d4+AgACGDBlC+/bt2bJlC8WLFze7LCHEE8iXLx+LFy/m3LlzDB482OxynogEeia5ffs2HTt25Msvv+Sdd97hu+++I0+ePGaXJYR4Co0bN2bkyJF88803rF692uxy0k0CPRNcunSJJk2asH79embNmsWUKVNk21shbNzo0aOpVasW/fv3588//zS7nHSRQM+gw4cPU79+fSIiIggJCeGtt94yuyQhRCbInj07Cxcu5NatW/Tv398mWtdJoGfAxo0b8fT0RGtNeHg4L7/8stklCSEyUdWqVZkwYQLff/89ixcvNrucNEmgP6Wvv/6aNm3aUKZMGXbv3o2Hh4fZJQkhskBgYCCenp4MGjSIixcvml1OqiTQn5DWmg8++IC+ffvi4+NDeHg47u7uZpclhMgi2bJl45tvviEuLs7qp14k0J/A3bt3eeONN5gwYQJ9+/YlJCSEfPnymV2WECKLPf/880ycOJF169ZZ9dSLBHo6Xb9+nZdffplFixYxYcIE5s2bJ3uyCOFABg4cSOPGjRk8eDCXL182u5xkSaCnw4ULF2jSpAlbt25l4cKFjBo1SvZkEcLBODk5MX/+fKKjo/nvf/9rlVMvEuhpOHz4MA0bNuT8+fNs2LCBHj16mF2SEMIkFSpUYNy4cXz//fdWuXe6BHoqfv755wcbbG3btg0fHx+TKxJCmC0wMJDatWsTEBDAtWvXzC7nERLoKVi0aBGtWrWiVKlS7Nq1i+rVq5tdkhDCCjg7O/PVV1/x999/M3ToULPLeYQE+mO01kycOJGePXvSpEkTWZYohPgXDw8P3nnnHb7++mvCwsLMLucBCfSHxMfH4+/vz8iRI/H19WX9+vUUKFDA7LKEEFboww8/pGzZsvTr14/o6GizywEk0B+Ijo6mc+fOzJ49m6FDh7J48WJcXFzMLksIYaVy587NvHnz+O233/joo4/MLgeQQAcgMjKSFi1a8MMPPzB9+nQ+/fRTnJzkj0YIkTofHx9ef/11Pv30U06cOGF2ORLoZ8+epXHjxuzfv58VK1YQEBBgdklCCBsyZcoU8uTJYxVr0x060A8dOkTDhg25evUqP/30E507dza7JCGEjXFzc2PSpEls3ryZJUuWmFqLwwb6pk2baNq0Kc7Ozmzbto0mTZqYXZIQwkb5+fnRoEED3n77bVPXpjtkoC9btoxWrVpRsmRJdu7cSdWqVc0uSQhhw5ycnJgzZw6RkZGMGjXKvDpMe2WTfP755/j6+tKwYUO2bdsma8yFEJmiZs2a+Pv7M2fOHA4cOGBKDQ4T6AkJCQwdOpTAwEBeeeUVNm7cKGvMhRCZaty4cRQtWhR/f38SEhIs/voOEeh3796lZ8+eTJkyBX9/f5YvX07OnDnNLksIYWcKFCjAJ598wq5du1i4cKHFX9/uA/3WrVu0bduWJUuW8NFHH/HFF1+QLVs2s8sSQtipnj170rBhQ4YNG8b169ct+tp2HehXr17F29ubTZs28fXXXzNy5EjZx1wIkaWcnJyYOXMmkZGRfPjhh5Z9bYu+mgWdPn2axo0bc+zYMX744Qd69+5tdklCCAfxwgsv4Ofnx8yZMzl27JjFXtcuA/3AgQM0atSI69evs2nTJtq0aWN2SUIIBzN+/HhcXV0JDAy02B2kdhfooaGhNGvWjFy5crFt2zYaNGhgdklCCAdUtGhRxowZw48//khISIhFXtOuAn3ZsmW0bt2aMmXKsGPHDipVqmR2SUIIB+bv70+lSpV4++23iY2NzfLXs5tAnz59Ot27d6dhw4Zs3bqVEiVKmF2SEMLBZc+enc8//5yIiAhmzJiR5a9n84Gutea9995jyJAhdOzYUW4YEkJYlZYtW9K6dWsmTJjAX3/9laWvZdOBHhcXR69evfjkk0/o378/K1eulBuGhBBWZ/Lkydy5c4exY8dm6eukGehKqflKqT+VUkdTeFwppWYopSKUUoeVUrUyv8x/u3PnDh07dmTBggWMHTuW2bNnyw1DQgirVKVKFfr378+cOXM4fvx4lr1Oeq7QvwFapfL4y0D5xI9+wOyMl5W6Gzdu4OPjw4YNG5gzZw6jR4+WG4aEEFZtzJgx5MmTh6FDh2bZazindYLWeqtSqnQqp3QAFmpjoeUupVQBpVRxrfXlzCryYTf79KHYkiV8evculatUoejSpbB0aVa8lFXxuH4dHOy9ARmzY3CUMRfSTvzP9SVWra3FL2fX4XXUK9NfI81AT4dngQsPfX0x8di/Al0p1Q/jKh43NzfCwsKe+MVynzjBvXv3KFu2LNmdnS2+V4JZ4uPjHWas98mYHYM9j/l2fC4232rIhpvN+PFWE/6+V4hsxOF0ZfZT5V9aMiPQ001rPQ+YB1CnTh3t5eX15E+yfTshISG4t22bucVZubCwMJ7qz8uGyZgdg72N+fx5CA42PjZvhrt3jV9AWneFdu3A0zOWiIgaWTLmzAj0S8BzD33tnngsy7i6umbl0wshRLolJMDevUkhfviwcbx8eRg0yAjxxo3B+UHauhIRkTW1ZEagBwEDlVLLgPrAjayaPxdCCGtw5w6EhhoBHhICV6+CkxN4esLkyUaIV6xo+brSDHSl1FLACyiilLoIfAhkB9BazwHWAa2BCCAK6JVVxQohhFkuXTLCOzgYfv4ZYmIgXz5o1coI8JdfhsKFza0xPatcfNN4XAP+mVaREEJYAa3h4EEICjJC/H6b0DJloF8/aN8emjSBHDnMrfNhFn1TVAghrFl0NGzalDSVcukSKAUNG8LEicaVeJUqxjFrJIEuhHBoV67A2rXGlXhoKERFgasrtGwJbdtC69ZQrJjZVaaPBLoQwqFobaxEuT+VsnevcbxkSejVy7gK9/ICFxdTy3wqEuhCCLsXG2usCb+/tPBC4q2Q9evDhAlGiFevbr1TKeklgS6EsEt//WVMpQQHw48/wu3bkDs3vPgifPghtGkDzzxjdpWZSwJdCGEXtIZjx5KuwnfuNI6VKAGvvWasSvH2hly5zK4060igCyFs1t27sHVrUoifOWMcr1XLuApv1w5eeMH2p1LSSwJdCGFTIiNh/XojwDdsgJs3IWdO8PGB4cONlSnPPmt2leaQQBdCWDWt4eTJpKvw7duN/VOeeQa6Jm541aKFMT/u6CTQhRBWJy7OCO77Swvvb2ZVsyaMHGnMh9eubeyfIpJIoAshrML160lTKevXG1/nyAHNm0NgoDGVUrKk2VVaNwl0IYRpIiJg5Up3xo6F8HCIj4eiRaFjR2Mq5cUXIW9es6u0HRLoQgiLuXfPWE54fz78xAmAclStCsOGGSFerx5Iv/enI4EuhMhSN2/Cxo1GgK9bZ6xSyZ4dmjWDt96CIkV20b17A7PLtAsS6EKITHf2bNJVeFiY8SZnoULGRlft2hkbX+XPb5wbFhZjZql2RQJdCJFh8fGwe7ex5WxQEPz6q3G8UiUYMsQI8YYNH27DJrKC/PEKIZ7K7dvGHinBwcaeKX/9Zcx9N20KffoYIV6unNlVOhYJdCFEul24kDSVsmlTUkf7l182ArxVKyhY0OwqHZcEuhAiRQkJsH9/0g0+v/xiHC9XDvz9jRt8Gjc23uQU5pNAF0I8IioqqaP92rVw+bJxR2ajRvDpp0kd7R1lwytbIoEuhOCPP5I62oeGGh3t8+ZN6mjfurX5He1F2iTQhXBAWsOhQ0lTKfv3G8fvd7Rv1854c9OaOtqLtEmgC+EgYmIe7Wh/8aIxbdKgAXz8sTEfbs0d7UXaJNCFsGP3O9oHB8NPPxnz43nywEsvwbhxRhs2W+loL9ImgS6EHdEajhwxAjwoCPbsMY67u8ObbyZ1tM+Z08wqRVaRQBfCxsXGwpYtSSF+/rxxvG5d4yq8XTtjH3GZSrF/EuhC2KC//jI2ugoONja+un3baH7cogV88IExlVK8uNlVCkuTQBfCBmgNx48n3aW5Y8ejHe3btjV6atpzR3uRNgl0IaxUXNyjHe1//904XqsWjB5trEpxpI72Im0S6EJYkZs3nVmyJKkN282b4OJiXH0PG+bYHe1F2iTQhTDZwx3tt21rTEICuLlBly5JHe3z5DG7SmELJNCFsLB794yO9vdD/NQp43iNGtC9+3kGDixF3brS0V48OQl0ISzg+nXYsCFpKuXaNeO2ei8vGDTIuBIvVQrCws5Qv34ps8sVNkoCXYgscvp00lX41q3GlXmRIsabme3aGXdrSkd7kZkk0IXIJPHxsGtX0g0+x48bx6tWhXffNUK8fn3paC+yjgS6EBlw82ZSG7Z16+Dvv42+mc2aQf/+RoiXLWt2lcJRSKAL8YSS62hfsKBxd+bjHe2FsKR0BbpSqhUwHcgGfKW1nvTY428Ck4FLiYe+1Fp/lYl1CmGahARjk6v7UylHjxrHK1aEwYONEG/USDraC/Ol+VdQKZUNmAm8CFwE9iqlgrTWxx47dbnWemAW1CiExd25Y2w3GxRkbD/755/G3LenJ0ydaoR4+fJmVynEo9JzTVEPiNBa/w6glFoGdAAeD3QhbNqFC0lt2DZtMnYxzJ//0Y72hQqZXaUQKVNa69RPUKoz0Epr3Tfx6x5A/YevxhOnXCYCfwGngECt9YVknqsf0A/Azc2t9rJly56q6Nu3b+Pq6vpU32urZMyZLyEBfvstL9u3F2bnzsJERBhrCEuUiKZRo79p1CiS6tVv4Oyc+r+RzCQ/Z8eQkTF7e3vv11rXSfZBrXWqH0BnjHnz+1/3wJgjf/icwoBL4uf9gU1pPW/t2rX109q8efNTf6+tkjFnjjt3tA4K0trPT+vixbUGrZ2ctPb01PqTT7Q+flzrhIRMf9l0k5+zY8jImIF9OoVcTc+UyyXguYe+difpzc/7/ylEPvTlV8Cn6XheISzi8mVjKiUoCH7+GaKjjRt6WrZM6mhfpIjZVQqRcekJ9L1AeaVUGYwg7wZ0f/gEpVRxrfXlxC/bA8cztUohnsD9jvb3lxbu22ccL10a+vY1QrxZM+loL+xPmoGutb6nlBoIbMRYtjhfa/2rUmocxqV/EBCglGoP3AP+Ad7MwpqF+JeYGNi8OSnE73e0r18fPvrIuN2+alXZO1zYt3StnNVarwPWPXZs9EOfjwBGZG5pQqTuzz+NJYVBQcYSwzt3IHduY4+UsWONG33c3MyuUgjLkVshhM3Q2rip5/5V+O7dxjF3d+jZ05hK8faWjvbCcUmgC6t2925SR/vgYOO2ezA62o8dKx3thXiYBLqwOvc72s+fX5WDB+HWraSO9iNHGm3YpKO9EP8mgS5M93hH+507jZt+ChfOh6+vcRXevLkxPy6ESJkEujBFXByEhyeF+OnTxvEXXoD33zdWpdy4sZPmzb1MrVMIWyKBLizm2jWj/VpQkNGO7cYNo6N98+bwzjvGVMpzD93CFhZmWqlC2CQJdJGlfvvNCHCjo73R1adYMejUybgKb9ECHGwbDyGyjAS6yFT37sGOHUlTKSdPGsdr1IDhw4358Hr1pKO9EFlBAl1k2I0bj3a0/+cfyJ7dWBM+cGBSR3shRNaSQBdP5fffk6ZSHu5o37ZtUhs26WgvhGVJoIt0ebijfXAwHEtsb1KlivGGZrt20KCBdLQXwkwS6CJFt24ldbRfuzapo33TpuDnZ4T488+bXaUQ4j4JdPGI8+eTmiGHhRm33hcs+GgbtgIFzK5SCJEcCXQHl5AAe/cmTaUcPmwcr1ABBg0yQrxxY+loL4QtkH+mDujOHQgNNQI8JASuXk3qaD9lihHiFSqYXaUQ4klJoDuIixeT2rDd72ifL58xldK+vXS0F8IeSKDbqYQEOHAgaSrl4EHjeNmy8NZbxlV4kybGenEhhH2QQLcj0dFGE+T7Uyl//GHckdmwIUyaZIR45cqyd7gQ9koC3cZdvmwsKQwONtqwRUcbe6M83NG+aFGzqxRCWIIEuo3R2liJcv8uzb17jeMlS0Lv3sZ8eLNmxi6GQgjHIoFuA2JjYc+eQqxcaYT4hQvGtEm9ejBhgnElXr26TKUI4egk0K3U/Y72wcHG3Zp37tR40NF+zBjpaC+E+DcJdCuhNfz6a9Jdmvc72j/7LPToAaVKHWbIkBrS0V4IkSIJdBOl1NG+Th3jKrxdO/DwMKZSwsL+kTAXQqRKAt3CIiONjvbBwcYe4rduQc6cRueeESOMqZRnnzW7SiGELZJAz2JaG1177q9K2bHDuOnnmWfg1VeNVSk+PtLRXgiRcRLoWSAuzuifeX8qJSLCOF6zJowaZUyl1K4tbdiEEJlLAj2TXLv2aBu269eTOtq//bYxlVKypNlVCiHsmQR6Bvz2W9JVeHh4Ukf7//zHuAp/8UXpaC+EsBwJ9CeQUkf7atVg2DBjPlw62gshzCKBnoYbN2DjRiPA161L6mjv5QX+/saVeOnSZlcphBAS6Mk6cybpKjwszLgyL1zYmAe/39E+Xz6zqxRCiEdJoGPMfe/Zk7S08NdfjeOVKkFgoBHijRpJR3shhHVz2EC/ffvRjvZ//WX0zWzSBPr0MUK8XDmzqxRCiPRzqEC/39E+OBg2b5aO9kII+2LXgZ5SR/vy5WHgQCPEPT2lo70Qwj7YXZQl19HeyckI7smTjRCvWNHsKoUQIvOlK9CVUq2A6UA24Cut9aTHHncBFgK1gUjgVa312cwtNWWXLhnhHRxs9NSMiTFWobRqZQT4yy8bq1SEEMKepRnoSqlswEzgReAisFcpFaS1PvbQaX2Aa1rrckqpbsAnwKtZUTAYG17t3580lXLggHG8TBno18+4wadJE8iRI6sqEEII65OeK/R6QITW+ncApdQyoAPwcKB3AMYkfv4d8KVSSmmtdSbWChgrUt58syF//23sE96gAUycaFyJV6kibdiEEI4rPYH+LHDhoa8vAvVTOkdrfU8pdQMoDPz98ElKqX5APwA3NzfCwsKeuOArV/JQvrw7ffrcoH79SAoWjAOMZYdbtjzx09mM27dvP9Wfly2TMTsGGXPmseibolrrecA8gDp16mgvL68nfg4vL3j++TCe5nttWViYjNkRyJgdQ1aNOT3bSF0Cnnvoa/fEY8meo5RyBvJjvDkqhBDCQtIT6HuB8kqpMkqpHEA3IOixc4KANxI/7wxsyor5cyGEEClLc8olcU58ILARY9nifK31r0qpccA+rXUQ8DWwSCkVAfyDEfpCCCEsKF1z6FrrdcC6x46NfujzGKBL5pYmhBDiSUgrBiGEsBMS6EIIYSck0IUQwk5IoAshhJ1QZq0uVEr9BZx7ym8vwmN3oToAGbNjkDE7hoyMuZTWumhyD5gW6BmhlNqnta5jdh2WJGN2DDJmx5BVY5YpFyGEsBMS6EIIYSdsNdDnmV2ACWTMjkHG7BiyZMw2OYcuhBDi32z1Cl0IIcRjJNCFEMJOWHWgK6VaKaVOKqUilFLvJfO4i1JqeeLju5VSpU0oM1OlY8xvK6WOKaUOK6V+VkqVMqPOzJTWmB867xWllFZK2fwSt/SMWSnVNfFn/atS6ltL15jZ0vF3u6RSarNS6mDi3+/WZtSZWZRS85VSfyqljqbwuFJKzUj88zislKqV4RfVWlvlB8ZWvaeBskAO4BegymPn/BeYk/h5N2C52XVbYMzeQO7Ez99yhDEnnpcX2ArsAuqYXbcFfs7lgYNAwcSvi5ldtwXGPA94K/HzKsBZs+vO4JibArWAoyk83hpYDyigAbA7o69pzVfoD5pTa63vAvebUz+sA7Ag8fPvAB+lbLpNdJpj1lpv1lpHJX65C6ODlC1Lz88ZYDzwCRBjyeKySHrG7AfM1FpfA9Ba/2nhGjNbesasgXyJn+cH/rBgfZlOa70Voz9ESjoAC7VhF1BAKVU8I69pzYGeXHPqZ1M6R2t9D7jfnNpWpWfMD+uD8T+8LUtzzIm/ij6ntV5rycKyUHp+zhWACkqp7UqpXUqpVharLmukZ8xjgNeVUhcx+i8MskxppnnSf+9psmiTaJF5lFKvA3WAZmbXkpWUUk7ANOBNk0uxNGeMaRcvjN/Ctiqlqmutr5tZVBbzBb7RWk9VSjXE6IJWTWudYHZhtsKar9AdsTl1esaMUqoFMApor7WOtVBtWSWtMecFqgFhSqmzGHONQTb+xmh6fs4XgSCtdZzW+gxwCiPgbVV6xtwHWAGgtd4J5MTYxMpepevf+5Ow5kB3xObUaY5ZKfUCMBcjzG19XhXSGLPW+obWuojWurTWujTG+wbttdb7zCk3U6Tn7/b3GFfnKKWKYEzB/G7BGjNbesZ8HvABUEpVxgj0vyxapWUFAT0TV7s0AG5orS9n6BnNfic4jXeJW2NcmZwGRiUeG4fxDxqMH/hKIALYA5Q1u2YLjDkUuAocSvwIMrvmrB7zY+eGYeOrXNL5c1YYU03HgCNAN7NrtsCYqwDbMVbAHAJeMrvmDI53KXAZiMP4jasPMAAY8NDPeGbin8eRzPh7Lbf+CyGEnbDmKRchhBBPQAJdCCHshAS6EELYCQl0IYSwExLoQghhJyTQhRDCTkigCyGEnfh/t3HgJJRsTwoAAAAASUVORK5CYII=\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",
    "\n",
    "#------------------ 曲線１ ------------------\n",
    "c = [1,2,3,1]\n",
    "\n",
    "y = 0\n",
    "for k in range(0,4): \n",
    "    y += c[k]*B[k]\n",
    "\n",
    "#------------------ 曲線２ ------------------\n",
    "c = [1,1,1,1]\n",
    "\n",
    "f = 0\n",
    "for k in range(0,4): \n",
    "    f += c[k]*B[k]\n",
    "\n",
    "#------------------ 曲線３ ------------------\n",
    "c = [0,1/3,2/3,3/3]\n",
    "\n",
    "g = 0\n",
    "for k in range(0,4): \n",
    "    g += c[k]*B[k]\n",
    "\n",
    "plt.plot(x,y,'-k',x,f,'-r',x,g,'-b')\n",
    "plt.legend([\"y(x)\",\"f(x)\",\"g(x)\"])\n",
    "plt.grid()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一般的な $n$ 次バーンスタイン基底関数\n",
    "\n",
    "以下の展開式を確認してください。\n",
    "\n",
    "$$\n",
    "1^n=(x+(1-x))^n = \\sum_{i=0}^n \\frac{n!}{i!(n-i)!} x^i(1-x)^{n-i} = \\sum_{i=0}^n B_{i,n}(x)\n",
    "$$\n",
    "\n",
    "$n$ 次バーンスタイン基底関数の微分は以下の性質を持っています。\n",
    "\n",
    "$x=0$ のとき、\n",
    "\n",
    "$$\n",
    "B'_{0,n}(0)=-n, \\quad  B'_{1,n}(0)=n, \\quad  B'_{2,n}(0)=\\cdots = B'_{n,n}(0)=0 \n",
    "$$\n",
    "\n",
    "$x=1$ のとき、\n",
    "\n",
    "$$\n",
    "B'_{0,n}(1)=\\cdots = B'_{n-2,n}(1)=0 , \\quad  B'_{n-1,n}(1)=-n, \\quad B'_{n,n}(1)=n \n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以下の関数Bernstein(i,n,x)は、一般的な $n$ 次バーンスタイン基底関数を定義しています。ここで、階乗の関数はfactorial()です。即ち、\n",
    "\n",
    "$$\n",
    "\\mbox{factorial}(n)  = 1\\cdot 2 \\cdot 3 \\cdots (n-1) \\cdot n\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "def Bernstein(i,n,x):\n",
    "    #i: 基底の番号：0からnまで\n",
    "    #n: 多項式の次数\n",
    "    #x: 変数xのリスト\n",
    "    value = math.factorial(n) / ( math.factorial(i) * math.factorial(n-i) ) * x**i * (1-x)**(n-i)\n",
    "    return value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## バーンスタイン基底関数の性質\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 演習1\n",
    "\n",
    "\n",
    "- すべての5次バーンスタイン基底関数のグラフを描いてください。\n",
    "- 各多項式の $x=0$、$x=1$ における微分を確認してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "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": [
    "#演習1\n",
    "#すべての基底関数のグラフを描いてください。\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "#[0,1]の分割点を作成します。\n",
    "x = np.linspace(0,1,101)\n",
    "\n",
    "B_list = []\n",
    "B_list.append(Bernstein(0,5,x))\n",
    "plt.plot(x,B_list[0])\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. ベジェ曲線\n",
    "\n",
    "ベジェ曲線（Bézier curve）は、バーンスタイン基底関数の線形結合で表される曲線です。\n",
    "\n",
    "$$\n",
    "f(x) = \\sum_{i=0}^{N} C_{i} B_{i,N}(x)\n",
    "$$\n",
    "\n",
    "係数 $C_i$ に対して、点 $P_i({i}/{N}, C_{i})$ は制御点またはコントロール点と呼ばれます。\n",
    "\n",
    "$$\n",
    "P_0(0, C_0) ,~~ P_1(\\frac{1}{N}, ~~ C_1) , ~~  \\cdots, ~~ P_i(\\frac{i}{N}, C_i) , ~~  \\cdots, ~~ P_N(1, C_N) ,  \n",
    "$$\n",
    "\n",
    "\n",
    "## 3次ベジェ曲線の例\n",
    "\n",
    "3次ベジェ曲線\n",
    "\n",
    "$$\n",
    "B(x) = C_0 B_{0,3}(x) + C_1 B_{1,3}(x) + C_2 B_{2,3}(x)  + C_3 B_{3,3}(x) \n",
    "$$\n",
    "\n",
    "の関数値と微分を計算してみます。\n",
    "\n",
    "$$\n",
    "B(0) =  C_0, \\quad B'(0) = 3 (C_1 - C_0), \\quad B(1) = C_3, \\quad B'(1) = 3(C_3- C_2)\n",
    "$$\n",
    "\n",
    "## 演習2\n",
    "\n",
    "\n",
    "- $N=3$とする。以下の $C_i$ に対する制御点 $P_i$（$i=0,1,2,3$）の折れ線を描いてください。\n",
    "- 制御点によって決定される3次ベジェ曲線を描いてください。\n",
    "\n",
    "$$\n",
    "C_0 = 0,\\ \\ C_1 = 2,\\ \\ C_2 = -1,\\ \\ C_3 = 0\n",
    "$$\n",
    "\n",
    "\n",
    "### 考察\n",
    "- 制御点の折れ線の両端の座標とベジェ曲線 $B(x)$ の両端の値を比較してください。\n",
    "- 制御点の折れ線の勾配を求めて、ベジェ曲線 $B(x)$ の両端の微分と比較してください。\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": [
    "C = [0,2,-1,0]\n",
    "\n",
    "#曲線の描画\n",
    "f = 0\n",
    "x = np.linspace(0,1,101)\n",
    "for k in range(0,4):\n",
    "    f = f+C[k]*Bernstein(k,3,x) \n",
    "\n",
    "plt.plot(x,f,'b-')\n",
    "\n",
    "#制御点の描画\n",
    "plt.plot(np.linspace(0,1,4),C,'r-o')\n",
    "\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## レポート課題\n",
    "\n",
    "ベジェ曲線の制御点を選んで、関数 $y=\\sin(2\\pi x)$（$0\\le x \\le 1$）の良い近似ベジェ曲線を作成してください。\n",
    "\n",
    "- ベジェ曲線の次数を自由に選んでください。（最大6次まで）\n",
    "- ベジェ曲線の近似が良いかどうかについて、判断の基準を自由に考えてください。\n",
    "- 区分的なベジェ曲線を使っても良いです。例えば、[0,0.5]と[0.5,1]の区間で二つのベジェ曲線を作ることです。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "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": [
    "#レポート課題 (ベジェ曲線の次数と制御点を調整して、Sin曲線の良い近似を作成してください。)\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "x = np.linspace(0,1,101)\n",
    "y = np.sin(2*math.pi*x)\n",
    "plt.plot(x,y,'b-')\n",
    "\n",
    "C = [0,4.,-4.,0]\n",
    "f = 0\n",
    "for k in range(0,4):\n",
    "    f = f+C[k]*Bernstein(k,3,x)\n",
    "\n",
    "plt.plot(x,f,'r-')\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. ファイルへの書き込み・ファイルからの読み込み\n",
    "\n",
    "Pythonにおいてデータをファイルへ書き込んだり、データをファイルから読み込んだりする方法はいくつかありますが、Numpyを用いるとNumpyの配列をそのままテキストファイルに書き込んで、後で読み込むことが簡単にできます。\n",
    "\n",
    "- 書き込み方法： np.savetxt( ファイル名（パス）, 書き込む変数 )\n",
    "- 読み込み方法： 読み込む変数 = np.loadtxt( ファイル名（パス） )\n",
    "\n",
    "以下のコードでは、ベジェ係数（1次元配列）をテキストファイルに書き込んで保存した後、そのテキストファイルから読み込んだ係数に対応するベジェ曲線を描いています。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "C = np.array([0,2,-1,0])\n",
    "\n",
    "np.savetxt('coefficient.txt',C)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.  2. -1.  0.]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAlbElEQVR4nO3de7zVU/7H8denUikpiuPWbUimEGowLqMI5RIRYhBJSEhNM025M0NCboVoxl1oXKLkkhIzNGWkkaakkMvQNJUuU6nW74/P6Tdnck7nsi9r7/19Px+P/Th7n/09e31W+/Q5373W+n6WhRAQEZHCVy12ACIikh1K+CIiCaGELyKSEEr4IiIJoYQvIpIQNWIHUJZGjRqFZs2aVfnnV61aRd26ddMXUB5IWp+T1l9Qn5MilT6///77/woh7FDaczmb8Js1a8aMGTOq/PNTpkyhffv26QsoDyStz0nrL6jPSZFKn83s87Ke05COiEhCKOGLiCSEEr6ISEIo4YuIJIQSvohIQijhi4gkhBK+iEhC5Ow6fMmO5cth1iz45hv417/g3/8GM9h6a6hTB3bZBfbcE37yE6hZM3a0IpIKJfyEWb4cJkyAl16CadNgwYKK/Vy1arDPPtC+PXToAEceCfXqZTRUEUkzJfwE2LjRk/zIkfDGG/DDD1BUBIcdBj17wv77Q9Om0LAhbL+9n+GvXg2rVsGiRTBvHsydC+++Cw88AHfdBbVrQ5cucNZZ0Lmzzv5F8oESfgFbuxZGj4Y774RPPoFdd4Urr4STT4aDDvKz9rLUr++3XXbxY0u+5nvvwdixMGYMPPMM7LQTXH45XHSR/8EQkdykSdsCFAI8/zy0bg2XXupJeMwYWLgQhg6Fn/98y8l+S2rVgiOOgHvuga+/hpdfhjZtYPBgaNwYBgyAJUvS2x8RSQ8l/ALz6adw1FFwyimenCdO9DPyM86ArbZKb1tbbQXHH+9tfPghnHqqf5rYfXe49Vb4z3/S256IpEYJv0CEAOPH70ybNvDBBzBihCfhY4/NTvv77guPPuptHnYY/OY3/gnjtdey076IlE8JvwAsXQpdu8Jtt7XkoIN8mWWfPlAjwgzN3nv7MM+kST6Re+yxcO65vuRTROJSws9zn3wCBx/sq3D69JnP66/7WHpsRx4JM2fCVVfBU0/52f7EibGjEkk2Jfw89uabvoLm3//2+6ed9mWVJ2MzoXZtuPFG+NvfYMcdffnmgAG+0kdEsi+H0oNUxlNPwTHH+LLJv/7Vx81z1T77eIyXXgp33AGHHgpffBE7KpHkUcLPQ488Amef7Un+L3+B5s1jR1S+rbeGe+/15aLz5kG7djB1auyoRJJFCT/PPPQQnH++j5FPmADbbhs7oso5+WQ/299uO18+et99sSMSSQ4l/Dzy6KNw4YW+8mXcOC9ulo/22suT/rHH+mqiX//ayz+ISGYp4eeJiRPhggv8rPiFF3yIJJ/Vrw8vvugJf9gwH6LSZK5IZqmWTh54/33o1s2XNj73nF9BWwiqV/dx/SZNYNAg+Oc//Y+AqnCKZIbO8HPcwoVw3HHQqBG88kr+jdmXx8yvyn3sMZ/EPeYYWLYsdlQihUkJP4etXu01cdat8yGdnXeOHVHmnH02PPusf5o58khdmSuSCUr4OSoEuPhir03z5JM+0Vnounb1yeg5c3yjle++ix2RSGFRws9RI0b4MMf11/sVqknRqZMvN12wAI4+2q8iFpH0UMLPQX/5i29UcuKJMGRI7Giyr0MHn7ydO1dj+iLplJaEb2adzGyumc03s0FlHHO6mX1sZrPN7Ml0tFuIvv/ex7MbN/Z197lUGyebjj4a/vQnr/zZuTOsXBk7IpH8l3I6MbPqwAigM9AKONPMWm12TAvgt8ChIYTWQL9U2y1Ul18On3/uwzkNGsSOJq7jj4enn/aLtLp188lrEam6dJw/HgjMDyEsCCGsA8YAJ212zIXAiBDCUoAQgqbjSvHss14nZ8gQLzAmPpE7ahS8+qqXlNAVuSJVZyGE1F7ArBvQKYTQq/jxOcBBIYS+JY55AZgHHApUB64LIfyoOrqZ9QZ6AxQVFbUdM2ZMleNauXIl22yzTZV/PtsWL67JBRf8jF13/Q/33PMBNWpU/n3Jtz5XxhNPNOGhh35Ct26L6NPnU8wKu79lUZ+TIZU+d+jQ4f0QQrtSnwwhpHQDugEPlXh8DnDvZse8DDwPbAU0BxYBDbb0um3btg2pmDx5cko/n00bN4ZwwgkhbL11CPPmVf118qnPlbVxYwhXXBEChHDnnf69Qu5vWdTnZEilz8CMUEZeTUdpha+Aknss7Vb8vZK+BKaFEH4AFprZPKAFMD0N7ee9sWN9W8DbboMWLWJHk5vMvJb+okW+gqlZM6/HIyIVl44x/OlACzNrbmY1ge7AuM2OeQFoD2BmjYA9gQVpaDvvLV0Kl10GBxwAV1wRO5rcVq2aT2b/7Gdw1lkwd26yPuaLpCrlhB9CWA/0BV4F5gDPhBBmm9kNZtal+LBXgSVm9jEwGRgYQliSatuF4De/gcWL4cEH42w6nm/q1PGrcXfYAQYP3odFi2JHJJI/0pJiQggTgAmbfe+aEvcD0L/4JsXeftsT/YABfoYvFVNUBOPHw4EHVqdrV/93zPdy0SLZkNDLeuLbsMGHcpo08fIJUjmtW8NVV83hb3/zfQJSXGwmkghK+JGMHu2F0YYNg7p1Y0eTn37+8yX8/ve+ofvQobGjEcl9SvgRLFvmF1cdfjicdlrsaPLbb34DZ54Jgwd70TURKZsSfgQ33ABLlsBdd/lyQ6k6M9/Yfd994Ze/9CqbIlI6JfwsmzsX7rnHx5333z92NIWhTh0vtAZw6qm+cYyI/JgSfpYNGuQrSm66KXYkhWX33eGJJ2DmTLjkEk3iipRGCT+Lpk2DF16AgQN9aaGk13HHwbXXelnpBx+MHY1I7lHCz6IhQ/yCoX79YkdSuK65xmvpX365r4ISkf9Sws+SSZP8NmQI1KsXO5rCVa0aPP44bL+9r4BasSJ2RCK5Qwk/C0LwZYNNmvjG5JJZO+7oa/M//RR699Z4vsgmSvhZ8OKLvmvTdddBrVqxo0mGI46AG2+EMWN82aaIKOFnXAie6PfcE845J3Y0yTJoEHTs6FVI58yJHY1IfEr4GTZ+vE8eDhmiapjZVq2ar9ipWxe6d4c1a2JHJBKXEn4GheDr7Zs398v/Jft23tn3CZ41C37969jRiMSlhJ9Bkyb52vtBg2CrrWJHk1zHHefDOvfc45+4RJJKCT+DbroJdt0VevSIHYkMHer1dnr2hO++ix2NSBxK+Bny9tvw1ls+jKCVOfHVquWlF5YvV/18SS4l/Ay55Ra/qrZXr9iRyCZ77+1n+i+/DKNGxY5GJPuU8DNgzhyvzd63r1dylNxx2WVeeuHKK2HevNjRiGSXEn4GDB8OtWt71UbJLdWqwcMP+/tz7rmwfn3siESyRwk/zRYv9rXf557rQzqSe3bZBUaO9BVUt94aOxqR7FHCT7ORI2HtWh8ykNzVvTucfrpfBa2qmpIUSvhp9J//wIgRcPzxsNdesaOR8owcCQ0besmLtWtjRyOSeUr4afTEEz6kM2BA7EikIho29MJqf/+77zMsUuiU8NMkBLj7bmjTBtq3jx2NVNTxx8P55/tyzRkzYkcjkllK+Gny5z/7mWLfvmAWOxqpjDvugJ12gvPO09COFDYl/DQZORLq11eRtHzUoIHvgTt7toZ2pLAp4afBt9/C2LF+hli3buxopCo6d9bQjhQ+Jfw0eOgh+OEHXWiV7zYN7fTsCevWxY5GJP2U8FO0fj088IDvrNSyZexoJBUNGsD99/tczM03x45GJP2U8FM0fjwsWgR9+sSORNLhhBPgrLPgd7+Djz6KHY1Ieinhp+i++7zm/Yknxo5E0uWuu/xsv2dP1dqRwqKEn4IvvoDXXvPEoP1qC0ejRr471vTpnvxFCoUSfgoeftgvuDr//NiRSLqdfjp06QJXXw0LFsSORiQ90pLwzayTmc01s/lmNmgLx51qZsHM2qWj3Zg2boQ//hGOOso3KZfCYuZ1kWrUgIsu0g5ZUhhSTvhmVh0YAXQGWgFnmlmrUo6rB1wBTEu1zVwweTJ89plvlyeFabfdfF3+G294yWuRfJeOM/wDgfkhhAUhhHXAGOCkUo67ERgKrElDm9GNHg3bbQddu8aORDLpoovg0EO93PW338aORiQ16Zhq3BVYVOLxl8BBJQ8wswOAxiGE8WY2sKwXMrPeQG+AoqIipkyZUuWgVq5cmdLPb8mKFTUYO/YQTjjha957b35G2qiKTPY5F2WrvxdeWIcLL2zHWWct5uqr52S8vS1J2nsM6nNahRBSugHdgIdKPD4HuLfE42rAFKBZ8eMpQLvyXrdt27YhFZMnT07p57fknntCgBA++CBjTVRJJvuci7LZ3+uu8/f8lVey1mSpkvYeh6A+VxYwI5SRV9MxpPMV0LjE492Kv7dJPWBvYIqZfQYcDIzL54nbhx+G/feH/faLHYlky6BBvqnNJZfAqlWxoxGpmnQk/OlACzNrbmY1ge7AuE1PhhCWhxAahRCahRCaAe8BXUIIeVmias4ceP996NEjdiSSTbVqwahRPlF//fWxoxGpmpQTfghhPdAXeBWYAzwTQphtZjeYWZdUXz/XPP44VK/ue6JKshx+OPTq5UXWPvggdjQilZeW60NDCBOACZt975oyjm2fjjZj2LjRE/7RR0NRUexoJIZbb4WXXvLVO+++63/8RfKFrrSthHfe8XIK55wTOxKJZbvtYPhwL7tw//2xoxGpHCX8Snj8cd/g5KTSrjKQxOje3T/l/fa38PXXsaMRqTgl/ApaswaeeQZOOUW7WiWdmW9puW4d9OsXOxqRilPCr6Dx42H5cg3niNtjD7jqKnj2WZgwofzjRXKBEn4FPf64b3935JGxI5FcMXAg/PSncOmlsHp17GhEyqeEXwHLl/tZXPfuWpUh/1Wrlg/tfPaZ75AlkuuU8CvgxRd9vPaMM2JHIrmmfXs491wYNswvyhPJZUr4FfDMM9CkCRx0UPnHSvIMGwbbbONlF1Q3X3KZEn45li71bQxPP91XZ4hsbscd4ZZb4K234LHHYkcjUjYl/HK88AL88IMnfJGy9OoFBx8Mv/qVnySI5CIl/HI8/bRvYdgub2t7SjZUqwb33QdLlsCQIbGjESmdEv4WLFni29tpOEcqYr/94LLLvOTC9OmxoxH5MSX8LXjuOdiwQatzpOJuuMGv17jkEv/dEcklSvhb8MwzfkWlNjqRitp2Wy+u9v77PsQjkkuU8MuwZAlMngynnabhHKmc00+Hjh299II2PpdcooRfhpdf9o/kp5wSOxLJN2Zw771ebmHgwNjRiPyXEn4ZnnsOGjeGtm1jRyL5qGVLT/aPPebr80VygRJ+KVat8outTj5ZwzlSdUOGQNOmXlzthx9iRyOihF+qiRO9/r2GcyQVderA3XfD7Nlw552xoxFRwi/Vc89Bw4Zw2GGxI5F816ULnHACXH89fPll7Ggk6ZTwN7NunU/YnnQS1EjLFu+SdHff7QsA+vePHYkknRL+Zt58E77/Hrp2jR2JFIrmzWHwYN8d6/XXY0cjSaaEv5nnn/dStx07xo5ECsnAgbD77tC3L6xdGzsaSSol/BI2boRx46BzZ6hdO3Y0Ukhq1/a1+fPmwe23x45GkkoJv4QZM+Cf//SJNpF069TJV37ddBN8/nnsaCSJlPBLeOklL3PbuXPsSKRQDR/u13b06xc7EkkiJfwSXn4ZDj3Ul2SKZEKTJnD11b6xzoQJsaORpFHCL7ZoEcyc6WumRTKpf38vvXD55X6Bn0i2KOEXGz/ev554Ytw4pPDVrOkTuJ9+CkOHxo5GkkQJv9hLL8FPfgJ77RU7EkmCjh29jPItt8CCBbGjkaRQwseLpU2a5Gf3KpYm2XLHHX419+WXQwixo5EkUMLHk/3atRrOkezadVe47jofTnzppdjRSBIo4eP/2bbdFg4/PHYkkjSXXw6tW/vX1atjRyOFLvEJPwQ/wzrmGJ9ME8mmrbaCESP8Qqzf/z52NFLo0pLwzayTmc01s/lmNqiU5/ub2cdmNsvMJplZ03S0mw6zZsE338Dxx8eORJLqiCPg7LNh2DAvvSCSKSknfDOrDowAOgOtgDPNrNVmh30AtAsh7AuMBW5Ntd10eeUV/3rssXHjkGQbNszr7fTtqwlcyZx0nOEfCMwPISwIIawDxgAnlTwghDA5hLBphPI9YLc0tJsWEydCmzaw886xI5Ek22knr7Hz+uswdmzsaKRQpWOLj12BRSUefwkctIXjLwBeKe0JM+sN9AYoKipiypQpVQ5q5cqV5f78qlXVeeedQznjjEVMmbKwym3lior0uZAUWn9btTL22OMA+vSpSd26f6VOnQ0/OqbQ+lwR6nMahRBSugHdgIdKPD4HuLeMY8/Gz/Brlfe6bdu2DamYPHlyucc891wIEMKUKSk1lTMq0udCUoj9ffdd/5381a9Kf74Q+1we9blygBmhjLyajiGdr4DGJR7vVvy9/2FmHYEhQJcQQk5sATFxItSrB4ccEjsSEXfwwdCrl296/tFHsaORQpOOhD8daGFmzc2sJtAdGFfyADPbH3gAT/bfpaHNlIXgCb9jR18aJ5IrbrkF6teHPn00gSvplXLCDyGsB/oCrwJzgGdCCLPN7AYz27SVyDBgG+BZM5tpZuPKeLmsmTMHvvjCN6UQySUNG3pRtbffhkcfjR2NFJJ0TNoSQpgATNjse9eUuJ9zO8ROnOhftRxTctH558Po0b4X7oknwvbbx45ICkFir7R95RX46U+hac5cAibyX9WqwX33wZIlMHhw7GikUCQy4a9eDVOnajhHclubNl5jZ9QomDYtdjRSCBKZ8N95B9at8/o5Irns+uv9osCLL4b162NHI/kukQn/jTd8ZY6qY0qu23ZbX6I5c6YXWRNJRSIT/uuv+9r7unVjRyJSvm7dfHHB1VfD4sUq6SpVl7iEv3ixny0dfXTsSEQqxszP7tetgxEj9ogdjuSxxCX8SZP8a8ecWygqUrbdd4erroK33trx/5cUi1RW4hL+G2/4VYzt2sWORKRyBg6Exo1X06ePdseSqklUwg/Bx++PPBKqV48djUjl1KoF/fvPY+FCL6UsUlmJSvjz53s5BY3fS77ab79l9OjhG6bMnh07Gsk3iUr4b7zhXzV+L/nsttt8uebFF8PGjbGjkXySuITftCnsoYUOkscaNfIz/HfegT/8IXY0kk8Sk/A3bIA33/Sze7PY0Yik5vzzffPzgQPh229jRyP5IjEJf+ZMWLYMjjoqdiQiqTODBx7w1TpXXhk7GskXiUn4kyf71/bto4YhkjYtW3olzaeeQmvzpUISlfBbtvRCVCKFYtAg2GsvuOQSWLUqdjSS6xKR8Nev992DOnSIHYlIetWq5eWTP/sMrr02djSS6xKR8N9/H1asUMKXwnT44dC7Nwwf7r/rImVJRMLX+L0UuqFDoagIevWCH36IHY3kqsQk/NatYccdY0cikhkNGsC99/pqtOHDY0cjuargE/66dX6BioZzpNCdcgqcfLKP5c+fHzsayUUFn/BnzPC1yhrOkSQYMcIncnv1UtkF+bGCT/ibxu+POCJuHCLZsMsucPvt8NZb8OCDsaORXJOIhL/vvl5/RCQJevb0K8oHDoRFi2JHI7mkoBP+2rXwl79o/F6SxczP7jds8IqaIcSOSHJFQSf8GTPgP//RcI4kT/Pm8Pvfw4QJ8NhjsaORXFHQCX/qVP962GFx4xCJoW9fOPRQuOIK+Oab2NFILijohP/229CqFeywQ+xIRLKvenX44x9hzRq46CIN7UgBJ/wNG3z9/eGHx45EJJ4WLXxo56WX4MknY0cjsRVswv/0021YsQJ+8YvYkYjEdfnlcMghcNllGtpJuoJN+LNm1Qd0hi9Scmjnwgs1tJNkBZzwG9CsGTRuHDsSkfj23BNuuQXGj/fkL8lUkAk/BPj73+trOEekhL59/ZqUfv28fr4kT0Em/LlzYdmymhrOESmhWjX4wx/8fs+eqrWTRGlJ+GbWyczmmtl8MxtUyvO1zOzp4uenmVmzdLRblk3r73WGL/K/mjXz8smTJ8Pdd8eORrIt5YRvZtWBEUBnoBVwppm12uywC4ClIYQ9gOHA0FTb3ZKpU2G77dbRokUmWxHJTz17Qpcuvh/uRx/FjkayKR1n+AcC80MIC0II64AxwEmbHXMS8Ejx/bHAUWZmaWi7VG+/Dfvuu4zMtSCSvzbV2qlfH375S685Jbnjz3+GhQvrZOS1a6ThNXYFStbk+xI4qKxjQgjrzWw50BD4V8mDzKw30BugqKiIKVOmVDqYf/6zFl988XM6dfqOKVM+rvTP57OVK1dW6d8sXyWtv5DePvfr15DBg/ehR48vuPjiBWl5zUxI0vu8cSNccMHP2LhxL5o1m5L2k9Z0JPy0CSGMAkYBtGvXLrSvwq4lGzf6doaffLKcqvx8PpsyZUqi+py0/kJ6+9y+PXz+OYwa1YSLLmqSs1Vlk/Q+P/ecr6AaMuRjOnRon/bXT8eQzldAydXuuxV/r9RjzKwGUB9Ykoa2f6RaNdhnH9h+e+3kLFKe22/38gvnnANLMvI/UioqBLjxRn8/OnT4LiNtpCPhTwdamFlzM6sJdAfGbXbMOKBH8f1uwJsh6Ho/kdjq1oWnnoLvvoMLLtBVuDG9/LJvQj94sF8dnQkpJ/wQwnqgL/AqMAd4JoQw28xuMLMuxYeNBhqa2XygP/CjpZsiEscBB/hVuC++CPffHzuaZNp0dt+8uU+kZ0paxvBDCBOACZt975oS99cAp6WjLRFJv3794LXXoH9/rz+1996xI0qW116D6dNh1CjYaqvMtVOQV9qKSOVUqwaPPOJLNU8/HVatih1RcoQA11/vdb969Cj/+FQo4YsIAEVF8MQT8I9/wKWXxo4mOV56Cd59F666CmrWzGxbSvgi8v+OOgquucbP9h9+OHY0hW/DBp+k3XNPvwI605TwReR/XH21V9Xs0wdmz44dTWF74gn/N77pJqiRhauilPBF5H9Ur+7bIW67LZxyCnz/feyICtPatf5pqm1bOPXU7LSphC8iP7LTTvD00/Dpp3D++Vqfnwn33+9XOt98s0+aZ4MSvoiU6ogjYOhQv9z/tttiR1NYli71dfdHHgkdO2avXSV8ESlT//7QrZuXUp48OXY0hePaaz3pDx9OVqv6KuGLSJnMfJesli3htNNg4cLYEeW/jz6CkSPhootg332z27YSvohsUb16XnZhwwY4+WRYuTJ2RPkrBLjiCp8Qv/HG7LevhC8i5WrRAsaM8bPT887TfrhV9fzz8OabnuwbNsx++0r4IlIhxx4Lt94Kf/oT3HBD7Gjyz8qVPieyzz4+nBNDTm2AIiK5rX9/P8u//no/689kZcdCc/XVvgzz7bezc5FVaZTwRaTCzOCBB3xXpp49oUkTr64pWzZtGtx1l1+9fNhh8eLQkI6IVErNmj6s06wZdO0K8+fHjii3rVsHvXrBrrv6RVYxKeGLSKVtvz2MH+/3O3WCb7+NG08uGzrUh8Huu89X58SkhC8iVbLHHr4t39dfw3HHwYoVsSPKPX/7m6/IOeMMOOGE2NEo4YtICg4+GMaOhQ8/9EJr69bFjih3rFoFZ50FO+4II0bEjsYp4YtISo47DkaPhjfegLPPhvXrY0eUG/r3h3nz4NFH46y5L41W6YhIynr0gCVLYMAAqF3bN0/JVgXIXPTCC74/7cCBXiAtVyjhi0ha9O8Pq1f7evOtt/byv9ksDJYrFi6ECy6AAw7wjU1yiRK+iKTNkCGe9G++2Zdv3n13spL+6tW+VHXDBi9Fkek9aitLCV9E0sYMfvc7n7y9/Xb/et99yRjeCcHX28+a5UtWW7SIHdGPKeGLSFqZwbBhfnZ7882+ld/o0b51YiEbPhyeesr/4HXuHDua0inhi0jabTrTr13bN/tYvRoeewxq1YodWWY8/7xP0J56Kvz2t7GjKZsSvohkhJlv0l23LvzqV7B4sa9eqV8/dmTp9dZbcOaZcOCBvgQzl+csEjCyJiIxDRgAjz8O77zjhda++ip2ROnz4YfQpQs0b+5XHdepEzuiLVPCF5GM++UvYcIEX7J40EEwfXrsiFI3Z47XEapXD159NXcurtoSJXwRyYqjj/az/Bo1/Ez/iSdiR1R1H34IRxzhK3Nee83LROcDJXwRyZo2bfzs/uCDvQzDgAH5V3/nr3+FDh18AnrqVGjVKnZEFaeELyJZtcMO8Prr0Lcv3HGHn+0vWBA7qop5+WXo2BG22853rtpzz9gRVY4Svohk3VZbwT33eKXNefNg//3hySd9iCQXheB17bt08SQ/dapvAJNvlPBFJJpTT4WZM6F1a5/YPfnk3FvFs2KFDz8NGuR17adO9d2r8pESvohE1bSpJ9HbbvOhnlatvBxDLpRZfust2Hdfr4vzu9/5p5BcX3q5JUr4IhJdjRo+gfv3v0O7dr7Z9377wcSJceJZscLj6dDBS0K8/TYMHpzbF1VVREoJ38y2N7PXzeyT4q/blXLMfmb2rpnNNrNZZnZGKm2KSOHafXffSOVPf4I1a7wmzYABbZg0KTvj++vX+6eLPfbwCeWLL/YlmIcckvm2syHVM/xBwKQQQgtgUvHjza0Gzg0htAY6AXeaWYMU2xWRAmXm2yV+/LEXJPvsszp07Ag/+5kXJ1uzJv1trloFDz4Ie+/tny5atoRp02DkSC8NUShSTfgnAY8U338EOHnzA0II80IInxTf/xr4DtghxXZFpMDVrAn9+sFTT01j1Cj4/nvfI3anneDCC2Hy5NTW8G/c6El9wADYbTfo3duLvb3wgo/dH3hgunqSOyyk8DnJzJaFEBoU3zdg6abHZRx/IP6HoXUIYWMpz/cGegMUFRW1HTNmTJVjW7lyJdtss02Vfz4fJa3PSesvJLvPGzbAzJnb8dprRUydugNr1lSndu0NtGmzjDZtltGs2SqaNl1NUdGaUksxr1xZnYUL67JgwTb84x/1mDatIUuX1qRatcDhhy/mlFO+Yp99lufEOH0q73OHDh3eDyG0K/XJEMIWb8AbwEel3E4Clm127NItvM7OwFzg4PLaDCHQtm3bkIrJkyen9PP5KGl9Tlp/Q1CfN1mxIoTnngvh0ktDaNkyBB/h91v16iE0aBBC48Yh7LFHCEVFIdSq9b/HbL99CN27h/DEEyEsWZL9PpUnlfcZmBHKyKvllkcOIXQs6zkz+9bMdg4hfGNmO+PDNaUdty0wHhgSQnivvDZFRLZkm218K8GuXf3xkiXwj394QbOFC32VzYoVPt6/7bbQoIEXN2vd2pdZ7rZb/q+4qYpU6+GPA3oAtxR/fXHzA8ysJvA88GgIYWyK7YmI/EjDhnDooX6TsqU6aXsLcLSZfQJ0LH6MmbUzs4eKjzkd+AVwnpnNLL7tl2K7IiJSSSmd4YcQlgBHlfL9GUCv4vuPA4+n0o6IiKROV9qKiCSEEr6ISEIo4YuIJIQSvohIQijhi4gkhBK+iEhCpFRLJ5PMbDHweQov0Qj4V5rCyRdJ63PS+gvqc1Kk0uemIYRSC1TmbMJPlZnNCGUVECpQSetz0voL6nNSZKrPGtIREUkIJXwRkYQo5IQ/KnYAESStz0nrL6jPSZGRPhfsGL6IiPyvQj7DFxGREpTwRUQSIq8Tvpl1MrO5ZjbfzAaV8nwtM3u6+PlpZtYsQphpVYE+9zezj81slplNMrOmMeJMp/L6XOK4U80smFneL+GrSJ/N7PTi93q2mT2Z7RjTrQK/203MbLKZfVD8+31cjDjTxcz+YGbfmdlHZTxvZnZ38b/HLDM7IOVGy9r7MNdvQHXgU+AnQE3gQ6DVZsf0Ae4vvt8deDp23FnocwegTvH9S5LQ5+Lj6gFTgfeAdrHjzsL73AL4ANiu+PGOsePOQp9HAZcU328FfBY77hT7/AvgAOCjMp4/DngFMOBgYFqqbebzGf6BwPwQwoIQwjpgDL6xekknAY8U3x8LHGWW1ztZltvnEMLkEMLq4ofvAbtlOcZ0q8j7DHAjMBRYk83gMqQifb4QGBFCWAoQQih1P+k8UpE+B2Db4vv1ga+zGF/ahRCmAv/ewiEn4VvDhuB7gTco3ju8yvI54e8KLCrx+Mvi75V6TAhhPbAcaJiV6DKjIn0u6QL8DCGfldvn4o+6jUMI47MZWAZV5H3eE9jTzP5sZu+ZWaesRZcZFenzdcDZZvYlMAG4LDuhRVPZ/+/lSnUTc8lRZnY20A44InYsmWRm1YA7gPMih5JtNfBhnfb4p7ipZrZPCGFZzKAy7Ezg4RDC7Wb2c+AxM9s7hLAxdmD5Ip/P8L8CGpd4vFvx90o9xsxq4B8Dl2QlusyoSJ8xs47AEKBLCGFtlmLLlPL6XA/YG5hiZp/hY53j8nzitiLv85fAuBDCDyGEhcA8/A9AvqpIny8AngEIIbwL1MaLjBWqCv1/r4x8TvjTgRZm1tzMauKTsuM2O2Yc0KP4fjfgzVA8G5Knyu2zme0PPIAn+3wf14Vy+hxCWB5CaBRCaBZCaIbPW3QJIcyIE25aVOR3+wX87B4za4QP8SzIYozpVpE+fwEcBWBmP8UT/uKsRpld44Bzi1frHAwsDyF8k8oL5u2QTghhvZn1BV7FZ/j/EEKYbWY3ADNCCOOA0fjHvvn45Ej3eBGnroJ9HgZsAzxbPD/9RQihS7SgU1TBPheUCvb5VeAYM/sY2AAMDCHk7afXCvZ5APCgmV2JT+Cel88ncGb2FP5Hu1HxvMS1wFYAIYT78XmK44D5wGrg/JTbzON/LxERqYR8HtIREZFKUMIXEUkIJXwRkYRQwhcRSQglfBGRhFDCFxFJCCV8EZGE+D82gu7DpwxQfQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "C = np.loadtxt('coefficient.txt')\n",
    "print(C)\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "f = 0\n",
    "x = np.linspace(0,1,101)\n",
    "for k in range(0,4):\n",
    "    f = f+C[k]*Bernstein(k,3,x) \n",
    "\n",
    "plt.plot(x,f,'b-')\n",
    "plt.grid()"
   ]
  }
 ],
 "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"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
