数値微分の打切り誤差・精度次数可視化 戻る
解析ツール

数値微分の打切り誤差・精度次数可視化

前進・後退・中心差分スキームの打切り誤差と丸め誤差のトレードオフを可視化。最適刻み幅と達成可能精度をリアルタイムで確認できます。

関数設定

-33

差分スキーム

丸め誤差定数

float64固定値
計算結果
解析的導関数値
最適 h (中心差分)
最高達成精度
2.22e-16
丸め誤差フロア ε
|誤差| vs 刻み幅 h (log-log) — 打切り誤差 vs 丸め誤差のバランス
ステンシル可視化 (f(x) 近傍)
誤差分解: 打切り vs 丸め (中心差分)
理論・主要公式

$$f(x+h) = f(x) + hf'(x) + \frac{h^2}{2!}f''(x) + \cdots$$

テイラー展開:打ち切り誤差の源。$O(h^n)$ は $n$ 次精度

$$\frac{df}{dx} \approx \frac{f(x+h)-f(x)}{h} + O(h)$$

前進差分(1次精度):誤差は $O(h)$ で $h\to0$ のとき消える

$$\frac{df}{dx} \approx \frac{f(x+h)-f(x-h)}{2h} + O(h^2)$$

中心差分(2次精度):前進差分より精度が高く実用的

数値微分の打切り誤差・精度次数可視化とは

🙋
数値微分って、教科書には「$f'(x) \approx (f(x+h)-f(x))/h$」って書いてあるけど、hを小さくしすぎると逆に精度が悪くなるって聞きました。このシミュレーターで確かめられますか?
🎓
その通り!その現象こそが「打切り誤差」と「丸め誤差」のトレードオフだ。大まかに言うと、hを大きくすると関数の近似が甘くなる「打切り誤差」が大きくなり、hを小さくしすぎるとコンピュータの計算精度の限界「丸め誤差」が膨らむんだ。このツールのグラフで、上の「関数 f(x)」を選んで「刻み幅 h」のスライダーを動かしてみると、誤差がV字型の谷を作るのが見えるよ。
🙋
え、V字型の谷!確かにグラフに線が何本かありますね。「前進」「中心」「4点」って何が違うんですか?
🎓
関数の情報をどれだけたくさん使うかの違いだ。前進差分は$f(x)$と$f(x+h)$の2点だけ。中心差分は$f(x+h)$と$f(x-h)$の2点、4点差分はさらに$f(x+2h)$と$f(x-2h)$も使う。使う点が多いほど、打切り誤差の次数が高くなって、谷が左側(小さいh側)に深く伸びる。でも、丸め誤差も大きくなりやすいから、谷の位置(最適なh)は変わってくる。実際に「差分スキーム」を切り替えて、谷の形と深さを比べてみて。
🙋
なるほど!「カスタム関数」の欄に自分で数式を入れられるみたいです。例えば「Math.sin(x)」とか入れて、理論値と比べることもできるんですか?
🎓
いい着眼点だ!その通り、`Math.sin(x)`と入れると$f(x)=\sin(x)$で、理論的な微分は$\cos(x)$だから、誤差がきれいに計算できる。実務では、CAEの感度解析で複雑な関数の微分が必要になることが多い。そんな時、どの差分スキームを選び、どの刻み幅hを使えば効率的に高精度が出せるか、このツールで感覚を掴めるんだ。ぜひ`Math.exp(x)`や`x*x*x`なども試して、誤差の挙動の違いを体感してみて。

よくある質問

