代数の計算に使えるSymPyについてまとめました。
インポート
import sympy
変数の宣言
x = sympy.Symbol("x") # Symbolの先頭は大文字。
y = sympy.Symbol("y")
y = sympy.Symbol("y")
展開と因数分解
expr1 = (x + y) ** 5
print(expr1)
expr2 = sympy.expand(expr1)
print(expr2)
expr3 = sympy.factor(expr2)
print(expr3)
print(expr1)
expr2 = sympy.expand(expr1)
print(expr2)
expr3 = sympy.factor(expr2)
print(expr3)
結果
(x + y)**5
x**5 + 5*x**4*y + 10*x**3*y**2 + 10*x**2*y**3 + 5*x*y**4 + y**5
(x + y)**5
代入
expr1 = (x + 1) ** 2
expr2 = expr1.subs(x, y)
print(expr2)
expr2 = expr1.subs(x, y)
print(expr2)
結果
(y + 1)**2
分数
a = sympy.Rational(1, 3) # Rationalの先頭は大文字。
print(a)
b = a + a + a
print(b)
print(a)
b = a + a + a
print(b)
結果
1/3
1
一般的な言語では1/3=0.3333となってこれを3倍すると0.9999となることが多いですがsympyではきちんと1に戻ります。
素数
p = sympy.primerange(2, 20) # 2から19までの素数
print(list(p))
p = sympy.prime(7) # 7番目の素数
print(p)
n = sympy.primepi(17) # 17以下の素数の数
print(n)
b = sympy.isprime(19) # 19が素数ならばTrue
print(b)
print(list(p))
p = sympy.prime(7) # 7番目の素数
print(p)
n = sympy.primepi(17) # 17以下の素数の数
print(n)
b = sympy.isprime(19) # 19が素数ならばTrue
print(b)
結果
[2, 3, 5, 7, 11, 13, 17, 19]
17
7
True
素因数分解
f = sympy.factorint(53235)
print(f)
print(f)
結果
{3: 2, 5: 1, 7: 1, 13: 2}
3が2個、5が1個、7が1個、13が2個となります。
方程式
連立方程式
次の連立方程式を解きます。
4w+4x+6y+3z=108
6w+5x+4y+5z=126
3w+5x+3y+2z=87
2w+5x+5y+2z=92
w = sympy.Symbol("w")
x = sympy.Symbol("x")
y = sympy.Symbol("y")
z = sympy.Symbol("z")
expr1 = 4 * w + 4 * x + 6 * y + 3 * z - 108
expr2 = 6 * w + 5 * x + 4 * y + 5 * z - 126
expr3 = 3 * w + 5 * x + 3 * y + 2 * z - 87
expr4 = 2 * w + 5 * x + 5 * y + 2 * z - 92
expr5 = sympy.solve([expr1, expr2, expr3, expr4])
print(expr5)
x = sympy.Symbol("x")
y = sympy.Symbol("y")
z = sympy.Symbol("z")
expr1 = 4 * w + 4 * x + 6 * y + 3 * z - 108
expr2 = 6 * w + 5 * x + 4 * y + 5 * z - 126
expr3 = 3 * w + 5 * x + 3 * y + 2 * z - 87
expr4 = 2 * w + 5 * x + 5 * y + 2 * z - 92
expr5 = sympy.solve([expr1, expr2, expr3, expr4])
print(expr5)
結果
{w: 7, x: 8, y: 6, z: 4}
微分
次の式を微分します。
x^3+x^2+x+1
expr1 = x ** 3 + x ** 2 + x ** 1 + 1
expr2 = sympy.diff(expr1)
print(expr2)
expr2 = sympy.diff(expr1)
print(expr2)
結果
3*x**2 + 2*x + 1
コメント