--- title: 數學軟體實作 - Poisson's equation tags: 2020 Fall - 數學軟體實作 GA: G-77TT93X4N1 slideOptions: theme: beige progress: true controls: true slideNumber: false --- <style> .reveal { font-size: 24px; } </style> # Lecture - Jacobi method to solve Poisson's equation ### References: * [Poisson's equation](https://en.wikipedia.org/wiki/Poisson%27s_equation) * [Jacobi method](https://en.wikipedia.org/wiki/Jacobi_method) --- ## Jacobi method - Recall #### 解 $Ax=b$: 將原問題改寫成: $$ Ax = b \quad\to\quad (D+L+U)x=b \quad \to\quad Dx= -(L+U)x+b. $$ 然後我們可以定義一個數列 $$ Dx^{(n+1)}= -(L+U)x^{(n)}+b, $$ 或是 $$ x^{(n+1)}= D^{-1}\left(-(L+U)x^{(n)}+b\right), $$ 並且知道如果 $x^{(n)}$ 這個數列收斂了, 令他收斂到 $x$, 那 $x$ 就會滿足 $Ax=b$. --- 所以 Jacobi method 最基本的樣子就是 <font color="red"> $$ x^{(n+1)}= D^{-1}\left(-(L+U)x^{(n)}+b\right) $$ </font> 另外我們也會改寫上式為 $$ x^{(n+1)}= D^{-1}\left(Dx^{(n)}+b-(D+L+U)x^{(n)}\right) = x_n + D^{-1}(b-Ax^{(n)}) $$ 接著我們定義 <font color="blue">$r^{(n)} = b-Ax^{(n)}$</font>, 這就是所謂的 residual, 那我們就有以下這個式子 <font color="blue"> $$ x^{(n+1)} = x^{(n)}+D^{-1}r^{(n)} $$ </font> 依此我們可以定義兩種 stopping criteria: * $\|x^{(n+1)}-x^{(n)}\|<Tol_1$ * $\|r^{(n)}\|<Tol_2$ --- ## Poisson's equation in 1D 一維的 Poisson's equation 是以下形式: $$ u''(x) = f(x), \quad x\in[0, 1], $$ 其中 $f(x)$ 是已知函數, 而 $u=u(x)$ 則是未知的函數, 通常需要伴隨一組邊界條件來確保解的唯一性, 例如 zero Dirichlet 邊界條件: $u(0)=u(1)=0$. #### Example 例如, $f(x)=\pi^2\sin(\pi x)$, 也就是說想要找一個函數 $u(x)$ 使得它滿足 $$ u''(x) = \pi^2\sin(\pi x), \quad x\in[0, 1], $$ 並且 $u(0)=u(1)=0$. 好消息! 答案是 $u(x) = -\sin(\pi x)$. :100: --- ### Finite difference method 對於一般的 $f(x)$ 也許我們無法推導將問題解出來, 那就可以試著將原問題離散化求數值解. 意思就是, 原本我們是要求 $u(x)$, $x\in[0,1]$, 不過現在我們先將 $[0,1]$ 分成很多點 $$ x_k = k\Delta x, \quad k=1, \cdots, N, \quad \Delta x = \frac{1}{N+1}. $$ 並將 $u(x)$ 在這些點上的值定為 $u_k = u(x_k)$, $k=1,\cdots,N$. ![FD1](https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Finite_Differences.svg/640px-Finite_Differences.svg.png =200x) ![FD2](http://hplgit.github.io/INF5620/doc/pub/sphinx-decay/_images/fdm_u_ue.png =350x) --- 然後我們試著將 $\{u_k\}$ 所要滿足的方程式寫下來. 而要滿足的方程式為以下這個: $$ \frac{u_{k-1} - 2u_k + u_{k+1}}{(\Delta x)^2} = f_k, \quad k=1, \cdots, N, \quad u_0=u_{n+1}=0 $$ 或寫成矩陣的形式: $$ \frac{1}{(\Delta x)^2} \begin{bmatrix} -2 & 1 & & & & \\ 1 & -2 & 1 & & & \\ & 1 & \ddots & \ddots & & \\ & & \ddots & \ddots & 1 & \\ & & & 1 & -2 \end{bmatrix}_{N\times N} u = f, $$ 其中 $$ u = [u_1, u_2, \cdots, u_N]^T, \quad f = [f_1, f_2, \cdots, f_N]^T. $$ 也就是說我們把 "解一維 Poisson's equation" 這件事轉換成"解一個線性系統". --- 接著我們就可以用 Jacobi method 來解它. Given $x^{(n)}$, $$ r^{(n)} = b-Ax^{(n)}, \quad x^{(n+1)} = x^{(n)}+D^{-1}r^{(n)} $$ --- 我們先看一下 Poisson 問題的 residual 怎麼算: $$ \frac{1}{(\Delta x)^2} \begin{bmatrix} -2 & 1 & & & & \\ 1 & -2 & 1 & & & \\ & 1 & \ddots & \ddots & & \\ & & \ddots & \ddots & 1 & \\ & & & 1 & -2 \end{bmatrix}_{N\times N} u = f, $$ 給定 $u^{(n)}$, residual 就是 $$ r^{(n)}_k = f_k - \frac{1}{(\Delta x)^2}\left(u^{(n)}_{k-1} - 2u^{(n)}_k + u^{(n)}_{k+1}\right) $$ 然後下一個 $u^{(n+1)}$ 就是 ($u^{(n+1)} = u^{(n)}+D^{-1}r^{(n)}$) $$ u^{(n+1)} = u^{(n)}-\frac{(\Delta x)^2}{2}r^{(n)} $$ --- ### Summary Given: $f(x)$ 1. Compute $x_k$ and $f_k$ 2. Initialize $u^{(0)}_k=0$ 3. For $n\ge 1$ 1. $r^{(n)}_k = f_k - \frac{1}{(\Delta x)^2}\left(u^{(n)}_{k-1} - 2u^{(n)}_k + u^{(n)}_{k+1}\right)$ 2. $u^{(n+1)} = u^{(n)}-\frac{(\Delta x)^2}{2}r^{(n)}$ stopping criteria: * $\|u^{(n+1)}-u^{(n)}\|<Tol_1$ * $\|r^{(n)}\|<Tol_2$ --- ### Assignment 以 Jacobi method 求解 1D Poisson's equation $$ u''(x) = f(x), \quad x\in[0, 1], $$ 邊界條件: $u(0)=u(1)=0$ 並且 $f(x)=\pi^2\sin(\pi x)$. --- ## Poisson's equation in 2D 二維的 Poisson's equation 是以下形式: $$ u_{xx}+u_{yy} = f(x,y), \quad x\in[0, 1], \quad y\in[0,1] $$ 其中 $f(x,y)$ 是已知函數, 而 $u=u(x,y)$ 則是未知的函數, 通常需要伴隨一組邊界條件來確保解的唯一性, 例如 zero Dirichlet 邊界條件. #### Example 例如, $f(x,y)=2\pi^2\sin(\pi x)\sin(\pi y)$, 也就是說想要找一個函數 $u(x,y)$ 使得它滿足 $$ u_{xx}+u_{yy} = 2\pi^2\sin(\pi x)\sin(\pi y), \quad x\in[0, 1], \quad y\in[0,1] $$ 並且 $u$ 在邊界為 $0$. 好消息! 答案是 $u(x,y) = -\sin(\pi x)*\sin(\pi y)$. :100: --- ### Finite difference method 二維的網格需要多加一個 $y$, 假設我們在 $x$ 方面切出 $N$ 個點, $y$ 方向切出 $M$ 個點: $$ x_k = k\Delta x, \quad k=1, \cdots, N, \quad \Delta x = \frac{1}{N+1}, \\ y_l = l\Delta y, \quad l=1, \cdots, M, \quad \Delta y = \frac{1}{M+1}, \\ $$ 並將 $u(x,y)$ 在這些點上的值定為 $u_{k,l} = u(x_k, y_l)$. ![FD3](https://mat.iitm.ac.in/home/sryedida/public_html/caimna/pde/Third/1.jpg =200x) --- 然後我們試著將 $\{u_{k,l}\}$ 所要滿足的方程式寫下來. 而要滿足的方程式為以下這個: $$ \frac{u_{k-1,l} - 2u_{k,l} + u_{k+1,l}}{(\Delta x)^2}+\frac{u_{k,l-1} - 2u_{k,l} + u_{k,l+1}}{(\Delta y)^2} = f_{k,l} $$ 或寫成矩陣的形式: (for example) (注意以下正負號跟我們相反) ![FD4](http://people.eecs.berkeley.edu/~demmel/cs267/lecture17/DiscretePoisson.gif =300x) or ![FD5](https://www.physik.uzh.ch/local/teaching/SPI301/LV-2013-Help/common/rence_method_for_laplace_eq.xml_d15164e591.png =400x) 這是個 $NM\times NM$ 的線性系統 --- 我們用 Jacobi method 來解它. 我們先看一下 Poisson 問題的 residual 怎麼算: $$ \frac{u_{k-1,l} - 2u_{k,l} + u_{k+1,l}}{(\Delta x)^2}+\frac{u_{k,l-1} - 2u_{k,l} + u_{k,l+1}}{(\Delta y)^2} = f_{k,l} $$ 給定 $u^{(n)}$, residual 就是 $$ r^{(n)}_{k,l} = f_{k,l} - \left(\frac{u_{k-1,l} - 2u_{k,l} + u_{k+1,l}}{(\Delta x)^2}+\frac{u_{k,l-1} - 2u_{k,l} + u_{k,l+1}}{(\Delta y)^2}\right) $$ 然後下一個 $u^{(n+1)}$ 就是 ($u^{(n+1)} = u^{(n)}+D^{-1}r^{(n)}$) $$ u^{(n+1)} = u^{(n)}-\frac{1}{2}\frac{1}{\frac{1}{(\Delta x)^2}+\frac{1}{(\Delta y)^2}}r^{(n)} $$ 如果 $\Delta x=\Delta y$, 則有 $u^{(n+1)} = u^{(n)}-\frac{(\Delta x)^2}{4}r^{(n)}$ --- ### Summary Given: $f(x,y)$, assuming that $N=M$ so $\Delta x=\Delta y$ 1. Compute $x_k$, $y_l$ and $f_{k,l}$ 2. Initialize $u^{(0)}_{k,l}=0$ 3. For $n\ge 1$ 1. $r^{(n)}_{k,l} = f_{k,l} - \left(\frac{u_{k-1,l} - 2u_{k,l} + u_{k+1,l}}{(\Delta x)^2}+\frac{u_{k,l-1} - 2u_{k,l} + u_{k,l+1}}{(\Delta y)^2}\right)$ 2. $u^{(n+1)} = u^{(n)}-\frac{(\Delta x)^2}{4}r^{(n)}$ stopping criteria: * $\|u^{(n+1)}-u^{(n)}\|<Tol_1$ * $\|r^{(n)}\|<Tol_2$ --- ### Assignment 以 Jacobi method 求解 2D Poisson's equation $$ u_{xx}+u_{yy} = f(x,y), \quad x\in[0, 1], \quad y\in[0,1] $$ $u$ 在邊界都是 $0$ 並且 $f(x,y)=2\pi^2\sin(\pi x)\sin(\pi y)$. ---