Sageのシンボリック式を次のように変換したいと思います。
y = 5*x + 7^x + 3*x^2
添え字(y [0] = '5'、y [1] ='*'など)でアクセスできる文字列に。
式内の特定の変数の出現回数を計算したいので、これを行う必要があります。上記の例では、変数「X」が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'