在Mathematica中,我可以像x ^ 2那样进行表达式替换 - > x将x的幂2变为x。我想知道圣人是否有类似的功能?
R = PolynomialRing(ZZ, 2, "a")
a = R.gens()
(a[0] + a[1])^2
Out[173]:
a0^2 + 2*a0*a1 + a1^2
我想将(> 1)的所有幂更改为幂1.所以替换^ k - > a for k> = 1。
所以欲望输出是a0 + 2 * a0 * a1 + a1
答案 0 :(得分:0)
我现在正在使用字符串替换来实现结果。如果您有更好的方法,请告诉我。谢谢!
def ReplaceExpression(p, locals):
s = str(p)
s1 = re.sub(r'\b(a\d+)\^\d+', "\g<1>", s)
return sage_eval(s1, locals = locals)
adict = dict([(str(i), i) for i in a])
ReplaceExpression((a[0] + a[1])^2, adict)
Out[1]: 2*a0*a1 + a0 + a1
答案 1 :(得分:0)
SageMath使用SymPy进行符号数学运算,因此表达式应该有replace()
方法。
>>> A
a0**2 + 2*a0*a1 + a1**2
>>> A.replace(lambda expr: isinstance(expr, sympy.Pow), lambda expr: expr.args[0])
2*a0*a1 + a0 + a1
这使用带有两个函数的变量作为参数。第一个是过滤器,它测试表达树中要替换的节点,第二个计算替换。
我们正在搜索任何Pow
节点,并将其替换为它的第一个参数。
答案 2 :(得分:0)
您可以通过理想定义多项式环的商。
sage: R = PolynomialRing(ZZ, 2, "a")
sage: a = R.gens()
sage: b = (a[0] + a[1])^2
sage: b
a0^2 + 2*a0*a1 + a1^2
sage: J = R.ideal([x^2 - x for x in a])
sage: J
Ideal (a0^2 - a0, a1^2 - a1) of Multivariate Polynomial Ring in a0, a1 over Integer Ring
sage: S = R.quo(J)
sage: S
Quotient of Multivariate Polynomial Ring in a0, a1 over Integer Ring by the ideal (a0^2 - a0, a1^2 - a1)
sage: S(b)
2*a0bar*a1bar + a0bar + a1bar