• ベストアンサー

有効桁数が大きくなると誤差が大きくなる

atomicmoleculeの回答

  • ベストアンサー
回答No.4

だいぶ昔に数値計算をしたくらいで忘れていますが、微分方程式をルンゲクッタで解くときには、誤差はある程度評価できるのでやってみたらよいと思います。 いかに私だったらこうやる(やった)という事を書いておきます。 1)つまり一階の時間発展Δtでどの程度誤差がでるかをまず調べます。これはテイラー展開を用いて評価します。 2)その誤差をΔtをnステップに分けてやっているので、積もったらどうなるかを評価してください。単純に各ステップの誤差を足すというのでよかったかどうかもう忘れててしまいました。単純に足すのは確かに保守的な誤差の評価ではありますが、実際にそれほど誤差は大きくないかもしれませんし・・・・そこに関して私の知識は及びませんので本を見てください。 3)ついでに数値計算での数値の丸め誤差がどうなるかも調べておく必要があります。 4)これらの誤差を知った上で、通常はテストランをして、これらのことを確認した後に本当の計算をはじめます。テストランでは、解析的に答えが分っている簡単な微分方程式などで誤差の評価まで含めて予想どうりプログラムが動くか確認してください。 #2,3の方が指摘しているように数字の有効桁の事も調べておく必要があります。フォートランなら通常8realだっけ、8桁くらいの精度を持っているんだと思いますが、 私がプログラムを書いて問題をといた場合には、先生のプログラムと6桁の精度であわせることがチェックの方針でした。数値がぴったり6桁合わないとやり直し、プログラムを見直せという感じでしたし、最終的には6桁全てあったと思います。簡単な微分方程式を解くくらいならそれくらいの精度は出せるはずです。

