如何获得圣人的叶子数(表达大小)?

时间:2014-08-08 11:20:50

标签: sage

(我不知道stackoverflow上有sage组。我之前在sage支持usenet上问了这个问题,但这很慢)。

以下是问题:

圣人是否有办法确定通常由叶子计数给出的表达大小?与Mathematica leafCount[]此处

中记录的内容类似

http://reference.wolfram.com/language/ref/LeafCount.html

"给出expr中不可分的子表达式的总数。"

也类似于Maple的

http://www.maplesoft.com/support/help/Maple/view.aspx?path=MmaTranslator/Mma/LeafCount&term=leafcount

我需要一种方法来衡量圣人的结果表达式的大小,并将其与Mathematica的结果和Maple进行比较。我目前使用leafCount(),因为Maple和Mathematica都有这个功能。

圣人是否有类似的功能或其他方式来获得这项措施?

例如,给定此表达式

 (c + integrate(e^(2*x + sin(x)), x))*e^(-sin(x))

然后在Mathematica中我会写

  Clear[x, c];
  expr = (c + Integrate[Exp[2*x + Sin[x]], x])*Exp[-Sin[x]];
  LeafCount[expr]

          19

更新: 回答下面关于如何计算叶子的问题。如果绘制树表达式,则它是表达式树中的每个节点。对于上述情况,它是

Mathematica graphics

同样地,LeafCount[x + y]给出3

Mathematica graphics

1 个答案:

答案 0 :(得分:2)

这可能不是内置的,但也许应该是。只要您习惯编写自己的树遍历,讨论herehere应该会有所帮助。

这是一个错误的实现,可以帮助您。这是错误的,因为我没有得到19 - 基本上,我得到常数和x s,这不是你想要的。我不知道这些子表达式是如何计算的。但我认为使用expr.operands()expr.operator()的组合可以获得您想要的内容。

def tree(expr): 
    if expr.operator() is None: 
        return expr 
    else: 
        return map(tree, expr.operands()) 

expr = (x + integrate(e^(2*x + sin(x)), x))*e^(-sin(x))
len(flatten(tree(expr)))

编辑:如果一个叶子确实是任何节点(不仅仅是图理论意义上的离开,这似乎很奇怪),那么probably something here确实很有用。不是我的代码:

sage: def tree(expr): 
....:         if expr.operator() is None: 
....:                 return expr 
....:         else: 
....:                 return [expr.operator()]+map(tree, expr.operands()) 
....:     
sage: var('y')
y
sage: tree(x+y)
[<function operator.add>, x, y]
sage: tree((y+integrate(e^(2*x+sin(x)),x))*e^(-sin(x)))
[<function operator.mul>,
 [<function operator.add>,
  y,
  [integrate,
   [exp, [<function operator.add>, [<function operator.mul>, x, 2], [sin, x]]],
   x]],
 [exp, [<function operator.mul>, [sin, x], -1]]]
sage: len(tree((y+integrate(e^(2*x+sin(x)),x))*e^(-sin(x))))
3
sage: len(flatten(tree((y+integrate(e^(2*x+sin(x)),x))*e^(-sin(x)))))
17

您会注意到答案是不同的,因为Sage将exp计为原始运算符,而不是e^stuff

另请参阅answer to your sage-support question