2013-12-08 3 views
4

Я пытаюсь сделать обратный преобразование Лапласа обобщенной рациональной функции вида: D/(A * s ** 2 + B * s + C) используя sympy.Обратное преобразование Лапласа рациональной функции с полиномиальным знаменателем третьего порядка, используя Sympy

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 = 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 

, который не то, что я должен был бы. Любые предложения о том, как сделать симпатичный подход к такому человекообразному ответу?

+0

Если вы знаете, что A и B являются реальными, установите их так, когда вы их создаете ('A, B = символы (« A: B », real = True)'). – asmeurer

+0

Да @asmeurer, который работал для случая: 'eq = B/((s - A) ** 2 + B ** 2)'. Но по-прежнему остается основной вопрос: , если я введу 'A, B, C = символы (« A: C », real = True)', с 'eq = B/(s ** 2 - 2 * A + C * * 2) ', обратное преобразование Лапласа приведет только к бесконечным циклам ЦП. Есть идеи ? –

+0

Может ли клавиатура прерывать ее после ее запуска некоторое время и вставить трассировку где-нибудь? – asmeurer

ответ

2

Рассматривая трассировку, это выглядит как законная ошибка. Вы должны сообщить об этом в SymPy issue tracker.

+0

Несомненно. Спасибо, сэр. –

Смежные вопросы