• Tidak ada hasil yang ditemukan

応用数値解析特論第10回

N/A
N/A
Protected

Academic year: 2024

Membagikan "応用数値解析特論第10回"

Copied!
20
0
0

Teks penuh

(1)

応用数値解析特論 第 10 回

〜発展系の数値解析 (2) 〜

かつらだ

桂田

ま さ し

祐史

https://m-katsurada.sakura.ne.jp/ana2022/

2023 年 6 月 27 日

かつらだまさし

(2)

目次 I

1

本日の講義内容、連絡事項、レポート課題

2

発展系の数値解析 ( 続き )

熱方程式に対する有限要素法 ( 続き )

実習課題(再提示)

波動方程式の初期値境界値問題

例題と弱形式

太鼓の振動のプログラム

3

参考文献

かつらだまさし

(3)

本日の講義内容、連絡事項、レポート課題 )

発展系の続き。波動方程式を解くプログラムを紹介します。 レポート課題は、自分で決めた問題を有限要素法で解く、というも のにしようと考えている。テーマ決めには、マニュアルである Hecht [1] や、大塚・高石 [2] などを参考にすると良い。内容につい て質疑応答。

かつらだまさし

(4)

本日の講義内容、連絡事項、レポート課題 )

発展系の続き。波動方程式を解くプログラムを紹介します。

レポート課題は、自分で決めた問題を有限要素法で解く、というも のにしようと考えている。テーマ決めには、マニュアルである Hecht [1] や、大塚・高石 [2] などを参考にすると良い。内容につい て質疑応答。

かつらだまさし

(5)

8.2.6 実習課題 ( 再提示 )

1 2つのプログラム(poisson-kikuchi-square.edp,heatB.edp)を入手&実行し、

熱方程式版の最終結果(t=Tmax)が、Poisson方程式の結果とほぼ同じであるこ とを確認せよ。

2 θ 法のプログラムheatT.edpを作成せよ。

3 ある程度分割を細かくして、init=の指定の効果を調べよ。

(指定しないと遅く、指定しないでsolver=CGとすると少し速くなるが、CG法に せず直接法の系統でinit=を指定した方が速い(ようである)。)

実行時間はtimeコマンドで計測できる(time FreeFem++ heatB.edp)。

4 安定性について実験的に調べよ。(長方形領域における差分法では、1/2≤θ≤1の 場合は無条件安定、0≤θ <1/2の場合は0< λ≤ 1

2(12θ) が安定のための必要 十分条件であった。ただしλ= ∆t

x2 + ∆t

y2.

… 有限要素法の場合は、このような簡単な判定条件は得られないが、θ が1に近い 時、0に近い時、∆tを変えて、安定に計算出来るかどうか試してみる。)

5 (もし出来れば)厳密解が分かる問題を選び、誤差を調べよ。

6 自分が選んだ問題(領域などを変える)で数値実験してみよ。

かつらだまさし

(6)

実習 : まずはじめに

熱方程式に対して、時間微分を θ 法で離散化したプログラムを作って、

安定性の条件を調べてみよう。

heatB.edp を叩き台にして heatT.edp を作る

curl -O https://m-katsurada.sakura.ne.jp/program/fem/heatB.edp cp heatB.edp heatT.edp

かつらだまさし

(7)

方針

θ 法では、 0 ≤ θ ≤ 1 を満たす θ を取って、微分方程式 ∂u

∂t ( · , t

n

) =

△ u( · , t

n

) + f を

(1) 1

∆t

( u

n+1

− u

n

)

= △ u

n+θ

+ f

で置き換えるわけである。ここで

(2) u

n+θ

:= θu

n+1

+ (1 − θ)u

n

. (2) を (1) に代入して

(3) 1

∆t

( u

n+1

− u

n

)

= θ △ u

n+1

+ (1 − θ) △ u

n

+ f . これから弱形式を導ける。

かつらだまさし

(8)

後退 Euler 法のコードを読む

(4) 1

∆t

( u

n+1

− u

n

)

= △ u

n+1

. 弱形式は以下の通り。

(5) (

u

n+1

, v )

− (u

n

, v) + ∆t⟨u

n+1

, v⟩ − ∆t(f , v) − ∆t[g

2

, v ] = 0.

heatB.edp 内の problem

problem heat(u,v,init=n)=

int2d(Th)(u*v)-int2d(Th)(uold*v)

+int2d(Th)(tau*(dx(u)*dx(v)+dy(u)*dy(v))) -int2d(Th)(tau*f*v)-int1d(Th,2,3)(tau*g2*v) +on(1,4,u=g1);

このコードが (5) の実現であることは容易に理解できるであろう。

かつらだまさし

(9)

FreeFem++ の文法についての注意 ( 文句 )

