Search code examples
pythonsympydifferential-equations

sympy laplace_transform includes initial conditions - how do I substitute


With the latest version of python (3.11), sympy's laplace_transform function gives me initial conditions.

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)

returns

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)

How do I substitute for y(0), Subs(Derivative(y(t),t),t,0) (the initial conditions)?


Thanks to @Davide_sd and this post github.com/sympy/sympy/issues/7219 (Eric Weiser, Adeak) , I have code that works: calliope.us/Classes/Mechatronics/laplace_dif_eq_S24_class.py.

code snippet:

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])

Solution

  • 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)
    

    Here, I created a substitution dictionary where I applied zero-initial conditions. Note that I used range(2). "Two" is the maximum order of the derivative.