刻み幅hを小さくすると打切り誤差は減少しますが、丸め誤差が1/hに比例して増大します。これは浮動小数点演算の桁落ちが原因で、総誤差はhが極小になると再び増加します。グラフ上の最小点が最適刻み幅です。
前進差分の打切り誤差はO(h)(1次精度)、中心差分はO(h²)(2次精度)です。同じ刻み幅hなら中心差分の方が高精度ですが、丸め誤差の影響は両者とも同程度に現れます。可視化で比較すると、中心差分の最適精度がより良いことが確認できます。
最適刻み幅における総誤差の最小値です。倍精度では理論的に約10⁻⁸〜10⁻¹²程度が限界で、これは打切り誤差と丸め誤差のトレードオフにより決まります。実際の値は関数f(x)の3階微分の大きさに依存します。
まずグラフの谷底(最適刻み幅)を目安にし、その前後で数桁試すのが確実です。また、被微分関数が急峻な場合は打切り誤差が大きくなるため、より小さいhを選ぶ必要があります。自動最適化機能があれば活用してください。

実世界での応用

CAEにおける感度解析・最適化:自動車の車体形状や航空機の翼型を最適化する際、目的関数(例えば燃費や揚力)を設計変数で微分した感度情報が必要です。複雑なシミュレーション関数は解析的に微分できないため、数値微分が用いられます。このツールで学ぶ最適刻み幅の選定は、正確かつ効率的な感度計算に直結します。

ニューラルネットワークの学習:ディープラーニングのバックプロパゲーションでは、損失関数の勾配を計算します。この勾配計算の検証や、自作の最適化アルゴリズムを実装する際、数値微分による勾配チェックが行われます。丸め誤差の影響を理解することは、数値的に安定した学習アルゴリズムを設計する上で重要です。

計算物理学における微分方程式の離散化:流体力学のナビエ-ストークス方程式や構造力学の弾性方程式を有限差分法で解く時、空間微分項を離散化します。高精度なシミュレーションのためには、4点差分のような高次精度スキームの特性(精度と安定性のトレードオフ)を理解することが不可欠です。

金融工学におけるオプション価格のグリークス計算:オプションのデルタやガンマなどのリスク指標は、価格公式を数値的に微分して計算されます。市場実務では、計算速度と精度のバランスが重要であり、誤差を最小化する刻み幅の選定がそのまま損益に影響します。

よくある誤解と注意点

このツールを使いこなす上で、特に実務を意識した注意点がいくつかあります。まず、「最適なhは関数や微分する点によって変わる」という点です。シミュレーターでデフォルトの関数を使うと最適なhが$10^{-8}$前後になることが多いですが、例えば関数の値が極端に大きい($f(x)=10^{10}x$など)場合、丸め誤差の項が大きくなるため、最適なhはもっと大きくなります。逆に、関数の変化が非常に緩やかな場合($f(x)=定数$に近い)は、打切り誤差が小さくなるので、より小さなhでも問題ありません。つまり、一つの関数で求めた最適hを盲目的に他のケースに適用するのは危険です。

次に、「高次の差分スキームが常に最良とは限らない」という点。4点差分や6点差分は確かに打切り誤差の次数が高く、理論上は優れています。しかし、これらのスキームはより多くの点の関数値を必要とするため、計算コストが増えます。また、関数の評価点が増えると、それに伴う丸め誤差の蓄積も無視できません。特に、関数自体がノイズを含んでいたり(実験データなど)、不連続点の近くでは、高次スキームの振動が誤差をかえって大きくする場合もあります。実務では、必要な精度、計算コスト、関数の性質を総合的に判断してスキームを選ぶことが肝心です。

最後に、「理論値が分からない現実の問題ではどうするか?」という根本的な問いがあります。CAEの感度解析などでは、微分したい関数がブラックボックス(ソルバー内部)であることがほとんどです。その場合、このツールで学んだ「誤差のV字カーブ」の概念が役立ちます。いくつかの異なるh(例えば、$10^{-4}, 10^{-6}, 10^{-8}$)で数値微分を計算し、その結果がhを小さくするにつれてどう変わるか観察します。結果が単調に変化せず、ある点で振動し始めたら、それは丸め誤差の影響が支配的になったサイン。その手前のhの値を「実用的な最適値」として採用する、といった経験的なアプローチが実際の現場では重要です。