FreeFem++ の文法は制限が強く、自分で弱形式をコーディングしよう

とすると、色々な文法エラーに遭遇する。

int2d(Th)(u*v)-int2d(Th)(uold*v) の部分を int2d(Th)((u-uold)*v) や

int2d(Th)(u*v-uold*v) に置き換えることは出来ない。

一方で int2d(Th)(u*v) と

int2d(Th)(tau*(dx(u)*dx(v)+dy(u)*dy(v))) を

int2d(Th)(u*v+tau*(dx(u)*dx(v)+dy(u)*dy(v))) のように 1 つ にまとめることはできる。

定数 *int2d(Th)(...) という式が扱えないので、

int2d(Th)(tau*(dx(u)*dx(v)+dy(u)*dy(v))) の定数部分を tau*int2d(Th)((dx(u)*dx(v)+dy(u)*dy(v))) のようにくくり出 すことは出来ない。

積分は複数の int2d()() にバラす、積分の前にある定数は被積分関数 に入れてしまう、という方針が良いだろう ( と個人的に考えている ) 。

かつらだまさし

(10)

θ 法のコードを作る

弱形式は次のようになる。

(6) 1

t (

un+1−un,v )

+⟨un+θ,v⟩ −(f,v)[g2,v] = 0, un+θ :=θun+1+ (1−θ)un. すなわち

(7) (

un+1,v

)(un,v) + ∆tθ⟨un+1,v⟩+ ∆t(1−θ)⟨un,v⟩ −t(f,v)t[g2,v] = 0.

次のコードがこの弱形式を実現したものであることは理解できるであろう。

コード例

problem heat(u,v,init=i)=

int2d(Th)(u*v)-int2d(Th)(uold*v)

+int2d(Th)(theta*tau*(dx(u)*dx(v)+dy(u)*dy(v)))

+int2d(Th)((1-theta)*tau*(dx(uold)*dx(v)+dy(uold)*dy(v))) -int2d(Th)(tau*f*v)-int1d(Th,2,3)(tau*g2*v)

+on(1,4,u=g1);

もちろん、もっとばらばらにしても良い。

動作確認してみよう。

かつらだまさし

(11)

安定性条件の実験

1次元熱方程式を差分法で解いたとき

θ= 1 (後退Euler法)であれば、最大値ノルムの意味で無条件に安定であった。

ノルムによっては、(もっと弱い条件)θ≥1/2であれば無条件に安定であった。

0< θ <1/2のとき、時間刻みが十分小(∆t≤ (∆x)2

2(12θ))でないと不安定になる。

heatT.edpでθ= 1,1/2,1/4の場合に、時間刻みを大きくしても安定性が保たれるか 調べる。

パラメーターがキーボード入力出来るように改造する

real Tmax=10, tau=0.01, t, theta=1;// thetaを加える。Tmaxも大きくする。

// コメント・アウトすると、m, tau, theta が実行時に変更できるようになる // cout << "m dt theta: "; cin >> m >> tau >> theta;

// cout << "m=" << m << ", tau=" << tau << ", theta=" << theta << endl;

mesh Th=square(m,m);

...

かつらだまさし

(12)

8.3 波動方程式の初期値境界値問題 8.3.1 例題と弱形式

波動方程式の初期値境界値問題を解くプログラムを作ってみよう。

1

c2utt=△u ((x,y,t)×(0,∞)), (8a)

u(x,y,t) = 0 ((x,y,t)∈∂×(0,∞)), (8b)

u(x,y,0) =ϕ(x,y), ut(x,y,0) =ψ(x,y) ((x,y)Ω).

(8c)

un=u(·,tn)として (9)

(un+12un+un1

t2 ,v )

=c2(△un,v) =−c2⟨un,v⟩ (v ∈Xˆ).

u0=ϕ. u1については、複数の手段が考えられる。

(1) Taylor展開で1次近似(以下のサンプル・プログラムで採用)

u(x,y,t)≒u(x,y,0) +ut(x,y,0)∆t=ϕ(x,y) +ψ(x,y)∆t.

(2) Taylor展開で2次近似

u(x,y,t)≒u(x,y,0) +ut(x,y,0)∆t+utt(x,y,0) 2 ∆t2

=u(x,y,0) +ut(x,y,0)∆t+∆t2

2 ·c2△u(x,y,0)

=ϕ(x,y) +ψ(x,y)∆t+(ct)2

2 △ϕ(x,y).

かつらだまさし

(13)

8.3 波動方程式の初期値境界値問題 8.3.1 例題と弱形式

波動方程式の初期値境界値問題を解くプログラムを作ってみよう。

1

c2utt=△u ((x,y,t)×(0,∞)), (8a)

