2013-01-13 26 views
2

我想将鼠尾草symoblic表达式转换等:转换鼠尾草符号表达为字符串

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

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

我需要做,因为我要计算在表达式特定变量的出现次数。在上面的例子中变量“X” occures 3次。

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

回答

3

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

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' 
相关问题