MATHEMATICA 教程

Mathematica 中的限制

用一个 Mathematica 命令,用户就能指定一个对任何计算机来说都是非常复杂的运算. 例如,可以运算 Expand[(1+x)^(10^100)]这个运算的结果将有 项,超过了宇宙中分子的总数.

用户可以在任何一台能运行 Mathematica 的计算机上,毫无困难地执行 Expand[(1+x)^100] 运算,但当增加 的指数时,结果将变得非常大以致于计算机的内存容纳不下. 这种情况的发生,不仅取决于计算机内存的总容量也常常和计算机上正在运行的其它程序有关.

如果在计算过程中超出了内存的容量,Mathematica 的大多数版本都毫无选择地停止运算. 因此,对计算进行安排保证不超出内存的容量是很重要的.

即使一个代数运算的结果是很简单的,但是运算过程中产生的中间表达式可能是非常复杂的. 这意味着即使最后的结果很小,但运算的中间部分可能太大而无法处理. 对这种情况,通常把运算分成若干块,分别进行计算. 用户应当了解 Mathematica 内存管理的机制,一旦一部分运算被完成,用于存储中间表达式的内存立即被释放以便用于新的表达式.

Mathematica 运算中,内存空间是一个常见的限制因素. 然而时间也是一个限制因素. 用户通常会等待若干秒甚至一分钟来得到计算结果,但很少会等待一个小时或者一天,而绝不会等待一年.

Mathematica 内部代码使用高效,优化的算法. 但也有一些任务,使用最有名的算法也会运行很久. 一个典型的问题,算法所需要的时间可能根据输入的大小成指数增长. 整数的因子分解是一个典型例子,最著名的算法所需的时间随数字位数的增加而成指数增长. 在使用中,用户会发现,当 少于40位时,FactorInteger[k] 几乎立即给出结果, 但当 多于70位时 FactorInteger[k] 花费的时间长得无法处理.

在某些情况下,有逐步改善的算法,是众所周知的,因此,历届Mathematica 版本可以逐步加快执行某些特定的计算. 但计算理论有力地表明,许多计算将需要不可量的计算工作,所以永远也无法找到它们的快速算法.

即使运算所需的时间不按指数增加,也会发生因运算量太大或太耗时无法在用户的计算机上进行运算的情况.当使用Mathematica 时,用户应当有一种认识: 对用户特殊的应用领域中的运算种类是有限制的.

• 包含几百万万位数的算术运算
• 产生 的数百万位的数值
• 展开具有百万项的多项式
• 因式分解具有数十万项的四个变量的多项式
• 分解二次不等式成几千个独立的元素
• 求解百万次稀疏多项式的整数根
• 可运用百万次递归规则
• 求数亿以内的所有素数
• 求解 1000×1000 稠密矩阵的数值逆变换
• 求解带有数百万非零系数的百万变量的稀疏线性系统
• 求解 250×250 整数矩阵的行列式
• 求解 10×10 符号矩阵的行列式
• 求解 200 次幂多项式方程的数值解
• 解决带有几十万的变量的稀疏线性编程问题
• 自动绘制带有数以万计顶点,数以十万计边缘的网络
• 求解具有数亿个元素的列表的傅立叶变换
• 可渲染数百万个图元
• 对具有数千万个元素的列表进行排序
• 在有上千万个字符的文本中查找一个字符串
• 可输入几十兆字节的数值数据
• 对数百页的 TraditionalForm 输出进行格式处理

在 2006 老式电脑上花费若干秒的一些运算

New to Mathematica? Find your learning path »
Have a question? Ask support »