[deepconv/arare/sample]

微分の計算

概要

1 階微分演算モジュール diff.f90 に含まれる微分演算関数の動作をテストする.

テストはそれぞれの微分演算関数に対し, 下記に示すように初期分布および格子点数を変えて行う.

テストの際の注意点を以下にあげる.

テスト結果として元の関数, 微分演算を行った後の関数, 解析的に微分して得られる関数, 誤差(微分演算を行った関数の解析的に微分して得られる関数に対する差)の図を描く. 図は計算領域内のみのものと計算領域外を含むものの2種類を描く.

プログラムソース

arare (微分・平均演算テスト用) 2004-10-07 版

このプログラムソースは杉山さん作成の微分・平均演算用に特化したソースプログラム (http://www.gfd-dennou.org/arch/deepconv/arare/sample/2004-10-28_sugiyama)が大元である.

微分演算関数の性質

領域端での微分係数の扱い

領域の端では微分係数を計算できない場合がある. このような場合は微分係数を 0 としている. 上下左右のどの端の微分係数が計算できないかは微分演算関数によって異なる.

打ち切り誤差精度を見積もる際の注意

打ち切り誤差の見積もり方については「打ち切り誤差の見積もり方」を参照.

打ち切り誤差精度を見積もる際に用いる格子点間隔には注意が必要である. それは微分を計算するのに用いる 2 点(あるいは 4 点)間の距離が, 微分演算関数によって異なるためである. ここでテストする微分演算関数の場合, 格子点間隔を Δx とすると 2Δx 離れた 2 点の値を用いて微分を計算する場合と, Δx 離れた 2 点の値を用いて微分を計算する場合がある.

2Δx 離れた 2 点の値を用いて微分を計算する場合

誤差の絶対値が極大となる部分のその大きさは以下のようになる.

格子点数 誤差の絶対値
20 1.0e-5
50 1.7e-6
100 4.1e-7

Δx 離れた 2 点の値を用いて微分を計算する場合

誤差の絶対値が極大となる部分のその大きさは以下のようになる.

格子点数 誤差の絶対値
20 2.6e-6
50 4.1e-7
100 1.0e-7

テスト結果

テストした関数のリストを以下の表に列挙する(それぞれの関数のテスト結果のページにリンクされている).

スカラー格子点上での微分

関数名 計算出来ない点 誤差評価時の格子間隔
ss_dx_ss 左, 右 2Δx
ss_dz_ss 上, 下 2Δx
ss_dx_fs Δx
ss_dz_fs 上, 下, 左 2Δx
ss_dx_sf 下, 左, 右 2Δx
ss_dz_sf Δx

x 方向フラックス格子点上での微分

関数名 計算出来ない点 誤差評価時の格子間隔
fs_dx_ss Δx
fs_dz_ss 上, 下, 右 2Δx
fs_dx_fs 左, 右 2Δx
fs_dz_fs 上, 下 2Δx
fs_dx_sf 下, 右 Δx
fs_dz_sf 下, 右 Δx

z 方向フラックス格子点上の微分

関数名 計算出来ない点 誤差評価時の格子間隔
sf_dx_ss 上, 左, 右 2Δx
sf_dz_ss Δx
sf_dx_fs 上, 左 Δx
sf_dz_fs 上, 左 Δx
sf_dx_sf 左, 右 2Δx
sf_dz_sf 上, 下 2Δx

各微分演算関数での誤差のグラフ


Last Update: 2004/10/31 (北守 太一)