SymPy入門

代数の計算に使えるSymPyについてまとめました。

インポート

import sympy

変数の宣言

x = sympy.Symbol("x") # Symbolの先頭は大文字。
y = sympy.Symbol("y")

展開と因数分解

expr1 = (x + y) ** 5
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)

結果
(y + 1)**2

分数

a = sympy.Rational(1, 3) # Rationalの先頭は大文字。
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)

結果
[2, 3, 5, 7, 11, 13, 17, 19]
17
7
True

素因数分解

f = sympy.factorint(53235)
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)

結果
{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)

結果
3*x**2 + 2*x + 1

コメント

タイトルとURLをコピーしました