「y = ax + b で a を変えると傾きが変わり、b を変えると切片が変わる」と教科書で習う。文字での説明だけだと頭に入りにくいけれど、スライダーを動かしながらグラフが変形する様子を見ると、関数の本質が一発で分かる。
今日のゴール
- Google Colab で matplotlib を使い、関数のグラフを描く
- スライダーで係数を変えながら、リアルタイムで形を観察する
- 一次関数 → 二次関数 → 三角関数 と段階的に試す
Step 1: 環境準備
(colab.research.google.com)で新しいノートブックを作ります。matplotlib と numpy は標準で入っているので、すぐコードを書けます。
Step 2: 一次関数 y = ax + b
スライダー付き一次関数
Python
import numpy as npimport matplotlib.pyplot as pltfrom ipywidgets import interact, FloatSlider
@interact(a=FloatSlider(min=-3, max=3, step=0.1, value=1), b=FloatSlider(min=-5, max=5, step=0.5, value=0))def plot_linear(a, b): x = np.linspace(-10, 10, 100) y = a * x + b plt.figure(figsize=(8, 6)) plt.plot(x, y, linewidth=2) plt.axhline(0, color="gray", linewidth=0.5) plt.axvline(0, color="gray", linewidth=0.5) plt.grid(True, alpha=0.3) plt.title(f"y = {a}x + {b}") plt.ylim(-15, 15) plt.show()
実行すると
セル下にスライダーが2つ出てきて、a と b を動かすたびにグラフが変形します。「a の符号で右上がり/右下がりが変わる」「b で線が上下に動く」を体感。
Step 3: 二次関数 y = ax² + bx + c
二次関数(頂点・軸の動きを観察)
Python
@interact(a=FloatSlider(min=-2, max=2, step=0.1, value=1), b=FloatSlider(min=-5, max=5, step=0.5, value=0), c=FloatSlider(min=-10, max=10, step=1, value=0))def plot_quadratic(a, b, c): x = np.linspace(-10, 10, 200) y = a * x**2 + b * x + c # 頂点 vertex_x = -b / (2 * a) if a != 0 else 0 vertex_y = a * vertex_x**2 + b * vertex_x + c plt.figure(figsize=(8, 6)) plt.plot(x, y, linewidth=2) plt.scatter([vertex_x], [vertex_y], color="red", s=100, label=f"頂点 ({vertex_x:.2f}, {vertex_y:.2f})") plt.axhline(0, color="gray", linewidth=0.5) plt.axvline(0, color="gray", linewidth=0.5) plt.legend() plt.grid(True, alpha=0.3) plt.ylim(-30, 30) plt.show()頂点の x 座標 `-b/(2a)` を赤点で表示するようにしているので、「平方完成」が幾何的に何を意味するかが一目で分かる。
Step 4: 三角関数 y = A sin(ωx + φ)
三角関数(振幅・周期・位相)
Python
@interact(A=FloatSlider(min=0.5, max=3, step=0.1, value=1, description="振幅 A"), omega=FloatSlider(min=0.5, max=4, step=0.1, value=1, description="角振動数 ω"), phi=FloatSlider(min=-np.pi, max=np.pi, step=0.1, value=0, description="位相 φ"))def plot_sin(A, omega, phi): x = np.linspace(0, 4 * np.pi, 400) y = A * np.sin(omega * x + phi) plt.figure(figsize=(10, 4)) plt.plot(x, y, linewidth=2) plt.axhline(0, color="gray", linewidth=0.5) plt.title(f"y = {A:.1f} sin({omega:.1f}x + {phi:.2f})") plt.ylim(-3.5, 3.5) plt.grid(True, alpha=0.3) plt.show()発展:合成波(フーリエ級数の入口)
三角関数を重ね合わせると、四角い波・のこぎり波・三角波など、複雑な波が作れます。これがフーリエ級数の基本です。
矩形波の近似
Python
x = np.linspace(0, 4 * np.pi, 1000)
# 奇数の sin を足し合わせると矩形波に近づくplt.figure(figsize=(10, 4))for n_terms in [1, 3, 5, 11, 31]: y = sum(np.sin((2 * k - 1) * x) / (2 * k - 1) for k in range(1, n_terms + 1)) plt.plot(x, y, label=f"{n_terms} 項", alpha=0.7)plt.legend()plt.title("奇数次の sin を足し合わせると矩形波になる(フーリエ級数)")plt.show()
に頼む使い方
prompt:自分の習った関数で実験
今 高校2年で、対数関数を授業で習いました。
y = log(x), y = log(x - 2) + 3, y = log(x²) など、対数関数の挙動をスライダーで動かせるグラフを Colab で作ってください。
底(base)を 2, e, 10 から選べるようにして、底が変わると形がどう変わるかも見たいです。 想定される実行結果(例示)
承知しました。対数関数の3パターンを切り替えて見られるColabコードを書きます。
```python
import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider, Dropdown, fixed
bases = {"2": 2, "e": np.e, "10": 10}
@interact(base=Dropdown(options=list(bases.keys()), value="e"),
shift_x=FloatSlider(min=-3, max=3, step=0.5, value=0),
shift_y=FloatSlider(min=-3, max=3, step=0.5, value=0))
def plot_log(base, shift_x, shift_y):
b = bases[base]
x = np.linspace(0.01, 10, 200)
y = np.log(x - shift_x) / np.log(b) + shift_y
plt.figure(figsize=(8, 6))
plt.plot(x, y, linewidth=2, label=f"y = log_{base}(x - {shift_x}) + {shift_y}")
plt.axhline(0, color="gray"); plt.axvline(shift_x, color="red", linestyle="--", alpha=0.5)
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
```
ポイント:
- 「底」をプルダウンで選択(2, e, 10)
- shift_x で漸近線(x = shift_x)が動く
- shift_y で全体が上下にスライド
- 底が大きいほど傾きが緩やか、e が「中間」次回予告
EP.02 では三角関数を実用に。sin/cos で円を描き、ドレミの音を生成します。数学が音楽になる瞬間を体験。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。