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

円筒代数分解
実数領域の整方程式や不等式の場合,Reduceが返す結果の形式は通常「円筒代数分解」すなわち「CAD」である.Reduceはより単純な形を与えることもある.いずれにせよ,CylindricalDecompositionを使うことで完全なCADを得ることができる.
|