# Differential Equations

## Laplace Transform (LT) methods

### Unit Step Functions

SAGE can define piecewise functions like

x \ {\mapsto}\ \sin ( \frac{\pi \cdot x}{2} )
on (0, 1),
x \ {\mapsto}\ 1 - ( x - 1 )^2
on (1, 3),
x \ {\mapsto}\ -x
on (3, 5), as follows:

sage: f(x) = sin(x*pi/2)
sage: g(x) = 1-(x-1)^2
sage: h(x) = -x
sage: P = Piecewise([[(0,1), f], [(1,3),g], [(3,5), h]])
sage: latex(P)

However, at the moment only Laplace transforms of "piecewise polynomial" functions are implemented:

sage: f(x) = x^2+1
sage: g(x) = 1-(x-1)^3
sage: P = Piecewise([[(0,1), f], [(1,3),g], [(3,5), h]])
sage: P.laplace(x,s)
(s^3 - 6)*e^(-s)/s^4 - ((2*s^2 + 2*s + 2)*e^(-s)/s^3) + (7*s^3 + 12*s^2 + 12*s + 6)*e^(-3*s)/s^4 + (-3*s - 1)*e^(-3*s)/s^2 + (5*s + 1)*e^(-5*s)/s^2 + (s^2 + 2)/s^3

### Convolution theorem

You can find the convolution of any piecewise defined function with another (off the domain of definition, they are assumed to be zero). Here is f , f*f , and f*f*f , where f(x)=1 , 0<x<1 :

sage: x = PolynomialRing(QQ, 'x').gen()
sage: f = Piecewise([[(0,1),1*x^0]])
sage: g = f.convolution(f)
sage: h = f.convolution(g)
sage: P = f.plot(); Q = g.plot(rgbcolor=(1,1,0)); R = h.plot(rgbcolor=(0,1,1))

The command show(P+Q+R) displays this:

Though SAGE doesn't simplify very well, you can see that the LT(f*f) is equal to LT(f)^2:

sage: f.laplace(x,s)
1/s - e^(-s)/s
sage: g.laplace(x,s)
-(s + 1)*e^(-s)/s^2 + (s - 1)*e^(-s)/s^2 + e^(-(2*s))/s^2 + 1/s^2
sage: (f.laplace(x,s)^2).expand()
-2*e^(-s)/s^2 + e^(-(2*s))/s^2 + 1/s^2