以前学んだ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

のように表示されます。

プログラムの解説(基本の放物線グラフ)

  • ライブラリの読み込み(1行目): グラフを描画するためのmatplotlib.pyplotplt という名前で使えるように準備しています。
  • 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()

とセルに入力して実行してみましょう。すると結果は

放物線2

のように表示されます。

プログラムの解説(複数の放物線の比較)

  • 複数データの計算(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

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA