我试图用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是以下表达式:
[](https://chart.googleapis.com/chart?cht=tx&chl=%5Cprod_%7Bi=1%7D%5Enbase%5E%7Bf(i%29%7D)
在应用doit()之后,它被命名为:
[](https://chart.googleapis.com/chart?cht=tx&chl=base%5E%7B%5Csum_%7Bi=1%7D%5E%7Bn%7Df%7B(i%29%7D%7D)
这段代码适用于任何基础。我用一个数字(例如3.0)来测试它,一个变量(例如。在SymPy中定义的常数(例如。( pi)就在base=euler数时,doit()就不能工作了。
P=Product(E**f(i),(i,1,n))
P.doit()或
P=Product(exp(f(i)),(i,1,n))
P.doit()其结果仍然是:
[](https://chart.googleapis.com/chart?cht=tx&chl=%5Cprod_%7Bi=1%7D%5Ene%5E%7Bf(i%29%7D)
而不是
[](https://chart.googleapis.com/chart?cht=tx&chl=e%5E%7B%5Csum_%7Bi=1%7D%5E%7Bn%7Df%7B(i%29%7D%7D)
所做的工作可能是用类似于基的变量对e进行细分,并在末尾进行相反的替换。
但有没有更好的解决办法?
版本:Python3.7.4,SymPy 1.4
发布于 2020-09-05 20:49:33
我想这适用于其他情况,而不是exp,因为E**x是类exp的实例,而不是Pow的实例。通过检查这两个类,可能可以使代码一致。
可以使用重写在产品和和之间使用exp和log进行转换:
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
ℯ https://stackoverflow.com/questions/63756686
复制相似问题