簡體   English   中英

如何在多個時間步中使用C#中的Runge-Kutta計算軌道?

[英]How Do I Compute Orbits Using Runge-Kutta in C# Over Multiple Timesteps?

作為我正在進行的項目的一部分,我需要使用4階Runge-Kutta方法模擬物體圍繞恆星的軌道。 對於RK4方法的每個實現,我都需要將此對象的位置和速度寫入.dat文件。

我的問題是,我無法弄清楚如何在隨后的時間間隔內重復整個方法,或者如何在每個步驟中將文件寫入文件,而又不會將內容與我沒有太多經驗的靜態和/或實例混淆。

是我能找到的最連貫的示例*,盡管我知道它不是針對軌道的,但我想以此為基礎來使框架正常工作。 當一切正常時,我想我會將其內容更改為更多類似這樣的內容

為了寫入.dat,我將示例的Run()函數修改為:

        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();
    }

其中,DataLine是公共靜態字符串。

然后,我在主腳本中包含以下功能:

//  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()可以正常工作,但是一旦取消對Update()的注釋,我就會遇到與它如何調用數據有關的各種問題。 所以我進去,嘗試使它成為靜態的,但是其他所有事情都會變成麻煩。 我不知道使用實例代替是否可以解決該問題,我完全不了解它們的工作方式。

我在這里有一個更明顯的解決方案嗎? 謝謝您對此事的幫助。 (順便說一句,有人可以澄清示例的target / dy_dt實際意味着什么嗎?)

*我最初使用C嘗試了數值食譜,但似乎已經過時了,而且我對C的了解比我想象的還要生銹。

我通過將所有內容放在相同的腳本和類中來解決了這個問題。 它有效,但似乎是一種欺騙的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM