python - 从 sympy 拉普拉斯逆变换获得更好的答案

标签 python sympy

尝试计算以下几行,我得到了一个非常复杂的结果。

from sympy import *
s = symbols("s")
t = symbols("t")
h = 1/(s**3 + s**2/5 + s)
inverse_laplace_transform(h,s,t)

结果如下:

(-(I*exp(-t/10)*sin(3*sqrt(11)*t/10) - exp(-t/10)*cos(3*sqrt(11)*t/10))*gamma(-3*sqrt(11)*I/5)*gamma(-1/10 - 3*sqrt(11)*I/10)/(gamma(9/10 - 3*sqrt(11)*I/10)*gamma(1 - 3*sqrt(11)*I/5)) + (I*exp(-t/10)*sin(3*sqrt(11)*t/10) + exp(-t/10)*cos(3*sqrt(11)*t/10))*gamma(3*sqrt(11)*I/5)*gamma(-1/10 + 3*sqrt(11)*I/10)/(gamma(9/10 + 3*sqrt(11)*I/10)*gamma(1 + 3*sqrt(11)*I/5)) + gamma(1/10 - 3*sqrt(11)*I/10)*gamma(1/10 + 3*sqrt(11)*I/10)/(gamma(11/10 - 3*sqrt(11)*I/10)*gamma(11/10 + 3*sqrt(11)*I/10)))*Heaviside(t)

但是答案应该更简单,Wolframalpha证明了这一点。

有什么办法可以简化这个结果吗?

最佳答案

我对此进行了一些尝试,我可以找到更简单的解决方案的方法是使用以下内容:

from sympy import *
s = symbols("s")
t = symbols("t", positive=True)
h = 1/(s**3 + s**2/5 + s)
inverse_laplace_transform(h,s,t).evalf().simplify()

请注意,我将 t 定义为正变量,否则 sympy 函数将返回一个大项,后跟 Heaviaside 函数。结果仍然包含许多 gamma 函数,我无法将它们简化为 Wolfram 返回的表达式。使用 evalf() 将其中一些转换为数值,然后经过简化后,您会得到一个类似于 Wolfram 中的表达式,但具有 float 。

不幸的是 Sympy 的这一部分还不太成熟。我也尝试过 Maxima,结果与 Wolfram 的结果非常接近。所以看起来 Wolfram 在那里并没有做任何特别的事情。

关于python - 从 sympy 拉普拉斯逆变换获得更好的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491914/

相关文章:

python - 如何在 VS Code 中设置 Python?

python - Apache Oozie工作流程

python - 如何在我的网络应用程序上安全地接受和运行用户的代码?

python - Flask-SQLAlchemy:如何有条件地插入或更新一行

Python:使用 sympy.sympify 对数学函数执行安全 eval()

python - 如何在 Sympy 中进行函数组合?

python - 无法重命名多个文件(Python)

python - 在 sympy 或替代方案中导出点云方程

python - 在 sympy 中切片符号 block 矩阵时保留维度

python - 如何在 SymPy 中表示复杂平面区域?