応用数値解析特論 第 6 回
〜
2
次元Poisson
方程式に対する有限要素法(1)
かつらだ
桂田
ま さ し
祐史
https://m-katsurada.sakura.ne.jp/ana2022/
2023
年5
月23
日かつらだまさし
目次
1
本日の内容など2 1
次元Poisson
方程式に対する有限要素法(
続き)
サンプル・プログラムfem1d.c
問題
プログラムの解説 実験
参考
:
昔の練習問題3 2
次元の有限要素法三角形要素への分割と区分的
1
次多項式 三角形e
上の1
次関数L
iと(L
j, L
i)
e,⟨L
j, L
i⟩
e三角形の面積
三角形要素の面積座標
L
i面積座標の積の積分と
(L
j, L
i)
eL
i(x , y ) = a
i+ b
ix + c
iy
の係数決定と⟨ L
j, L
i⟩
e 要素係数行列の計算近似方程式の組み立て
—
直接剛性法 連立1
次方程式の具体例プログラム
方程式を立てるのに必要なもの サンプルプログラム紹介
4 C
言語による2
次元有限要素法サンプル・プログラムの紹介 進行表試しに実行
有限要素解を求めるプログラム
naive, band
の理解 プログラムnaive
の内部構造参考課題
5 FreeFem++
の文法はじめに
汎用のプログラミング機能
C
言語と良く似ているところ データ型配列型
6
参考文献本日の内容など
前回説明した
1
次元Poisson
方程式に対する有限要素法のC
プログ ラムを読んでみる。2
次元のPoisson
方程式に対する有限要素法で、連立1次方程式が具体的にどのようになるか説明する。
かつらだまさし
4.5 サンプル・プログラム fem1d.c 4.5.1 問題
以下に紹介する
C
プログラムfem1d.c
はhttps://m-katsurada.sakura.ne.jp/program/fem/fem1d.c
に置いてある。現象数理学科Mac
ならば、ターミナルからcurl -O https://m-katsurada.sakura.ne.jp/program/fem/fem1d.c
で入手できる。コンパイル、実行の仕方はプログラムの先頭部分に注釈として書 いてある(head fem1d.c
で先頭10
行を見れば分かる)。このプログラムが対象としている問題は、
f ≡ 1
で、境界条件は同次、すなわ ちα = β = 0
の場合である。具体的に書き下すと(1) − u
′′= 1, u(0) = u
′(1) = 0.
この問題の厳密解は
u(x) = x(2 − x)/2
である。かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 3 / 66
4.5.2 プログラムの解説
main()
を読むと分かるように、最初にnnode
総節点数(the number of nodes) nelmt
総要素数(the number of elements)
nbc
ディリクレ境界にある接点の個数(1
または2) x[]
節点の座標ibc
ディリクレ境界にある接点の節点番号 を決めている。連立
1
次方程式の構成は、関数assem()
で行っている(assemblage)
。 その作業内容は3
つに分かれる。1
am, fm
を0
クリアする。2 すべての有限要素について、要素係数行列
ae,
要素自由ベクトルfe
を関数ecm()
で計算して(element coefficient matrix)、それぞれ全体
係数行列am
、全体自由項ベクトルfm
に算入する。3 ディリクレ境界上にある節点に対応する部分を修正する。
かつらだまさし
4.5.2 プログラムの解説
関数
ecm()
で必要となる事項の復習。e
k= [x
k−1, x
k]
とすると、A
k= 1 x
k− x
k−11 −1
− 1 1
, f
k=
(f , L
0)
ek(f , L
1)
ekであった。
f
を1
次近似することにすれば、f
k≒ x
k− x
k−16
2f (x
k−1) + f (x
k) f (x
k−1) + 2f (x
k)
.
前回の授業の説明では、
A
k をm + 1
次正方行列A
∗k に“
拡大して”
、A
∗:=
X
m k=1A
∗k を計算し、その最 初の列と最初の行(Dirichlet
境界条件を課すx
0に対応)
を削除する。ベクトル
f
k についても同様(f
k∗, f
∗:=
X
m k=1f
k∗+ g
m∗)
。右辺にα
A
∗10. . . A
∗m0
を移項する
(α
はDirichlet
条件u(0) = α
のα)
。この問題では
α = 0
なので移項せず第0
列を0
クリアするだけ。列や行の削除は大変
(大規模コピー?)
なので、書き換えることにかつらだ する。
桂 田 まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 5 / 66
4.5.3 実験
fem1d.c
のコンパイル&実行&gnuplot
によるグラフ描画$ cc -o fem1d fem1d.c
$ ./fem1d
nodal values of u (節点での u
の値)i u i u i u
0 0.000e+00 1 9.500e-02 2 1.800e-01 3 2.550e-01 4 3.200e-01 5 3.750e-01 6 4.200e-01 7 4.550e-01 8 4.800e-01 9 4.950e-01 10 5.000e-01
$ cat fem1d.out 0.000000 0.000000 0.100000 0.095000 0.200000 0.180000 0.300000 0.255000 0.400000 0.320000 0.500000 0.375000 0.600000 0.420000 0.700000 0.455000 0.800000 0.480000 0.900000 0.495000 1.000000 0.500000
$ gnuplot
gnuplot> plot "fem1d.out" with lp, x*(2-x)/2
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 6 / 66
4.5.3 実験
0 0.1 0.2 0.3 0.4 0.5
0 0.2 0.4 0.6 0.8 1
"fem1d.out"
x*(2-x)/2
図
1: fem1d.c
の計算結果(m=10)
と厳密解 x(2−x)2 のグラフを重ね書き
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 7 / 66
4.5.4 参考 : 昔の練習問題
FreeFem++
がまだなかった頃、有限要素法のプログラムを、C
言語やFortran
のようなプログラミング言語でプログラムを書いていました。
そのときは
(
アルゴリズムの理解する助けになると考えて)
以下のような練習 問題を出していました。参考まで。1 両側ディリクレ条件
u(0) = u(1) = 0
の問題を解く。2 非同次ディリクレ条件
u(0) = α
の問題を解く。3 非同次
Neumann
条件u
′(1) = β
の問題を解く。4
− (pu
′)
′= f
という一般の楕円型方程式の問題を解く。(p
はmin
xp(x) > 0
を満たす既知の関数)かつらだまさし
5 2 次元の有限要素法
第
2
回の授業で扱ったPoisson
方程式の境界値問題を題材に、2
次元領域における有限 要素法を説明する(
菊地[?]
第5
章)
。(
思い出す) Ω
はR
2の有界領域で、その境界Γ
は区分的に十分滑らかであるとする。また
Γ
1, Γ
2は条件Γ = Γ
1∪ Γ
2, Γ
1∩ Γ
2= ∅, Γ
1̸= ∅
を満たすとする。
f : Ω → R , g
1: Γ
1→ R , g
2: Γ
1→ R
が与えられたとき、次のPoisson
方程式の境界値問題を考える。問題
(P)
次式を満たす
u
を求めよ:
−△ u = f in Ω, (2)
u = g
1on Γ
1, (3)
∂ u
∂n = g
2on Γ
2, (4)
ここで
n
はΓ
の外向き単位法線ベクトルを表す。大筋は
1
次元の場合と同様だが、(i)
各要素内の計算に面積座標を使うところと、(ii)
直接剛性法が2
次元でも実現可能であることを理解するところが要点となる。かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 9 / 66
5.1 三角形要素への分割と区分的 1 次多項式
領域
Ω ⊂ R
2に対し、Ω
を三角形e
k(1 ≤ k ≤ N
e)
に分割する: Ω ≒ Ω := b
Ne
[
k=1
e
k.
ただし、重なりや、すき間、頂点が他の三角形の辺上にあることは避けることにする。
[0]
[1]
[2]
[3]
[4]
[6][5]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17][18][19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[30][29]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
[38]
[39]
[40]
[41][42][43]
[44]
[45]
[46]
[47]
[48]
[49]
[50]
[51]
[52]
[54] [53]
[55]
[56]
[57]
[58]
[59]
[60]
[61]
[62]
[63]
[64]
[65] [66] [67]
[68]
[69]
[70]
[71]
[72]
[73]
[74]
[75]
[76]
[78] [77]
[79]
[80]
[81]
[82]
[83]
[84]
[85]
[86]
[87]
[88]
[89] [90]
[91]
[92]
[93]
[94]
[95]
[96]
[97]
[98]
[99]
[100]
[101]
[102]
[103]
[104]
[105]
[106]
[107]
[108]
[109]
[110]
[111]
[112]
[113] [114]
[115]
[116]
[117]
[118]
[119]
[120]
[121]
[122]
[123]
[124]
[125]
[126]
[127]
[128]
[129]
[130]
[131]
[132]
[133]
[134]
[135]
[136]
[137] [138]
[139]
[140]
[141]
[142]
[143]
[144]
[145]
[146]
[147]
[148]
[149]
[150]
[151]
[152]
[153]
[154]
[155]
[156]
[157]
[158]
[159]
[160]
[161] [162]
[163]
[164]
[165]
[166]
[167]
[168]
[169]
[170]
[171]
[172]
[173]
[174]
[175]
[176]
[177]
[178]
[179]
[180]
[181]
[182]
[183]
[184]
[185] [186]
[187]
[188]
[189]
[190]
[191]
図
2:
二つの円で囲まれた閉領域Ω
を三角形の合併で近似するΩ
が多角形でない限り、境界は「曲がっている」。Ω =
Ne
[
k=1
e
k は期待できない。各三角形を三角形
(
有限)
要素とよぶ。かつらだまさし
5.1 三角形要素への分割と区分的 1 次多項式
N
e は要素の総数(the number of elements)
で、プログラムではNELMT
のよう な名前の変数で記憶されることが多い。有限要素の頂点を節点
(node)
と呼び、{ P
i}
mi=1 のように番号をつけておく。m
は節点の総数(the number of nodes)
で、プログラムではNNODE
のような 名前の変数で記憶されることが多い。注意
1
次元の場合、節点の個数=
要素の個数+ 1 (NELMT=m+1)
という簡 単な関係が成立していた。(区間をm
等分したとき、m を用いて、要素をe
k(1 ≤ k ≤ m),
節点をx
k(0 ≤ k ≤ m)
と番号づけることが出来た。)2
次元の場 合は、そのような関係はない。かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 11 / 66
5.1 三角形要素への分割と区分的 1 次多項式
Ω b
上連続で、各有限要素e
k 上でx
とy
の1
次多項式関数に等しいものを、区分的
1
次多項式と呼び、その全体をX e
で表わす( X e
はここだけの記号)。{ e
k}
Nk=1e とX e
の対を区分的1
次有限要素(piecewise linear finite element)
と 呼ぶ。2
変数の1
次関数z = a + bx + cy
のグラフは平面であるから、X e
のグラフ は、空間内の三角形を連続につなげた“折れ面”
である。試行関数の空間
X ˆ
g1,
試験関数の空間X ˆ
は次のように選ぶ。(5) X ˆ
g1= n
ˆ
w ∈ X e w ˆ = ˆ g
1on Γ
1o
, X ˆ = n
ˆ
v ∈ X e v ˆ = 0 on Γ
1o . (ˆ g
1 はg
1に近い計算しやすい関数)X e
の基底関数{ ϕ
i}
mi=1はϕ
i∈ X e (i = 1, 2, · · · , m), (6a)
ϕ
i(P
j) = δ
ij(i, j = 1, 2, · · · , m) (6b)
満たすものを採用する
(この条件で一意に確定し、線形独立であることに注意)。
かつらだまさし
5.2 三角形 e 上の 1 次関数 L i と (L j , L i ) e , ⟨ L j , L i ⟩ e
5.2.1
三角形の面積平面上の三角形要素
e
を考える(本来は、以下の N
i, L
i も含めて、要素によ るので、ek, N
ki, L
ki のように書いた方が良いかもしれないが、うっとうしいのでk
は略する)。e
に属する節点を、反時計まわりにN
i= (x
i, y
i) (i = 0, 1, 2)
とする。後でしばしば必要になるので、e の面積
| e |
を計算しておこう。| e | = 1 2 det
x
1− x
0x
2− x
0y
1− y
0y
2− y
0= 1
2 [(x
1− x
0)(y
2− y
0) − (y
1− y
0)(x
2− x
0)] . 1
次多項式全体をP
1 と表す:P
1:= { u ˆ | ( ∃ α
0, α
1, α
2∈ R ) ˆ u(x, y) = α
0+ α
1x + α
2y } .
任意の
u ˆ ∈ P
1は、3節点N
i における値u
i:= u(N b
i) (i = 0, 1, 2)
を指定すれ ば定まる(u
i= u(P b
i)
と混同しないように上に添字をつけた)。これは、直観的に 明らかであるが(平面は、その上にある 3
点(ただし同一直線上にはないとする)
を指定すれば定まる)、すぐ後で証明する。かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 13 / 66
5.2.2 三角形要素の面積座標 L i
節点
N
i で1,
他の節点で0
となる1
次関数をL
i とする(i = 0, 1, 2)。つまり L
i∈ P
1,
(7a)
L
i(N
j) = L
i(x
j, y
j) = δ
ij(j = 0, 1, 2).
(7b)
(L
0, L
1, L
2)
はP
1の基底になる。実際、1次独立性はすぐ分かり、dimP
1= 3
であるから、任意のu b ∈ P
1は、(8) u(x, b y) =
X
2 i=0u
iL
i(x, y) ((x, y) ∈ e)
と表される。任意の
P ∈ e
に対して、3 実数(L
0(P), L
1(P), L
2(P))
をP
の面積座標(area coordinate)
あるいは重心座標(barycentric coordinate)
と呼ぶ。(色々裏がある
けれど今回は駆け足で進む。)任意の
P ∈ e
に対して次式が成り立つ。L
0(P) + L
1(P) + L
2(P) = 1.
(P
1の基底としては3
つ必要だが、座標としては2
つで十分ということになる。) 以下、Li のグラフの鳥瞰図と等高線を描こう。かつらだまさし
Mathematica のコード例と実行結果
xs = {0, 3, 1}; ys = {0, 1, 2};
{a, b, c} = Inverse[Transpose[{{1, 1, 1}, xs, ys}]];
L[i_, x_, y_] := a[[i]] + b[[i]]*x + c[[i]]*y
xmin = Min[xs]; xmax = Max[xs]; ymin = Min[ys]; ymax = Max[ys];
gbase = RegionPlot[L[1, x, y] > 0 && L[2, x, y] > 0 && L[3, x, y] > 0, {x, xmin, xmax},{y, ymin, ymax}]
gb=Table[Plot3D[L[i, x, y], {x, xmin, xmax}, {y, ymin, ymax}, RegionFunction -> Function[{x, y, z},
L[1, x, y] > 0 && L[2, x, y] > 0 && L[3, x, y] > 0]], {i, 3}]
gc=Table[ContourPlot[L[i, x, y], {x, xmin, xmax}, {y, ymin, ymax}, RegionFunction -> Function[{x, y, z},
L[1, x, y] > 0 && L[2, x, y] > 0 && L[3, x, y] > 0]], {i, 3}]
図
3:
三角形要素かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 15 / 66
Mathematica のコード例と実行結果
授業
WWW
サイトからブラウザで、あるいは次のようにして20230523.nb
を入手して実行してみよう。ターミナルで入手して開く
curl -O https://m-katsurada.sakura.ne.jp/ana2023/20230523.nb open 20230523.nb
かつらだまさし
Mathematica のコード例と実行結果
図
4:
左からL
0, L
1, L
2の鳥瞰図と等高線かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 17 / 66
5.2.3 面積座標の積の積分と (L j , L i ) e
面積座標の積の積分については、便利な公式がある。
0
以上の任意の整数i, j , k
に対して(9)
Z Z
e
L 0 (x, y ) i L 1 (x, y) j L 2 (x, y) k dx dy = 2 | e | i!j!k!
(i + j + k + 2)! .
かつらだまさし
5.2.3 面積座標の積の積分と (L j , L i ) e
証明
P
0= (0, 0), P
1= (1, 0), P
2= (0, 1)
で囲まれる三角形を∆
とし、1次関 数φ: R
2→ R
2 をφ(P
0) = N
0, φ(P
1) = N
1, φ(P
2) = N
2で定める。このとき
φ(∆) = e, φ(u, v) =
x
1− x
0x
2− x
0y
1− y
0y
2− y
0u v
+ x
0y
0,
det φ
′(u, v) = det
x
1− x
0y
1− y
0x
2− x
0y
2− y
0= 2 | e | .
ゆえに変数変換(x, y) = φ(u, v)
を行なうとZ Z
e
L
i0L
j1L
k2dx dy = Z Z
∆
L
0(φ(u, v ))
iL
1(φ(u, v ))
jL
2(φ(u, v ))
k| det φ
′(u, v) | du dv .
= 2 | e | Z Z
∆
L
0(φ(u, v ))
iL
1(φ(u, v ))
jL
2(φ(u, v))
kdu dv .
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 19 / 66
5.2.3 面積座標の積の積分と (L j , L i ) e
L
i(φ(u, v ))
は(1
次関数と1
次関数の合成であるから)
、u, v
についての1
次関数で、L
i(N
j) = L
i(φ(P
j)) = δ
ijを満たすことから
L
0(φ(u, v )) = 1 − u − v , L
1(φ(u, v )) = u, L
2(φ(u, v )) = v
(
各等式の両辺は1
次関数で、N
j での値が一致するから、全体で一致する).
ゆえに
Z Z
e
L
i0L
j1L
k2dxdy = 2 | e | Z Z
∆
(1 − u − v )
iu
jv
kdudv
= 2 | e | Z
10
u
jZ
1−u0
(1 − u − v )
iv
kdv
du.
右辺の内側の積分で、
v = (1 − u)t (0 ≤ t ≤ 1)
と変数変換するとdv = (1 − u)dt, (1 − u − v )
i= ((1 − u) − (1 − u)t)
i= (1 − u)
i(1 − t)
i であるからZ
1−u0
(1 − u − v)
iv
kdv = Z
10
(1 − u)
i(1 − t)
i(1 − u)
kt
k· (1 − u)dt
= (1 − u)
i+k+1Z
10
(1 − t)
it
kdt.
かつらだまさし
5.2.3 面積座標の積の積分と (L j , L i ) e
ゆえに
Z Z
e
L
i0L
j1L
k2dx dy = 2 | e | Z
10
(1 − u)
i+k+1u
jdu Z
10
(1 − t)
it
kdt
= 2|e|B(i + k + 2, j + 1)B (i + 1, k + 1).
ただし
B
は次式で定義されるベータ関数である: B(p, q) =
Z
1 0(1 − t)
p−1t
q−1dt (p, q > 0).
このベータ関数と、ガンマ関数
Γ (x ) :=
Z
∞0
t
x−1e
−tdt (x > 0)
について、次の有名な公式が成り立つ
(
証明は例えば桂田[?]
§E.2
の命題E.2.4)
。B(p, q) = Γ (p)Γ (q)
Γ (p + q) , Γ (n + 1) = n! (n ∈ N ).
ゆえに
Z Z
e
L
i0L
j1L
k2dx dy = 2|e| Γ (i + k + 2) Γ (j + 1)
Γ (i + j + k + 3) · Γ (i + 1)Γ (k + 1) Γ (i + k + 2)
= 2|e| Γ (i + 1)Γ (j + 1)Γ (k + 1)
Γ (i + j + k + 3) = 2|e| i !j!k!
(i + j + k + 2)! .
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 21 / 66
5.2.3 面積座標の積の積分と (L j , L i ) e
i = j
の場合、それ以外の添字( ∈ { 0, 1, 2 } )
をk, ℓ
とすると(L
j, L
i)
e= Z Z
e
L
2iL
0kL
0ℓdxdy = 2 | e | 2!0!0!
(2 + 0 + 0 + 2)! = 1 6 | e | . i ̸ = j
の場合、それ以外の添字( ∈ { 0, 1, 2 } )
をk
とすると(L
j, L
i)
e= Z Z
e
L
1iL
1jL
0kdxdy = 2 | e | 1!1!0!
(1 + 1 + 0 + 2)! = 1 12 | e | .
かつらだまさし
5.2.4 L i (x , y ) = a i + b i x + c i y の係数決定と ⟨ L j , L i ⟩ e
L
i(x , y ) = a
i+ b
ix + c
iy
とおくとδ
ij= L
j(x
i, y
i) = a
j+ b
jx
i+ c
jy
i= (1 x
iy
i)
a
jb
jc
j
であるから
(♡)
1 0 0 0 1 0 0 0 1
=
1 x
0y
01 x
1y
11 x
2y
2
a
0a
1a
2b
0b
1b
2c
0c
1c
2
.
A :=
1 x
0y
01 x
1y
11 x
2y
2
とおくと
det A = det
1 x
0y
00 x
1− x
0y
1− y
00 x
2− x
0y
2− y
0
=
x
1− x
0y
1− y
0x
2− x
0y
2− y
0= 2 | e | > 0.
ゆえに
A
は逆行列を持つ。かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 23 / 66
5.2.4 L i (x , y ) = a i + b i x + c i y の係数決定と ⟨ L j , L i ⟩ e
(♡)
から
a
0a
1a
2b
0b
1b
2c
0c
1c
2
= A
−1.
Cramer
の公式によってA
−1= 1 det A
( − 1)
1+1x
1y
1x
2y
2( − 1)
1+21 y
11 y
2( − 1)
1+31 x
11 x
2(−1)
2+1x
0y
0x
2y
2(−1)
2+21 y
01 y
2(−1)
3+31 x
01 x
2( − 1)
3+1x
0y
0x
1y
1( − 1)
3+21 y
01 y
1( − 1)
3+31 x
01 x
1
⊤
= 1
det A
x
1y
2− y
1x
2−(y
2− y
1) x
2− x
1− (x
0y
2− y
0x
2) y
2− y
0− (x
2− x
0) x
0y
1− y
0x
1− (y
1− y
0) x
1− x
0
⊤
= 1
det A
x
1y
2− y
1x
2x
2y
0− y
2x
0x
0y
1− y
0x
1y
1− y
2y
2− y
0y
0− y
1x
2− x
1x
0− x
2x
1− x
0
.
かつらだまさし
5.2.4 L i (x , y ) = a i + b i x + c i y の係数決定と ⟨ L j , L i ⟩ e
A
−1の下2
行b
k, c
k(k = 0, 1, 2)
が得られれば、⟨ L
j, L
i⟩
e が計算できる:⟨ L
j, L
i⟩
e= Z Z
e
∇ L
j· ∇ L
idx dy = Z Z
e
b
jc
j· b
ic
idx dy (10)
= (b
jb
i+ c
jc
i) | e | .
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 25 / 66
5.3 要素係数行列の計算
「積分は積分範囲を分割して計算し、後から和を取ればよい」ので、弱形式
⟨b u, v b ⟩ = (f , v b ) + [g
2, v b ] (b v ∈ X b )
は(11)
Ne
X
k=1
⟨b u, v b ⟩
ek=
Ne
X
k=1
(f , b v )
ek+ [g
2, b v] ( b v ∈ X b )
となる。ただし⟨b u, b v ⟩
ek:=
Z
ek
∇b u(x ) · ∇b v (x ) dx , (f , v b )
ek:=
Z
ek
f (x) b v(x) dx, [g
2, v b ] :=
Z
Γ2
g
2v dσ. b
そこで
u
j:= u(N b
j), v
j:= b v (N
j) (j = 0, 1, 2)
を用いて、b u =
X
2 j=0u
jL
j, v b = X
2i=0
v
iL
i(e
k 上)
と表すと(12) ⟨b u, b v ⟩
ek= X
2j=0
X
2 i=0v
iA
(k)iju
j, (f , v b )
ek= X
2i=0
v
if
i(k),
ただし
(13) A
(k)ij:= ⟨ L
j, L
i⟩
ek, f
i(k):= (f , L
i)
ek.
かつらだまさし
5.3 要素係数行列の計算
そこで
(14a) u
k:=
u
0u
1u
2
, v
k:=
v
0v
1v
2
, f
k:=
f
0(k)f
1(k)f
2(k)
,
(14b) A
k:=
A
(k)00A
(k)01A
(k)02A
(k)10A
(k)11A
(k)12A
(k)20A
(k)21A
(k)22
とおくと、
A
k は対称行列で、(15) ⟨b u, v b ⟩
ek= v
kTA
ku
k, (f , b v)
ek= v
kTf
k.
(
線積分[g
2, v] ˆ
については、今回の授業では説明を省略する。とりあえずg
2= 0
と考えて授業を聴いて下さい。桂田[?]
には書いてある。)
A
(k)ij= ⟨ L
j, L
i⟩
ek の計算は(10)
で済んでいる。かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 27 / 66
5.3 要素係数行列の計算 具体的な成分の計算
f i (k) = (f , L i ) e
k については、例えばL i
を1
次関数補間して(f , L i ) e
k≒
X 2
j=0
f (N j )L j , L i
e
k= X 2
j=0
f (N j ) (L j , L i ) e
k
.
のように近似すれば(L j , L i ) e
k=
| e k | /6 (i = j
のとき),
| e k | /12 (i ̸ = j
のとき).
であるから
f 0 (k) ≒ | e k |
12 (2f (N 0 ) + f (N 1 ) + f (N 2 )), f 1 (k) ≒ | e k |
12 (f (N 0 ) + 2f (N 1 ) + f (N 2 )), f 2 (k) ≒ | e k |
12 (f (N 0 ) + f (N 1 ) + 2f (N 2 )).
かつらだまさし
5.4 近似方程式の組み立て — 直接剛性法
u
i:= u(P b
i), v
i:= b v (P
i) (i = 1, 2, · · · , m)
として、(16) u :=
u
1u
2. . . u
m
, v :=
v
1v
2. . . v
m
とおく。
有限要素
e
k(k = 1, 2, · · · , N
e)
の節点N
0, N
1, N
2 に対して、N
0= P
ik,0, N
1= P
ik,1, N
2= P
ik,2となる整数
i
k,0, i
k,1, i
k,2を取る(
これらを全体節点番号と呼ぶ)
。f
k∗∈ R
mをi
k,0成分= f
0(k), i
k,1成分= f
1(k), i
k,2成分= f
2(k)で、それ以外の成分はす べて0
であるようなベクトルとする。例えばi
0(k)< i
1(k)< i
2(k)ならば1 i
k,0i
k,1i
k,2m
↓ ↓ ↓ ↓ ↓
f
k∗= (0 · · · 0 f
0(k)0 · · · 0 f
1(k)0 · · · 0 f
2(k)0 · · · 0)
⊤.
このようにf
k∗ を定義すると、次が成り立つ。(17) (f , v b )
ek= v
k⊤f
k= v
⊤f
k∗(k = 1, 2, · · · , N
e).
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 29 / 66
5.4 近似方程式の組み立て — 直接剛性法
同様の考え方で、行列
A
∗k= (a
(k)ij)
をa
i(k)k,0ik,0
= A
(k)00, a
(k)ik,0ik,1
= A
(k)01, a
(k)ik,0ik,2
= A
(k)02, a
i(k)k,1ik,0
= A
(k)10, a
(k)ik,1ik,1
= A
(k)11, a
(k)ik,1ik,2
= A
(k)12, a
i(k)k,2ik,0
= A
(k)20, a
(k)ik,2ik,1
= A
(k)21, a
(k)ik,2ik,2
= A
(k)22,
それ以外= 0
で定める。例えば
i
k,0< i
k,1< i
k,2ならばA
∗k=
i
k,0i
k,1i
k,2↓ ↓ ↓
A
(k)00A
(k)01A
(k)02← i
k,0A
(k)10A
(k)11A
(k)12← i
k,1A
(k)20A
(k)21A
(k)22← i
k,2
(
書いてない成分は0).
これを用いると
(18) ⟨ u, b v b ⟩
ek= v
k⊤A
ku
k= v
⊤A
∗ku (k = 1, 2, · · · , N
e).
かつらだまさし
5.4 近似方程式の組み立て — 直接剛性法
ゆえに弱形式
(11)
は(g
2= 0
と考えている)
Ne
X
k=1
v
⊤A
∗ku =
Ne
X
k=1
v
⊤f
k∗すなわち
v
⊤Ne
X
k=1
A
∗ku −
Ne
X
k=1
f
k∗!
= 0
と同値になる。ゆえに
A
∗:=
Ne
X
k=1
A
∗k, f
∗:=
Ne
X
k=1
f
k∗とおけば
(19) v
⊤(A
∗u − f
∗) = 0.
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 31 / 66
5.4 近似方程式の組み立て — 直接剛性法
ここで
v
はY := {
v
1. . . v
m
∈ R
m; v
i= 0 (P
i∈ Γ
1なるi ) }
の任意の元であるから、
(19)
は次と同値である。A
∗u − f ∈ Y
⊥= {
w
1. . . w
m
∈ R
m; w
i= 0 (P
i̸∈ Γ
1なるi)}
すなわち
(20) A
∗∗u = f
∗∗.
ここで
A
∗∗:= A
∗の第i
行(P
i∈ Γ
1なるi )
を除いた行列, f
∗∗:= f
∗の第i
成分(P
i∈ Γ
1なるi )
を除いた縦ベクトル.
かつらだまさし
5.4 近似方程式の組み立て — 直接剛性法
I := { i ∈ N | 1 ≤ i ≤ m } , I
1:= { i ∈ I | P
i∈ Γ
1}
とおく(I
1 はΓ
1上にある節点の節点番号全体の集合)。条件
u
i= g
1(P
i) (i ∈ I
1)
があるから、これを代入して
u
i(i ∈ I
1)
を消去できる。以下それを実行する。A
∗∗ を列ベクトルでA
∗∗= (a
1a
2· · · a
m)
のように表示すると、(20)は(21)
X
m i=1a
iu
i= f
∗∗.
左辺の
X
mi=1
を
X
i∈I\I1
+ X
i∈I1
と分解して、移項すると
X
i∈I\I1
a
iu
i= f
∗∗− X
i∈I1
a
iu
i.
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 33 / 66
5.4 近似方程式の組み立て — 直接剛性法
ゆえに
Au ∗ = f ,
ただしu ∗ := u
の第i
成分(i ∈ I 1 )
を除いた縦ベクトル, A := A ∗∗
の第i
列(i ∈ I 1 )
を除いた正方行列, f := f ∗∗ − X
i ∈ I
1a i u i .
実際にプログラムを作成するとき、
A
やf
が容易に求められることは 次回解説する。かつらだまさし
5.5 連立 1 次方程式の具体例
簡単な問題に対する有限要素法の連立
1
次方程式を実際に求めてみよう。Ω = (0, 1) × (0, 1),
Γ 1 = { (x, y) | x = 0, 0 ≤ y ≤ 1 } ∪ { (x, y) | 0 ≤ x ≤ 1, y = 0 } , Γ 2 = { (x, y) | x = 1, 0 < y ≤ 1 } ∪ { (x, y) | 0 < x ≤ 1, y = 1 } , g 1 ≡ 0, g 2 ≡ 0, f ≡
定数関数f .
すなわち
−△ u = f (in Ω), u = 0 on Γ 1 , ∂u
∂n = 0 on Γ 2 .
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 35 / 66
5.5 連立 1 次方程式の具体例
- 6
O x
y
x = 1 y = 1
Ω
図
5:
領域Ω
- 6
x y
P 0
P 1
P 2
P 3
P 4 P 5
P 6 P 7
P 8
e 0 e 1
e 2 e 3
e 4 e 5
e 6 e 7
図
6:
要素分割かつらだまさし
5.5 連立 1 次方程式の具体例
正方形領域
Ω
を図2
のように3
角形要素によって要素分割する。有限要素は次の二つのタイプがある
(タイプ I, II
と呼ぶことにする)。各々に 図3
のように局所節点番号をつける(左下から反時計回り)。
タイプ
I e
0, e
2, e
4, e
6.
タイプII e
1, e
3, e
5, e
7.
N
0N
1N
2Type I
N
0N
1N
2Type II
図
7:
二つのタイプの有限要素と局所節点番号かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 37 / 66
5.5 連立 1 次方程式の具体例
タイプが同じならば、要素係数行列
A
k,
要素自由項ベクトルf
k が等しいこと はすぐ分かる。それぞれA
I, A
II, f
I, f
IIで表すことにする。タイプ
I
についてはD = h
2, S = h
22 ,
A
I= 1 2
1 − 1 0
− 1 2 − 1 0 − 1 1
, f
I= f h
26
1 1 1
.
タイプ
II
についてはD = h
2, S = h
22 ,
A
II= 1 2
1 0 − 1 0 1 − 1
− 1 − 1 2
, f
II= f h
26
1 1 1
.
かつらだまさし
5.5 連立 1 次方程式の具体例
これらから、全体的な近似方程式を作ろう。
そのために局所的な節点番号と、全体的な節点番号の対応づけが必要である。そこで 以下のような対応表を用意する
(
スライド見る場合も手で写すことを推奨—
要素タイプ は不要)
。要素
e
0e
1e
2e
3e
4e
5e
6e
7要素タイプ
I II I II I II I II N
0の全体節点番号0 0 1 1 3 3 4 4 N
1の全体節点番号3 4 4 5 6 7 7 8 N
2の全体節点番号4 1 5 2 7 4 8 5
N
0N
1N
2Type I
N
0N
1N
2Type II
- 6
x y
P
0P
1P
2P
3P
4P
5P
6P
7P
8e
0e
1e
2e
3e
4e
5e
6e
7かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 39 / 66
5.5 連立 1 次方程式の具体例
これから
Galerkin
法の弱形式はv
⊤1 2
2 − 1 0 − 1 0 0 0 0 0
− 1 4 − 1 0 − 2 0 0 0 0
0 −1 2 0 0 −1 0 0 0
− 1 0 0 4 − 2 0 − 1 0 0
0 −2 0 −2 8 −2 0 −2 0
0 0 − 1 0 − 2 4 0 0 − 1
0 0 0 −1 0 0 2 −1 0
0 0 0 0 − 2 0 − 1 4 − 1
0 0 0 0 0 −1 0 −1 2
u
0u
1u
2u
3u
4u
5u
6u
7u
8
= v
⊤f h
26
2 3 1 3 6 3 1 3 2
for
∀ v ∈ n
(v
0, v
1, v
2, v
3, v
4, v
5, v
6, v
7, v
8)
⊤∈ R
9v
0= v
1= v
2= v
3= v
6= 0 o
.
かつらだまさし
5.5 連立 1 次方程式の具体例 Dirichlet 境界条件の考慮
P
i∈ Γ
1となるi
について(
今の場合i = 0, 1, 2, 3, 6)
、第i
行は削除してよい。1 2
0 − 2 0 − 2 8 − 2 0 − 2 0
0 0 − 1 0 − 2 4 0 0 − 1
0 0 0 0 −2 0 −1 4 −1
0 0 0 0 0 − 1 0 − 1 2
u
0u
1u
2u
3u
4u
5u
6u
7u
8
= f h
26
6 3 3 2
.
また
P
i∈ Γ
1となるi
について、u
i= g
1(P
i) (= 0).
これを代入して移項すると1
2
8 −2 −2 0
− 2 4 0 − 1
− 2 0 4 − 1
0 −1 −1 2
u
4u
5u
7u
8
= f h
26
6 3 3 2
+
g
1(P
1) + g
1(P
3) g
1(P
2)/2 g
1(P
6)/2
0
.
すなわち
4 − 1 − 1 0
−1 2 0 −1/2
− 1 0 2 − 1/2 0 − 1/2 − 1/2 1
u
4u
5u
7u
8
=
f h
2f h
2/2 f h
2/2 f h
2/3
.
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 41 / 66
5.5 連立 1 次方程式の具体例 Dirichlet 境界条件の考慮
上のやり方では、係数行列とベクトルが
“
縮小”
される。いくつか留意 すべき点:
例えば
MATLAB
では、(0, 1, 2, 3, 6), (4, 5, 7, 8)
という添字ベクトル を用意すれば、全体係数行列と全体自由項ベクトルを求めるのは(
コーディング上は)
容易である。自分で疎行列を扱うコードを書いていたりする場合はそれなりに 面倒。
データの移動にも計算コストがかかる。
Dirichlet
境界条件の処理には、他のやり方(
行列とベクトルを縮小しない方法
)
もある。かつらだまさし
5.5 連立 1 次方程式の具体例 Dirichlet 境界条件の考慮
ベクトル、行列の縮小を避ける方法
(1)
P
i∈ Γ
1となるi (
この例ではi = 0, 1, 2, 3, 6)
に対してi
番目の方程式(v
⊤のせいで0
⊤u = 0)
をu
i= g
1(P
i)
で置き換える。(
結果的に係数行列の第i
行はe
i⊤で置き換える)
とすることでv
⊤が外せる。
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 − 1 0 − 1 4 − 1 0 − 1 0
0 0 −1/2 0 −1 2 0 0 −1/2
0 0 0 0 0 0 1 0 0
0 0 0 0 −1 0 −1/2 2 −1/2
0 0 0 0 0 − 1/2 0 − 1/2 1
u
0u
1u
2u
3u
4u
5u
6u
7u
8
=
g
1(P
0) g
1(P
1) g
1(P
2) g
1(P
3) f h
2f h
2/2 g
1(P
6) f h
2/2 f h
2/3
.
これは正しい方程式であるが、係数行列が対称でなくなっている
(
数値計算で不利)
。 そこで、係数行列のi
列に0
でない非対角要素があれば、それとg
1(P
i)
との積を右辺に移項する。
(
その結果は次のスライド)
かつらだ 桂 田
まさし
祐 史 https://m-katsurada.sakura.ne.jp/ana2022/応用数値解析特論 第6回 〜2次元Poisson方程式に対する有限要素法(1) 43 / 66
5.5 連立 1 次方程式の具体例 Dirichlet 境界条件の考慮
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 4 − 1 0 − 1 0
0 0 0 0 − 1 2 0 0 − 1/2
0 0 0 0 0 0 1 0 0