前回に続き今回もSymPyを用いて数式を特定の関数の性質を利用した簡素化・展開するための方法を中心に紹介したい。
1. 部分分数分解
部分分数分解を実行するにはapart()
を使用する。
expr=(3*x**2 - 2*x - 8)/(2*x**2 - 8*x) apart(expr) >3/2 + 4/(x - 4) + 1/x
多変数の場合は、部分分数に分解する変数を以下のように指定する。
apart(y/(x + 2)/(x + 1), x) >-y/(x + 2) + y/(x + 1)
2. 三角関数の簡素化
一般的な多項式を簡素化するためにはsimplif()
を用いたがm三角関数を簡素化するためにはtrigsimp()
を用いる。
以下のように基本的な三角関数の性質が反映される。
trigsimp(cos(x)**2+sin(x)**2) >1
trigsimp(cos(x)**4-2*cos(x)**2*sin(x)**2+sin(x)**4) >cos(4*x)/2 + 1/2
三角関数だけでなく、双曲線関数に対しても適用できる。例えば、
trigsimp(cosh(x)**2 + sinh(x)**2) >cosh(x)
三角関数を展開するコマンドとしてexpand_trig()
があり、三角関数の加法定理を用いて展開する。
expand_trig(cos(x + y)) >-sin(x)*sin(y) + cos(x)*cos(y)
もちろんexpand_trig()
で展開した式をtrigsimp()
を用いると元の式に戻る。
trigsimp(-sin(x)*sin(y) + cos(x)*cos(y)) >cos(x + y)
3. べき乗の簡素化
べき乗の式を簡素化するにはpowsimp()
を用いる。べき乗の簡素化を行うには、変数を正や実数などより正確に以下のように定義する必要がある。
x, y = symbols('x y', positive=True) a, b = symbols('a b', real=True)
powsim()
はべき乗の肩の計算を簡素化する。
powsimp(x**a*y**a) (x*y)**a
powsimp(x**a*x**b) >x**(a + b)
べき乗の肩の部分を展開するにはexpand_power_exp()
を用いる。
expand_power_exp((x*y)**a) >(x*y)**a
2変数を展開する場合はexpand_power_base()
expand_power_base((x*y)**a) >x**a*y**a
3変数を展開する場合はpowdenest()
powdenest((x**a)**b) >x**(a*b)
4. 対数関数の簡素化
対数関数の性質を利用した展開・簡素化を実行できる。まず対数関数の展開はexpand_log()
を使用する。
expand_log(log(x*y)) >log(x) + log(y)
expand_log(log(x/y)) >log(x) - log(y)
expand_log(log(x**2)) >2*log(x)
展開とは逆にまとめる場合はlogcombine()
を用いる。
logcombine(log(x) - log(y)) >log(x/y)
logcombine(2*log(x)) >log(x**2)
5. まとめ
今回は部分分数分解、数式を三角関数、べき乗、対数関数の性質を利用した簡素化・展開する方法について紹介した。