2013-01-13 27 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' 
相關問題