1- // fixes a calculation error in planetary_motion_star.stan.
2-
31functions {
4- array [] real ode(real t, array [] real y, array [] real theta,
5- array [] real x_r, array [] int x_i) {
6- vector [2 ] q = to_vector( {y[1 ], y[2 ]});
7- vector [2 ] s = to_vector( {theta[2 ], theta[3 ]});
2+ vector ode(real t, vector y, real k, vector star, real m) {
3+ vector [2 ] q = y[1 : 2 ];
4+ vector [2 ] p = y[3 : 4 ];
85
9- real r_cube = pow(dot_self( q - s), 1.5 );
10- vector [2 ] p = to_vector( {y[3 ], y[4 ]});
11- real m = x_r[1 ];
12- real k = theta[1 ];
6+ real r_cube = pow(dot_self( q - star), 1.5 );
137
148 vector [4 ] dydt;
15- dydt[1 : 2 ] = p . / m;
16- dydt[3 : 4 ] = - k * (q - s) . / r_cube;
9+ dydt[1 : 2 ] = p / m;
10+ dydt[3 : 4 ] = - k * (q - star) / r_cube;
1711
18- return to_array_1d( dydt) ;
12+ return dydt;
1913 }
2014}
2115data {
@@ -29,7 +23,6 @@ transformed data {
2923 real t0 = 0 ;
3024 int n_coord = 2 ;
3125 real m = 1.0 ;
32- array [0 ] int x_i;
3326
3427 real < lower =0 > sigma_x = sigma;
3528 real < lower =0 > sigma_y = sigma;
@@ -41,17 +34,13 @@ transformed data {
4134}
4235parameters {
4336 real < lower =0 > k;
44- array [n_coord] real q0;
45- array [n_coord] real p0;
46- array [n_coord] real star;
37+ vector [n_coord] q0;
38+ vector [n_coord] p0;
39+ vector [n_coord] star;
4740}
4841transformed parameters {
49- array [n_coord * 2 ] real y0 = append_array( q0, p0);
50- array [n_coord + 1 ] real theta = append_array( {k}, star);
51-
52- array [n, n_coord * 2 ] real y = integrate_ode_rk45( ode, y0, t0, time, theta,
53- {m}, x_i, rel_tol,
54- abs_tol, max_steps);
42+ vector [n_coord * 2 ] y0 = append_row( q0, p0);
43+ array [n] vector [n_coord * 2 ] y = ode_rk45_tol( ode, y0, t0, time, rel_tol, abs_tol, max_steps, k, star, m);
5544}
5645model {
5746 k ~ normal (1 , 0.001 ); // prior derive based on solar system
0 commit comments