ふくふくHukuhuku Inc.
EP.01STEM対象: 中1以上 11分公開: 2026-05-10

関数を「動かす」:教科書のグラフを自分のパソコンで

y=ax+b、y=ax²、y=sin(x)。教科書で見るあのグラフを、係数をスライダーで操作しながら実時間で動かす。Google Colab で15分。

#中高生#数学#関数#matplotlib
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

「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()
一次関数、二次関数、三角関数のグラフを並べたサンプル出力
実際にコードを Colab で動かしたグラフ。一次・二次・三角関数のサンプル
実行すると

セル下にスライダーが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()
A: 振幅波の高さ(最大値)ω: 角振動数単位時間に何回振動するかφ: 位相波の左右ズレA周期 = 2π/ω
三角関数の3要素

発展:合成波(フーリエ級数の入口)

三角関数を重ね合わせると、四角い波・のこぎり波・三角波など、複雑な波が作れます。これがフーリエ級数の基本です。

矩形波の近似
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()
奇数次のsinを足し合わせて矩形波になる様子
項を増やすごとに矩形波に近づく(フーリエ級数の本質)

に頼む使い方

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 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp