Python
グラフ
一次方程式

一次関数の方程式グラフをPythonで描画してもらう

最近中学で一次方程式のグラフをやっていて「これPythonにやってもらえれば楽できる面白いじゃん」と思って作ることにしました。

仕様

変化の割合(傾き)と切片を入力するとグラフが表示される。
変化の割合が分数にしたい場合はy/xのような形で入力する。

使うもの

  • Python2.7(PyCharmインストールしたばっかなので・・・)
  • PyCharm community edition(デザインかっこいい!)
  • matplotlib(Mac使っていいよと言われると、とりあえずsinカーブ)
  • numpy(結構お気に入り)

流れ

  1. 変化の割合と切片を入力させる
  2. xとyのデータを作成
  3. matplotlibでグラフを描画

製作開始!

とりあえず必要なものをimport

main.py
import matplotlib.pylab as plt
import numpy as np

入力はraw_input()で行う。

main.py
# 省略
import matplotlib.pylab as plt
import numpy as np

print("Liner equation:")
le = raw_input()

式から変化の割合を取得。式は$ rx+i $のような形なので+より前の文字列が変化の割合になります。それをsplitで取得します。

main.py
import matplotlib.pylab as plt
import numpy as np

print("Liner equation:")
le = raw_input()

rate = le.split("x")[0]

次に切片を取得します。切片が0の場合を考えて取得してみます。

main.py
import matplotlib.pylab as plt
import numpy as np

print("Liner equation:")
le = raw_input()

rate = le.split("x")[0]
ic = 0 if le.split("x")[1] == "" else le.split("x")[1]

次はxとyの変化の量を初期化してあげます。

main.py
import matplotlib.pylab as plt
import numpy as np

print("Liner equation:")
le = raw_input()

rate = le.split("x")[0]
ic = 0 if le.split("x")[1] == "" else le.split("x")[1]

x_rate = 1
y_rate = 1

次に変化の割合が分数の場合(/で区切られている場合)の処理と区切られていないときの処理を作ります。

main.py
import matplotlib.pylab as plt
import numpy as np

print("Liner equation:")
le = raw_input()

rate = le.split("x")[0]
ic = 0 if le.split("x")[1] == "" else le.split("x")[1]

x_rate = 1
y_rate = 1

if rate.find("/") > -1:
    x_rate = int(rate.split("/")[1])
    y_rate = int(rate.split("/")[0])
else:
    x_rate = 1
    y_rate = 1 if rate == "" else int(rate)

あとは変化の量で配列を生成します。

main.py
import matplotlib.pylab as plt
import numpy as np

print("Liner equation:")
le = raw_input()

rate = le.split("x")[0]
ic = 0 if le.split("x")[1] == "" else le.split("x")[1]

x_rate = 1
y_rate = 1

if rate.find("/") > -1:
    x_rate = int(rate.split("/")[1])
    y_rate = int(rate.split("/")[0])
else:
    x_rate = 1
    y_rate = 1 if rate == "" else int(rate)

x = np.linspace(-x_rate / 2,x_rate,4)
y = x * y_rate + int(ic)

最後に配列からグラフを描画します。

main.py
import matplotlib.pylab as plt
import numpy as np

print("Liner equation:")
le = raw_input()

rate = le.split("x")[0]
ic = 0 if le.split("x")[1] == "" else le.split("x")[1]

x_rate = 1
y_rate = 1

if rate.find("/") > -1:
    x_rate = int(rate.split("/")[1])
    y_rate = int(rate.split("/")[0])
else:
    x_rate = 1
    y_rate = 1 if rate == "" else int(rate)

x = np.linspace(-x_rate / 2,x_rate,4)
y = x * y_rate + int(ic)

plt.plot(x,y,"r-")
plt.show()

これで完成です!

あとは実行して一次方程式を入力してあげると描画してくれます。

$ 4x+5 $
$ x+1 $
$ -3x-5 $

まだPythonも初心者なのでアドバイス等お願いします。

今気がついたけど式からグラフを出す授業終わってた・・・