のんびりプログラミング生活

画像処理、CG、プログラミングなどの話題を中心にのんびり記事を書きます。不定期更新。

中高生でもわかる!解の公式と二次関数のグラフ - Python

たまに「あ^~二次関数のグラフ書きてええええ」となる日はありませんか?
え、私はありませんよ。何言ってるんですか。

二次方程式の値を求めよう

二次方程式の解は「解の公式」で求めることができます。中高生ならばみんな知ってる便利な公式ですね。

解の公式をPythonで書くとこうなります。

x1 = (-b + (b * b - 4 * a * c) ** 0.5)/(2 * a)
x2 = (-b - (b * b - 4 * a * c) ** 0.5)/(2 * a)

「**」はPythonではべき乗を表します。つまり** 0.5はルート1/2を掛けていることと同義なわけです。ただしこれは少々長いのでD=(b * b - 4 * a * c)と置くことにしましょう。

# 二次方程式の解
def roots(a, b, c):
    # 解の公式
    D = (b * b - 4 * a * c) ** 0.5
    x1 = (-b + D)/(2 * a)
    x2 = (-b - D)/(2 * a)

    print("x1 = {0:.3f}, x2 = {1:.3f}".format(x1, x2))

if __name__ == '__main__':
    a = float(input("a:"))
    b = float(input("b:"))
    c = float(input("c:"))
    roots(a, b, c)

実行例

a:1
b:3
c:2
x1 = -1.000, x2 = -2.000

a:-2
b:4
c:2
x1 = -0.414, x2 = 2.414

複素数だって求められます。
a:3
b:2
c:1
x1 = -0.333+0.471j, x2 = -0.333-0.471j

二次関数のグラフを書いてみよう

二次方程式の解が求められたところで、次は本題である二次関数のグラフを書いてみることにしましょう。
pythonでグラフを書くために、matplotlib.pyplotをインポートします。これにpltという名前を付けることにしましょう。

# 二次関数のグラフ
from pylab import savefig
import matplotlib.pyplot as plt

def draw_graph(x, y):
    plt.plot(x, y)
    plt.title("Quadratic function")
    savefig("QuadraticGraph")  # グラフを保存
    plt.show()

if __name__ == '__main__':
    x_value = range(-10, 10, 1)
    y_value = []
    a = float(input("a:"))
    b = float(input("b:"))
    c = float(input("c:"))
    for x in x_value:
        y_value.append(a*x**2 + b*x + c)
    draw_graph(x_value, y_value)

range()によってxの値を-10~10を取っています。

実行例

先ほどと同じ値を入れて、グラフがどのような形なのか確認してみましょう。
a:1
b:3
c:2
f:id:regurusu7777:20170602190714p:plain

a:-2
b:4
c:2
f:id:regurusu7777:20170602190733p:plain

a:3
b:2
c:1
f:id:regurusu7777:20170602190743p:plain

複素数もグラフにしてみると至って普通ですね。