領域上の等式と不等式

Mathematica は通常,方程式の変数は任意の複素数を表すことができると仮定する.しかしReduceを使うときは変数がもっと限定された領域内のオブジェクトを表すことを明示的に Mathematica に伝えることができる.

Reduce[expr,vars,dom]領域 dom 内で eqns を約す
Complexes複素数
Reals実数
Integers整数

領域内で解く

Reduceはデフォルトでが複素数であり得ると仮定し,5つの複素解すべてを与える.
In[1]:=
Click for copyable input
Out[1]=
しかしここではが実数であると仮定して実数解のみを返す.
In[2]:=
Click for copyable input
Out[2]=
ここではが整数であると仮定して整数解のみを返す.
In[3]:=
Click for copyable input
Out[3]=

一変数の単一の多項式は常に有限個の離散解を持つ.そのような場合,Reduce[eqns, vars, dom]は領域 dom 内にある解を選択することで解のフィルタの働きをしていると考えることができる.

しかし変数が増えると,ある変数の値が他の変数の値に依存するといったようなことが起り得るパラメトリックな曲線や曲面に方程式の解が対応し,途端に話は複雑になる可能性がある.このような依存関係はしばしば方程式あるいは不等式の集合で表現される.しかし,その形式はある領域から別の領域に移動すると甚だしく変化することがある.

これは複素数の解を簡単な式で与える.
In[4]:=
Click for copyable input
Out[4]=
実数の解を表すためには不等式を導入する必要がある.
In[5]:=
Click for copyable input
Out[5]=
整数の場合,解は離散点の方程式として表される.
In[6]:=
Click for copyable input
Out[6]=

入力に含まれるのが等式のみであれば,Reduceはデフォルトによってすべての変数が複素数であると仮定する.しかし入力に不等式が含まれている場合は,不等式は実数のみしか比較できないのでReduceは含まれる代数的変数はどれも実数であると仮定する.

変数は不等式の中にあるので実数であると仮定される.
In[7]:=
Click for copyable input
Out[7]=
Complexespolynomial!=0xi==Root[...]
RealsRoot[...]<xi<Root[...]xi==Root[...]
Integers恣意的に複雑

整方程式と不等式の解のためのブロック構築の概略

実領域と複素領域上の多項式の系の場合,解は常に有限個の要素からなり,その要素内で代数あるいは関数によって変数の値が与えられる.

ここでは要素がについての方程式あるいは不等式によって区別されている.
In[8]:=
Click for copyable input
Out[8]=
ここでは要素がについての不等式で区別されている.
In[9]:=
Click for copyable input
Out[9]=

原則としてReduceは実変数と複素変数を持った整方程式と不等式のどのような集合についても常に完全な解を求めることができるが,変数の数が増えるにつれて要素の数が指数関数的に増加するため,結果は非常に複雑になることが多い.

変数が3つの場合,解は常に8つの要素を含む.
In[10]:=
Click for copyable input
Out[10]=

SinExpのような関数を導入した途端に,変数が実変数あるいは複素変数1つの方程式でも解の要素が無限になることがある.Reduceは新たなパラメータを導入してこれらの要素にラベルを付ける.デフォルトでは与えられた解の 番目のパラメータにC[n]という名前が付けられる.一般的には,オプション設定GeneratedParameters->f を使ってそれが という名前になるように指定することができる.

ここの要素には整数パラメータによるラベルが付けられている.
In[11]:=
Click for copyable input
Out[11]=

Reduceは実変数と複素変数を持つ方程式だけでなく整数領域の方程式も扱うことができる.ディオファントス(Diophantus)方程式のようなものを解くのは大変難しいことが多い.

実数上でのこの方程式の解を表すのは極めて簡単である.
In[12]:=
Click for copyable input
Out[12]=
整数領域での解には8の約数が含まれる.
In[13]:=
Click for copyable input
Out[13]=
このような方程式を効果的に解くのには大きな数を因数分解する必要がある.
In[14]:=
Click for copyable input
Out[14]=

Reduceは整数領域のどのような線形方程式の系も不等式の系も解くことができる. 変数の 個の線形方程式では,一般に 個のパラメータが必要である.しかし不等式の場合ははるかに多くのパラメータが必要なことが多い.

変数は2つしかないが,ここでは3つのパラメータが必要である.
In[15]:=
Click for copyable input
Out[15]=

変数が2つの場合,Reduceは整数についてのいかなる二次方程式も解くことができる.結果はフィボナッチ列に類似しており二次無理数のベキによって表される.

これはペル(Pell)方程式の解である.
In[16]:=
Click for copyable input
Out[16]=
以下は特定のC[1]の整数値における値である.
In[17]:=
Click for copyable input
Out[17]=

Reduceは整数についての方程式の多くの特定のクラスを扱うことができる.

ここでReduceを使ってThue方程式の解を求める.
In[18]:=
Click for copyable input
Out[18]=
右辺をにすると式には解がなくなる.
In[19]:=
Click for copyable input
Out[19]=

