Parabolic PDE: Heat Equation |
The one-dimensional heat equation is \[\begin{align*} &\frac{\partial u}{\partial t}(x,t)=\alpha^2\frac{\partial^2 u}{\partial x^2}(x,t),\; 0 < x < l,\; t >0,\\ &u(0,t)=u(l,t)=0,\; t > 0,\; \text{ and } u(x,0)=f(x),\; 0 < x < l. \end{align*}\] First we make a grid of the domain of \((x,t)\) with step size \(h\) and \(k\) respectively: \[\begin{align*} &x_i=ih,\; i=0,1,\ldots,m.\;\; (h=(l-0)/m)\\ &t_j=jk,\; j=0,1,\ldots \end{align*}\]
Now we approximate \(u(x_i,t_j)\) by \(u_{i,j}\) using the Difference Method:
By the FDF in variable \(t\), we get
\[\frac{\partial u}{\partial t}(x_i,t_j)=\frac{u(x_i,t_j+k)-u(x_i,t_j)}{k}-O(k) \approx \frac{u_{i,j+1}-u_{i,j}}{k}.\]
Similarly by the CDF in variable \(x\), we get
\[\frac{\partial^2 u}{\partial x^2}(x_i,t_j)=\frac{u(x_i+h,t_j)-2u(x_i,t_j)+u(x_i-h,t_j)}{h^2}-O(h^2) \approx \frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{h^2}.\]
Plugging these \(u_t(x_i,t_j)\) and \(u_{xx}(x_i,t_j)\) into the heat equation, we get
\[\begin{align*}
&\frac{u_{i,j+1}-u_{i,j}}{k}=\alpha^2 \frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{h^2}\\
\implies & u_{i,j+1}=\lambda u_{i+1,j}+(1-2\lambda)u_{i,j}+\lambda u_{i-1,j}\; (\lambda=k\alpha^2/h^2)\\
\implies & u_{i,j+1}=(1-2\lambda)u_{i,j}+\lambda(u_{i+1,j}+ u_{i-1,j}),\;i=1,\ldots,m-1,\;j=0,1,2,\ldots
\end{align*}\]
By the initial condition \(u(x,0)=f(x)\), we have
\[u_{0,0}=f(x_0),u_{1,0}=f(x_1),\ldots,u_{m,0}=f(x_m).\]
Using \(u_{0,0},u_{1,0},\ldots,u_{m,0}\), we can find \(u_{0,1},u_{1,1},\ldots,u_{m,1}\) and so on at different
values of \(t_j\).
Note \[ \left[ \begin{array}{ccccc} (1-2\lambda) & \lambda & 0&\dots &0\\ \lambda & (1-2\lambda)&\ddots &\ddots &\vdots \\ 0 & \ddots &\ddots &\ddots &0\\ \vdots & \ddots &\ddots &\ddots &\lambda\\ 0 & \dots &0 & \lambda & (1-2\lambda) \end{array} \right] \left[ \begin{array}{l} u_{1,j}\\u_{2,j}\\ \vdots\\ \vdots\\u_{m-1,j} \end{array} \right]= \left[ \begin{array}{l} u_{1,j+1}\\u_{2,j+1}\\ \vdots\\ \vdots\\u_{m-1,j+1} \end{array} \right]\] If we write \(\overrightarrow{u}^{(j)}=[u_{1,j},\ldots,u_{m-1,j}]^T\), then it becomes \[\boxed{\begin{align*} &\overrightarrow{u}^{(j+1)}=A\overrightarrow{u}^{(j)},\; j=0,1,2,\ldots\\ &\overrightarrow{u}^{(0)}=[f(x_1),\ldots,f(x_{m-1})]^T. \end{align*}}\]
The order of error is \(O(k+h^2)\). It can be shown that the difference method is conditionally stable if \(\rho(A)<1\) which implies (steps skipped) if \[\lambda=\frac{k\alpha^2}{h^2}\leq \frac{1}{2}.\]
Example.
Approximate the solution of the following heat equation at \(t=0.4\) by the difference method using \(h=0.25\)
and \(k=0.2\).
\[\begin{align*}
&\frac{\partial u}{\partial t}(x,t)=\frac{1}{16}\frac{\partial^2 u}{\partial x^2}(x,t),\; 0 < x < 1,\; t\geq 0,\\
&u(0,t)=u(1,t)=0,\; t > 0,\; \text{ and } u(x,0)=\sin(2\pi x),\; 0 < x < 1.
\end{align*}\]
Compare the result at \(t=0.4\) using the exact solution \(u(x,t)=e^{-\pi^2t/4}\sin(2\pi x)\).
Solution. \(h=0.25\), \(k=0.2\), \(\alpha^2=1/16\). So \(\lambda=k\alpha^2/h^2=1/5\) and \(m=(l-0)/h=4\).
\[x_0=0,x_1=0.25,x_2=0.5,x_3=0.75,x_4=1\]
Here \(f(x)=\sin(2\pi x)\). So \(u_{0,0}=f(x_0)=0,u_{1,0}=f(x_1)=1,u_{2,0}=f(x_2)=0,\)
\(u_{3,0}=f(x_3)=-1,u_{4,0}=f(x_4)=0.\) For \(\overrightarrow{u}^{(j)}=[u_{1,j},u_{2,j},u_{3,j}]^T\),
\[\begin{align*}
\overrightarrow{u}^{(j+1)}=A\overrightarrow{u}^{(j)}, \text{ i.e., } & \left[ \begin{array}{l} u_{1,j+1}\\u_{2,j+1}\\u_{3,j+1}\end{array} \right]=
\left[ \begin{array}{ccc}
0.6 &0.2 &0\\
0.2 &0.6 &0.2\\
0 &0.2 &0.6 \end{array} \right]
\left[ \begin{array}{l} u_{1,j}\\u_{2,j}\\u_{3,j}\end{array} \right],\; j=0,1,2,\ldots\\
\overrightarrow{u}^{(0)}=[f(x_1),f(x_2),f(x_3)]^T, \text{ i.e., }
& \left[ \begin{array}{l} u_{1,0}\\u_{2,0}\\u_{3,0} \end{array} \right]=\left[ \begin{array}{r} 1\\0\\-1\end{array} \right].
\end{align*}\]
\[\begin{array}{|c|r|r|r|r|r|}
\hline
i & x_i & u_{i,0} &u_{i,1} &u_{i,2} &u(x_i,0.4)\\ \hline
0 & 0.00 & 0 &0.00 &0.00 &0.00\\ \hline
1 & 0.25 & 1 &0.60 &0.36 &0.37\\ \hline
2 & 0.50 & 0 &0.00 &0.00 &0.00\\ \hline
3 & 0.75 & -1 &-0.60 &-0.36 &-0.37\\ \hline
4 & 1.00 & 0 &0.00 &0.00 &0.00\\ \hline
\end{array} \]
Last edited