2017-01-23 9 views
0

私が取り組んでいるプロジェクトの一環として、4次ルンゲクッタ(Runge-Kutta)法を使って星周りのオブジェクトの軌道をシミュレートする必要があります。このオブジェクトの位置と速度をRK4メソッドの実装ごとに.datファイルに書き込む必要があります。複数のタイムステップにわたってRunge-KuttaをC#で使用して軌道を計算するにはどうすればよいですか?

私の問題は、後続の時間間隔でメソッド全体を繰り返す方法や、統計やインスタンスと混乱させることなく各ステップでファイルに書き込む方法を考えることができないことです。との経験。

This私が見つけることができた*と私はそれが軌道のためではないことを知っている間、私はフレームワークを働かせるために基礎として使用したいと思いました。すべてがうまくいくと、内容をthisのように変更すると思います。

DataLineのは、公共の静的な文字列である
 public void Run() 
    { 
     while (x < target) { 
      y = RungeKutta.rk4(x, y, dx, dy_dt); 
      x += dx; 
     } 
     print("x = " + x + ", y = " + y); 
     DataLine = x + " " + y; 
     DustHandler.DataWriter(); 
    } 

.datファイルに書き込むには、私はに例のファイル名を指定して実行()関数を変更しました。

// void Update() { 
//  if(Input.GetButtonDown("Space")==true) { 
//   Transformers.Equation e = new Transformers.Equation(Transformers.Equation.x, Transformers.Equation.y, 0.0001, 1.0); 
//   e.Run(); 
//  } 
// } 

public static void DataWriter() { 
    using (StreamWriter writetext = new StreamWriter("Orbit.dat")) 
    { 
     writetext.Write(Transformers.Equation.DataLine); 

     writetext.Close(); 
    } 
} 

さて、DataWriter()は正常に動作しますが、できるだけ早くI非コメント更新()のように、私はに関連する問題のすべての種類を取得:

私はその後、私のメインのスクリプトで以下の機能が含まれてデータの呼び出し方法だから、私は中に入って、それが静的であれば何でもしようとするが、それ以外のものはひそかに動く。代わりにインスタンスを使用するとそれを修正するかどうかわかりませんし、それらがどのように動作するかに慣れていません。

私はここに見下ろすだより明白な解決策はありますか?私はこの問題の助けに感謝します。 (ちなみに、例題のターゲット/ dy_dtが実際に意味するものを明確にすることができますか?)

*私はもともと数値レシピをCで試しましたが、それは絶望的に古くなったように見えました。

+0

注意。これは、事実上、 'k2'の計算における第2引数が' y + 0.5 * dx * dx * f(x、y) 'であることを意味します。 – LutzL

+0

@LutzL私は彼らがタイムステップのために 'dt'の代わりに' dx'を使っていることに気がつきました。しかし、はい、私はそこにエラーを見ることができます。しかし、いくつかの数字が残っています。私が解決しようとしている主なことは、データを書いたり、プロセスを繰り返すことです。その後、元の方程式を軌道のものに置き換え、 'k'値を修正します。それを指摘していただきありがとうございます。 – Kratos

答えて

0

私はちょうど同じスクリプトやクラスのすべてを置くことによって、問題を解決しました。それは動作しますが、それを行うにはちょっとした方法のようです。それはk2`と `` k3`内の引数の内側にスロープの要因として `dx`と` halfdx`の両方を使用して、あなたが見つかったコードは、間違っていること

関連する問題