【发布时间】:2013-12-10 14:42:33
【问题描述】:
我正在尝试对以下形式的广义有理函数进行拉普拉斯逆变换: D/(A*s**2 + B*s + C) 使用同情。
from sympy import *
from sympy import inverse_laplace_transform as ilt
from sympy.abc import s, t
var('A:D')
eq = D/(A*s**2 + B*s + C)
solution = ilt(eq, s, t)
从数学分析中知道答案是:
-(A (e^(t (-1/2 sqrt(C^2-4 B)-C/2))-e^(t (1/2 sqrt(C^2-4 B)-C/2))))/sqrt(C^2-4 B)
但是 sympy 不会产生解决方案,并且代码将卡在无限 CPU 进程中,没有特定的增益。 但是把 eq 像这样:
eq = B/((s - A)**2 + B**2)
sympy 将产生如下形式的方程:
-I*(I*exp(t*im(B))*sin(t*(re(B) - im(A))) - exp(t*im(B))*cos(t*(re(B) - im(A)))
+ I*exp(-t*im(B))*sin(t*(re(B) + im(A))) + exp(-t*im(B))*cos(t*(re(B) + im(A))))
*exp(t*re(A))*Heaviside(t)/2
这不是我需要的。 关于如何使 sympy 屈服于这样一个人类可读的答案的任何建议?
【问题讨论】:
-
如果您知道 A 和 B 是真实的,请在创建它们时设置它们 (
A, B = symbols("A:B", real=True))。 -
是的 @asmeurer 为这个案子工作:
eq = B/((s - A)**2 + B**2)。但主要问题仍然存在:如果我引入A, B, C = symbols("A:C", real=True)和eq = B/(s**2 - 2*A + C**2),则拉普拉斯逆变换只会导致无限的 CPU 周期。有什么想法吗? -
你可以在它运行一段时间后用键盘中断它并将回溯粘贴到某处吗?
-
@asmeurer 你在这里:[pastebin.com/6RyhxFQR] 这是键盘中断:
from sympy import *; from sympy import s, t; from sympy import inverse_laplace_transform as ilt; A, B = symbols("A:B"); eq = 1/(s**2 - A*2*s + B**2 ); ilt(eq, s, t) -
哦,所以将最后一个
]作为链接的一部分。
标签: math sympy symbolic-math symbolic-computation