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