{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 関数のグラフを描く\n",
    "\n",
    "本日の授業では、以下の内容を解説します。\n",
    "\n",
    "- Python言語の関数の作成方法\n",
    "- 与えられた数学関数のグラフの描画方法\n",
    "\n",
    "（２つの「関数」の意味は異なることに注意してください。）\n",
    "\n",
    "Pythonの教科書の使用\n",
    "- 関数の作成：第３章の第２節（62ページから65ページ）を参考にしてください。第３章の他の節についても、読んでみてください。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Python言語の関数\n",
    "\n",
    "## 1.1 Python言語の関数とは\n",
    "\n",
    "関数は「データを受け取って、処理を行い、結果を返す」という機能を持つ仕組みです。\n",
    "\n",
    "例えば、pow(x,n)関数は与えられる変数$x$と$n$に対して、$x^n$の値を計算してくれます。この例における$x$と$n$のことを「引数」、関数の返す値$x^n$のことを「返り値」（または「戻り値」）と呼びます。\n",
    "\n",
    "関数を使えば、プログラミング言語に予め用意されている計算法を容易に利用できます。また、関数を使うと、OSの機能も利用できます。例えば、print()関数を使って、与えられる変数の値を画面に出力できます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "512\n"
     ]
    }
   ],
   "source": [
    "#例：pow関数とprint関数\n",
    "value = pow(8,3)\n",
    "print(value)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 関数の定義方法\n",
    "\n",
    "Pythonの関数定義には、以下の構文を使います（defはdefineを意味します）。\n",
    "<pre>\n",
    "def 関数名(引数1,引数2,…):\n",
    "  関数の中の処理\n",
    "  return 返り値\n",
    "</pre>\n",
    "\n",
    "構文に関する説明\n",
    "- 関数の名前と括弧の最後に「：」を付けてください。\n",
    "- 関数の中身はインデント付きのコードブロックに書きます。\n",
    "- 引数の個数は自由です。引数が１つでも、引数が無くても良いです（その場合にも括弧は必要です）。\n",
    "- 関数の返り値は無くても良いです（その場合、returnの行は不要です）。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.3 関数定義の例\n",
    "\n",
    "与えられる変数$x$の３乗を返す関数を作ってみます。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#関数定義の例\n",
    "def my_pow(x):\n",
    "  value = x*x*x\n",
    "  return value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1000"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#定義された関数を呼び出します。\n",
    "my_pow(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 演習1\n",
    "\n",
    "1.1 与えられる引数$x$,$y$に対して、10*$x$+$y$を返す関数を作りなさい。関数名を「my_add」とします。また、定義された関数をmy_add(5,3)、my_add(9,1)で呼び出してみてください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#演習1.1のコードをここに書いてください。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.2 与えられる引数$n$に対して、$1$から$n$までの整数の和を計算して、その値を出力する関数 my_sum(n) を作成してください。この場合、返り値は不要です。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "#演習1.2のコードをここに書いてください。\n",
    "#以下のコードに書かれている passは「何もしない」を意味する文です。演習するときには passを消してください。\n",
    "def my_sum(n):\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_sum(5000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 関数のグラフを描く"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "関数$f(x)$のグラフは、曲線$y=f(x)$上の点列を使って表現できます。以下の例では、区間$[0,1]$における指数関数$\\exp(x)$のグラフの描き方を説明します。\n",
    "\n",
    "まず、区間$[0,1]$における等分割の点列x_listを作ります。等分割の間隔をh=0.01とします。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "h=0.01\n",
    "x_list=[]\n",
    "n_list=range(0,101)\n",
    "for n in n_list:\n",
    "    x=n*h\n",
    "    x_list.append(x)\n",
    "#print(x_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "次に、曲線$y=\\exp(x)$上の点のリストを作成するために、x_listに対するy_listを作成します。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "y_list=[]\n",
    "for x in x_list:\n",
    "    y=math.exp(x)\n",
    "    y_list.append(y)\n",
    "#print(y_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最後に、x_listとy_listによって折れ線を描きます。"
   ]
  },
  {
   "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": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(x_list,y_list,'b-')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上記のコードをまとめて、$\\exp(x)$のグラフを描画する関数を定義します。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw_exp():\n",
    "    #x_listを作成します。\n",
    "    h=0.01\n",
    "    x_list=[]\n",
    "    n_list=range(0,101)\n",
    "    for n in n_list:\n",
    "        x_list.append(n*h)\n",
    "\n",
    "    #y_listを作成します。\n",
    "    import math\n",
    "    y_list=[]\n",
    "    for x in x_list:\n",
    "        y=math.exp(x)\n",
    "        y_list.append(y)\n",
    "\n",
    "    #x_list,y_listのグラフを描画します。\n",
    "    import matplotlib.pyplot as plt\n",
    "\n",
    "    plt.plot(x_list,y_list,'b-')\n",
    "    plt.grid()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "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": [
    "draw_exp()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 演習2 (レポート課題)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "関数$f(x)=\\sqrt{x}+1$のグラフの描画を考えます。\n",
    "\n",
    "###  演習2.1\n",
    "\n",
    "与えられる引数$x$に対して、$\\sqrt{x}+1$の値を返すPythonの関数my_f(x)を定義します。\n",
    "- 数学関数$\\sqrt{x}$は、Pythonではmath.sqrt(x)です。注意：パッケージの導入「import math」が必要です。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.7320508075688772\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "print(math.sqrt(3)) #Square root (sqrt)の使用例\n",
    "\n",
    "def my_f(x):\n",
    "    #ここに関数の中身を書いてください。\n",
    "    pass\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  演習2.2\n",
    "\n",
    "関数my_f(x)を利用して、区間$[0,1]$における$f(x)$のグラフを描画するPythonの関数draw_f()を作成してください。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "#演習2.2のコードをここに書いてください。\n",
    "def draw_f():\n",
    "    pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習2.3 (オプション)\n",
    "\n",
    "余裕のある方は、任意に指定された区間$[a,b]$における$f(x)$のグラフを描画するPythonの関数draw_f(a,b)を作成してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "#演習2.3のコードをここに書いてください。\n",
    "def draw_f(a,b):\n",
    "    pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. 複数のグラフを描く"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "複数の関数のグラフを同じ座標系に表示することが可能です。関数のグラフを区別するために、ラベル（label）と凡例（legend）を使用します。\n",
    "\n",
    "以下では、$y=\\sin(x)$と$y=\\cos(x)$のグラフを描いています。ラベル（label）と凡例（legend）の使用方法を確認してください。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "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 math\n",
    "\n",
    "#x_listを作成します。\n",
    "h=0.01\n",
    "x_list=[]\n",
    "n_list=range(0,1001)\n",
    "for n in n_list:\n",
    "    x_list.append(n*h)\n",
    "\n",
    "#y=sin(x)の点　y1_listを作成します。\n",
    "y1_list=[]\n",
    "#y=cos(x)の点　y2_listを作成します。\n",
    "y2_list=[]\n",
    "for x in x_list:\n",
    "    y1_list.append(math.sin(x))\n",
    "    y2_list.append(math.cos(x))\n",
    "\n",
    "#x_list,y1_list,y2_listのグラフを描画します。\n",
    "plt.plot(x_list,y1_list,'r-', label=\"Sin(x)\")\n",
    "plt.plot(x_list,y2_list,'b-', label=\"Cos(x)\")\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##　演習3 (レポート課題)\n",
    "\n",
    "この演習では、関数$y=\\exp(x)$のテイラー展開多項式のグラフを描いて、テイラー展開多項式の性質を確認します。\n",
    "\n",
    "-  目標関数： $y=\\exp(x)$\n",
    "-  1次までの展開多項式： $y_1 = 1+x$\n",
    "-  2次までの展開多項式： $y_2 = 1+x+x^2/2$\n",
    "-  3次までの展開多項式： $y_3 = 1+x+x^2/2+x^3/6$\n",
    "\n",
    "以下の要求に従って、上記の関数のグラフを同じ図に描き、検討してください。\n",
    "\n",
    "- 関数描画の$x$の範囲を$[0,2]$とします。\n",
    "- ラベルと凡例を使用して、それぞれの関数のグラフを区別してください。\n",
    "- テイラー展開多項式$y_1,y_2,y_3$と元の関数$y$との関係を説明してください。\n",
    "- 【チャレンジ】$y=\\exp(x)$の$n$次までの展開多項式のグラフを描画する関数$\\text{draw_Taylor}(n)$を作成してみてください。\n",
    "\n",
    "\n",
    "参考：[テイラーの定理（Wikipediaのページ）](https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%A4%E3%83%A9%E3%83%BC%E3%81%AE%E5%AE%9A%E7%90%86)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "#ここに演習3のコードを書いてください。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "（ここに演習3のグラフに関する考察と結論を書いてください。）\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  4. Python関数の中の変数（オプション）\n",
    "\n",
    "関数の中で使用する変数が関数の中で定義されていない場合、関数の外で定義されている変数が参照されます。 この時、関数の中でaの値を修正してはいけません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Output of a+x =  103\n"
     ]
    }
   ],
   "source": [
    "#例 4.1：\n",
    "a = 100\n",
    "def my_f(x): \n",
    "  b = a+x\n",
    "  return b\n",
    "\n",
    "print(\"Output of a+x = \", my_f(3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "関数の中で定義する変数の名前が既に関数の外で定義されている変数の名前と一致する場合、関数の中の変数と関数の外の変数とは「独立」に扱われます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Output of a+x =  13\n",
      "関数実行後のaの値は a =  100\n"
     ]
    }
   ],
   "source": [
    "#例 4.2：\n",
    "a = 100\n",
    "def my_g(x): \n",
    "  a = 10\n",
    "  b = a+x\n",
    "  return b\n",
    "\n",
    "print(\"Output of a+x = \", my_g(3))\n",
    "print(\"関数実行後のaの値は a = \",a)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "関数の中で関数の外の変数の値を修正したい場合には、[global]という宣言の使用が必要です。以下の例を参考にしてください。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Output of a+x =  1003\n",
      "関数実行後のaの値は a =  1000\n"
     ]
    }
   ],
   "source": [
    "#例 4.3：\n",
    "a = 100\n",
    "def my_h(x):\n",
    "    global a\n",
    "    a = a*10\n",
    "    b = a+x\n",
    "    return b\n",
    "\n",
    "print(\"Output of a+x = \", my_h(3))\n",
    "print(\"関数実行後のaの値は a = \", a)"
   ]
  }
 ],
 "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
}
