スキップしてメイン コンテンツに移動

投稿

12月, 2017の投稿を表示しています

制限三体問題シミュレータ by Rust

// 制限三体問題シミュレータ // // 座標系は連星系の重心を原点とし, 平均運動nで回転する系. // 従ってe=0のとき連星は静止するが, e \neq 0も計算できる. // 連星の長半径aと平均運動nが1となる単位系を用いる. // // 必要なパラメータは // 連星の質量比 q = M_2 / M_1 // 連星の離心率 e // 計算終了時刻 t_end // と初期条件 x: [f64;3], v: [f64;3] の計九つ. 上ふたつを // コマンドライン引数としてセットすることもできる. // // use std::env; // コマンドライン引数を使用する場合はコメントアウトを外す use std::f64::consts::PI; fn main() { // パラメータの設定 // let args: Vec = env::args().collect(); // let q: f64 = args[1].parse:: ().unwrap(); // let e: f64 = args[1].parse:: ().unwrap(); let q: f64 = 0.01; let e: f64 = 0.; let t_end: f64 = 128.*PI; // 初期条件 let mut t: f64 = 0.; let mut x: [f64;3] = [ 0.5-q/(1.+q), 3f64.sqrt()/2., 0. ]; let mut v: [f64;3] = [ 0., 0., 0. ]; println!("{} {} {} {}", t, x[0], x[1], x[2] ); // アウトプット間隔 let t_output: f64 = 0.0625; let mut t_record: f64 = t_output; // 数値積分 while t < t_end { rk4( &mut t, &mut x, &mut v, [q,e] ); if t >= t_record { println!("{} {} {} {}", t, x[0], x[