SymPyのAssumptionsとは
import sympy
x = sympy.Symbol('x')
y = sympy.sqrt(x**2)
print(sympy.simplify(y)) # sqrt(x**2)
デフォルトでSymPyのシンボルを定義した上記の場合、 $x$ は任意の複素数として解釈される。そのため、simplify()
により数式 $y$ の簡略化を実行しても、正の実数の時に成立する $y = \sqrt{x^2} \Rightarrow y = x$ という変換は行われない。
import sympy
x = sympy.Symbol('x', positive=True)
y = sympy.sqrt(x**2)
print(sympy.simplify(y)) # x
シンボルの定義の際、引数に positive=True
を与えることで、$x$ が正の実数として解釈され、正の実数の時に成立する $y = \sqrt{x^2} \Rightarrow y = x$ の変換が行われる。
このように、シンボルを定義する際にそのシンボルが取りうる値を定義することで、数式の変換などの処理が適切に行われる。このような定義のことをSymPyではAssumptionsと呼んでいる。
指定可能なAssumptionsの一覧
シンボルに指定できるAssumptionsは下記のようなものがある。
詳細は公式ドキュメントの一覧を参照のこと。
Assumption predicate | 日本語名称 | 集合 |
---|---|---|
commutative |
可換性 | |
infinite |
無限 | $ \{-\infty, +\infty, \tilde{\infty}\} $ 1 |
finite |
有限 | |
hermitian |
エルミート演算子の要素 | |
antihermitian |
反エルミート演算子の要素 | |
complex |
複素数 | $ z \in \mathbb{C} $ |
algebraic |
代数的数 | $ z \in \mathbb{\overline{Q}} $ |
transcendental |
超越数 | $ z \in \mathbb{C} - \mathbb{\overline{Q}} $ |
extended_real |
拡大実数 | $ x \in \mathbb{\overline{R}} $ $ (\mathbb{\overline{R}} = \mathbb{R} \cup \{-\infty, +\infty\}) $ |
real |
実数 | $ x \in \mathbb{R} $ |
imaginary |
純虚数 | $ z \in \mathbb{I} - \{0\} $ |
rational |
有理数 | $ x \in \mathbb{Q} $ |
irrational |
無理数 | $ x \in \mathbb{R} - \mathbb{Q} $ |
integer |
整数 | $ x \in \mathbb{Z} $ |
noninteger |
非整数拡大実数 | $ x \in \mathbb{\overline{R}} - \mathbb{Z} $ |
even |
偶数 | $ \{2k \mid k \in \mathbb{Z}\} $ |
odd |
奇数 | $ \{2k+1 \mid k \in \mathbb{Z}\} $ |
prime |
素数 | $ x \in \mathbb{P} $ |
composite |
合成数 | $ x \in \mathbb{N} - (\mathbb{P} \cup \{1\}) $ |
zero |
ゼロ | $ \{0\} $ |
nonzero |
非ゼロの実数 | $ x \in \mathbb{R} - \{0\} $ |
extended_nonzero |
非ゼロの拡大実数 | $ x \in \mathbb{\overline{R}} - \{0\} $ |
positive |
正の実数 | $ \{x \in \mathbb{R} \mid x \gt 0\} $ |
nonnegative |
非負の実数 | $ \{x \in \mathbb{R} \mid x \ge 0\} $ |
negative |
負の実数 | $ \{x \in \mathbb{R} \mid x \lt 0\} $ |
nonpositive |
非正の実数 | $ \{x \in \mathbb{R} \mid x \le 0\} $ |
extended_positive |
正の拡大実数 | $ \{x \in \mathbb{\overline{R}} \mid x \gt 0\} $ |
extended_nonnegative |
非負の拡大実数 | $ \{x \in \mathbb{\overline{R}} \mid x \ge 0\} $ |
extended_negative |
負の拡大実数 | $ \{x \in \mathbb{\overline{R}} \mid x \lt 0\} $ |
extended_nonpositive |
非正の拡大実数 | $ \{x \in \mathbb{\overline{R}} \mid x \le 0\} $ |
-
$\tilde{\infty}$ はComplexInfinity https://docs.sympy.org/latest/modules/core.html#complexinfinity ↩