以前学んだmatplotlibの記事を応用し、「Pythonを使って数学の視覚化をする」シリーズの第二回をお届けします。前回の一次関数(直線)に続き、今回のテーマは曲線を描く「二次関数(放物線)」です。数式だけでは想像しにくい曲線の変化も、プログラミングを使えば一瞬で視覚化することができます。
二次関数(放物線)をプログラムする
二次関数とは、グラフに描くと「U字型」または「逆U字型」の滑らかな曲線になる数式のことです。基本となる形の数式は次のように表されます。
$$ y = ax^2 $$
この式で一番重要なのは、\(x\) が「2乗」されているという点です。この2乗の計算があるおかげで、直線ではなく曲線(放物線と呼ばれます)になります。
Pythonで「2乗(累乗)」を計算する方法
プログラムで二次関数のグラフを描く前に、Pythonでの「2乗」の計算方法を知っておく必要があります。Pythonでは、掛け算にアスタリスク1つ(*)を使いますが、2乗や3乗といった「累乗」を計算する際にはアスタリスクを2つ(**)使います。
x * 2: xの2倍x ** 2: xの2乗
この x ** 2 を使うことで、二次関数の\(x^2\)をプログラム上で簡単に表現することができます。
プログラムを使ってこの数式のグラフを描くには、次のような順番で処理を行います。
- xのデータを用意する: まず、横軸となる「xのデータ」を、例えば-10から10のように複数用意してリストにします。
- yのデータを計算する: 次に、用意したxの数字を1つずつ取り出し、
x ** 2のように計算して、対応する「yのデータ」のリストを作ります。 - グラフを描画する: 最後に、完成したxとyのリストを
matplotlibに渡すことで、点と点が結ばれて1本の放物線が描かれます。
では、実際にやってみましょう。
Google Colaboratory (Colab) を開いて新しいノートブックを作成し、\(y = x^2\)のグラフを描画するプログラムを書いてみます。
グラフが見やすくなるように、背景に目盛り線を出す plt.grid(True) も合わせて使ってみましょう。
import matplotlib.pyplot as plt
# xのデータを用意する(-10から10までの整数のリスト)
x_data = list(range(-10, 11))
# yのデータを計算する (内包表記を使って y = x^2 を計算)
y_data = [x ** 2 for x in x_data]
# グラフを描画する
plt.plot(x_data, y_data)
# グラフにグリッド(目盛り線)を表示する
plt.grid(True)
# グラフを画面に表示する
plt.show()とセルに入力して実行してみましょう。すると結果は

のように表示されます。
プログラムの解説(基本の放物線グラフ)
- ライブラリの読み込み(1行目): グラフを描画するための
matplotlib.pyplotをpltという名前で使えるように準備しています。 - xデータの準備(4行目):
range(-10, 11)を使って、-10から10までの数値を生成し、それをlist()でリストに変換して変数x_dataに代入しています。 - yデータの計算(7行目): 内包表記を使い、
x_dataから数値を1つずつxに取り出してx ** 2(2乗)の計算を行っています。計算結果が自動的に新しいリストとしてまとまり、変数y_dataに代入されます。マイナスの数も2乗するとプラスになるため、グラフがU字型になります。 - グラフの描画と設定(10~13行目):
plt.plot()に計算したxとyのリストを渡して曲線を作成し、plt.grid(True)で背景に目盛り線を追加しています。 - グラフの表示(16行目):
plt.show()で完成したグラフを画面に表示しています。
比例定数(aの値)を変えて比較する
二次関数の式\(y=ax^2\)にある\(a\)の値を「比例定数」と呼びます。この\(a\)の数字が大きくなったり、マイナスになったりすると、グラフの「開き具合」や「向き」が変化します。複数のグラフを同じ画面に重ねて描画し、その違いを比較してみましょう。
では、実際にやってみましょう。
Colabの新しいセルに、基準となる \(y = x^2\)(\(a\) が1)に加えて、\(a\) が大きくなった \(y = 3x^2\) と、\(a\) がマイナスになった \(y = -x^2\) の3本の放物線を同時に描画するプログラムを書いてみます。
import matplotlib.pyplot as plt
# xのデータを用意する
x_data = list(range(-10, 11))
# 3つの異なるデータを計算する
y1 = [x ** 2 for x in x_data] # 基本の放物線
y2 = [3 * (x ** 2) for x in x_data] # aが3の場合
y3 = [-(x ** 2) for x in x_data] # aがマイナスの場合
# グラフを描画し、それぞれに名前(label)をつける
plt.plot(x_data, y1, label="y = x^2")
plt.plot(x_data, y2, label="y = 3x^2")
plt.plot(x_data, y3, label="y = -x^2")
# 凡例(ラベルの説明)を表示する
plt.legend()
# グラフにグリッドを表示する
plt.grid(True)
# グラフを画面に表示する
plt.show()とセルに入力して実行してみましょう。すると結果は

のように表示されます。
プログラムの解説(複数の放物線の比較)
- 複数データの計算(6~9行目): 同じ
x_dataを使って、3種類の異なる計算式でy1,y2,y3という3つのリストを作成しています。計算の順番が分かりやすいように(x ** 2)と括弧をつけてから、そこにaの値を掛け算しています。 - ラベル付きで描画(12~14行目):
plt.plot()を3回連続で実行することで、3本の曲線が重ねて描かれます。括弧の中にlabel="数式"を追加して、それぞれの線に名前をつけています。 - グラフの装飾と表示(17~23行目):
plt.legend()で凡例を表示し、plt.grid(True)で目盛り線を入れ、最後にplt.show()で画面に出力しています。
グラフを見比べると、\(a\)の値が3と大きくなるとグラフの開き方が「狭く(細く)」なり、\(a\)の値がマイナスになるとグラフが「下向き(逆U字型)」になることが一目でわかるはずです。
まとめ
今回は、Pythonとmatplotlibを使って二次関数の放物線を描画し、数式の変化を視覚化する方法について解説しました。
- 二次関数の基本: \(y = ax^2\) で表され、グラフはU字型または逆U字型の放物線になる。
- 2乗の計算: Pythonで累乗を計算するには
**を使い、x ** 2のように記述する。
プログラミングを使うことで、紙に描くのが大変な曲線のグラフも一瞬で作成できます。ぜひ\(a\)の値を0.5や-5などいろいろな数字に変えて、グラフがどう変化するか実験してみてください。

今回はこれで終了です。
今回のサンプルを用意したので、もし必要な場合は上の「Open in Colab」と書いてあるボタンをクリックしてください。なおそのままだと編集不可なので編集をしたい場合は「ドライブにコピー」をクリックしてコピーしてください。
なおGoogle ColaboratoryについてわからなかったらGoogleColaboratoryを使ってみよう_導入編をご覧ください。