Julia(SymPy)で数の集合(有限集合、整数、区間)の計算をする方法

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

今回は、Julia(SymPy)で数の集合関係の計算をする方法紹介します。

 



準備

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

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

 

数の集合関係の計算をする方法

有限集合、集合演算

「sympy.FiniteSet(要素)」で、指定した要素をもつ有限集合が構成できます。

\[ \begin{aligned}\left\{1, 2, 3, 4, 5\right\}\end{aligned} \]

 

「要素 in 集合」または「集合.contains(要素)」で、その要素が集合に含まれる\(a\in A\)かがチェックできます。

\[ \begin{aligned}\text{True}\end{aligned} \]

 

集合同士の共通部分は「A.intersect(B)」、和集合は「A+B」、差集合(補集合)は「A-B」で求められます。

\[ \begin{aligned}\left\{2, 6\right\}\end{aligned} \]

\[ \begin{aligned}\left\{2\right\}\end{aligned} \]

\[ \begin{aligned}\left\{1, 2, 3, 4, 5, 6\right\}\end{aligned} \]

\[ \begin{aligned}\left\{1, 3, 4, 5\right\}\end{aligned} \]

 

部分集合であるかどうか、\(B\subset A\)の判定は、「B.is_subset(A)」です。

 

空集合は「sympy.EmptySet」です。

\[ \begin{aligned}\emptyset\end{aligned} \]

参考:空集合が任意の集合の部分集合であるのはなぜか(空真)

 

 

数の集合と内包記法

数の集合として、SymPyにはあらかじめ用意されているものがあります。例えば

\[ \begin{aligned}\mathbb{Z}\end{aligned} \]

\[ \begin{aligned}\mathbb{R}\end{aligned} \]

などです。他にも自然数や複素数が用意されています。

詳しくは:Special Sets – SymPy 1.9 documentation

 

整数の部分集合として、偶数全体の集合を作りたいとしましょう。

「sympy.ConditionSet(x, xに関する関係式,  全体集合)」で、全体集合のうちxに関する条件を満たす要素の集合が作れます。

\[ \begin{aligned}\left\{x\; \middle|\; x \in \mathbb{Z} \wedge x\bmod{2} = 0 \right\}\end{aligned} \]

「sympy.Mod(x,2)」は\(x\)を2で割ったあまりで、それが0に等しい=偶数の集合です。

 

条件の部分を「sympy.Mod(x,2)==0 」と直接的に指定すると、数学的には正しいように見えますが、うまくいきません。

\[ \begin{aligned}\emptyset\end{aligned} \]

これは「sympy.Mod(x,2) == 0」が\(x\)によらず常にfalseの文

として解釈されているためですね。「Eq」を使って等式として表せば、\(x\)を含んだ条件文として扱ってくれます。

 

像集合「sympy.imageset(変数,関数, 変数の範囲)」を使うと、より簡単に同じ集合を表せますね。

\[ \begin{aligned}\left\{2 x\; \middle|\; x \in \mathbb{Z}\right\}\end{aligned} \]

 

実数の部分集合としては、区間の集合を表す関数が用意されています。

閉区間\([a,b]\)は「sympy.Interval(a,b)」で、開区間\((a,b)\)は「sympy.Interval.open(a,b)」です。

\[ \begin{aligned}\left[0, 1\right]\end{aligned} \]

\[ \begin{aligned}\left(0, 1\right)\end{aligned} \]

 

 

端点に無限大を表す2つのオー「oo」を使うことで、無限区間も表せます。

\[ \begin{aligned}\left[0, \infty\right)\end{aligned} \]

 

直積集合

集合の直積(デカルト積)\(A_1 \times A_2\)は、「A1 *A2」で表せます。

\[ \begin{aligned}\left\{1, 2, 3, 4, 5\right\} \times \left\{2, 6\right\}\end{aligned} \]

 

ユークリッド平面\(\mathbb{R}^2\)は、次のように2乗として表せます。

\[ \begin{aligned}\mathbb{R}^{2}\end{aligned} \]

 

平面の単位円周、単位円盤は次のように内包記法で表せます。

\[ \begin{aligned}\left\{\left( x, \ y\right)\; \middle|\; \left( x, \ y\right) \in \mathbb{R}^{2} \wedge x^{2} + y^{2} = 1 \right\}\end{aligned} \]

 

不等式は関係式「rel」の一種として表せます。

\[ \begin{aligned}x^{2} + y^{2} \leq 1\end{aligned} \]

\[ \begin{aligned}\left\{\left( x, \ y\right)\; \middle|\; \left( x, \ y\right) \in \mathbb{R}^{2} \wedge x^{2} + y^{2} \leq 1 \right\}\end{aligned} \]

 

以上、Julia(SymPy)で数の集合関係の計算をする方法を紹介してきました。

有限集合だけでなく、数の集合も代数的に表せるのは便利ですね。

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

 

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

 

こちらもおすすめ

集合論入門:集合の定義、数の集合、ラッセルのパラドックス

集合の要素、部分集合、等しいことの証明の書き方

補集合、差集合、全体集合とは:例と性質、証明

抽象ベクトル空間・線形空間の具体例R^N:順序対と直積集合