将Sage符号表达式转换为字符串

时间:2013-01-13 15:15:52

标签: python sage

我想转换一个Sage symoblic表达式,如:

y = 5*x + 7^x + 3*x^2

到我可以通过下标访问的字符串(y [0] ='5',y [1] ='*'等。

我需要这样做,因为我想计算表达式中特定变量的出现次数。在上面的例子中,变量'X'出现了3次。

如果有人知道另一种方法来实现这一点,我也会感激。

1 个答案:

答案 0 :(得分:3)

我认为每个人都在误解这个问题 - 我们是从一个Sage的象征性表达开始的。

sage: y = 5*x + 7^x + 3*x^2
sage: y
7^x + 3*x^2 + 5*x
sage: type(y)
<type 'sage.symbolic.expression.Expression'>

我会使用operands()operator()写一个小的递归漫步者:

def var_counter(someexpr, v):
    tor = someexpr.operator()
    if tor is None:
        return int(v in someexpr.variables())
    else:
        return sum(var_counter(operand, v) for operand in someexpr.operands())

似乎有效:

sage: x, x2, x3 = var("x x2 x3")
sage: y = 5*x + 7^x + 3*x^2 + x2**(x3+3*sin(x))
sage: var_counter(y, x)
4
sage: var_counter(y, x2)
1
sage: var_counter(y, x3)
1

如果您想将表达式转换为字符串,只需调用str

sage: str(y)
'7^x + 3*x^2 + 5*x + x2^(x3 + 3*sin(x))'
sage: str(y)[2]
'x'
sage: str(y)[6]
'3'