【问题标题】:Inverse Laplace transform of a rational function with third order polynominal denominator, using Sympy使用 Sympy 对具有三阶多项式分母的有理函数进行拉普拉斯逆变换
【发布时间】: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


【解决方案1】:

查看回溯,这看起来像是一个合法的错误。您应该在SymPy issue tracker 中报告它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多