解の集合の表示

方程式や不等式のいかなる組合せも,何らかの空間における領域を暗示的に定義しているものと考えることができる.Reduceの基本的な機能はこの種の暗示的な表示を明示的にすることである.

変数の値によって指定された点が領域内にあるかどうかをテストするだけなら,方程式や不等式についての記述が暗示的であっても問題ない.しかし,領域の構造を理解するためには,あるいはその中で点を生成するためには,Reduceが提供するようなより明示的な説明が必要であろう.

これは半円の領域を暗示的に定義する不等式である.
In[1]:=
Click for copyable input
Out[1]=
これは点がこの領域内にあることを示している.
In[2]:=
Click for copyable input
Out[2]=
Reduceはこの領域をより明示的に表す.
In[3]:=
Click for copyable input
Out[3]=
最初の不等式と矛盾しないの値を選ぶと,についての明示的な不等式が得られる.
In[4]:=
Click for copyable input
Out[4]=

Reduce[expr, {x1, x2, ...}]は,まず最初に についての固定した条件を与え,次に に依存する についての条件を与え,次に に依存する についての条件を与え,というようにして領域を表現するようになっている.この構造には,Tableのような関数で反復子を使うのと同じように各 の値を連続的に選ぶことで点が選べるという特徴がある.

これは最初にの値を,次にの値を選ぶ領域の表示を与える.
In[5]:=
Click for copyable input
Out[5]=

単純なケースでは,方程式あるいは不等式の系によって定義された領域に結局要素が1つしかないことがある.そのような場合はReduceの出力は の形式になる.ここで各 は最高 個までの変数を含む方程式か不等式である.

しかし,ほとんどの場合には複数の要素が のような形式を含む出力で表される.Reduceは領域を表すために使う要素数を最小にしようとする.しかし場合によっては単一の接続した要素をカバーするのに複数のパラメータ化が必要なこともある.その各々はReduceの出力中で別々の要素として現れる.

解の集合を表す際に,複数の要素がのような形式を使って一緒に表現できることがある.Reduceは結果をできるだけコンパクトにするためにデフォルトでこれを行う.LogicalExpandを使って各要素が別々に現れる展開された形を生成することもできる.

最もコンパクトな形を生成するために,Reduceは必要以上に後半の変数 が前半の変数 に依存する条件を課してしまうことがある.オプションBacksubstitution->Trueを与えることで,特定の がより前の変数 に必要最低限しか依存しないような結果をReduceに生成させることができる.こうすると解釈しやすくなることがあるが,出力ははるかに大きくなることが多い.

デフォルトでReduceの条件をについて表現する.
In[6]:=
Click for copyable input
Out[6]=
後方に置換するとに関係なくの制約条件を付けることができる.
In[7]:=
Click for copyable input
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]:=
Click for copyable input
Out[8]=
解集合の二次元部分とともに,境界を含む曲線を返す.
In[9]:=
Click for copyable input
Out[9]=
解集合の両方の部分から解を求める.
In[10]:=
Click for copyable input
Out[10]=
結果には,それぞれの解集合からの点が数個ずつ含まれる.
In[11]:=
Click for copyable input
Out[11]=
New to Mathematica? Find your learning path »
Have a question? Ask support »