使用假定

Wolfram 语言通常对用户要处理的对象作尽可能少的假定. 这意味着它给出的结果会尽可能地一般化. 但有时,这样得到的结果比有较多假定时得到的结果更复杂.

Refine[expr,assum]在假定下整理 expr
Simplify[expr,assum]带假定的化简
FullSimplify[expr,assum]带假定的完全化简
FunctionExpand[expr,assum]带假定的函数展开

进行带假定的运算.

缺省时,Simplify 对此表达式基本上不做任何事情.
In[1]:=
Click for copyable input
Out[1]=
原因是该表达式的值对不同的 是大不相同的.
In[2]:=
Click for copyable input
Out[2]=
使用假定 时,Simplify 立即化简该表达式成为0.
In[3]:=
Click for copyable input
Out[3]=
不做假定时,什么事也不能做.
In[4]:=
Click for copyable input
Out[4]=
假定 都为正数时,log就能被展开.
In[5]:=
Click for copyable input
Out[5]=

对方程和不等式使用带有适当假定的 SimplifyFullSimplify,用户实际上可以建立广泛的定理.

不对 做假定,这个等式是真是假不能确定.
In[6]:=
Click for copyable input
Out[6]=
有了假定,现在 Simplify 便能确定出该等式为真.
In[7]:=
Click for copyable input
Out[7]=
这里建立一个标准结果,即算术平均值大于几何平均值.
In[8]:=
Click for copyable input
Out[8]=
这里证明当自变量为正数时, 的值在 内.
In[9]:=
Click for copyable input
Out[9]=

SimplifyFullSimplify 总是试图找到表达式的最简形式. 然而,有时用户可能仅仅要求 Wolfram 语言执行其通常的计算过程,但使用某些假定. 要实现这个目的可以使用 Refine. Refine[expr,assum] 所进行的转换等同于 Wolfram 语言对 expr 中的变量被满足假定 assum 的数值表达式取代后所自动执行的转换.

这里 Simplify 无法找到更简单的形式.
In[10]:=
Click for copyable input
Out[10]=
Refine 则如同对于任何明确负数  一样计算 Log[x].
In[11]:=
Click for copyable input
Out[11]=

一类重要的假定是声明某个对象是一个特定区域的元素. 用户可以使用 建立这种假定,其中 符号可以用 或者 [Element] 来输入.

xdom 或者 Element[x,dom]声明 x 是区域 dom 的元素
{x1,x2,}dom声明所有的 dom 的元素
pattdom声明与 patt 相匹配的表达式是 dom 的元素

声明对象是区域中的元素.

这里认定 是实数域中的一个元素.
In[12]:=
Click for copyable input
Out[12]=
这些数都是代数数域的元素.
In[13]:=
Click for copyable input
Out[13]=
Wolfram 语言知道 不是一个代数数.
In[14]:=
Click for copyable input
Out[14]=
现代数学没有弄清 是否是一个代数数.
In[15]:=
Click for copyable input
Out[15]=
此式代表符号 是实数域的一个元素的声明.
In[16]:=
Click for copyable input
Out[16]=
Complexes复数域
Reals实数域
Algebraics代数数域
Rationals有理数数域
Integers整数域
Primes素数域
Booleans布尔数域(TrueFalse

Wolfram 语言支持的数域.

当假定 为整数时, 为零.
In[17]:=
Click for copyable input
Out[17]=
这里建立了定理,当 是实数时,.
In[18]:=
Click for copyable input
Out[18]=
如果假定某变量满足某个不等式,那么 Wolfram 语言将自动假定该变量是实数.
In[19]:=
Click for copyable input
Out[19]=

通过使用带有假定的 SimplifyFullSimplifyFunctionExpand,用户可以访问 Wolfram 语言所收集的大量数学结论.

这里使用正切函数的周期性.
In[20]:=
Click for copyable input
Out[20]=
假定 k/2 Integers 意味着 k 必须是偶数.
In[21]:=
Click for copyable input
Out[21]=
Wolfram 语言知道对正数 .
In[22]:=
Click for copyable input
Out[22]=
FullSimplify 运用关于特殊函数的知识.
In[23]:=
Click for copyable input
Out[23]=

Wolfram 语言懂得离散数学、数论以及连续数学.

这里使用威尔森定理简化结果.
In[24]:=
Click for copyable input
Out[24]=
这里使用了欧拉phi函数的乘法性质.
In[25]:=
Click for copyable input
Out[25]=

在类似 Simplify[expr,assum] 或者 Refine[expr,assum] 中,用户明确给出要使用的假定. 但有时,用户可能想要指定一组特定的假定,用于一整套操作中. 这时可以使用 Assuming.

Assuming[assum,expr]在计算 expr 中使用假定 assum
$Assumptions使用的默认假定

指定具有较大范围的假定.

这里告诉 Simplify 要使用默认假定 .
In[26]:=
Click for copyable input
Out[26]=
这里把两个给定的假定结合在一起.
In[27]:=
Click for copyable input
Out[27]=

SimplifyRefine 这样的函数采取选项 Assumptions 来指定应该使用哪种默认假定. 默认情况下,该选项的设置为 Assumptions:>$Assumptions. Assuming 通过对 $Assumptions 赋以一个局部值进行操作,就像 Block 中那样来.

除了 SimplifyRefine 之外,大量其它函数采用 Assumptions 选项,因此可以使用 Assuming 为其指定假定. 例如,FunctionExpandIntegrateLimitSeriesLaplaceTransform.

该假定在 Integrate 中自动被使用.
In[28]:=
Click for copyable input
Out[28]=