不同域上的方程和不等式

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]=

单变量的单个多项式方程的解集总是离散解的有限集合. 并且在这样的情况下,用户可以通过选择位于域 dom 中的解,把 Reduce[eqns, vars, 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!=0, xi==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]=

一旦用户引入函数如 Sin 或者 Exp,即使是单个实变量或复数变量的方程也能有具有有限数目的组成部分的解. Reduce 通过引入其他额外的参数对这些组成部分加标签. 但是默认情况下,在一个给定的解中,第 个参数被命名为C[n]. 一般情况下,用户可以通过给出选项设置 GeneratedParameters->f 指明它应该被命名为 .

这里的组成部分使用整数参数 加标签.
In[11]:=
Click for copyable input
Out[11]=

Reduce 不仅可以处理实数变量和复数变量的方程,也能够处理整数变量的方程. 求解这样的 Diophantine equations 经常可能是很困难的问题.

描述在实数域上方程的解是很直接的.
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 可以在整数域上求解任意线性方程或不等式系统. 在具有 个变量的 个线性方程的情况下,通常需要引入 个参数. 但是在不等式的情况下,可能需要引入更多更多的参数.

这里需要3个参数,即使我们只有2个变量.
In[15]:=
Click for copyable input
Out[15]=

在两个变量的情况下,Reduce 可以在整数域上求解任何二次方程. 结果可以是形如 Fibonacci 的序列,由二次无理数的幂表示.

这是一个 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]=

有时候,在整数域上的方程具有相当随机的解集. 并且甚至是方程上微小的改变也经常导致无解的情况出现.

对于在实数和复数域上的多项式方程,我们具有一个确定的决策过程( decision procedure )来决定是否有解存在. 但是对于整数域上的多项式方程,Hilbert's Tenth 问题的无解性表明不可能有这样的普遍适用的过程.

然而,对于一些专门类别的方程,我们可以找到这样的过程,事实上,许多这样的过程在 Reduce 中得到实现. 但是处理不同类别的方程可能经常需要使用数论的所有不同分支,而且也需要许多不同类别的计算. 事实上,我们称之为普遍 universal )整数多项式方程,在这种情况下,输入一些变量可以使其他变量的解对应于任何可能程序的输出. 这意味着对于这样的方程,一般不可能从固定元素,如代数函数,建立任何闭集解.

如果包含函数如 Sin,那么即使对涉及实数和复数的方程,也可能出现同样的问题.

这里 Reduce 有效地在整数范围内求解一个方程.
In[20]:=
Click for copyable input
Out[20]=
Reduce[eqns,vars,Modulus->n]寻找 modulo 的解

处理涉及整数 modulo 的方程.

由于对整数方程 modulo 只有有限的可能解,Reduce 可以系统地找到它们.

这里寻找所有 modulo 4 的解.
In[21]:=
Click for copyable input
Out[21]=

Reduce 也可以处理涉及几个不同 moduli 的方程.

这是涉及两个不同的 moduli 的方程.
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] 的对.

该结果涉及不同的实部和虚部.
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]试图寻找在 dom 中满足 expr 的一个实例
FindInstance[expr,vars,dom,n]试图寻找 个实例
Complexes复数域
Reals实数域
Integers整数域
Booleans布尔域 (TrueFalse

在不同域中寻找特定解.

Reduce 总是返回等式或不等式组的解的完整表示. 然而,有时候,用户可能只想要寻找特定的样本解. 这可以通过使用 FindInstance 来实现.

如果 FindInstance[expr, vars, dom] 返回 ,那么这意味着 Mathematica 可以有效地证明 expr 不能被特定域内的变量值所满足. 当 expr 可以被满足的时候,FindInstance 通常将任意选择值来实现,如 "不等式" 中关于不等式的讨论.

尤其对于整数方程,即使当 Reduce 不能找到完整解的时候,FindInstance 也经常可以找到方程的解. 在这样的情况下,它通常返回方程的最小解之一.

这里在一个椭圆曲线上寻找最小整数点.
In[30]:=
Click for copyable input
Out[30]=

FindInstance 的一个特征是它对于变量为 TrueFalse 的布尔表达式也适用. 可以使用 FindInstance 来决定一个特定的表达式是否是可满足的 ,因此对于可使表达式为 True 的这些变量的真值,具有一些选择.

该表达式不能对任意 满足.
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 »