関連するQ&A

  • 誤差と最小二乗法

    単振り子の振れの大きさを小さくし、 振り子の長さLと周期Tを5通りほど計測しました。 そこでT=2π√(L/g)⇔g=4π^2L/T^2から 重力加速度を5通り求めました。 結果、どれも相対誤差0.3%以内で、 どれもマイナスの誤差になりました。 次にT=2π√(L/g)⇔T=(2π/√g)*√Lとし、 √Lをx軸に、Tをy軸にとり、(2π/√g)を傾きとするグラフを描きました。 ここで、最小二乗法よりグラフの傾きを求め、 そこから重力加速度gを求めたところ、 相対誤差が3%になり、さらにそれはプラスの誤差でした。 そこで質問です。 最小二乗法を用いるのは今回が初めてなんですが、 このように測定値を単体で考えたときと、 測定値をまとめて最小二乗法で考えたときとで、 こんなにも誤差が変わるのはよくあることですか? それとも計算に誤りがあるのでしょうか。 よろしくお願いします。

  • 誤差と相対誤差とは

    π=3.141592653・・・ の近似が22/7だとしたときの 誤差と相対誤差を有効数字3ケタで表しなさいという問題の 解法を教えてください

  • 試行回数を増やせば誤差は減りますか?

    お世話になっています。 現在振り子を用いて重力加速度を求める実験をしているのですが、 実験結果の考察でどのようにしたら誤差を少なく出来るかを考えるのに苦労しています。 私は統計を勉強したことがないのですが、ネットで調べて ・実験結果の標準偏差を誤差とする ・T=2π√(l/g)より、仮にT又はlの誤差を0とおき、各成分のgの誤差への寄与率を求める とするのがいいようだということはわかりました(用語を間違っているかもしれませんが)。 さて、ここでlの誤差はlを長くすれば相対的に誤差が小さくなるのではないか(人間が物差しで長さを計る場合)と予想できました。 しかしTの誤差(ストップウォッチで計測)を減らす方法がわかりません。 試行回数を増やせばその平均が真の値に近づくことは感覚的にわかるのですが、理論的にはそうなるのでしょうか? そしてTの誤差を減らしたい場合試行回数を増やせばいい、と言えるのでしょうか? よろしくお願いします。

  • 相対的な誤差(厳密には違い?)について質問があります。

    相対的な誤差(厳密には違い?)について質問があります。 先日、とある実験を行いました。 その結果として真数グラフにおいて、ある直線Aを得ることができました。 最小二乗法を用いて傾きも求めることができました。 その傾きが-0.21でした。(添付画像参照) 横軸も縦軸も目盛に一致してはいない中途半端な数字です。 しかし、理論式は傾きが-0.27であります。 この理論式は横軸は目盛に一致している数字です。(縦軸は中途半端) この場合、理論式との誤差(本来の使い方と間違っているのは承知の上あえて使います・・・) を求めたいのですがどうすれば正しい評価ができるでしょうか? 考えた方法は2つあります。 1つは2つの傾きから誤差を出す方法です。 その場合、 (1-((-0.21)/(-0.27)) )×100 =20 となり、20%程度の誤差ってことになってしまいます。 しかし、あまりにも大きい誤差です。 もう一つの方法が相対誤差を用いる方法です。 実験値X―理論値Y = W のWを求め、理論値Yで割り ( W ÷ Y )×100 = G とする式より相対誤差を1つ1つの値で求めてみました。 すべての値で0.1~0.6%ほどとなりました。 どちらの誤差が正しいのでしょうか? 傾きで誤差を求めるのはやや抵抗があります。 というか、正しい気がしません。 一方、相対誤差で求める方法にも納得できていません。 理論値と実験値で、縦軸の値を使って相対誤差を求めました。 しかし、理論値は目盛にぴったりですが、実験値はそうではありません。 つまり、相対誤差を求めるには横軸の値が 実験値と理論値では違いがあります。 したがって、この相対誤差の方法も正しいとは思えません。 まあ、実験値は理論値になるようになるべく横軸を目盛にあうような 整数にしようとして測定したので、(ほとんど整数にはならず、近い値を取った) 横軸は近い値なのですが・・・・ どのようにして誤差を求めたらよいのでしょうか?

  • 有効桁数の数え方・誤差

    actionscriptをやっているのですが、有効桁数の数え方がよくわかりません。 たとえばNumber(有効桁数15桁)で public function sample() { var tf : TextField = new TextField(); var suuji : Number = 0.999; var suuji2 : Number = 1.001; var kekka : Number; kekka = suuji2 - suuji; tf.text = "" suuji2 + "-" suuji + "=" + kekka; } というものを実行させた場合kekkaが0.0019999999999998908になるのですが、この際の各々の変数の有効桁数は suuji 3桁 suuji2 4桁 kekka 0桁 という解釈で良いのでしょうか? そしてこの場合は桁落ちが起きていると言えるのでしょうか? また、この際にkekkaに誤差がでるのはNumberの有効桁数が15桁であるため、それ以降の桁に勝手に数字が入れられるということでしょうか? (0.999が勝手に0.9990000000000001092になる) もうひとつわからないことがあって、これは型の有効桁数を調べるプログラムなんですけど、 public function sample2() { var n : int; var sb : Number,sn : Number,t : Number; var tf : TextField = new TextField(); tf.border = true; tf.width = 400; tf.height = 300; n = 1; sn = t = 1.0; sb =0.0; while(sn != sb){ tf.appendText(n + ":" + sn + ":" + t + "\n"); n++; t = t / 10.0; sb = sn; sn = sb + t; } addChild(tf); } を実行すると 1:1:1 2:1.1:0.1 3:1.11:0.01 4:1.111:0.001 5:1.1111:0.0001 6:1.11111:0.00001 7:1.111111:0.0000010000000000000002 8:1.1111111:1.0000000000000002e-7 9:1.11111111:1.0000000000000002e-8 10:1.111111111:1.0000000000000003e-9 11:1.1111111111:1.0000000000000003e-10 12:1.11111111111:1.0000000000000003e-11 13:1.1111111111110001:1.0000000000000002e-12 14:1.1111111111111:1.0000000000000002e-13 15:1.11111111111111:1.0000000000000002e-14 16:1.1111111111111112:1e-15 と表示されるのですが、これだと16行目の有効桁数が16桁になっているのでしょうか? しかしそれだと型の有効桁数と矛盾するので、たまたま16桁目が1だっただけで有効桁数は15ということでしょうか? また、tに2や3の数字が勝手に入れらていますが、これも上記のように有効桁数ではない部分に勝手に数字を入れられているということでしょうか? 長文、また見辛く申し訳ありません。

  • 有効数字と誤差率

    初歩的な質問で恐縮ですが、調べても良く分かりませんでした。 次のような場合、有効数字はどのようになるのでしょうか。 例)真の値が1.50、測定値1.55(有効数字3桁)のとき、 誤差ε=1.55-1.50   =0.05 質問1 引き算のときは、このように桁落ちが発生するので気をつけよ、とまでは書いてあるのですが、どう気をつけるのでしょうか? 有効数字は1桁になってしまったということなのか、5.00×10^2と言う風に3桁に直しておきなさいと言うことなのでしょうか? 質問2 誤差率を求める場合、 誤差率=(0.05/1.50)×100%    =3.333・・・% 質問1の結果によりますが、この場合、何桁で書くのだ正しいですか? 有効数字1桁でしたら、3% 有効数字3桁でしたら、3.33% の、どちらかだと思うのですが。 宜しくお願いします。

  • 相対誤差について

    相対誤差について 相対誤差が実験値から理論値を引いて、理論値で割ったものだというのは分かりますが、その正負は必要なんでしょうか? 例えば 実験値 理論値 相対誤差[%] 相対誤差'[%]  90   100    -10       10  160   150    6.67      6.67  190   200     -5      5 であったとき、相対誤差は正負の判断をつけずに出せば良いのか、それとも正負をつけて出した方が良いのでしょうか? よろしくお願いします。

  • 相対誤差を使うのに適した場面

    今、実験器具の精度に関するレポートを書いています。 同じ対象をいろんな器具で測定して、それぞれの誤差について考えろという、高1の実験です。 これに対して考察をするときに、 ためしにどれが誤差がでかいというのを比べるために相対誤差を出してみました。 真の値には理論値を求めましたが、 メスシリンダーやメスフラスコや電子天秤などで起こる微妙な誤差を含めるだけで、 この理論値はまったく違うものになります。 まず最初に考えているのはpHの測定。 試験紙、試験液などは見方によって0.1~0.2の誤差が出てしまうと思います。 pHはどうがんばっても0~14なので、0.1の誤差というのはとても大きな割合をしめます。 また、pH4に対して誤差0.1とpH8に対して誤差0.1とを相対的に考えると大きな差がありますが、 はたして相対的に考えていいものなのかと思います。 理由はうまく説明できませんが、物理のようにはっきりと目に見えるような値でないから、ちょっと抵抗があるのかもしれません。 そこで質問なんですが、ここで相対誤差を話題に出すのはおかしいですか? よろしくお願いします。

  • 相対誤差について

    ある実験をして、測定値が4.357*10^4で、真の値が45000だとします。このように有効数字が異なる場合は、どのようにして相対誤差を求めたら良いのでしょうか??

  • 有効桁数について

    ある測定値75.88と測定値ではない任意の数15などを掛け合わしたとき 電卓でこの計算をすると1138.2となります これは掛け算なので有効桁数は演算における実数の有効桁数が一番少ないもので決まるので、75.88の有効桁数4桁をつかって1138とするのが正しいのでしょうか? それとも(測定値)×(測定値ではない値)のときは有効桁数は考慮しないで1138.2(1138.20?)とした方が良いのでしょうか? 15×75.88とは75.88を15回足すことなので、15回足し算した場合は、1138.20が有効数字の扱い方としては正しいですよね? 大変困っています・・・ 有効数字の扱い方はどうすればよいか教えてください、あまりにも小さい誤差は気にしないとかではなく、有効数字の扱い方はどうすればいいかを教えて欲しいです。