LoginSignup
6
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-09-16

最近中学で一次方程式のグラフをやっていて「これ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も初心者なのでアドバイス等お願いします。

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

6
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3