SymPy:doit 对指数乘积没有影响
SymPy: no effect of doit on a product of exponentials
我正在尝试使用 SymPy 从指数乘积中获取总和的指数。它似乎适用于任何基础,但 e(欧拉数)。
具有指数通用基数的代码示例:
from sympy import symbols, Function
from sympy import Product, E, pi, exp
i,n,base=symbols('i n base')
f=Function('f')
P=Product(base**f(i),(i,1,n))
P.doit()
P 是以下表达式:
在应用 doit() 之后,它变成了:
此代码适用于任何基地。我用数字(例如 3.0)、变量(例如 x、base)或 SymPy 中定义的常量(例如pi)。
就在base=euler number时,doit()不起作用。
P=Product(E**f(i),(i,1,n))
P.doit()
或
P=Product(exp(f(i)),(i,1,n))
P.doit()
结果仍然是:
而不是
一个变通办法可能是用 base 之类的变量替换 e 并在最后进行相反的替换。
但是有没有更好的解决办法呢?
版本:python 3.7.4,SymPy 1.4
我想这适用于其他情况但不适用于 exp,因为 E**x
是 class exp
而不是 Pow
的实例。可能通过检查两个 classes.
可以使 sympy 代码一致
您可以使用 rewrite 使用 exp 和 log 在 Products 和 Sums 之间进行转换:
In [47]: P = Product(E**f(i), (i, 1, n))
In [48]: P
Out[48]:
n
─┬──┬─
│ │ f(i)
│ │ ℯ
│ │
i = 1
In [49]: P.rewrite(Sum)
Out[49]:
n
___
╲
╲
╱ f(i)
╱
‾‾‾
i = 1
ℯ
我正在尝试使用 SymPy 从指数乘积中获取总和的指数。它似乎适用于任何基础,但 e(欧拉数)。
具有指数通用基数的代码示例:
from sympy import symbols, Function
from sympy import Product, E, pi, exp
i,n,base=symbols('i n base')
f=Function('f')
P=Product(base**f(i),(i,1,n))
P.doit()
P 是以下表达式:
在应用 doit() 之后,它变成了:
此代码适用于任何基地。我用数字(例如 3.0)、变量(例如 x、base)或 SymPy 中定义的常量(例如pi)。 就在base=euler number时,doit()不起作用。
P=Product(E**f(i),(i,1,n))
P.doit()
或
P=Product(exp(f(i)),(i,1,n))
P.doit()
结果仍然是:
一个变通办法可能是用 base 之类的变量替换 e 并在最后进行相反的替换。
但是有没有更好的解决办法呢?
版本:python 3.7.4,SymPy 1.4
我想这适用于其他情况但不适用于 exp,因为 E**x
是 class exp
而不是 Pow
的实例。可能通过检查两个 classes.
您可以使用 rewrite 使用 exp 和 log 在 Products 和 Sums 之间进行转换:
In [47]: P = Product(E**f(i), (i, 1, n))
In [48]: P
Out[48]:
n
─┬──┬─
│ │ f(i)
│ │ ℯ
│ │
i = 1
In [49]: P.rewrite(Sum)
Out[49]:
n
___
╲
╲
╱ f(i)
╱
‾‾‾
i = 1
ℯ