此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.2)

1.4.9 Mathematica 中的限制

用一个 Mathematica 命令,用户就能指定一个对任何计算机来说都是非常复杂 的运算. 例如,可以做运算 Expand[(1+x)^(10^100)]. 这个运算的结果将有  项,超过了宇宙中分子的总数.
用户可以在任何一台能运行 Mathematica 的计算机上,毫无困难地执行 Expand[(1+x)^100] 运算. 但当增加 (1+x) 的指数时,结果将变得 非常大以致于计算机的内存容纳不下. 这种情况发生,不仅取决于计算机 内存的总容量也常常和计算机上正在运行的其它程序有关.
如果在计算过程中超出了内存的容量,Mathematica 的大多数版本都毫无选择地 停止运算.因此,对计算进行安排保证不超出内存的容量是很重要的.
即使一个代数运算的结果是很简单的,但是运算过程中产生的中间表达式 可能是非常复杂的.这意味着即使最后的结果很小,运算的中间部分可能太大而无法 处理.对这种情况,通常把运算分成若干块,分别进行计算.用户应当了解 Mathematica 内存管理的机制,一旦一部分运算被完成,用于存储中间表达式的 内存立即被释放以便用于新的表达式.
Mathematica 运算中,内存空间是一个常见的限制因素.然而时间也是一个限制因素. 用户通常会等待若干秒甚至一分钟来得到计算结果,但很少会等待一个小时或者一天. 而绝不会等待一年.
时间常常是限制因素的一类运算是涉及对大量可能进行搜索和检测的运算. 整数的因子分解是一个典型例子.从某种意义上讲,整数的因子分解问题归 纳为检测大量的供选因子.正如人们现在知道的那样,检测的次数几乎和要分解 因子的整数按其位数的指数增加一样快地增加.所以分解整数因子所需的时间随着 该整数的长度迅速地增加.在使用中,用户会发现FactorInteger[k]  有50位时 FactorInteger[k] 花费的时间长的无法处理.
在计算理论中,论述了 "多项式时间" 算法与非多项式时间算法的区别. 多项式时间算法执行的时间仅仅以输入长度的多项式形式增加,而非多项式 时间算法花费的时间可能以输入长度的指数形式增加.
只要能够做到,Mathematica 内部编码都使用多项式时间算法.然而, 有些问题多项式时间算法是不可行的. 在这种情况下,Mathematica 除了使用非多项式时间算法别无选择.整数的因子 分解就属这种情况. 其它包括当变量的个数很多时的多项式因式分解和解方程.
即使运算所需的时间不按指数增加,也会发生因运算量太大或太耗时 无法在用户的计算机上进行运算的情况.当使用Mathematica 时,用户应当 产生一种认识:对用户特殊的应用领域中的运算种类是有限制的.

在1997年制造的工作站上花费若干秒的一些运算