u(x,y,t) = 0 ((x,y,t)∈∂×(0,∞)), (8b)

u(x,y,0) =ϕ(x,y), ut(x,y,0) =ψ(x,y) ((x,y)Ω).

(8c)

un=u(·,tn)として (9)

(un+12un+un1

t2 ,v )

=c2(△un,v) =−c2⟨un,v⟩ (v ∈Xˆ).

u0=ϕ. u1については、複数の手段が考えられる。

(1) Taylor展開で1次近似(以下のサンプル・プログラムで採用)

u(x,y,t)≒u(x,y,0) +ut(x,y,0)∆t=ϕ(x,y) +ψ(x,y)∆t.

(2) Taylor展開で2次近似

u(x,y,t)≒u(x,y,0) +ut(x,y,0)∆t+utt(x,y,0) 2 ∆t2

=u(x,y,0) +ut(x,y,0)∆t+∆t2

2 ·c2△u(x,y,0)

=ϕ(x,y) +ψ(x,y)∆t+(ct)2

2 △ϕ(x,y).

かつらだまさし

(14)

8.3 波動方程式の初期値境界値問題 8.3.1 例題と弱形式

波動方程式の初期値境界値問題を解くプログラムを作ってみよう。

1

c2utt=△u ((x,y,t)×(0,∞)), (8a)

u(x,y,t) = 0 ((x,y,t)∈∂×(0,∞)), (8b)

u(x,y,0) =ϕ(x,y), ut(x,y,0) =ψ(x,y) ((x,y)Ω).

(8c)

un=u(·,tn)として (9)

(un+12un+un1

t2 ,v )

=c2(△un,v) =−c2⟨un,v⟩ (v ∈Xˆ).

u0=ϕ. u1については、複数の手段が考えられる。

(1) Taylor展開で1次近似(以下のサンプル・プログラムで採用)

u(x,y,t)≒u(x,y,0) +ut(x,y,0)∆t=ϕ(x,y) +ψ(x,y)∆t.

(2) Taylor展開で2次近似

u(x,y,t)≒u(x,y,0) +ut(x,y,0)∆t+utt(x,y,0) 2 ∆t2

=u(x,y,0) +ut(x,y,0)∆t+∆t2

2 ·c2△u(x,y,0)

=ϕ(x,y) +ψ(x,y)∆t+(ct)2

2 △ϕ(x,y).

かつらだまさし

(15)

8.3.2 太鼓の振動のプログラム

サンプル・プログラムを用意してある。円盤領域における同次

Dirichlet

境界 条件なので、太鼓の膜の振動現象のモデルと解釈できる

(

理想化した場合は厳密

解が

Bessel

関数で表示出来る

)

ターミナルでこうして入手

curl -O https://m-katsurada.sakura.ne.jp/program/fem/taiko.edp

plot()

,dim=3

とした場合、描画範囲どうやって指定するかが分からず、 苦し紛れに定数関数

(top,bottom)

を描くようにしている。誰か解決策を見つけ た人、教えて下さい。

かつらだまさし

(16)

8.3.2 太鼓の振動のプログラム

サンプル・プログラムを用意してある。円盤領域における同次

Dirichlet

境界 条件なので、太鼓の膜の振動現象のモデルと解釈できる

(

理想化した場合は厳密

解が

Bessel

関数で表示出来る

)

ターミナルでこうして入手

curl -O https://m-katsurada.sakura.ne.jp/program/fem/taiko.edp

plot()

,dim=3

とした場合、描画範囲どうやって指定するかが分からず、 苦し紛れに定数関数

(top,bottom)

を描くようにしている。誰か解決策を見つけ た人、教えて下さい。

かつらだまさし

(17)

8.3.2 太鼓の振動のプログラム

サンプル・プログラムを用意してある。円盤領域における同次

Dirichlet

境界 条件なので、太鼓の膜の振動現象のモデルと解釈できる

(

理想化した場合は厳密

解が

Bessel

関数で表示出来る

)

ターミナルでこうして入手

curl -O https://m-katsurada.sakura.ne.jp/program/fem/taiko.edp

plot()

,dim=3

とした場合、描画範囲どうやって指定するかが分からず、

苦し紛れに定数関数

(top,bottom)

を描くようにしている。誰か解決策を見つけ た人、教えて下さい。

かつらだまさし

(18)

8.3.2 太鼓の振動のプログラム

// taiko.edp

border Gamma(t=0,2*pi) { x=cos(t); y=sin(t); } mesh Th=buildmesh(Gamma(40));

plot(Th,wait=true);

fespace Vh(Th,P1);

Vh newu,u,oldu,v,top,bottom;

func phi=1-x^2-y^2; func psi=0;

func topv=1.2; func bottomv=-1.2;

