2022年度計算機演習A・B

第6回:関数のグラフ

1. 関数のグラフの描画

1.1. 基本

前々回と前回の授業では、数列のグラフを描画する方法について学びました。今回の授業では、関数のグラフを描画する方法について学びます。

※「関数」という言葉は、数学における関数とプログラミングにおける関数の両方の意味で使うことに注意してください。

関数のグラフの描画においても、数列の場合と同様に次が基本となります。

  1. 複数の点の $x$ 座標(横軸の座標)を格納したリストと $y$ 座標(縦軸の座標)を格納したリストを用意する。

  2. matplotlib.pyplotライブラリのplot関数を用いて、点を線分で結んだ折れ線グラフを描画する。

「折れ線グラフ」であることが気になるかもしれませんが、点の個数(リストの要素数)を多くすることであたかも滑らかに見えるグラフを描画することができます。

1.2. 例

例として、区間 $[0,1]$ における関数 $y=e^x$ のグラフを描画してみます。

まず、区間 $[0,1]$ を $101$ 個の点に分割したリスト x_list を作成します。

※小数(浮動小数点数)の計算では誤差が生じるため値がずれている箇所がありますが、グラフの描画に支障はありません。

次に、x_list の各要素に対応する関数の値を計算したリスト y_list を作成します。

※実は、NumPyというライブラリを利用すると x_list と y_list を簡潔なコードで作成することができますが、ここではプログラムの意味を理解するために敢えてそのようにはしません。NumPyの使い方は、後ほど計算機演習Bの授業で説明します。

最後に、x_list と y_list を用いて折れ線グラフを描画します。

演習1

区間 $[-\pi,\pi]$ における関数 $y=\sin x$ と $y=\cos x$ のグラフを描画してください。ただし、二つのグラフを一つの図にまとめて表示すること。

2. マクローリン展開

2.1. 数学的定義

無限回微分可能な関数 $f:\mathbb{R}\to\mathbb{R}$ に対して、多くの場合に

$$ f(x)=\sum_{k=0}^{\infty}\frac{f^{(k)}(0)}{k!}x^k=f(0)+f^{(1)}(0)x+\frac{f^{(2)}(0)}{2}x^2+\frac{f^{(3)}(0)}{6}x^3+\cdots $$

が成り立ちます(ここで、$f^{(k)}$ は $f$ の $k$ 回微分)。これを、関数 $f$ のマクローリン展開(Maclaurin expansion)と呼びます。

※マクローリン展開可能でない(級数が収束しない or 収束しても元の関数と一致しない)ような関数も存在します。

※マクローリン展開は、テイラー展開(Taylor expansion)の特別な場合です。

マクローリン展開における級数の部分和

$$ \sum_{k=0}^{n}\frac{f^{(k)}(0)}{k!}x^k $$

を、関数 $f$ の $n$ 次マクローリン多項式(Maclaurin polynomial)と呼びます。

$n$ 次マクローリン多項式は、次数 $n$ が大きくなるほどに元の関数 $f$ の良い近似を与えます。

2.2. 指数関数 $e^x$ のマクローリン展開

ネイピア数 $e$ を底とする指数関数 $e^x$ をマクローリン展開すると、次のようになります。

$$ e^x=\sum_{k=0}^{\infty}\frac{1}{k!}x^k=1+x+\frac{1}{2}x^2+\frac{1}{6}x^3+\cdots $$

したがって、$e^x$ の $1$ 次マクローリン多項式は

$$ 1+x, $$

$2$ 次マクローリン多項式は

$$ 1+x+\frac{1}{2}x^2, $$

$3$ 次マクローリン多項式は

$$ 1+x+\frac{1}{2}x^2+\frac{1}{6}x^3 $$

となります。

演習2

区間 $[-4,4]$ における関数 $y=e^x$、その $1$ 次マクローリン多項式、$2$ 次マクローリン多項式、$3$ 次マクローリン多項式のグラフを描画してください。ただし、四つのグラフを一つの図にまとめて表示すること。

演習3(オプション)

区間 $[a,b]$ における関数 $y=e^x$ とその $n$ 次マクローリン多項式のグラフを描画する関数 draw_exp_Maclaurin(a,b,n) を定義してください。ただし、二つのグラフを一つの図にまとめて表示すること。

$a=-6$、$b=6$、$n=5$ の場合と $a=-6$、$b=6$、$n=7$ の場合について、定義した関数を呼び出してください。

3. Pythonの関数における変数の扱い(参考)

これまできちんと説明をしていませんでしたが、Pythonにおいて変数には使用の有効範囲(スコープ)があります。

関数定義の中で初期化や代入が行われた変数(引数の変数を含む)をローカル変数(local variable)と呼び、ローカル変数の有効範囲はその関数の中だけに限られます。すなわち、関数の外でローカル変数の値を参照することはできず、参照しようとするとエラーになります。

関数定義の外で初期化や代入が行われた変数をグローバル変数(global variable)と呼びます。関数の中と外でそれぞれ同じ名前のローカル変数とグローバル変数が使用されている場合、それらは完全に別物として扱われます。

関数の中では、グローバル変数の値を参照することができます。ただし、上の例から分かるように、値の変更をしようとした瞬間に別物のローカル変数が作成されることになる点には注意が必要です。

もし関数の中でグローバル変数の値を変更したい場合には、global文を用いてグローバル変数だと宣言する必要があります。

第6回レポート課題

演習1~演習3に取り組んでください。