LoginSignup
2
0

More than 1 year has passed since last update.

Sympyのシンボルの取りうる値を定義するAssumptionsについて

Posted at

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\} $
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0