[SymPy] 約分と既約分数

[SymPy] 約分と既約分数

約分と既約分数

 分数の分子と分母を公約数で割ることを 簡約 (約分) といいます。たとえば、
 
\[\frac{18}{12}\tag{1}\]
について、分母と分子を公約数 $2$ で割ると
 
\[\frac{18}{12}=\frac{9}{6}\tag{2}\]
となり、これは約分の1つの形です。分子と分母を最大公約数で割ると、それ以上は約分できない形に変形されます。(1) の場合は最大公約数 $6$ で割ることにより、
 
\[\frac{18}{12}=\frac{3}{2}\tag{3}\]
を得ます。分母と分子が互いに素 (最大公約数が $1$) であるような分数を 既約分数 とよび、既約でない (さらに約分できる) 分数のことを 可約分数 とよびます。

 有理式についても、分子と分母を共通因子で割ることによって簡約 (約分) できます。
 
\[\frac{x(x-1)(x-2)}{x(x-1)(y+1)}=\frac{x-2}{y+1}\tag{4}\]
 上の式の右辺は分子と分母が共通因子をもたないので、やはり既約分数とよばれますが、$x$ と $y$ には任意性があるので、分母と分子が互いに素であるとは限りません。分数と有理式では既約の意味は異なります。

[参考文献] https://ja.wikipedia.org/wiki/分数

 fractions.Fraction(a, b) は、a と b が互いに素でない場合であっても、自動的に約分されて既約分数を返します。

# Fractionクラスをインポート
from fractions import Fraction

# Fractionインスタンスを生成
x = Fraction(40,208)

print(x)
5/26

 SymPy の Rational(a, b) も既約分数を返します。
 たとえば、Rational(20, 48) は既約分数 5/12 を返します。

from sympy import *

x = Rational(20, 48)

print(x)
5/12

 

cancel()

 SymPy の cancel()関数は有理式を 約分 します。

# CANCEL

from sympy import *
var ("x")

y = (x*log(x) + log(x)) / (x + 1)

# yを約分
y = cancel(y)

print(y)
log(x)