見出し画像

Pythonで高校数学:2次関数のグラフ(1)

Pythonを使って数学の教材を作る。
教員の演示用として使うもよし,パソコン室で生徒が使うもよし。
プログラミングの課題ではないので,ソースコードを変える必要はない。
まずは,2次関数のグラフの基本。

 f(x)=a(x-p)²+q 

a,p,q の値によってグラフはどう変わるか。スライダでこれらの値を変えながら動かしてみることで,感覚を養うのが目的。「なぜそうなるのか」はあとで考えてもよい。まず現象を見せて,そうなる理由を考える,という学習手順。ここで,「覚えなさい」とやってはいけない。

最初は a=1 , p=0, q=0 のときの図

画像1

値を変える。

画像2

プログラムコードは次の通り。先頭の %matplotlib notebook はJupyter Notebook で動かすときのおまじない。コマンドラインで動かすときは,あると動かないので削除する。プログラムコードを見せる必要はないので,この行は削除してコマンドラインで動かすほうがよさそう。この画面のウィンドウが開き,終わるときはウィンドウを閉じるだけ。

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.widgets as wg
plt.figure(figsize=(6, 6))
# 余白設定
plt.subplots_adjust(left=0.25, bottom=0.25)
plt.axis([-5, 5, -3, 7])
plt.grid()
plt.axhline(0, lw=1.5, color='k')
plt.axvline(0, lw=1.5, color='k')
plt.xticks(range(-5, 6))
plt.yticks(range(-3, 8))
a = 1
p = 0
q = 0
x = np.linspace(-10, 10, 100)
y = a * (x - p)**2 + q
# plot() の戻り値の第1要素を l で受け取る
l, = plt.plot(x, y, lw=2)
plt.title('$y=a(x-p)^2+q$', fontsize = 14) 
# スライダの位置
ax_a = plt.axes([0.25, 0.15, 0.6, 0.04])
ax_p = plt.axes([0.25, 0.10, 0.6, 0.04])
ax_q = plt.axes([0.25, 0.05, 0.6, 0.04])
# スライダの設定
slider_a = wg.Slider(ax_a, 'a', -5, 5, valinit=a, valstep=0.1)
slider_p = wg.Slider(ax_p, 'p', -5, 5, valinit=p, valstep=0.1)
slider_q = wg.Slider(ax_q, 'q', -5, 5, valinit=q, valstep=0.1)
# グラフを再描画する
def update(val):
   sa = slider_a.val
   sp = slider_p.val
   sq = slider_q.val
   # l は plot.plot() の戻り値
   l.set_ydata(sa * (x - sp)**2 + sq)
slider_a.on_changed(update)
slider_p.on_changed(update)
slider_q.on_changed(update)
plt.show()

matplotlib を使ってスライダを作る方法は「高校教員のためのPython Reference」 に載せている。そこにあるのが,この例。

2次関数のグラフの学習でなかなかできるようにならないのが,定義域と最大・最小の問題。次は係数ではなく,定義域を動かすようにしてみよう。