Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

有限差分法

有限差分法では,微分を差分商で近似することで微分方程式を数値的に解く. ここでは,1階と2階微分の近似としての各種差分商の導出と,それを利用した微分方程式の離散化の例を ポアソン方程式を用いて示す.

離散化の手法

離散化とは連続な関数を数値的に扱うために,有限で非連続(離散)な値に分割することをいう. 離散化の方法は様々だが,目的や条件をにより使い分ける. 例えば,空間方向の離散化には

などがある.

これらは空間的に連続関数の離散化に用いられる手法であり,時間的に連続な関数の離散化には差分法が用いられる. ここでは有限差分法について解説する.

有限差分法 finite difference method

有限差分法(FDM)は,物体を格子点の集まりとみなし,テーラー展開に基づき 微分を差分商で近似して,差分方程式を作り,微分方程式を解く.

差分 difference

関数が2つの変数値に対してとる値の有限な差を差分(difference)という. この差分を変数値の差(刻み幅)で割ったものを差分商(difference quotient)という.

ある2次元空間上の関数u(x,y)u(x,y)の離散化を考える. 2次元空間を格子で区切り,各格子点の座標を(xi,yj)(x_i,y_j),格子間隔はそれぞれΔx,Δy\Delta x, \Delta yとする. 格子番号を用いて,ui,j=u(xi,yj)u_{i,j}=u(x_i,y_j)とすれば,ui+1,j,ui1,ju_{i+1,j}, u_{i-1,j}(xi,yj)(x_i, y_j)のまわりで

ui+1,j=u(xi+Δx,yj)=ui,j+(ux)iΔx+12!(2ux2)iΔx2+13!(3ux3)iΔx3+u_{i+1,j}=u(x_i+\Delta x, y_j)=u_{i,j}+\left( \frac{\partial u}{\partial x}\right)_i \Delta x +\frac{1}{2!} \left( \frac{\partial^2 u}{\partial x^2}\right)_i \Delta x^2 +\frac{1}{3!} \left( \frac{\partial^3 u}{\partial x^3}\right)_i \Delta x^3 +\dots
ui1,j=u(xiΔx,yj)=ui,j(ux)iΔx+12!(2ux2)iΔx213!(3ux3)iΔx3+u_{i-1,j}=u(x_i-\Delta x, y_j)=u_{i,j}-\left( \frac{\partial u}{\partial x}\right)_i \Delta x +\frac{1}{2!} \left( \frac{\partial^2 u}{\partial x^2}\right)_i \Delta x^2 -\frac{1}{3!} \left( \frac{\partial^3 u}{\partial x^3}\right)_i \Delta x^3 +\dots

とそれぞれテイラー展開できる.

それぞれ2次以上の項を無視すれば,

ui+1,j=ui,j+(ux)iΔx+O(Δx2)ui,j+(ux)iΔxui1,j=ui,j(ux)iΔx+O(Δx2)ui,j(ux)iΔxu_{i+1,j}=u_{i,j}+\left( \frac{\partial u}{\partial x}\right)_i \Delta x+O(\Delta x^2) \approx u_{i,j}+\left( \frac{\partial u}{\partial x}\right)_i \Delta x \\ u_{i-1,j}=u_{i,j}-\left( \frac{\partial u}{\partial x}\right)_i \Delta x+O(\Delta x^2) \approx u_{i,j}-\left( \frac{\partial u}{\partial x}\right)_i \Delta x

なので,

ui+1,jui,j=(ux)iΔxui,jui1,j=(ux)iΔxu_{i+1,j}-u_{i,j}=\left( \frac{\partial u}{\partial x}\right)_i \Delta x \\ u_{i,j}-u_{i-1,j}=\left( \frac{\partial u}{\partial x}\right)_i \Delta x

これを,それぞれ前進差分(forward difference),後退差分(backward difference)と呼ぶ.

これを用いれば,

(ux)i=ui+1,jui,jΔx(ux)i=ui,jui1,jΔx\begin{align*} \left( \frac{\partial u}{\partial x}\right)_i&=&\frac{u_{i+1,j}-u_{i,j}}{\Delta x} \\ \left( \frac{\partial u}{\partial x}\right)_i&=&\frac{u_{i,j}-u_{i-1,j}}{\Delta x} \end{align*}

と微分を差分商によりΔx\Delta xについて1次の精度で近似できる.

また,(1) - (2)より,

