使用最新版本的python(3.11),sympy的laplace_transform函数给了我初始条件。
from sympy import symbols, Function, laplace_transform
t = symbols('t',real=True)
s = symbols('s',complex=True)
y = Function('y')(t)
laplace_transform(y.diff(t,2)+2*y.diff(t,1)+3*y,t,s)
退货
s**2*LaplaceTransform(y(t), t, s) + 2*s*LaplaceTransform(y(t), t, s) - s*y(0) + LaplaceTransform(y(t), t, s) - 2*y(0) - Subs(Derivative(y(t), t), t, 0)
如何替换
y(0)
、Subs(Derivative(y(t),t),t,0)
(初始条件)?
感谢@Davide_sd和这篇文章github.com/sympy/sympy/issues/7219(Eric Weiser,Adeak),我有有效的代码:calliope.us/Classes/Mechatronics/laplace_dif_eq_S24_class.py。
代码片段:
from sympy import symbols, Function, laplace_transform
def apply_initial_conditions(L,ic):
wf = Wild('f')
lw = LaplaceTransform(wf,t,s)
ll=L.find(lw)
for l in ll:
lz=l.match(lw)[wf]
newL = L
icl = [lz.diff(t,i).subs(t,0) for i in range(0,len(ic))]
for i in range(0,len(ic)):
newL = newL.replace(icl[i],ic[i])
return(newL)
t = symbols('t',real=True)
s = symbols('s',complex=True)
y = Function('y')(t)
Y = laplace_transform(y.diff(t,2)+2*y.diff(t,1)+3*y,t,s)
Y = apply_initial_conditions(Y,[0,0])
from sympy import symbols, Function, laplace_transform
t = symbols('t',real=True)
s = symbols('s',complex=True)
y = Function('y')(t)
r = laplace_transform(y.diff(t,2)+2*y.diff(t,1)+3*y,t,s)[0]
# substitution dictionary with zero-initial condition
sd = {y.diff(t, i).subs(t, 0): 0 for i in range(2)}
r.subs(sd)
# s**2*LaplaceTransform(y(t), t, s) + 2*s*LaplaceTransform(y(t), t, s) + 3*LaplaceTransform(y(t), t, s)
在这里,我创建了一个替换字典,在其中应用了零初始条件。请注意,我使用了
range(2)
。 “二”是导数的最大阶数。