不同域上的方程和不等式
Mathematica 通常假定方程中出现的变量可以代表任意复数. 但是当用户使用 Reduce 时,可以明确地告诉Mathematica 变量表示更严格的域中的对象.
不同域上的求解方法.
Reduce 默认情况下假定

可以是复数,并且给出所有5个复数解.
| Out[1]= |  |
但这里假定

是实数,并且只给出实数解.
| Out[2]= |  |
而这里假定

是整数,并且只给出整数解.
| Out[3]= |  |
单变量的单个多项式方程的解集总是离散解的有限集合. 并且在这样的情况下,用户可以通过选择位于域 dom 中的解,把 Reduce[eqns, vars, dom] 用来过滤解.
但是一旦我们有更多的变量时,情况就变得更复杂了,我们就有了对应于参数曲线或表面的方程的解,但是对这些参数曲线或表面来说,一些变量的值可以依赖于其它变量的值. 通常,这种依赖性可以使用方程或不等式的集合来描述,但是当我们从一种域到另一种域时,这种依赖的形式可能发生显著的变化.
| Out[4]= |  |
| Out[5]= |  |
| Out[6]= |  |
如果用户只输入方程,那么 Reduce 将默认地假定所有变量都是复数. 但是如果用户的输入只涉及不等式,那么 Reduce 将假定所出现的任何代数变量都是实数,由于不等式只能对实数大小进行比较.
| Out[7]= |  |
多项式方程和不等式的解的概要块元件.
对于实数和复数域上的多项式系统,解总是由一些有限数目的部分组成,在这些组成部分中,变量的值由代数数或者函数给出.
这里,组成部分由

上的方程和不等式区分.
| Out[8]= |  |
这里组成部分由

上的不等式区分.
| Out[9]= |  |
虽然原则上 Reduce 总是可以对具有实变量或复数变量的多项式方程和不等式找到完整的解,由于组成部分的数目通常在变量数目增加的时候呈指数增长,所有结果经常是很复杂的.
在3个变量的情况下,这里的解已经包括8个组成部分.
| Out[10]= |  |
一旦用户引入函数如 Sin 或者 Exp,即使是单个实变量或复数变量的方程也能有具有有限数目的组成部分的解. Reduce 通过引入其他额外的参数对这些组成部分加标签. 但是默认情况下,在一个给定的解中,第
个参数被命名为C[n]. 一般情况下,用户可以通过给出选项设置 GeneratedParameters->f 指明它应该被命名为
.
这里的组成部分使用整数参数

加标签.
| Out[11]= |  |
Reduce 不仅可以处理实数变量和复数变量的方程,也能够处理整数变量的方程. 求解这样的 Diophantine equations 经常可能是很困难的问题.
| Out[12]= |  |
| Out[13]= |  |
| Out[14]= |  |
Reduce 可以在整数域上求解任意线性方程或不等式系统. 在具有
个变量的
个线性方程的情况下,通常需要引入
个参数. 但是在不等式的情况下,可能需要引入更多更多的参数.
| Out[15]= |  |
在两个变量的情况下,Reduce 可以在整数域上求解任何二次方程. 结果可以是形如 Fibonacci 的序列,由二次无理数的幂表示.
| Out[16]= |  |
特定的
C[1] 的实际值是整数,正如它们本应该是的一样.
| Out[17]= |  |
Reduce 可以处理整数域上的许多特殊的方程类别.
| Out[18]= |  |
把右边的值改为

,现在方程无解.
| Out[19]= |  |
有时候,在整数域上的方程具有相当随机的解集. 并且甚至是方程上微小的改变也经常导致无解的情况出现.
对于在实数和复数域上的多项式方程,我们具有一个确定的决策过程( decision procedure )来决定是否有解存在. 但是对于整数域上的多项式方程,Hilbert's Tenth 问题的无解性表明不可能有这样的普遍适用的过程.
然而,对于一些专门类别的方程,我们可以找到这样的过程,事实上,许多这样的过程在 Reduce 中得到实现. 但是处理不同类别的方程可能经常需要使用数论的所有不同分支,而且也需要许多不同类别的计算. 事实上,我们称之为普遍 ( universal )整数多项式方程,在这种情况下,输入一些变量可以使其他变量的解对应于任何可能程序的输出. 这意味着对于这样的方程,一般不可能从固定元素,如代数函数,建立任何闭集解.
如果包含函数如 Sin,那么即使对涉及实数和复数的方程,也可能出现同样的问题.
| Out[20]= |  |
处理涉及整数 modulo
的方程.
由于对整数方程 modulo
只有有限的可能解,Reduce 可以系统地找到它们.
| Out[21]= |  |
Reduce 也可以处理涉及几个不同 moduli 的方程.
| Out[22]= |  |
| Reduce[expr,vars,dom] | 对所有变量指定一个默认域 |
Reduce[{expr1,...,x1 dom1,...},vars] | 对变量明确指明单个域 |
对变量指定不同域的方法.
这里假定

是一个整数,但是

是一个实数.
| Out[23]= |  |
Reduce 通常把复数变量作为单个对象处理. 但是在处理不是解析或具有分支的函数时,有时候必须把它们分成实变量Re[z] 和虚变量 Im[z] 的对.
| Out[24]= |  |
| Out[25]= |  |
默认情况下,Reduce 假定在不等式中以代数形式出现的变量是实数. 但是用户可以通过把 Complexes 明确指明为默认域来进行重载. 在这种情况下,能够指明某些变量仍然是实数经常是有用的.
| Out[26]= |  |
| Out[27]= |  |
由于

没有以代数形式出现,
Reduce 马上假定它可以是复数.
| Out[28]= |  |
这里

是一个实数,但是

可以是复数.
| Out[29]= |  |
在不同域中寻找特定解.
Reduce 总是返回等式或不等式组的解的完整表示. 然而,有时候,用户可能只想要寻找特定的样本解. 这可以通过使用 FindInstance 来实现.
如果 FindInstance[expr, vars, dom] 返回
,那么这意味着 Mathematica 可以有效地证明 expr 不能被特定域内的变量值所满足. 当 expr 可以被满足的时候,FindInstance 通常将任意选择值来实现,如 "不等式" 中关于不等式的讨论.
尤其对于整数方程,即使当 Reduce 不能找到完整解的时候,FindInstance 也经常可以找到方程的解. 在这样的情况下,它通常返回方程的最小解之一.
| Out[30]= |  |
FindInstance 的一个特征是它对于变量为 True 或 False 的布尔表达式也适用. 可以使用 FindInstance 来决定一个特定的表达式是否是可满足的 ,因此对于可使表达式为 True 的这些变量的真值,具有一些选择.
该表达式不能对任意

和

满足.
| Out[31]= |  |
| Out[32]= |  |