桁落ちらしきものを見つけてしまった
学校で有限要素法の練習課題をもらったので取り組んでいたのですが、連立方程式のソルバー(これはソースコードが与えられる)があからさまに狂った値を返してくるので困ります。CASPAR003です、こんばんは。
言語はFORTRANですが
- マトリックスを大きくすると精度が落ちる
- realを全部doubleに置き換えたらまともな結果が来る
あたりから考えると桁落ちで間違いないはず。毎年このルーチンで演習をやっているそうですが、去年までの計算は大丈夫なんだろうか…。ガウスの消去法を適用しているっぽいことはわかるんだけど、ちょっと手順が特殊なので追いかけるのも大変であんまりやりたくないです。
そんな研究室のはなし。
以下、超おおざっぱな桁落ち解説。
たとえば3.141593という値の入った変数aがあるときa = a - 3.141590
とするとaには当然0.000003が入ります。あら不思議。7桁も精度があったのに一瞬にして有効数字が1桁になってしまいました。
数値計算をするときには非常に近い2つの数の引き算は極力避けないと、知らない間に有効数字ががっつり減少してとんでもない答えが返ってくることがありますよ、という話。引き算は恐ろしいのです。
投稿者 | CASPAR003 |
投稿時刻 | 23:36 |
カテゴリー | 雑記 |
コメント | 0 件 |
トラックバック | 0 件 |
記事へのリンク | http://www.caspar003.info/delta/archive/2009/05/13/2336.html |
コメント
- 投稿者
トラックバック
- トラックバック