sympy laplace_transform 包括初始条件 - 我该如何替换

问题描述 投票:0回答:1

使用最新版本的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])
python sympy differential-equations
1个回答
1
投票
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)
。 “二”是导数的最大阶数。

© www.soinside.com 2019 - 2024. All rights reserved.