Mathematica 9 is now available

Documentation / Mathematica / Mathematicaブック / Mathematicaを使った高等数学 / 代数式の操作  /

3.3.10 仮定の使用

Mathematicaは通常,オブジェクトの処理に必要なだけの最小限の仮定しかしない.これによりその結果も可能な限り一般的になる.しかし,場合によってこれらの結果は,より多くの仮定がなされた場合よりもかなり複雑になってしまうこともある.

仮定の下で演算を行う

デフォルトのSimplifyはこの式に本質的には何もしない.

In[1]:= Simplify[1/Sqrt[x] - Sqrt[1/x]]

Out[1]=

その理由は異なるを選択をすると,全く異なった値になるからである.

In[2]:= % /. x -> {-3, -2, -1, 1, 2, 3}

Out[2]=

と仮定すると,Simplifyは式を直ちに0にする.

In[3]:= Simplify[1/Sqrt[x] - Sqrt[1/x], x > 0]

Out[3]=

について仮定をしないと,何も実行されない.

In[4]:= FunctionExpand[Log[x y]]

Out[4]=

が両方とも正であると仮定された場合,対数が展開される.

In[5]:= FunctionExpand[Log[x y], x > 0 && y > 0]

Out[5]=

SimplifyFullSimplifyを適当な仮定の下で方程式や不等式に適用すると広範な定理を確立することもできる.

に関する仮定を行わないと,この方程式の真偽を決定することができない.

In[6]:= Simplify[Abs[x] == x]

Out[6]=

これによりSimplifyで方程式が真であるという証明ができる.

In[7]:= Simplify[Abs[x] == x, x > 0]

Out[7]=

これにより算術平均が幾何平均よりも大きいという普遍的結果が確立される.

In[8]:= Simplify[(x + y)/2 >= Sqrt[x y], x >= 0 && y >= 0]

Out[8]=

がすべての正の引数に関して内にあるということを証明する.

In[9]:= FullSimplify[0 < Erf[x] < 1, x > 0]

Out[9]=

SimplifyFullSimplifyは常に式の最も簡単な形を求めようとする.しかし,場合によってはMathematicaに特定の前提条件のもとで通常の評価過程を進ませたいこともあるだろう.そのような場合にはRefineを使うとよい.Refine[expr, assum]expr中の変数が前提条件assumを満たす数式で置き換えられたならばMathematicaが自動的に行うであろう変形と同じ変形を行う.

これ以上簡単な形はSimplify には見付けられない.

In[10]:= Simplify[Log[x], x < 0]

Out[10]=

Refineは明示的な負の数 xであるかのようにLog[x]を評価する.

In[11]:= Refine[Log[x], x < 0]

Out[11]=

仮定において重要なことは,あるオブジェクトが特定の領域の要素であるということを主張することである.x domを用いてそのような仮定を設定することができる.ここで,文字は AliasIndicatorelAliasIndicatorまたは\[Element]として入力できる.

オブジェクトは領域の要素である

が実数領域の要素であるということを確かめる.

In[12]:= Pi Element Reals

Out[12]=

これらの数は,すべて代数的数の要素である.

In[13]:= {1, Sqrt[2], 3 + Sqrt[5]} Element Algebraics

Out[13]=

Mathematicaは,は代数的数ではないことを知っている.

In[14]:= Pi Element Algebraics

Out[14]=

現代数学でも,が代数的数か否かまだ分かっていない.

In[15]:= E + Pi Element Algebraics

Out[15]=

記号xが実数領域の要素であるということを表している.

In[16]:= x Element Reals

Out[16]=

Mathematicaがサポートする領域

が整数の仮定の下ではゼロである.

In[17]:= Simplify[Sin[n Pi], n Element Integers]

Out[17]=

が実数の仮定の下で の定理を確立する.

In[18]:= Simplify[Cosh[x] >= 1, x Element Reals]

Out[18]=

ある変数が不等式を満たしていると述べると,Mathematicaは自動的にその変数が実数であるとみなす.

In[19]:= Simplify[x Element Reals, x > 0]

Out[19]=

SimplifyFullSimplifyおよびFunctionExpandを仮定の下に使用することで,Mathematicaの広大な数学的事実のコレクションにアクセスできる.

正接関数の周期性を用いる.

In[20]:= Simplify[Tan[x + Pi k], k Element Integers]

Out[20]=

k/2 Integersの仮定はkが偶数である必要があるということを意味している.

In[21]:= Simplify[Tan[x + Pi k/2], k/2 Element Integers]

Out[21]=

Mathematicaは,正数に関してであることを知っている.

In[22]:= Simplify[Log[x] < Exp[x], x > 0]

Out[22]=

FullSimplifyは,特殊関数の知識にアクセスする.

In[23]:= FullSimplify[Im[BesselJ[0, x]], x Element Reals]

Out[23]=

Mathematicaは,連続を扱う数学と同様に,離散数学と数論も扱える.

結果を簡約するためウィルソンの定理を用いる.

In[24]:= FunctionExpand[Mod[(p - 1)!, p], p Element Primes]

Out[24]=

オイラーのファイ関数の乗積特性を用いる.

In[25]:= FunctionExpand[EulerPhi[m n], {m, n} Element Integers &&
GCD[m, n] == 1]

Out[25]=

Simplify[expr, assum]あるいはRefine[expr, assum]のようなものには使いたい前提条件を明示的に与える.しかし,操作全体に1組の前提を指定したい場合もあるだろう.そのような場合はAssumingを使うとよい.

より大きなスコープでの前提条件の指定

こうするとSimplifyがデフォルトの前提条件x > 0を使う.

In[26]:= Assuming[x > 0, Simplify[Sqrt[x^2]]]

Out[26]=

これは与えられた2つの前提条件を組み合せる.

In[27]:= Assuming[x > 0,
Assuming[x Element Integers, Refine[Floor[Sqrt[x^2]]]]]

Out[27]=

SimplifyRefineのような関数は使うべきデフォルトの前提条件を指定するオプションAssumptionsを取る.デフォルトでは,このオプションの設定はAssumptions :> $Assumptionsである.Assumingは,Blockにおけるように局所値を$Assumptionsに割り当てるという方法で作用する.

Assumptionsオプションを取るためにAssumingを使って前提条件を指定できる関数はSimplifyRefineの他にもたくさんある.FunctionExpandIntegrate LimitLaplaceTransform等がその例である.

Integrateでは自動的に前提条件が使われる.

In[28]:= Assuming[n > 0, 1 + Integrate[x^n, {x, 0, 1}]^2]

Out[28]=



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.