1

By default, it appears that Mathematica won't use the convolution theorem to write an inverse Laplace transform in the form of a convolution of two functions.

For example, InverseLaplaceTransform[1/(s+1),s,t] is e^-t and InverseLaplaceTransform[LaplaceTransform[f[t],t,s],s,t] is f(t). So, InverseLaplaceTransform[1/(s+1)*LaplaceTransform[f[t],t,s],s,t] should be able to be written as the convolution of e^-t and f[t]. But, Mathematica doesn't do that automatically. Is there a way to set an option for InverseLaplaceTransform to tell it that I would like it to use the convolution theorem, if possible, to write its results in terms of convolutions of functions?

Matt
  • 453
  • 2
  • 13
  • 3
    There's no such option AFAIK. As a work-around, we can implement this property ourselves. I've tried coding this for FourierTransform here: https://mathematica.stackexchange.com/a/71393/1871 Implementing it for InverseLaplaceTransform should be similar. – xzczd Dec 08 '23 at 02:34

1 Answers1

2

I modified @xzczd's code and came up with the following wrapper for the inverse Laplace transform:

ilpt[(h : List | Plus | Equal)[a__], s_, t_] := ilpt[#, s, t] & /@ h[a]
ilpt[a_ b_, s_, t_] := 
 Module[{w}, Convolve[ilpt[a, s, w], ilpt[b, s, w], w, t]]
ilpt[a_, s_, t_] := InverseLaplaceTransform[a, s, t]

I used the following code to test that it is working, although there may be edge cases that are not covered (I'm a computer scientist, not a mathematician, so Laplace transforms are a little outside my wheelhouse.):

ilpt[a*LaplaceTransform[f[t], t, s], s, t] // TraditionalForm
ilpt[LaplaceTransform[g[t], t, s]*b, s, t] // TraditionalForm
ilpt[1/(s + 1)*LaplaceTransform[f[t], t, s], s, t] // TraditionalForm
ilpt[LaplaceTransform[f[t], t, s]*LaplaceTransform[g[t], t, s], s, 
  t] // TraditionalForm
ilpt[a*LaplaceTransform[f[t], t, s]*LaplaceTransform[g[t], t, s]*b, s,
   t] // TraditionalForm

with the following results:

a f(t)
b g(t)
Convolve[E^-w$331676,f(w$331676),w$331676,t]
Convolve[f(w$331922),g(w$331922),w$331922,t]
a b Convolve[f(w$331940),g(w$331940),w$331940,t]

I also made a wrapper for the forward Laplace transform that can convert convolutions back into products:

lpt[(h : List | Plus | Equal)[a__], t_, s_] := lpt[#, t, s] & /@ h[a]
lpt[a_ b_, t_, s_] /; FreeQ[b, Alternatives @@ t] := b lpt[a, t, s]
lpt[(h : Convolve)[a_, b_, w_, t_], t_, s_] := 
 lpt[a, w, s]*lpt[b, w, s]
lpt[a_, t_, s_] := LaplaceTransform[a, t, s]

Below are some tests:

lpt[Convolve[1/w, g[w], w, t], t, s]
lpt[Convolve[Exp[-w], Convolve[f[u + 9], g[u], u, w], w, t], t, s]

And their results, respectively:

LaplaceTransform[1/w, w, s] LaplaceTransform[g[w], w, s]
(LaplaceTransform[f[9 + u], u, s] LaplaceTransform[g[u], u, s])/(1 + s
 )
Matt
  • 453
  • 2
  • 13