void RK4_step(double delta_t, double t, double *x, double *v){ double k1, k2, k3, k4; double l1, l2, l3, l4; double x_in; double v_in; x_in = *x; v_in = *v; k1 = deriv_x(t,x_in,v_in); l1 = deriv_v(t,x_in,v_in); k2 = deriv_x(t + delta_t*0.5, x_in + k1*delta_t*0.5, v_in + l1*delta_t*0.5); l2 = deriv_v(t + delta_t*0.5, x_in + k1*delta_t*0.5, v_in + l1*delta_t*0.5) ; k3 = deriv_x(t + delta_t*0.5, x_in + k2*delta_t*0.5, v_in + l2*delta_t*0.5); l3 = deriv_v(t + delta_t*0.5, x_in + k2*delta_t*0.5, v_in + l2*delta_t*0.5); k4 = deriv_x(t + delta_t, x_in + k3*delta_t, v_in + l3*delta_t); l4 = deriv_v(t + delta_t, x_in + k3*delta_t, v_in + l3*delta_t); x_in += (k1/6.0 + k2/3.0 + k3/3.0 + k4/6.0)*delta_t; v_in += (l1/6.0 + l2/3.0 + l3/3.0 + l4/6.0)*delta_t; *x = x_in; *v = v_in; }
void leapfrog_step(double delta_t, double t, double *x, double *v){ double x_in; double v_in; x_in = *x; v_in = *v; /*Third order*/ x_in += 1.0 * v_in * delta_t; v_in += -1.0/24.0 * deriv_v(t, x_in, v_in) * delta_t; x_in += -2.0/3.0 * v_in * delta_t; v_in += 3.0/4.0 * deriv_v(t, x_in, v_in) * delta_t; x_in += 2.0/3.0 * v_in * delta_t; v_in += 7.0/24.0 * deriv_v(t, x_in, v_in) * delta_t; /*Inverted x_in += 0.5 * v_in * delta_t; v_in += 1.0 * deriv_v(t, x_in, v_in) * delta_t; x_in += 0.5 * v_in * delta_t; */ /*Normal v_in += 0.5 * deriv_v(t, x_in, v_in) * delta_t; x_in += 1.0 * v_in * delta_t; v_in += 0.5 * deriv_v(t, x_in, v_in) * delta_t; */ *x = x_in; *v = v_in; }
void leapfrog_step(double delta_t, double t, double *x, double *v){ double x_in; double v_in; x_in = *x; v_in = *v; v_in += 1.0 * deriv_v(t,x_in,v_in) * delta_t; x_in += -1.0/24.0 * v_in * delta_t; v_in += -2.0/3.0 * deriv_v(t,x_in,v_in) * delta_t; x_in += 3.0/4.0 * v_in * delta_t; v_in += 2.0/3.0 * deriv_v(t,x_in,v_in) * delta_t; x_in += 7.0/24.0 * v_in * delta_t; /*kick*/ // v_in += 0.5 * deriv_v(t,x_in,v_in) * delta_t; /*drift*/ // x_in += 1.0 * v_in * delta_t; /*kick*/ // v_in += 0.5 * deriv_v(t, x_in, v_in) * delta_t; *x = x_in; *v = v_in; }
void RK4_step(double delta_t, double e, double t, double *x, double *v,double *x3,double *v3){ double k1, k2, k3, k4; double l1, l2, l3, l4; double m1, m2, m3, m4; double n1, n2, n3, n4; double x_in; double v_in; double x3_in; double v3_in; x_in = *x; v_in = *v; x3_in = *x3; v3_in = *v3; k1 = deriv_x(t,x_in,v_in); l1 = deriv_v(t,x_in,v_in,e); k2 = deriv_x(t + delta_t*0.5, x_in + k1*delta_t*0.5, v_in + l1*delta_t*0.5); l2 = deriv_v(t + delta_t*0.5, x_in + k1*delta_t*0.5, v_in + l1*delta_t*0.5,e) ; k3 = deriv_x(t + delta_t*0.5, x_in + k2*delta_t*0.5, v_in + l2*delta_t*0.5); l3 = deriv_v(t + delta_t*0.5, x_in + k2*delta_t*0.5, v_in + l2*delta_t*0.5,e); k4 = deriv_x(t + delta_t, x_in + k3*delta_t, v_in + l3*delta_t); l4 = deriv_v(t + delta_t, x_in + k3*delta_t, v_in + l3*delta_t,e); x_in += (k1/6.0 + k2/3.0 + k3/3.0 + k4/6.0)*delta_t; v_in += (l1/6.0 + l2/3.0 + l3/3.0 + l4/6.0)*delta_t; m1 = deriv_x3(t,x3_in,v3_in); n1 = deriv_v3(t,x3_in,x_in,v_in,e); m2 = deriv_x3(t + delta_t*0.5, x3_in + m1*delta_t*0.5, v3_in + n1*delta_t*0.5); n2 = deriv_v3(t + delta_t*0.5, x3_in + m1*delta_t*0.5, x_in + k1*delta_t*0.5, v_in + l1*delta_t*0.5,e) ; m3 = deriv_x3(t + delta_t*0.5, x3_in + m2*delta_t*0.5, v3_in + n2*delta_t*0.5); n3 = deriv_v3(t + delta_t*0.5, x3_in + m2*delta_t*0.5, x_in + k2*delta_t*0.5, v_in + l2*delta_t*0.5,e); m4 = deriv_x3(t + delta_t, x3_in + m3*delta_t, v3_in + n3*delta_t); n4 = deriv_v3(t + delta_t, x3_in + m3*delta_t, x_in + k3*delta_t, v_in + l3*delta_t,e); x3_in += (m1/6.0 + m2/3.0 + m3/3.0 + m4/6.0)*delta_t; v3_in += (n1/6.0 + n2/3.0 + n3/3.0 + n4/6.0)*delta_t; *x = x_in; *v = v_in; *x3 = x3_in; *v3 = v3_in; }
void leapfrog_step(double delta_t,double e, double t, double *x, double *v,double *x3,double *v3){ double x_in,x3_in; double v_in,v3_in; x_in = *x; v_in = *v; x3_in=*x3; v3_in=*v3; x_in += 1/(2*(2-pow(2,1/3)))* v_in * delta_t; v_in += 1/(2-pow(2,1/3)) * deriv_v(t,x_in,v_in,e) * delta_t; x_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * v_in * delta_t; v_in += -pow(2,1/3)/(2-pow(2,1/3)) * deriv_v(t, x_in, v_in,e) * delta_t; x_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * v_in * delta_t; v_in += 1/(2-pow(2,1/3)) * deriv_v(t, x_in, v_in,e) * delta_t; x_in += 1/(2*(2-pow(2,1/3))) * v_in * delta_t; x3_in += 1/(2*(2-pow(2,1/3))) * v3_in * delta_t; v3_in += 1/(2-pow(2,1/3)) * deriv_v3(t,x3_in,x_in,v_in,e) * delta_t; x3_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * v3_in * delta_t; v3_in += -pow(2,1/3)/(2-pow(2,1/3)) * deriv_v3(t, x3_in,x_in, v_in,e) * delta_t; x3_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * v3_in * delta_t; v3_in += 1/(2-pow(2,1/3)) * deriv_v3(t,x3_in,x_in,v_in,e) * delta_t; x3_in += 1/(2*(2-pow(2,1/3))) * v3_in * delta_t; /*v_in += 1/(2*(2-pow(2,1/3)))* deriv_v(t,x_in,v_in,e) * delta_t; x_in += 1/(2-pow(2,1/3)) * v_in * delta_t; v_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * deriv_v(t, x_in, v_in,e) * delta_t; x_in += -pow(2,1/3)/(2-pow(2,1/3)) * v_in * delta_t; v_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * deriv_v(t, x_in, v_in,e) * delta_t; x_in += 1/(2-pow(2,1/3)) * v_in * delta_t; v_in += 1/(2*(2-pow(2,1/3)))* deriv_v(t, x_in, v_in,e) * delta_t; v3_in += 1/(2*(2-pow(2,1/3))) * deriv_v3(t,x3_in,x_in,v_in,e) * delta_t; x3_in += 1/(2-pow(2,1/3)) * v3_in * delta_t; v3_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * deriv_v3(t, x3_in,x_in, v_in,e) * delta_t; x3_in += -pow(2,1/3)/(2-pow(2,1/3)) * v3_in * delta_t; v3_in += (1-pow(2,1/3))/(2*(2-pow(2,1/3))) * deriv_v3(t,x3_in,x_in,v_in,e) * delta_t; x3_in += 1/(2-pow(2,1/3)) * v3_in * delta_t; v3_in += 1/(2*(2-pow(2,1/3))) * deriv_v3(t,x3_in,x_in,v_in,e) * delta_t;*/ *x = x_in; *v = v_in; *x3=x3_in; *v3=v3_in; }
/* for findSplit */ void AzReg_TsrSib::reset_forNewLeaf(const AzTrTree_ReadOnly *inp_tree, const AzRegDepth *inp_reg_depth) { tree = inp_tree; forNewLeaf = true; focus_nx = -1; reg_depth = inp_reg_depth; int node_num = tree->nodeNum(); /*--- set v ---*/ v_v.reform(node_num); int nx; for (nx = 0; nx < node_num; ++nx) { if (!tree->node(nx)->isLeaf()) continue; deriv_v(tree, nx, false, NULL, &v_v); } reset_values(); }
/* for findSplit */ void AzReg_TsrSib::reset_forNewLeaf(int inp_focus_nx, const AzTrTree_ReadOnly *inp_tree, const AzRegDepth *inp_reg_depth) { tree = inp_tree; forNewLeaf = true; focus_nx = inp_focus_nx; reg_depth = inp_reg_depth; int node_num = tree->nodeNum(); /*--- set derivatives w.r.t. the weight of the new leaf ---*/ av_dv.reset(node_num); AzSvect *v_dv = av_dv.point_u(focus_nx); deriv_v(tree, focus_nx, forNewLeaf, v_dv, NULL); if (v_v.rowNum() != node_num) { throw new AzException("AzReg_TsrSib::sib_reset_forNewLeaf", "v_v is not initialized"); } update(); }
/* for optimization */ void AzReg_TsrSib::reset(const AzTrTree_ReadOnly *inp_tree, const AzRegDepth *inp_reg_depth) { tree = inp_tree; forNewLeaf = false; focus_nx = -1; reg_depth = inp_reg_depth; if (tree == NULL) { throw new AzException("AzReg_TsrSib::reset", "null tree"); } int node_num = tree->nodeNum(); av_dv.reset(node_num); v_v.reform(node_num); int nx; for (nx = 0; nx < node_num; ++nx) { if (!tree->node(nx)->isLeaf()) continue; deriv_v(tree, nx, false, av_dv.point_u(nx), &v_v); } reset_values(); }