top=topv; bottom=bottomv;

real tau=0.01,Tmax=10;

real [int] levels =-1.5:0.1:1.5;

u=phi;

newu=u+tau*psi;

problem wave(newu,v)=

int2d(Th)(newu*v)+int2d(Th)(-2*u*v+oldu*v+tau^2*(dx(u)*dx(v)+dy(u)*dy(v))) +on(Gamma,newu=0);

for (real t=0; t<Tmax; t+=tau) { oldu = u;

u = newu;

wave;

plot(top,bottom,u,dim=3,value=1,fill=0,viso=levels,wait=0);

}

plot(top,bottom,u,dim=3,value=1,fill=0,viso=levels,wait=1);

かつらだまさし

(19)

以前のやり残し 有限要素解の誤差を見る

https://m-katsurada.sakura.ne.jp/lecture/ouyousuuchikaisekitokuron-2023/

ANA07_0530_handout.pdf#page=57

かつらだまさし

(20)

参考文献

[1] Hecht, F.: Freefem++,

https://doc.freefem.org/pdf/FreeFEM-documentation.pdf, 以 前は http://www3.freefem.org/ff++/ftp/freefem++doc.pdf に あった。 (??).

[2] 大塚厚二 , 高石武史:有限要素法で学ぶ現象と数理 — FreeFem++ 数 理思考プログラミング —, 共立出版 (2014),

https://sites.google.com/a/comfos.org/comfos/ffempp とい うサポート WWW サイトがある. Maruzen eBook に入っているので、

https:

//elib.maruzen.co.jp/elib/html/BookDetail/Id/3000018545 でアクセス出来る .

かつらだまさし

Referensi

Dokumen terkait

16:30〜17:30 講師 : 小俣 正朗 氏 (金沢大学) 題目 : 水面に浮かぶ泡のダイナミクス 要旨 : 水面上に浮かぶ泡のダイナミクスを数学、数値計算双方で探る。水面の泡をス カラー関数のグラフで表し、そのダイナミクスを記述する方程式をたてる。泡 の(上下)振動は波動方程式で記述する。ただし泡が水面下に潜らないことか

連絡事項&本日の内容 今回から、しばらく3回程度流体力学への応用の話をする。 今日は、流体力学で出て来る諸概念と、有名な方程式連続の方程式、非圧 縮条件、Navier-Stokes方程式、Euler方程式、Stokes方程式の紹介をする 駆け足。 次回以降、以下のものを使う可能性がある。 Mathematica

応用数値解析特論メモ No.1, 2 桂田 祐史 2015 年 9 月 29 日 511 にて この授業用のWWWページはhttp://www.math.meiji.ac.jp/~mk/ouyousuchi/ 1 ガイダンス 1.0 自己紹介 連絡は[email protected] 1.1 授業の目標 有限要素法 finite element

2.10 1 次分数変換の鏡像の原理 1 鏡像の位置 Cb の円は1次分数変換でCbの円に写ることを示した。 円上にない点についても、注目すべき性質が成り立つ。 定義 14.1 円に関して鏡像の位置 C はCb の円であり、z,z′ ∈Cb とする。zとz′がC に関して互いに鏡 像の位置にあるz とz′ がC に関して対称である とは,次のa, b

本日の内容&連絡事項 前回の授業で、期末試験に代わる「期末レポート課題」について説 明しました。見逃している人はチェックしておいて下さい。 今回と次回最終回、積分の話をします。積分もある種の極限とし て定義されます。その定義と、どういう場合に存在が保証されるの かが重要なところです。 桂田 祐史 数学解析 第13回 2021年7月12日 2 / 21...

図 7: ターミナルを起動してみる 左上の白いウィンドウがターミナルのウィンドウ, 右下の Dockも注目 これでターミナルを終了しても、Dockにターミナルのアイコンが残り、それをクリックす ることでターミナルが起動できるようになる。 2.5 Finder のサイドバーへホームディレクトリィを追加 Finder にホームディレクトリを登録しておくのがお勧め。

本日の内容&連絡事項 これは実は毎年そうしていますが宿題の解答PDFを公開します。 「数学解析WWWサイト」の問のところに置いてあります。 第14回授業では、当初の予定では、広義積分の解説をする予定でし たが、宿題の解説をすることに切り替えます。 「期末試験の準備は、宿題にきちんと取り組むのがよい」と考えてい て、例年次のように説明しています。

本日の講義内容、連絡事項 レポート課題を WWW サイトに載せた。〆切について相談1次提 出7/24, 最終提出7/31 でどうか?。 次回 7/11 は課題のための実習・質問相談時間とする。作業がス タートできるように準備資料集め等しておくこと。 今回は、有限要素法の理論的背景について解説する。参考書としては、