「Python」カテゴリーアーカイブ

【数学】【PYTHON】平方根の定理で円を描く

平方根の定理はa^2+b^2=c^2なので、

円の半径rを組み込むと、

y=√r^2-x^2

で求めることができます。

import matplotlib.pyplot as plt
import numpy as np

r = 300
x = np.arange(-r, r + 1)
y = np.sqrt(r**2 - x**2)

#描画
plt.plot(x, y)
plt.axis('equal')
plt.grid(color='0.8')
plt.show()

【数学】【PYTHON】三角関数を使って円を描画する

import matplotlib.pyplot as plt
import numpy as np

#角度
th = np.arange(0, 360)

#円周上の点Pの座標
x = np.cos(np.radians(th))
y = np.sin(np.radians(th))

#描画
plt.plot(x, y)
plt.axis('equal')
plt.grid(color='0.8')
plt.show()

角度0~360に対して

x座標をコサインで、y座標をサインで計算します。

このとき、引数の角度はラジアンで与える必要があります。

【数学】【PYTHON】垂直二等分線を求める

これまでやってきたことを使って、二つの点の線分の中間を垂直に交わる直線を求めます。

例として、(0,1)と(6,5)を結ぶ線分の垂直二等分線を求めてみます。

やり方は、

①線分の傾きを求める

②線分の中点を求める

③線分と直交する直線の傾きを求める

④二つの線の切片を求める

で求めることができるみたいです。

import matplotlib.pyplot as plt
import numpy as np

#元の直線の傾きと切片
a1 = (5-1)/(6-0)
b1 = 1

#線分の中点
cx = (0 + 6) / 2
cy = (1 + 5) / 2

#線分に直交する直線の傾き
a2 = -1 / a1

#線分に直交する直線の切片
b2 = cy - a2 * cx

#直線の式
x = np.arange(0, 7)
y1 = a1*x + b1
y2 = a2*x + b2

plt.plot(x, y1)
plt.plot(x, y2)
plt.axis('equal')
plt.grid(color='0.8')
plt.show()

【数学】【PYTHON】二つの直線の交点を求める

二つの直線の交点を求めるには、

二つの直線の連立方程式を解けば求めることができます。

連立方程式はこちらでやってますね。

例えば、y = -3/2x + 6とy= 1/2x + 2の交点を求めてみました。

from sympy import Symbol, solve

x = Symbol('x')
y = Symbol('y')
ex1 = -3/2*x + 6 - y
ex2 = 1/2*x + 2 - y

print(solve((ex1, ex2)))
:~/python$ python3 simultaneous_equations.py 
{x: 2.00000000000000, y: 3.00000000000000}

【数学】【PYTHON】直線と直交する直線を求める

y=a1x+bとy=a2x+b2の直線があった場合、a1 = a2であれば、平行。

a1 × a2 = -1であれば直交するとのこと。

それを確認するためのグラフ作成です。

この例では、y=1/2x+1/2と直交する直線は、y=-2x+7なので、それを描画します。

from ast import increment_lineno
import matplotlib.pyplot as plt
import numpy as np

def function_y(x):
    return 1 / 2 * x + 1 / 2

def function_y2(x):
    return -2 * x + 7

x = np.arange(-1, 6)
y = function_y(x)
y2 = function_y2(x)

plt.plot(x, y)
plt.plot(x, y2)
plt.axis('equal')
plt.grid(color='0.8')
plt.show()

【数学】【PYTHON】連立方程式を解く

2点を通る直線のグラフを書く、の前に、連立方程式を解くコードを書いてみます。

from sympy import Symbol, solve

a = Symbol('a')
b = Symbol('b')
ex1 = a + b - 1
ex2 = 5 * a + b - 3

print(solve((ex1, ex2)))
:~/python$ python3 simultaneous_equations.py 
{a: 1/2, b: 1/2}

上のコードは1=a + b、3 = 5a + bの解を求めるコードです。

文字a,bをSymbolとして定義することによって、

ex1,ex2に式を設定し、それをsolve()にタプル式として渡します。

そうすると、解が出力されます。

Pythonすげぇ。

【数学】【PYTHON】いろいろな関数のグラフを表示する

もっと複雑なグラフを描画するには、もっと細かい単位でxの値を変化させなければなりません。

なので、pythonのnumpyライブラリを使用します。

import matplotlib.pyplot as plt
import numpy as np

def func1(x):
    return 3 * x

x = np.arange(-1.0, 1.01, 0.01)
y = func1(x)

plt.plot(x, y)
plt.grid(color='0.8')
plt.show()

npを使用するもう一つのメリットは、yの計算にfor文を使用する必要がなく、

1行で書くことができるということです。

なるほど、pythonが支持される理由はここにあるかもしれない。

【数学】【PYTHON】簡単な関数のグラフを表示する

こちらのコードを元に、簡単な関数のグラフを書いてみます。

今回はテキストにあるように、y=3x-24のグラフを表示させてみます。

import matplotlib.pyplot as plt

def func1(x):
    return 3 * x - 24

x = list(range(1,11))
y = []
for i in range(10):
    y.append(func1(x[i]))

plt.plot(x, y)
plt.grid(color='0.8')
plt.show()

簡単な関数(一次関数)ていどならこのコードでも問題無いですが、

二次関数とかになると、きれいなグラフを書くのは難しいです。

次回はそのようなグラフも書けるようにしてみます。

【数学】【PYTHON】グラフを表示する

今回から新しい章に入ります。

関数をグラフに表示しようってやつ。

まずは、グラフを表示するライブラリを使えるようにします。

matplotlibというモジュールを使用します。

$ sudo apt-get install python3-matplotlib
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7]
y = [64.3, 63.8, 63.6, 64.0, 63.5, 63.2, 63.1]

plt.plot(x, y)
plt.grid(color='0.8')
plt.show()