今回は有限体積法で勾配を計算する方法の中で、最小二乗法を使って計算する方法について説明します。
Green-Gaussの定理による勾配計算法は以下の記事を参照ください。
最小二乗法
最小二乗法(Least Squares Method)とは、あるデータの組(xi,yi)(xi,yi)に対して、モデル関数y=f(x)y=f(x)を仮定したとき、
J=∑i(yi−f(xi))2J=∑i(yi−f(xi))2(1)
が最小となるようなf(x)f(x)を求める方法です。
これは、yiyiとモデル関数で想定される値f(xi)f(xi)の誤差の二乗和が最小になることを意味します。
ここで、f(x)f(x)が、
f(x)=∑kakgk(x)f(x)=∑kakgk(x)(2)
のように、未知の係数akakと既知の関数gk(x)gk(x)の線形結合によって与えられるとします。gk(x)gk(x)は既知なので、最小二乗法は未知のakakを求めることに帰着します。
(1)式を最小にするには、JJをakakで偏微分したものが0(極値となる)という条件、
を課してやります。
(3)式は、akakに対する連立方程式となるため、これを解くとakakが求まります。
最小二乗法による勾配計算
最小二乗法をセルの勾配計算に適用するには、まずセルCCに隣接するセルFFの値ϕFϕFを、セルCCの勾配∇ϕC∇ϕCを用いて次のように仮定します。
ϕF=ϕC+∇ϕC⋅dFϕF=ϕC+∇ϕC⋅dF(4)
ここで、dF=xF−xCdF=xF−xC、xxは位置ベクトル
これは、FFの値が勾配∇ϕC∇ϕCにより線形に表せるとしたものです。
ここで、(4)式を(1)式のf(xi)f(xi)として最小二乗法を適用します。
(5)式はセルCCに隣接する全てのセルFFに対して和をとっています。wFwFは、重み係数でセルFFの寄与に重みをつけるために導入します。
(5)式を3次元成分で書き下します。
ここで、dF=(dx,dy,dz)dF=(dx,dy,dz)。
(6)式において、未知数は∂ϕ/∂x|C∂ϕ/∂x|C、∂ϕ/∂y|C∂ϕ/∂y|C、∂ϕ/∂z|C∂ϕ/∂z|Cの勾配部分です。
最小二乗法を適用するために、次のように(3)式の条件を課します。
(7)式に(6)式を代入し整理すると、次の3式となります。
(8)~(10)式を行列の形で書くと、
となります。(11)式は3×3行列の線形方程式で、容易に解くことができ、これにより勾配が求まります。
ここで重み係数wFについて考えます。
もし、wF=1であれば隣接セルごとの寄与が一律になります。中心位置までの距離が同じセル同士が隣接している場合は、これで問題ありません。しかし、大きさの違うセルが隣接している場合、近くに中心が位置するセルも、遠くに中心が位置するセルも同じ寄与度を持つことになります。
これはつまり、遠くに中心が位置するセルからの影響が過大になることを意味します。誤差関数Jを考えるうえでは、近くに中心があるセルからの影響を強く受けた方がより精度がよくなると考えられます。そのため、
wF=1|dF|
のように距離で重み付けする係数を考えます。こうすると、遠くに中心があるセルからの寄与が小さく、近くに中心があるセルからの寄与が大きくなります。
まとめ
今回は、最小二乗法によるセル勾配の計算方法について解説しました。多くの汎用流体解析ソフトでは、最小二乗法による勾配計算も選択することができます。普段、ソフトを使用する上で、勾配計算の設定まで意識することはないかもしれませんが、計算方法を知った上で手法の違いで結果がどの程度変わるか確かめておくとよいかも知れません。