整数についての方程式はときに全くランダムな解の集合を持つように見えることがある.そして,方程式にほんの少し変更を加えただけで解が全くなくなることがある.

実数と複素数についての整方程式の場合,解が存在するかどうかを決定するための確かな「アルゴリズム」が存在する.しかし整数についての整方程式の場合は,ヒルベルト(Hilbert)の第10問題が解けないことから分かるように,そのような一般的な方法は決して存在しない.

特定のクラスの方程式の場合は,そのようなアルゴリズムを見付けるのは可能であり,実際に多くがReduceに実装されている.しかし異なったクラスの方程式を扱うことは数論の全く違った分野と全く違った種類の計算を必要とするように見えることが多い.実際に,いくつかの変数を埋めることにより,他の変数の解が可能なすべてのプログラムの出力に対応するようにできる「普遍的な」整数の整方程式の存在が知られている.ここから,このような方程式には一般的に代数関数のように固定要素によって構築される解で構成される閉じた形は決して存在しないことになる.

Sinのような関数が含まれるようにすると,実数と複素数を含む方程式についても同じ問題が起り得る.

ここのReduceは事実上整数についての方程式を解かなくてはならない.
In[20]:=
Click for copyable input
Out[20]=
Reduce[eqns,vars,Modulus->n]モジュロ の解を求める

モジュロ の整数を含む方程式の処理

モジュロ の整数方程式の可能な解の数は有限なので,Reduceはシステマティックにその解を求めることができる.

これはモジュロ4のすべての解を求める.
In[21]:=
Click for copyable input
Out[21]=

Reduceはいくつかの異なる剰余を持つ方程式を扱うことができる.

これは2つの異なる剰余を持つ方程式である.
In[22]:=
Click for copyable input
Out[22]=
Reduce[expr,vars,dom]すべての変数のデフォルトの領域を指定する
Reduce[{expr1,...,x1dom1,...},vars]変数の明示的な各領域を指定する

変数の領域を指定する別の方法

これはは整数であるがは実数であると仮定する.
In[23]:=
Click for copyable input
Out[23]=

Reduceは通常複素変数を単一のオブジェクトとして扱う.しかし,解析的ではなかったり分岐切断線を持つ関数を扱う際は,複素変数を実数部分Re[z]と虚数部分Im[z]の2つの部分に分割する必要があることがある.

結果には実数部分と虚数部分が別々に含まれている.
In[24]:=
Click for copyable input
Out[24]=
ここでもまた虚数部分に独立した条件が付いている.
In[25]:=
Click for copyable input
Out[25]=

Reduceはデフォルトにより不等式に代数的に表れる数は実数であると仮定する.しかしComplexesをデフォルトの領域として明示的にこれを上書きすることもできる.そのような場合は特定の変数がなお実数であると指定することができると便利である.

Reduceはデフォルトによりが実数であると仮定する.
In[26]:=
Click for copyable input
Out[26]=
こうするとReduceが複素数である場合を考慮するようになる.
In[27]:=
Click for copyable input
Out[27]=
は代数的に表れてはいないので,Reduceはすぐにこれが複素数であると仮定する.
In[28]:=
Click for copyable input
Out[28]=
ここではは実数だがは複素数にもなり得る.
In[29]:=
Click for copyable input
Out[29]=
FindInstance[expr,{x1,x2,...},dom]expr を満足する dom 中の の例を見付けようとする
FindInstance[expr,vars,dom,n] 個の例を見付けようとする
Complexes複素数 の領域
Reals実数 の領域
Integers整数 の領域
Booleansブール数(TrueFalse の領域

領域中の特定の解を求める

Reduceは常に連立方程式あるいは連立不等式の解を完全に表すものを返す.しかし,特定の解の例だけを求めたい場合もあるだろう.そのようなときはFindInstanceを使うとよい.

FindInstance[expr, vars, dom]を返した場合は,expr が指定領域にある変数のいかなる値によっても満足されないことをMathematica が事実上証明したことを意味している.expr が満足される場合は,「方程式と不等式の操作:不等式」の不等式についての項で説明してあるように,FindInstanceは一般に極めて恣意的に満足する値を取り出す.

特に整数方程式の場合,たとえReduceが完全な解を求めることができなくても,FindInstanceが方程式の特定の解を求めることができることがしばしばある.そのような場合には方程式の最も小さな解のうちのいずれかが返される.

これは楕円曲線上で最小の整数点を求める.
In[30]:=
Click for copyable input
Out[30]=

FindInstanceの特徴のひとつに,変数がTrueあるいはFalseという値を持ち得るブール式と一緒にも使える点が挙げられる.式がTrueとなるような変数の真理値が選べるようにFindInstanceを使って特定の式が「満足可能」であるかどうかを検証することができる.

に何を選んでもこの式を満足することはできない.
In[31]:=
Click for copyable input
Out[31]=
こちらは満足することができる.
In[32]:=
Click for copyable input
Out[32]=
New to Mathematica? Find your learning path »
Have a question? Ask support »