# Initial Layer¶

### An example¶

Consider the initial value problem

$\epsilon y^\prime +y=e^{-t}, ~~~~~~~~ y(0)=2$

#### Outer approximation¶

Setting $\epsilon =0$, we will get $y(t)=e^{-t}$ or we can write

$$y_o(t)=e^{-t} ~~ \text{where} ~~ t \sim O (1).$$

#### Inner approximation¶

Rescale time: $\displaystyle \tau=\frac{t}{\delta(\epsilon)}$ and define $z(\tau)=y(t)$.

Subsituting $z(\tau)$ in the given ODE we will get

$\frac{\epsilon}{\delta} z^\prime +z=1, ~~ \text{where} ~~ t \sim O (\epsilon).$

We see that $\delta(\epsilon)=\epsilon$ would make all the terms in the given ODE $\sim O (1)$. Subsituting $\delta(\epsilon)=\epsilon$ we will get

$z^\prime +z=1, ~~ \text{where} ~~ t \sim O (\epsilon).$

Soving this ODE we will get $z(\tau)=1+Ce^{-\tau}$ therefore we can write the inner approximation as

${y_i(t)}=1+Ce^{-t/\epsilon}$

Using the initial condition $z(0)=y(0)=2$, we get $C=1$ so

$${y_i(t)}=1+e^{-t/\epsilon} ~~ \text{where} ~~ t \sim O (\epsilon).$$

• Check that C=1 also satisfies the matching condition $\displaystyle \lim_{t \to 0} y_o(t)=\lim_{\tau \to \infty} y_i(\tau)$ =1.

#### Uniform approximation¶

$y_u(t)=y_o(t)+y_i(t)-1$ or

$$y_u(t)=e^{-t}+e^{-t/\epsilon}$$
In [1]:
# Solve the differential equation
# import all the packages required
import numpy as np
import matplotlib.pyplot as plt
% matplotlib inline
from scipy.integrate import odeint

ep=0.05

def fun(X,t):
x=X[0];
dx=1.0/ep*(-x+np.exp(-t));

return [dx]

plt.figure(figsize=(10,6))

# Times at which the solution is to be computed.
t = np.linspace(0, 3, 5000)
# Initial condition
Xinit=[2]
# scipy's ode solver
Xsolu = odeint(fun,Xinit,t)

#plotting commands
plt.plot(t, Xsolu[:,0],'r-',lw=2,label='Exact Solution')

yi=1+np.exp(-t/ep)
plt.plot(t,yi,'g-',lw=2,label='Inner layer')

yo=np.exp(-t);
plt.plot(t,yo,'b-',lw=2,label='Outer layer')

yu=np.exp(-t)+np.exp(-t/ep)
plt.plot(t,yu,'k--',lw=4,label='Uniform approximation')

plt.xlabel('$t$',fontsize=20);plt.ylabel('$y(t)$',fontsize=20)
plt.xticks(fontsize = 20);plt.yticks(fontsize = 20)
plt.show()