SymPyという代数演算ができるモジュールを見つけた。今頃かよ..という突っ込みは置いといて、電磁気の学習で必ず必要なベクトル解析をやってみたい。
たいていのプログラムでは数値演算を行うのが普通だけど、SymPyいままでのプログラミングの感覚とちょっと違う。
SymPy 1.13.3のマニュアルの面白そうなところだけ実行してみる。
1 2 3 4 5 6 7 8 9 10 |
## Python 3.12.2, numpy 2.2.3, matplotlib 3.10.1, SymPy 1.13.3, PyCharm 2024.3.5 from sympy import symbols, expand, factor x, y = symbols('x y') equ = x+2*y expand_equ = expand(x*equ) print(expand_equ) # x**2 + 2*x*y print(factor(expand_equ)) # x*(x + 2*y) |
まず、使用するシンボルの定義が必要。expandで式の展開、factorで同じ変数でくくれる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
## Python 3.12.2, numpy 2.2.3, matplotlib 3.10.1, SymPy 1.13.3, PyCharm 2024.3.5 import sympy from sympy import * x = var('x') #微分 print(diff(sin(x)*exp(x), x)) # exp(x)*sin(x) + exp(x)*cos(x) #積分 print(integrate(exp(x)*sin(x) + exp(x)*cos(x))) # exp(x)*sin(x) #定積分 print(integrate(sin(x**2), (x, -oo, oo))) # sqrt(2)*sqrt(pi)/2 |
‘oo’は無限大。
実際に簡単な定積分を解いてみる。
1 2 3 4 5 6 7 8 |
## Python 3.12.2, numpy 2.2.3, matplotlib 3.10.1, SymPy 1.13.3, PyCharm 2024.3.5 import sympy from sympy import * x = var('x') ans = integrate(3*x**3+x**2, (x, 1, 3)) print(ans) # 206/3 |
手計算をすると通分とか意外と面倒だけど、sympy使えば一発で計算できる。