丸め誤差 — CAE用語解説
理論と物理
丸め誤差の定義と発生源
「丸め誤差」とは、具体的にどういう現象を指すんですか?単に計算結果が少し違うだけ?
コンピュータが有限の桁数で実数を表現する際に生じる誤差だ。例えば、10進数の0.1を2進数で正確に表現できない。IEEE 754の倍精度(64ビット)では、約
CAEでは、その小さな誤差が実際の解析結果にどう影響するんですか?無視できるレベルじゃないの?
条件によっては無視できない。代表例は「悪条件問題」だ。剛性マトリクスの条件数が大きい、つまり
条件数が大きいと、なぜ丸め誤差が増幅されるのですか?
数値的に線形方程式
数値解法と実装
ソルバーにおける丸め誤差対策
ソフトウェアのソルバーは、丸め誤差をどうやって抑えているんですか?
主に二つのアプローチがある。第一は「スケーリング」だ。Ansys Mechanicalのデフォルト設定では、方程式を解く前に剛性マトリクスと荷重ベクトルを自動スケーリングし、数値のオーダーを揃える。これにより条件数を改善する。第二は「高精度演算」の利用だ。Intel Math Kernel Library (MKL)の一部のルーチンでは、内部で80ビット拡張精度(Intel FPUのレジスタ長)を用いて演算を実行し、最終結果だけを64ビットに戻す手法が採られる。
直接法ソルバーと反復法ソルバーで、丸め誤差への感受性は違いますか?
大きく異なる。直接法(例えば、スパース直接ソルバーのPARDISOやMUMPS)は、前進消去・後退代入の過程で丸め誤差が蓄積する。特にピボット選択が重要で、部分ピボット法を用いて誤差の増幅を抑える。一方、反復法(例えば、共役勾配法:CG法)は、残差ノルムの収束判定に丸め誤差が影響する。残差がマシンイプシロン
非線形解析では、収束判定に与える影響は?
非常に大きい。ニュートン・ラフソン法では、残差力と接線剛性マトリクスを計算するが、これらが丸め誤差レベルで振動すると、収束判定を満たせずに反復がループする「偽の非収束」が発生する。対策として、AnsysやAbaqusでは、力の収束基準(例えば、
実践ガイド
モデリングと設定での対策
ユーザーがモデリング段階で気をつけるべき、丸め誤差を悪化させる具体的なポイントは?
まず「単位系の混在」だ。SI単位系でモデリングする場合、長さ[m]、力[N]、ヤング率[Pa]を使う。ここで、[mm]と[N]、ヤング率[MPa]を使うと、剛性マトリクスの成分のオーダーが最大で
メッシュサイズが極端に小さい場合も問題ですか?
その通り。例えば、一辺1mの立方体を1mmの要素で切ると、要素数は10億個に近づく。要素剛性マトリクスの成分は非常に小さくなり、全体剛性マトリクスの対角項のオーダーもばらつく。これにより条件数が増大し、丸め誤差の影響を受けやすくなる。実務では、必要な精度を確保できる最大のメッシュサイズを選ぶことが重要だ。COMSOLのマニュアルでも、極端に細かいメッシュは数値誤差の源になり得ると警告している。
解析結果を比較するとき、「1e-10」のような微小な変位差が出た場合、それは丸め誤差とみなしていいですか?
状況によるが、目安はある。モデルの代表長さをL、代表変位をUとする。倍精度演算の相対誤差は
ソフトウェア比較
主要ソフトウェアのデフォルト挙動
Ansys、Abaqus、COMSOLで、丸め誤差対策のデフォルト設定に違いはありますか?
各社の哲学が反映されている。Ansys Mechanicalは「保守的」で、デフォルトの直接ソルバー(スパース直接法)では強力なピボット選択とスケーリングを適用し、安定性を最優先する。その代わり、メモリ使用量と計算時間が多くなりがちだ。Abaqus/Standardは、問題サイズとタイプに応じて自動で直接法か反復法を選択するが、反復法のデフォルト収束基準は比較的緩い
COMSOLはどうですか?マルチフィジックスが売りですが。
COMSOL Multiphysicsは、結合された物理場の方程式を一つの大規模な係数マトリクスとして扱う「完全結合型」がデフォルトだ。このマトリクスは条件数が悪化しやすいため、デフォルトで「定数スケーリング」と「変数スケーリング」の両方を適用する。また、PARDISOやMUMPSといった外部ソルバーライブラリを使用するが、その内部の「ピボット許容値」を調整して数値的安定性を確保している。ユーザーがこの値を厳しくしすぎると(例えば1e-12から1e-16へ)、丸め誤差でピボット失敗が多発する。
無償のオープンソースソルバー(CalculiX, Code_Aster)では、対策は弱いですか?
必ずしも弱いわけではないが、デフォルト設定が「研究者向け」で厳しい場合がある。例えば、Code_Asterの反復ソルバー(PETSc経由)の収束基準は、相対残差ノルムで
トラブルシューティング
よくあるエラーとその解釈
「ピボットが小さすぎる」や「マトリクスが特異に近い」というエラーは、丸め誤差と関係ありますか?
大いに関係する。直接法ソルバーは、ガウスの消去法の過程で対角成分(ピボット)で割り算を行う。丸め誤差のため、理論上は正則なマトリクスでも、計算上はピボットの値が非常に小さく(例えば
非線形解析で、荷重ステップを極端に小さくすると、かえって収束しなくなることがあるのはなぜ?
まさに丸め誤差が原因の一つだ。ステップが小さすぎると、反復ごとの変位増分や残差力の変化が丸め誤差のノイズレベルに近づく。すると、収束判定ロジックが「変化がない」と誤認したり、逆にノイズで判定が振動したりする。Abaqusのマニュアルでは、初期増分サイズを小さくしすぎないように警告している。目安として、第一ステップでの変位が、モデル全体の代表長さの
異なるハードウェア(CPU)やOSで同じモデルを計算すると、結果が微妙に違うことがあります。これも丸め誤差?
その可能性が高い。IEEE 754規格は演算結果の「精度」を定めるが、「正確なビットパターン」までは規定していない部分がある。特に、超越関数(sin, cos, exp)の計算や、内積演算の順序(CPUの並列化による)が異なると、丸め誤差の発生の仕方が変わる。Intel CPUとAMD CPU、あるいは同じCPUでも使用する数学ライブラリ(MKL vs. OpenBLAS)の違いで、最下位ビットレベルで結果が分岐する。CAEのベンチマークテストでは、この差異を考慮し、相対誤差が
丸め誤差を完全に排除する方法はないのですか?四倍精度演算を使えば?
四倍精度(128ビット、約34桁の10進精度)を使えば丸め誤差は劇的に減るが、計算コストは数倍から数十倍に跳ね上がり、メモリ使用量も倍増する。現状、汎用CAEソフトウェアで四倍精度をフルサポートしているものはほとんどない。ただし、特定の領域では利用が始まっている。例えば、Ansysの一部の専門ソルバーや、高精度が要求される宇宙機軌道計算ではオプションとして存在する。根本的な解決策は「丸め誤差を理解し、悪条件問題をモデリング段階で回避する」ことだ。数値解析には必ず誤差が伴うという前提が重要である。
関連トピック
なった
詳しく
報告