我有一个涉及分数指数的表达式,我想将其作为一个可识别的多项式来表示同意解决方案。如果有必要的话,我可以使用Rational
来编写指数,但不能使其成功。
我该怎么办?
>>> from sympy import *
>>> var('d x')
(d, x)
>>> (0.125567*(d + 0.04) - d**2.25*(2.51327*d + 6.72929)).subs(d,x**4)
0.125567*x**4 - (2.51327*x**4 + 6.72929)*(x**4)**2.25 + 0.00502268
答案 0 :(得分:4)
SymPy不会合并指数,除非它知道这样做是安全的。对于复数,它只对整数指数安全。由于我们不知道x是真实的还是复杂的,因此指数不会合并。
即使是真实的x,(x**4)**(9/4)
也与x**9
不同(考虑为负x)。如果使用x
宣布x = Symbol('x', real=True)
为真,则(x**4)**Rational(9, 4)
会正确返回x**8*Abs(x)
而不是x**9
。
如果x
被宣布为肯定x = Symbol('x', positive=True)
,则(x**4)**Rational(9, 4)
会返回x**9
。
不建议在SymPy中使用有理数的浮点表示,尤其是作为指数。这就是为什么我用上面的Rational(9, 4)
替换了2.25。对于2.25,当x为实数时结果为Abs(x)**9.0
,如果x为正数则结果为x**9.0
。小数点表示这些是浮点数;因此,后续操作将具有浮点结果而不是符号结果。例如(x声明为正数):
>>> solve((x**4)**Rational(9, 4) - 2)
[2**(1/9)]
>>> solve((x**4)**2.25 - 2)
[1.08005973889231]