アプリ版:「スタンプのみでお礼する」機能のリリースについて

振り子のシミュレーションで、Δtを小さくしていくと相対誤差が大きくなるという結果が下のように出てしまいました。これはどのように結論付ければよいのでしょうか?有効数字はΔt=0.001で3桁、0.0001で4桁、
0.00001で5桁としました
よろしくお願いします

理論値 1.6403

Δt 測定データ  相対誤差
0.0011.64   0.0183
0.00011.643   0.1646
0.000011.6434   0.18899

A 回答 (4件)

だいぶ昔に数値計算をしたくらいで忘れていますが、微分方程式をルンゲクッタで解くときには、誤差はある程度評価できるのでやってみたらよいと思います。


いかに私だったらこうやる(やった)という事を書いておきます。


1)つまり一階の時間発展Δtでどの程度誤差がでるかをまず調べます。これはテイラー展開を用いて評価します。

2)その誤差をΔtをnステップに分けてやっているので、積もったらどうなるかを評価してください。単純に各ステップの誤差を足すというのでよかったかどうかもう忘れててしまいました。単純に足すのは確かに保守的な誤差の評価ではありますが、実際にそれほど誤差は大きくないかもしれませんし・・・・そこに関して私の知識は及びませんので本を見てください。

3)ついでに数値計算での数値の丸め誤差がどうなるかも調べておく必要があります。

4)これらの誤差を知った上で、通常はテストランをして、これらのことを確認した後に本当の計算をはじめます。テストランでは、解析的に答えが分っている簡単な微分方程式などで誤差の評価まで含めて予想どうりプログラムが動くか確認してください。


#2,3の方が指摘しているように数字の有効桁の事も調べておく必要があります。フォートランなら通常8realだっけ、8桁くらいの精度を持っているんだと思いますが、
私がプログラムを書いて問題をといた場合には、先生のプログラムと6桁の精度であわせることがチェックの方針でした。数値がぴったり6桁合わないとやり直し、プログラムを見直せという感じでしたし、最終的には6桁全てあったと思います。簡単な微分方程式を解くくらいならそれくらいの精度は出せるはずです。
    • good
    • 0

>有効数字はΔt=0.001で3桁、0.0001で4桁、0.00001で5桁としました



ここが違います。

Δt=0.001=1.000000…×10^{-3}
Δt=0.0001=1.000000…×10^{-4}
Δt=0.00001=1.000000…×10^{-5}

なので、どのΔtでも計算機内部で表現できる範囲(15桁ぐらい)の有効数字を持ってます。

ということで、どのΔtの測定データでも、理論値と同じ程度まで有効数字を取って、Δtの違いによる影響を調べる必要があります。
    • good
    • 0

dtが0.001での値0.0183が有効数字が3桁なら、


もっと細かく計算すれば(有効数字を増やせば)
0.018349かもしれないし0.018251かもしれませんから、
この値と理論値の4桁め以降の数字との比較は、何の意味も持ちません。
(1.6403-1.64=0.00003という計算は無意味です)
dtが0.0001のときや0.00001のときと比較したいのなら
dtが0.001の時も有効数字を5桁にしてみてください。
dtが小さくなっているのに相対誤差が増えるというのはまずありえないと思ってください。
    • good
    • 0

数値計算は細かくすればよいというものではありません。

誤差の伝播や、誤差がつもって大きくなる可能性を検討してください。私もくわしくないので、数値計算における誤差の取り扱いを書いた本をよんで勉強することをすすめます。すみませんが勉強不足で質問には答えられません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!