8.4 偏微分方程式の数値解 法 [偏微分の復習 (1)] のとき このこの と を 座標系の座標値とすると, と は独立。お互いに直交する値であるから, は意味がない。

Slides:



Advertisements
Similar presentations
Division of Process Control & Process Systems Engineering Department of Chemical Engineering, Kyoto University
Advertisements

2. 数値微分法. 数値微分が必要になる場合として、次の 2 つが考えられる。 関数が与えられていて、その微分を近似的に計算する。 (数値微分の精度が十分で、かつ、計算速度が数値微分の方が 早い場合など。) 離散的な点の上で離散的なデータしかわかっていない関数の微 分を近似的に計算する。(偏微分方程式の数値解を求めたい時.
1 微分・ベクトル解析 (4) 講師:幹 浩文( A314) TA :西方良太 M 1 ( A305 ) A 1 03 ( 10 : 50~12 : 20 ) 【金】 https://
情報基礎実習 I (第6回) 木曜4・5限 担当:北川 晃. Stream クラスを用いたファイルの接続 … Dim インスタンス名 As New IO.StreamReader( _ “ ファイルの絶対パス ”, _ System.Text.Encoding.Default) … s = インスタンス名.
5.制御構造と配列 場合分け( If Then Else , Select Case ) 繰返し( Do While ) 繰返しその2( For Next )
Computational Fluid Dynamics(CFD) 岡永 博夫
有限差分法による 時間発展問題の解法の基礎
Fortran と有限差分法の 入門の入門の…
・力のモーメント ・角運動量 ・力のモーメントと角運動量の関係
電磁気学Ⅱ Electromagnetics Ⅱ 6/5講義分 電磁波の反射と透過 山田 博仁.
課題 1.
6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを 2次元DFTを
VBA H106077 寺沢友宏.
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
常微分方程式と偏微分方程式 1.常微分方程式 独立変数が一個のもの 振動の運動方程式 2.偏微分方程式 独立変数が二個以上のもの
4. 双曲型偏微分方程式の数値解法入門 双曲型の偏微分方程式(partial differential equation, PDE)の最も簡単なの例として1変数の線形PDE    を考える; この方程式の意味は大雑把に言って、Δx の セル内に流入流出する f の量がフラックス その結果セル内で f.
5.アンテナの基礎 線状アンテナからの電波の放射 アンテナの諸定数
周期境界条件下に配置されたブラックホールの変形
4.2 連立非線形方程式 (1)繰返し法による方法
電磁気学C Electromagnetics C 7/13講義分 電磁波の電気双極子放射 山田 博仁.
流体のラグランジアンカオスとカオス混合 1.ラグランジアンカオス 定常流や時間周期流のような層流の下での流体の微小部分のカオス的運動
6.4 離散的コサイン変換 (DCT : discrete cosine transform ) (1)DCTとは
静電場、静磁場におけるMaxwellの式
電気回路学Ⅱ エネルギーインテリジェンスコース 5セメ 山田 博仁.
誤差の二乗和の一次導関数 偏微分.
2.伝送線路の基礎 2.1 分布定数線路 2.1.1 伝送線路と分布定数線路 集中定数回路:fが低い場合に適用
電磁気学Ⅱ Electromagnetics Ⅱ 5/15講義分 電磁場のエネルギー 山田 博仁.
本時の目標 「簡単なプログラム言語の意味を理解し、マクロ機能を使って簡単なプログラムを作ることができる。」
スペクトル法の一部の基礎の初歩への はじめの一歩
第二回 VB講座 電卓を作ろう.
電磁波 アンテナ.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
傾きがわかった関数の軌跡を求める. 変数は二つ以上
電磁気学C Electromagnetics C 5/28講義分 電磁波の反射と透過 山田 博仁.
電磁気学Ⅱ Electromagnetics Ⅱ 6/30講義分 電磁波の反射と透過 山田 博仁.
川崎浩司:沿岸域工学,コロナ社 第2章(pp.12-22)
電磁気学C Electromagnetics C 4/27講義分 電磁場のエネルギー 山田 博仁.
電気回路学Ⅱ コミュニケーションネットワークコース 5セメ 山田 博仁.
量子力学の復習(水素原子の波動関数) 光の吸収と放出(ラビ振動)
4章 開水路における不等流(2) 漸変流 4-1漸変流とは ① 断面形状や底面形状が緩やかに変わる流れ。
電磁気学Ⅱ Electromagnetics Ⅱ 8/4講義分 電気双極子による電磁波の放射 山田 博仁.
電磁気学Ⅱ Electromagnetics Ⅱ 6/9講義分 電磁場の波動方程式 山田 博仁.
電磁気学Ⅱ Electromagnetics Ⅱ 5/9講義分 電磁場のエネルギー 山田 博仁.
平面波 ・・・ 平面状に一様な電磁界が一群となって伝搬する波
速度ポテンシャルと 流線関数を ベクトルで理解する方法
Chapter 26 Steady-State Molecular Diffusion
大阪市立大学 宇宙物理(重力)研究室 D2 孝森 洋介
静電場、静磁場におけるMaxwellの式
【第六講義】非線形微分方程式.
シミュレーション物理4 運動方程式の方法.
電磁気学C Electromagnetics C 5/20講義分 電磁場の波動方程式 山田 博仁.
電気回路学Ⅱ 通信工学コース 5セメ 山田 博仁.
情報実習I (第6回) 木曜4・5限 担当:北川 晃.
電磁気学C Electromagnetics C 4/24講義分 電磁場のエネルギー 山田 博仁.
大阪市立大学 孝森 洋介 with 大川,諏訪,高本
電磁気学Ⅱ Electromagnetics Ⅱ 6/7講義分 電磁波の反射と透過 山田 博仁.
場合分け(If Then Else,Select Case) 繰返し(Do While) 繰返しその2(For Next)
6.2 高速フーリエ変換 (1)FFT(fast Fourier transform)とは
6.5 アダマール(Hadamard)変換 (1)アダマール変換とは
共振を防ぐように設計を行ったり, 振動を早く減衰させる設計を行う際, 固有値と固有ベクトルを求めることが重要
7.2 回帰曲線 身長と体重…関係がありそう? ??? 身長と体重の関係をグラフで観察する.
コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。
プログラミング言語によっては,複素数が使えない。
5.2 グレゴリー・ニュートン(Gregory-Newton)の補間式 (1)導入
8.2 数値積分 (1)どんなときに数値積分を行うのか?
5.3 ラグランジェ(Lagrange)の補間式
熱伝導方程式の導出 熱伝導:物質の移動を伴わずに高温側から低温側へ熱が伝わる現象 対流、輻射 フーリエの法則Fourier’s law:
8.数値微分・積分・微分方程式 工学的問題においては 解析的に微分値や積分値を求めたり, 微分方程式を解くことが難しいケースも多い。
Presentation transcript:

8.4 偏微分方程式の数値解 法 [偏微分の復習 (1)] のとき このこの と を 座標系の座標値とすると, と は独立。お互いに直交する値であるから, は意味がない。

そこで お互いに相手の変数を定数とみなして微分する。 偏微分と呼ぶ。 [記号] の替わりにを用いる。

偏微分の例 を定数とみなし て を見慣れないからといって恐れないこと。常微分より簡単だよ。 を定数とみなし て

[偏微分の復習 (2)] [常微分と偏微分の関係] が,とも に に関して偏微分できると き, [媒介変数表 示] 以上の関係は,いたるところで出てくるので重要!!

[ベクトル解析の復習①] [勾 配] は,それぞ れ 方向の単位ベクト ル という演算子(ナブラ)を導入すると

イメージをつかむために 2次元の地形図を思い浮かべるとよい。 2次元の▽(ナブラ) は を標高値とする と, スカラー値は傾斜方向ベクトルである。 絶対値: 方 向:

[ベクトル解析の復習③] [発散]ベクトル 場 に対して ベクトル場がスカラーの勾配のとき ここで, とあらわし のラプラシアンという。 簡単のために2次元の数値地図を考え, 左のメッシュでは不変とする が正のとき,傾斜方向は広が (正のとき凹型地形,負のとき凸型地 形) と, り,負のときは狭まる形になる。 これを (あるいは,隣り合うベクトルの広がり 具合)

[ベクトル解析の復習④] [回転]ベクトル 場 に対して なお,と表記されることもある。

[ベクトル解析の復習⑤] [公 式] 公式を丸暗記しないこと。意味を理解する。できなければ,どの資料 に書いてあるかを記憶し,使うときに参照する。使っているうちに慣 れてくる。

[ベクトル解析の復習⑥]

[ベクトル解析の復習⑦]

8.4.1 数値解法における差分の方 法 (1)差分の種類 常微分の場合と同様,以下のような方法があ る。 ①前進差分( forward difference ) ①前進差分( forward difference ) ②中心差分( centered difference ) ②中心差分( centered difference ) ③後退差分( backward difference ) ③後退差分( backward difference )

(2)前進差分 微小格子を考え,以下のように近似する。

(3)後退差分 微小格子を考え,以下のように近似する。

(4)中心差分 微小格子を考え,以下のように近似する。 中心差分は,前進差分から後退差分を差し引いて,1/2にした形である。

(5)差分式使用上の注意点 どの方法を選択するかは, ①与えられた条件, ②問題の性格, ③モデル化のしやすさ 等に応じて決めること。 流体力学の分野では,空間成分に関して,速 度成分が正であれば後退差分を,負であれば 前進差分を使用する風上差分も用いられてい る。

8.4.2 物理現象と偏微分方程式 (1)考え方 ①偏微分方程式は,物理現象を支配する法則等によ り体積無限小の極限で導出される。 ②有限な体積要素における法則により,基礎式が直 接導出されることも多い。 (例:コントロールボリューム法,直接差分法)

(2)2階偏微分方程式の分類 2階偏微分方程式の一般式 [分類] のとき楕円型 のとき放物型 のとき双曲型 [例] (ラプラス方程式: Laplace’s equation ) (ポアソン方程式: Poisson’s equation ) ① ② ③ (拡散方程式など) [例] (波動伝播など) [例]

(3)楕円型のプログラム例 [シートの定 義] (ラプラス方程 式) (ポアソン方程 式)

VBA による定義 ①データ宣言 Private ポアソン As Boolean Private KX As Integer Private KY As Integer Private NN As Integer Private EPS As Double Private U() As Double Private ID1 As Integer Private ID2 As Integer Private F() As Double Private UMax As Double Private UMin As Double Private UDX As Double

②初期条件の設定と境界条件設定 Private Sub 初期条件 (KX, KY, MX, MY, DX, DY) For j = 0 To KY For i = 0 To KX U(0, i, j) = 0: U(1, i, j) = 0: F(i, j) = 0 If ポアソン Then ‘ ポアソンの方程式のとき右辺設定 F(i, j) = 80 * (DX * (MX - i) + DY * (MY - j)) End if Next End Sub Private Sub 境界条件 (KX, KY, DX, DY) For k = 0 To 1 For i = 0 To KX: U(k, i, 0) = 0: U(k, i, KY) = 16: Next For j = 0 To KY: U(k, 0, j) = 0: U(k, KX, j) = 8: Next Next End Sub

③計算本体(その1) Private Sub 計算 (KX, KY, NN, EPS) Dim MX As Integer: MX = KX + 1 Dim MY As Integer: MY = KY + 1 Dim DX As Double: DX = 1# / KX Dim DY As Double: DY = 1# / KY ReDim U(1, KX, KY), F(KX, KY) Dim F1 As Double: F1 = 1 / (DX * DX) Dim F2 As Double: F2 = 1 / (DY * DY) Dim F3 As Double: F3 = 0.5 / (F1 + F2) 初期条件 KX, KY, MX, MY, DX, DY 境界条件 KX, KY, DX, DY

④計算本体(その2) ' 収斂計算 ID1 = 1: ID2 = 0 For N = 0 To NN - 1 ID = ID1: ID1 = ID2: ID2 = ID: ER = 0 For j = 1 To KY - 1 For i = 1 To KX - 1 U(ID2, i, j) = F3 * (F1 * (U(ID1, i + 1, j) + U(ID1, i, j + 1)) + _ F2 * (U(ID1, i - 1, j) + U(ID1, i, j - 1)) + F(i, j)) If Abs(U(ID2, i, j)) > EPS Then E = Abs((U(ID2, i, j) - U(ID1, i, j)) / U(ID2, i, j)) If E > ER Then ER = E End If Next

⑤計算本体(その3) If ER < EPS Then Exit For If (N Mod 50) = 0 Then ‘ 計算途中経過表示 With Worksheets(" データ ").Cells(2, 5) = N.Cells(2, 6) = Format(ER, "# ") End With Application.ScreenUpdating = True Application.ScreenUpdating = False End If Next Application.ScreenUpdating = True End Sub

⑥データの設定 Sub データ設定 () With Worksheets(" データ ") KX = Val(.Cells(2, 1)) KY = Val(.Cells(2, 2)) NN = Val(.Cells(2, 3)) EPS = Val(.Cells(2, 4)) End With ポアソン = False End Sub

⑦結果の設定 Sub 結果設定 () With Worksheets(" 結果 ") UMax = U(ID2, 1, 1): UMin = U(ID2, 1, 1) For j = 1 To KY - 1 For i = 1 To KX - 1.Cells(j, i) = U(ID2, i, j) If UMax < U(ID2, i, j) Then UMax = U(ID2, i, j) If UMin > U(ID2, i, j) Then UMin = U(ID2, i, j) Next UDX = UMax - UMin End With End Sub

⑧ボタンの Click イベントハンドラ Sub ボタン 1_Click() ‘ ラブラスの方程式のための Click イベントハンドラ データ設定 ポアソン = False 計算 KX, KY, NN, EPS 結果設定 End Sub Sub ボタン 3_Click() ‘ ポアソンの方程式のための Click イベントハンドラ データ設定 ポアソン = True 計算 KX, KY, NN, EPS 結果設定 End Sub

⑨結果を分布図としてセルの色で表示する処理 Sub ボタン 2_Click() Dim CD(10) As Integer CD(0) = 5: CD(1) = 41: CD(2) = 33: CD(3) = 34: CD(4) = 36 CD(5) = 6: CD(6) = 44: CD(7) = 45: CD(8) = 46: CD(9) = 3 Worksheets(" 分布 ").Select MY = KY + 1 With Worksheets(" 結果 ") For j = 1 To KY - 1 For i = 1 To KX - 1 ID = 9 * (Val(.Cells(KY - j, i) - UMin) / UDX) If ID > 9 Then ID = 9 Worksheets(" 分布 ").Cells(j, i).Select Selection.Interior.ColorIndex = CD(ID) Selection.Interior.Pattern = xlSolid Next End With End Sub

⑩結果分布図 ラプラスの方程式の結果 (Umax=15.35, Umin=0.00) ポアソンの方程式の結果 (Umax=14.93, Umin=0.03) ラプラスの方程式の結果の方が分布として 滑らかであることに注意されたい。

(4)電磁場の偏微分方程式 電磁場における支配方程式 (マクスウェルの方程式) (ガウスの法則) ポアソン の方程式 (電磁誘導の法 則) (磁束密度湧き出しなしの法則) ラプラスの方程 式 (アンペールの法則) : 電束密度 : 電場の強 さ : 磁場の強 さ : 磁束密度 : 電流密度 : 電荷 基本式が同じでも, 条件によって 偏微分方程式が異なることを ここでは 確認する。

(4)電磁場の偏微分方程式 誘電率,透磁率,電荷を用いた電束密度と電場強さ,磁束密度と 磁場の強さ,電流密度と電場の強さの関 係 これらをマックスウェルの方程式に代入して 右の式を時間で偏微分して,左の式を代入すると

条件で変わる偏微分方程式 同じ方程式でも, 条件によって偏微分方程式が異なる (放物線型:拡散方程 式) 真空中では 電場の強さの 時間変化が小さいとき (双曲型:真空中の電場伝 播) 定常状態のとき元の式 電位を用いて (楕円型:ポアソン方程 式) として整理すると

(5)波動方程式 1次元(平面波) 2次元(円柱波) (梁の振動:1次元) 3次元(球面波) 極座標による2次元波動方程式(太鼓など円形の膜の振動のと き)

1次元波動方程式の解釈 1次元(平面波) 隣り合う両節点の変位差を変位とみなせば, 加速度が変位に比例するバネと同じ

プログラム例 [シートの定義](以下のように3種類のシートとコマンドボタンを 用意する) とおいて,以下の差分方程式としてプログラミングする。

VBA による定義 ①データ宣言と初期値設定 Private Z(2, 100) As Double Private V(2, 100) As Double Private ID1 As Integer Private ID2 As Integer Sub 初期値 () For i = 0 To 50 A = Sin( * i / 100) Z(0, i) = A : Z(0, i) = A ‘ 端点での誤差を少なくするために V(0, i) = 0: V(0, i) = 0 ‘ このように設定している Next With Worksheets(" 結果 ") For i = 0 To 100.Cells(1, i + 2) = i.Cells(2, i + 2) = Z(0, i) Next End With End Sub

VBA による定義 ②処理本体(その1) Sub 波動方程式 1 次元 (NumLoop, NN, SaveN, DT, DX, Alfa) Beta = Alfa * Alfa / (DX * DX): ID1 = 0: ID2 = 1: KK = 0 For k = 1 To NumLoop For j = 1 To NN - 1 Z(ID2, j) = Z(ID1, j) + DT * V(ID1, j) Acc = Beta * (Z(ID1, j + 1) - 2 * Z(ID1, j) + Z(ID1, j - 1)) V(ID2, j) = V(ID1, j) + DT * Acc Next ‘ 境界条件(両端を固定とする) V(ID2, 0) = 0: V(ID2, 100) = 0 Z(ID2, 0) = 0: Z(ID2, 100) = 0

VBA による定義 ③処理本体(その2)とボタンの Click イベントハンドラ If (k Mod SaveN) = 0 Then ‘ 指定された計算回数間隔で途中結果を保存する KK = KK + 1 With Worksheets(" 結果 ").Cells(KK + 2, 1) = KK * SaveN * DT For j = 0 To NN.Cells(KK + 2, j + 2) = Z(ID2, j) Next End With End If Temp = ID2: ID1 = ID2: ID2 = Temp Next End Sub Sub ボタン 2_Click() 初期値 波動方程式 1 次元 40000, 100, 100, 0.01, 0.05, 0.05 End Sub

⑨結果グラフ 中央の振幅 T=100 までの弦の変化 α の値を変化させて, 色々確かめてみよう。 また, α が大きすぎると 振動状態になってしまうことも 確認すること。 両端での速度・位置を固定しているので, 振幅が次第に小さくなる。

(6)保存量の偏微分方程式 熱拡散方程式 の条件による定常状態では 境界面を移動する流束ベクトル

プログラム例 [シートの定義](以下のように3種類のシートとコマンドボタンを 用意する)

VBA による定義 ①データ宣言 Private T() As Double Private U() As Double: Private V() As Double Private ID1 As Integer: Private ID2 As Integer Private KX As Integer: Private KY As Integer Private MX As Integer: Private MY As Integer Private N As Integer: Private NumLoop As Integer Private DT As Double: Private DX As Double: Private DY As Double Private R1 As Double: Private R2 As Double Private R3 As Double: Private R4 As Double Private Ndisp As Integer

VBA による定義 ②初期値設定 Sub 初期値設定 () With Worksheets(" データ ") KX = Val(.Cells(2, 1)): KY = Val(.Cells(2, 2)) DT = Val(.Cells(2, 3)): NumLoop = Val(.Cells(2, 4)) Ndisp = Val(.Cells(2, 5)) MX = KX + 1: MY = KY + 1 ReDim T(2, MX, MY), U(MX, MY), V(MX, MY) DX = 1# / KX: DY = 1# / KY R1 = 2 * DT / DX: R2 = 2 * DT / DY R3 = DT / (DX * DX): R4 = DT / (DY * DY) ' 初期条件 For j = 0 To KY For i = 0 To KX T(0, i, j) = 0#: T(1, i, j) = 0# YY = DY * j U(i, j) = 50# * YY * (1# - YY) V(i, j) = 0 Next N = 0: ID1 = 0: ID2 = 1 End With End Sub

VBA による定義 ③境界条件 Private Sub 境界条件 () For j = 0 To KY T(ID1, 0, j) = 0 ‘ 左側冷却 T(ID1, KX, j) = T(ID1, KX - 1, j) ‘ 右側から熱流が出て行く Next For i = 0 To KX T(ID1, i, 0) = 0 ‘ 上・下冷却 T(ID1, i, KY) = 0 Next For i = (MX / 4 - 1) To MX / T(ID1, i, 0) = 1# ‘ 上部に熱源あり Next End Sub

VBA による定義 ④計算実行 Private Sub 計算 () ' オイラーの解法 For j = 1 To KY - 1 For i = 1 To KX - 1 T(ID2, i, j) = T(ID1, i, j) _ - R1 * U(i, j) * (T(ID1, i + 1, j) - T(ID1, i - 1, j)) _ - R2 * V(i, j) * (T(ID1, i, j + 1) - T(ID1, i, j - 1)) _ + R3 * (T(ID1, i + 1, j) - 2# * T(ID1, i, j) + T(ID1, i - 1, j)) _ + R4 * (T(ID1, i, j + 1) - 2# * T(ID1, i, j) + T(ID1, i, j - 1)) Next ID = ID2: ID2 = ID1: ID1 = ID End Sub

VBA による定義 ⑤表示ルーチン(その1) Sub 表示 () Dim CD(10) As Integer CD(0) = 5: CD(1) = 41: CD(2) = 33: CD(3) = 34: CD(4) = 36 CD(5) = 6: CD(6) = 44: CD(7) = 45: CD(8) = 46: CD(9) = 3 Worksheets(" 分布 ").Select MY = KY + 1 Application.ScreenUpdating = False Worksheets(" 分布 ").Select With Worksheets(" 結果 ") For j = 0 To KY: For i = 0 To KX.Cells(i + 1, j + 1) = T(ID1, j, i) Next: Next Umax = 1: Umin = 0 UDX = Umax - Umin

VBA による定義 ⑥表示ルーチン(その2) For j = 1 To KY - 1: For i = 1 To KX - 1 If UDX = 0 Then ID = 0 Else ID = 9 * (Val(.Cells(j, i) - Umin) / UDX) End If If ID < 0 Then ID = 0 If ID > 9 Then ID = 9 Worksheets(" 分布 ").Cells(j, i).Select Selection.Interior.ColorIndex = CD(ID) Selection.Interior.Pattern = xlSolid Next: Next End With Worksheets(" 分布 ").Cells(KY + 4, KX + 4).Select Application.ScreenUpdating = True End Sub

VBA による定義 ⑦ボタンの Click イベントハンドラ Sub ボタン 1_Click() 初期値設定 For i = 1 To NumLoop 境界条件 計算 If (i Mod Ndisp) = 0 Then 表示 Next End Sub

⑧結果分布図 例題による最終時刻の中央の振幅 拡散の様子

(7)その他の解法 ① キャビティ流れにおける (7)その他の解法 ① キャビティ流れにおけるフラクショナルステップ法 図形表示の都合から,プログラムは Microsoft C#.Net で記述 等高線: ψ , 色分け:圧力 矢印:速度ベクトル 等高線:圧力, 色分け: ψ 矢印:速度ベクトル 実行条件 メッシュ数 50× 50 , レイノルド数 40, 時間刻み 時間刻み数 100 , 最大収斂回数 100

(7)その他の解法 ② キャビティ流れにおける流れ関数・過度法 図形表示の都合から,プログラムは Microsoft C#.Net で記述 等高線: ψ , 色分け: ω 等高線: ω , 色分け: ψ 実行条件 メッシュ数 50× 50 , レイノルド数 40, 時間刻み 時間刻み数 100 , 最大収斂回数 100 , 加速度パラメータ 1.0

(7)その他の解法 ③円柱回りの流れ 図形表示の都合から,プログラムは Microsoft C#.Net で記述 (等高線,色分けともに: ψ )