Julia(SymPy)で有理関数を部分分数分解、通分する方法

どうも、木村(@kimu3_slime)です。

今回は、Julia(SymPy)で有理関数(多項式の分数関数)を部分分数分解、通分する方法を紹介します。

 



準備

SymPyを使うので、持っていなければインストールしておきましょう。

準備として、以下のコードを実行しておきます。

 

部分分数分解、通分のやり方

まず、\(x\)を数式処理用の変数として用意しましょう。

 

例として、

\[ \begin{aligned}\frac{1}{x \left(x + 2\right)}\end{aligned} \]

を部分分数分解します。「apart(数式)」が部分分数分解をする関数です。

\[ \begin{aligned}- \frac{1}{2 \left(x + 2\right)} + \frac{1}{2 x}\end{aligned} \]

確かに、部分分数分解された結果が返ってきました。

この手順を逆にたどる、つまりいくつかの分数関数をひとつにまとめる(通分)するには、「simplify(数式)」を使えば良いです。

\[ \begin{aligned}- \frac{1}{2 x + 4} + \frac{1}{2 x}\end{aligned} \]

\[ \begin{aligned}\frac{1}{x \left(x + 2\right)}\end{aligned} \]

 

もう少し難しい例でも、部分分数分解できます。

\[ \begin{aligned}\frac{x}{\left(x^{2} + 1\right) \left(x^{2} + 4\right)}\end{aligned} \]

\[ \begin{aligned}- \frac{x}{3 \left(x^{2} + 4\right)} + \frac{x}{3 \left(x^{2} + 1\right)}\end{aligned} \]

 

\[ \begin{aligned}\frac{x^{3} + 3 x + 1}{\left(x^{2} + 1\right) \left(x^{2} + 4\right)}\end{aligned} \]

\[ \begin{aligned}\frac{x – 1}{3 \left(x^{2} + 4\right)} + \frac{2 x + 1}{3 \left(x^{2} + 1\right)}\end{aligned} \]

 

\[ \begin{aligned}\frac{x^2}{x^5-5x^3+4x}\end{aligned} \]

\[ \begin{aligned}\frac{1}{6 \left(x + 2\right)} – \frac{1}{6 \left(x + 1\right)} \\- \frac{1}{6 \left(x – 1\right)} + \frac{1}{6 \left(x – 2\right)}\end{aligned} \]

 

ただし、分母(割る多項式)が有理数解を持たない(無理数解を持つ)ケースでは、うまく部分分数分解してくれませんでした。

\[ \begin{aligned}\frac{1}{x^{2} – 2}\end{aligned} \]

手動で分母を因数分解しておいても、結局同様の扱いをされてしまいます。

\[ \begin{aligned}\frac{1}{x^{2} – 2}\end{aligned} \]

ただし、逆の操作(通分)はできます。手動で部分分数分解しておいた式を与えて、それを単純化すると、きちんと元に戻ります。

\[ \begin{aligned}- \frac{\sqrt{2}}{4 \left(x + \sqrt{2}\right)} + \frac{\sqrt{2}}{4 \left(x – \sqrt{2}\right)}\end{aligned} \]

\[ \begin{aligned}\frac{1}{x^{2} – 2}\end{aligned} \]

 

また、文字を含む一般的な有理関数に対し、部分分数分解できないか試しましたが、できませんでした。

\[ \begin{aligned}\frac{x + 1}{\left(- a + x\right) \left(x – 1\right)}\end{aligned} \]

\(x\)以外に含む変数は\(a\)ひとつですが、結果はエラーを返します。

ほしい結果があるならば、\(a\)を具体的な値に置き換えて試すと良いでしょう。「数式.subs(変数,値)」で代入しましょう。\(a=0,1,2\)のケースの有理関数、その部分分数分解を表示できます。

\[ \begin{aligned}\left[ \begin{array}{r}\frac{x + 1}{x \left(x – 1\right)}\\\frac{x + 1}{\left(x – 1\right)^{2}}\\\frac{x + 1}{\left(x – 2\right) \left(x – 1\right)}\end{array} \right]\end{aligned} \]

\[ \begin{aligned}\left[ \begin{array}{r}\frac{2}{x – 1} – \frac{1}{x}\\\frac{1}{x – 1} + \frac{2}{\left(x – 1\right)^{2}}\\- \frac{2}{x – 1} + \frac{3}{x – 2}\end{array} \right]\end{aligned} \]

 

以上、Julia(SymPy)で有理関数(多項式の分数関数)を部分分数分解、通分する方法を紹介してきました。

うまくいかないケースもありますが、多くの場合できちんと部分分数分解を計算してくれます。手計算だと計算ミスもしやすいので、検算用として使うのも良いでしょう。

木村すらいむ(@kimu3_slime)でした。ではでは。

 

1から始める Juliaプログラミング
進藤 裕之(著), 佐藤 建太(著)
コロナ社 (2020-03-26T00:00:01Z)
5つ星のうち4.5
¥7,353 (コレクター商品)

 

こちらもおすすめ

Julia(SymPy)で多項式の展開・因数分解、方程式を解く方法

Juliaで1変数関数のグラフを描く方法(多項式、指数対数、三角関数)