• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラミング(c言語))

問題解決:プログラミング(c言語)でのオイラー法での2階微分方程式の解法がうまくいかない

このQ&Aのポイント
  • プログラミング(c言語)で使用しているオイラー法を用いた2階微分方程式の解法に問題があります。
  • プログラム内の変数xとvyの値が変化しないため、正しく解を求めることができません。
  • 問題の原因を特定するために、プログラムの各行を詳しく検証する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6849/9742)
回答No.1

Gが10の-11乗オーダー Mが10の30乗オーダー x0は10の11乗オーダー vy0が10の4乗オーダー dtは10の-2乗オーダー えーっと。 double は有効数字15桁ほどなので、15乗オーダー以上違う数値同士の演算が正確に出来ません。 1.00000000000001 に 0.00000000000001 を足すと 1.00000000000002 になりますが、 1.00000000000001 に 0.000000000000001 を足しても 1.00000000000001 のまま変化しない、と言うことがあったりします。 1.000000000000011 が、表現できないので。 (16桁目は不正確ながら行けたかも…でも17・18桁目となるともうランダムに?) 数式的には正しくても、C言語の演算精度(15桁)のせいで計算できていない、という気がします。 ご質問のプログラムを眺めてるだけなので、どこでそれが起こってるのか突き止めてませんが。 オーダーの近い所で計算を済ませられるよう、プログラミングに工夫が必要かもしれません。

mothiduki
質問者

お礼

なるほど、自分では全く思いつかないことでした。工夫して再チャレンジしてみます。

関連するQ&A