Mathematica 9 is now available

2.5.12 高级专题:无穷计算的控制

在计算表达式时 Mathematica 遵循的一般原则是将变换规则一直使用到表达式 不再变化为止. 这意味着当 Mathematica 进行 x=x+1 的赋值时将进入无穷循环. 但实际 Mathematica 在有限步后就停止,这个步数由全局变量 $RecursionLimit 决定,但总可以通过明确终止提前结束它.

这个赋值可能会导致无穷循环,Mathematica 在由 $RecursionLimit 决定的有限步后停止

Mathematica 没有计算完而停止时,它返回一个保持的结果,通过调用 ReleaseHold 可继续计算

限制无穷计算的中间变量

这是一个循环定义,它的计算由 $IterationLimit 停止

变量 $RecursionLimit$IterationLimit 以两种方式控制无穷计算. $RecursionLimit 限制计算堆栈的最大深度,或由 Trace 产生的列表结构中最大嵌套的深度. $IterationLimit 限制一个计算链的最 大长度,或由 Trace 产生的结构中一个列表的最大长度. $RecursionLimit $IterationLimit 的默认值适合大部分计算和计算机系统,可以重新设置它们 为一个整数值或 Infinity. 但注意在绝大部分计算机系统中, 不要设置$RecursionLimit = Infinity.

这里将 $RecursionLimit$IterationLimit 设置为 20

这里的无穷定义 20 步以后结束

无结束条件时,这个递推定 义将导致无穷计算

计算结束之前已形成了一个相当大的结构

另一个递推定义

在这里,没有形式复杂的结构,计算由 $IterationLimit 结束

无穷循环不仅花费时间而且占用内存. 限制的计算一般不产生大的 中间结构,但 $RecursionLimit 常常产生大的中间结构. 一般情况下结构的大小是 由 $RecursionLimit 值的线性函数,但有时也会随着它指数级增长.
赋值 x=x+1 显然是一个循环,但在使用复杂的循环时,很难确认循环结束, 或者不进入无限循环. 检查的主要方向是变换规则的左右两端总不相等; 这就保证了计算过程不断前进,Mathematica 就不停止变换规则的反复使用.
在使用复杂的 /; 条件时会产生奇怪的现象,特别糟糕的是涉及全局变量的改变. 避免这问题的最好方式是在 /; 条件中不使用全局变量.这也失败时,可用 Update[s]  的所有表达式. Update[ ] Mathematica 更新所有的表达式.



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.