ui+1,jui1,j=2(ux)iΔx+O(Δx3)2(ux)iΔx\begin{split} u_{i+1,j}-u_{i-1,j}&=2\left( \frac{\partial u}{\partial x}\right)_i \Delta x+O(\Delta x^3)\\ &\approx 2\left( \frac{\partial u}{\partial x}\right)_i \Delta x \end{split}
(ux)i=ui+1,jui1,j2Δx\left( \frac{\partial u}{\partial x}\right)_i=\frac{u_{i+1,j}-u_{i-1,j}}{2 \Delta x}

と中心(中央)差分(central difference)及びその差分商によるΔx\Delta xについて2次の精度での近似が求まる.

さらに,(1) ++ (2)より,

ui+1,j+ui1,j=2ui,j+(2ux2)iΔx2+O(Δx4)2ui,j+(2ux2)iΔx2\begin{split} u_{i+1,j}+u_{i-1,j}&=2u_{i,j}+\left( \frac{\partial^2 u}{\partial x^2}\right)_i \Delta x^2+O(\Delta x^4)\\ &\approx 2u_{i,j}+\left( \frac{\partial^2 u}{\partial x^2}\right)_i \Delta x^2 \end{split}
(2ux2)i=ui+1,j2ui,j+ui1,jΔx2\left( \frac{\partial^2 u}{\partial x^2}\right)_i=\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{\Delta x^2}

と2階(中心)差分(2nd difference)が求まり,2階微分の係数をΔx\Delta xについて2次の精度で近似できる. ここではxx方向についてのみ考えたが,yy方向についても同様の議論が成り立つ.

ポアソン方程式 Poisson’s equation

ポアソン方程式とは

u=f2u=f2ux12+2ux22++2uxn2=f(x1,x2,,xn)\begin{split} \bigtriangleup u&=f\\ \nabla^2 u&=f\\ \frac{\partial^2 u}{\partial x_1^2}+\frac{\partial^2 u}{\partial x_2^2}+\cdots+\frac{\partial^2 u}{\partial x_n^2}&=f(x_1,x_2, \cdots, x_n) \end{split}

と表現される,2階の楕円型偏微分方程式. 境界値問題となる.

例えば,静電ポテンシャルϕ\phiは電荷の分布ρ\rhoに対し, 真空での誘電率をϵ0\epsilon_0とすれば

ϕ=ρϵ0\bigtriangleup \phi=-\frac{\rho}{\epsilon_0}

となり,ポアソン方程式になる.

ポアソン方程式を例に有限差分法を使ってみる. 今回は2次元だけを考える. とすれば,

2ux2+2uy2=f(x,y)\frac{\partial^2 u}{\partial x^2}+\frac{\partial^2 u}{\partial y^2}=f(x,y)

空間を格子で区切り各格子点を(xi,yj)(x_i,y_j),格子幅をx,yx,y両方向ともhhとしよう. すると,

uxx=ui+1,j2ui,j+ui1,jh2+O(h2)uyy=ui,j+12ui,j+ui,j1h2+O(h2)uxx+uyy=4ui,jui1,jui,j+1ui+1,jui,j1h2+O(h2)\begin{align*} u_{xx}&=\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{h^2}+O(h^2)\\ u_{yy}&=\frac{u_{i,j+1}-2u_{i,j}+u_{i,j-1}}{h^2}+O(h^2)\\ u_{xx}+u_{yy}&=-\frac{4u_{i,j}-u_{i-1,j}-u_{i,j+1}-u_{i+1,j}-u_{i,j-1}}{h^2}+O(h^2) \end{align*}

よって

2ux2+2uy2=4ui,jui1,jui,j+1ui+1,jui,j1h2+O(h2)\frac{\partial^2 u}{\partial x^2}+\frac{\partial^2 u}{\partial y^2}= -\frac{4u_{i,j}-u_{i-1,j}-u_{i,j+1}-u_{i+1,j}-u_{i,j-1}}{h^2}+O(h^2)

なのでhhが十分小さければh2h^2の以上の項は無視できるので,

4ui,jui1,jui,j+1ui+1,jui,j1h2=fi,j\frac{4u_{i,j}-u_{i-1,j}-u_{i,j+1}-u_{i+1,j}-u_{i,j-1}}{h^2}=-f_{i,j}

と離散化される. fi,jf_{i,j}は既知量である.よって,得られたi×ji \times j個の連立一次方程式をとけば良い. ただし,境界領域での近似の仕方を考える必要がある.