Consider the initial value problem
$ \epsilon y^\prime +y=e^{-t}, ~~~~~~~~ y(0)=2$
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).$$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).$$$y_u(t)=y_o(t)+y_i(t)-1$ or
$$ y_u(t)=e^{-t}+e^{-t/\epsilon} $$# 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.legend(bbox_to_anchor=(0.9, 1.0), loc=1, borderaxespad=0.,fontsize=14)
plt.xlabel('$t$',fontsize=20);plt.ylabel('$y(t)$',fontsize=20)
plt.xticks(fontsize = 20);plt.yticks(fontsize = 20)
plt.show()