解の集合の表示
方程式や不等式のいかなる組合せも,何らかの空間における領域を暗示的に定義しているものと考えることができる.Reduceの基本的な機能はこの種の暗示的な表示を明示的にすることである.
変数の値によって指定された点が領域内にあるかどうかをテストするだけなら,方程式や不等式についての記述が暗示的であっても問題ない.しかし,領域の構造を理解するためには,あるいはその中で点を生成するためには,Reduceが提供するようなより明示的な説明が必要であろう.
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
| In[4]:= |
| Out[4]= |
Reduce[expr, {x1, x2, ...}]は,まず最初に
についての固定した条件を与え,次に
に依存する
についての条件を与え,次に
と
に依存する
についての条件を与え,というようにして領域を表現するようになっている.この構造には,Tableのような関数で反復子を使うのと同じように各
の値を連続的に選ぶことで点が選べるという特徴がある.
| In[5]:= |
| Out[5]= |
単純なケースでは,方程式あるいは不等式の系によって定義された領域に結局要素が1つしかないことがある.そのような場合はReduceの出力は
の形式になる.ここで各
は最高
個までの変数を含む方程式か不等式である.
しかし,ほとんどの場合には複数の要素が
のような形式を含む出力で表される.Reduceは領域を表すために使う要素数を最小にしようとする.しかし場合によっては単一の接続した要素をカバーするのに複数のパラメータ化が必要なこともある.その各々はReduceの出力中で別々の要素として現れる.
解の集合を表す際に,複数の要素が
のような形式を使って一緒に表現できることがある.Reduceは結果をできるだけコンパクトにするためにデフォルトでこれを行う.LogicalExpandを使って各要素が別々に現れる展開された形を生成することもできる.
最もコンパクトな形を生成するために,Reduceは必要以上に後半の変数
が前半の変数
に依存する条件を課してしまうことがある.オプションBacksubstitution->Trueを与えることで,特定の
がより前の変数
に必要最低限しか依存しないような結果をReduceに生成させることができる.こうすると解釈しやすくなることがあるが,出力ははるかに大きくなることが多い.
| In[6]:= |
| Out[6]= |
| In[7]:= |
| Out[7]= |
| CylindricalDecomposition[expr,{x1,x2,...}] | |
| expr により定義された領域の円筒代数分解を生成する | |
| GenericCylindricalDecomposition[expr,{x1,x2,...}] | |
| expr で定義された領域の分解の全次元の部分と,領域の残りの部分を含む超曲面とを見付ける | |
| SemialgebraicComponentInstances[expr,{x1,x2,...}] | |
| expr により定義された各連結成分に少なくとも1つの点を与える | |
実数領域の整方程式や不等式の場合,Reduceが返す結果の形式は通常「円筒代数分解」すなわち「CAD」である.Reduceはより単純な形を与えることもある.いずれにせよ,CylindricalDecompositionを使うことで完全なCADを得ることができる.不等式のみを含む系では,GenericCylindricalDecompositionで解集合のほとんどが求められ,通常こちらの方が速い.
| In[8]:= |
| Out[8]= | ![]() |
| In[9]:= |
| Out[9]= | ![]() |
| In[10]:= |
| Out[10]= | ![]() |
| In[11]:= |
| Out[11]= | ![]() |




