void main() { double y0=0;//初始条件 double A[3],B[3],step; //A存放两题的左端点,B为右端点 step=1./8; //初始步长0.1 A[0]=0; B[0]=3; A[1]=0; B[1]=1; A[2]=0; B[2]=3; double yc=1; FILE*fp;//定义指向文件的指针变量fp fp=fopen("c.txt","w+"); RK(fc,yc,A[0],B[0],step,fp); //调用RK函数求解第一题微分方程 // fprintf(fp,"The answer of question B\n"); // RK(fb,y0,A[1],B[1],step,fp); //调用RK函数求解第二题微分方程 fclose(fp); //关闭文本 getchar(); }
int main(int argc, char **argv) { double h = atof(argv[1]); double t_final= 1.5*pow(10,6); int n_points = (int)((t_final+h))/(h); double t[n_points]; double R[n_points]; double P[n_points]; double v[n_points]; t[0]=0.0; R[0]=1.7*pow(10,12); v[0]=0; P[0]=5.6*pow(10,5); RK(t,R,v,P,h,n_points,"0.dat"); return 0; }
int exec_cmd_RK(char *t,int l_t) { //RK char **args=(char **)malloc(8*sizeof(char *)); int c; trunc_str(&t,&l_t); parse_args(t,l_t,args,&c); printf("solving initial value problem\n-\t-\t-\n"); node f,x0,y0,x1; store_fn(args[0],strlen(args[0]),&f); store_fn(args[3],strlen(args[3]),&x0); store_fn(args[4],strlen(args[4]),&y0); store_fn(args[5],strlen(args[5]),&x1); double result = RK ( &f, add_var(args[1]), add_var(args[2]),x0.method->eval_v(&x0), y0.method->eval_v(&y0),x1.method->eval_v(&x1),atoi(args[6]) ); printf("\n%s(%f)=%f",args[2],x1.method->eval_v(&x1),result); printf("\n-\t-\t-\n"); return 0; }
void Encrypt(uint8_t *block, uint8_t *roundKeys) { uint32_t* blk = (uint32_t*) block; uint32_t* rk = (uint32_t*) roundKeys; int8_t i; uint32_t b0 = blk[0]; uint32_t b1 = blk[1]; uint32_t b2 = blk[2]; uint32_t b3 = blk[3]; for (i = 0; i < NUMBER_OF_ROUNDS; i += 4, rk += 4) { b3 = rotr((b2 ^ RK(rk, 3)) + (b3 ^ RK(rk, 1)), 3); b2 = rotr((b1 ^ RK(rk, 2)) + (b2 ^ RK(rk, 1)), 5); b1 = rotl((b0 ^ RK(rk, 0)) + (b1 ^ RK(rk, 1)), 9); rk += 4; b0 = rotr((b3 ^ RK(rk, 3)) + (b0 ^ RK(rk, 1)), 3); b3 = rotr((b2 ^ RK(rk, 2)) + (b3 ^ RK(rk, 1)), 5); b2 = rotl((b1 ^ RK(rk, 0)) + (b2 ^ RK(rk, 1)), 9); rk += 4; b1 = rotr((b0 ^ RK(rk, 3)) + (b1 ^ RK(rk, 1)), 3); b0 = rotr((b3 ^ RK(rk, 2)) + (b0 ^ RK(rk, 1)), 5); b3 = rotl((b2 ^ RK(rk, 0)) + (b3 ^ RK(rk, 1)), 9); rk += 4; b2 = rotr((b1 ^ RK(rk, 3)) + (b2 ^ RK(rk, 1)), 3); b1 = rotr((b0 ^ RK(rk, 2)) + (b1 ^ RK(rk, 1)), 5); b0 = rotl((b3 ^ RK(rk, 0)) + (b0 ^ RK(rk, 1)), 9); } blk[0] = b0; blk[1] = b1; blk[2] = b2; blk[3] = b3; }
void Encrypt(uint8_t *block, uint8_t *roundKeys) { uint32_t* blk = (uint32_t*) block; uint32_t* rk = (uint32_t*) roundKeys; int8_t i; for (i = 0; i < NUMBER_OF_ROUNDS; i += 4, rk += 4) { blk[3] = rotr((blk[2] ^ RK(rk, 3)) + (blk[3] ^ RK(rk, 1)), 3); blk[2] = rotr((blk[1] ^ RK(rk, 2)) + (blk[2] ^ RK(rk, 1)), 5); blk[1] = rotl((blk[0] ^ RK(rk, 0)) + (blk[1] ^ RK(rk, 1)), 9); rk += 4; blk[0] = rotr((blk[3] ^ RK(rk, 3)) + (blk[0] ^ RK(rk, 1)), 3); blk[3] = rotr((blk[2] ^ RK(rk, 2)) + (blk[3] ^ RK(rk, 1)), 5); blk[2] = rotl((blk[1] ^ RK(rk, 0)) + (blk[2] ^ RK(rk, 1)), 9); rk += 4; blk[1] = rotr((blk[0] ^ RK(rk, 3)) + (blk[1] ^ RK(rk, 1)), 3); blk[0] = rotr((blk[3] ^ RK(rk, 2)) + (blk[0] ^ RK(rk, 1)), 5); blk[3] = rotl((blk[2] ^ RK(rk, 0)) + (blk[3] ^ RK(rk, 1)), 9); rk += 4; blk[2] = rotr((blk[1] ^ RK(rk, 3)) + (blk[2] ^ RK(rk, 1)), 3); blk[1] = rotr((blk[0] ^ RK(rk, 2)) + (blk[1] ^ RK(rk, 1)), 5); blk[0] = rotl((blk[3] ^ RK(rk, 0)) + (blk[0] ^ RK(rk, 1)), 9); } }
void CSimulation::update(unsigned long currStep) { //cout << "Using integration method " << m_par->integration_method << endl; CSolarSystem newSS(m_SS); for (vector<CSatellite>::iterator it = newSS.m_sats.begin(); it < newSS.m_sats.end(); it++) { if (it->m_thrusts.size() > 0 && it->m_thrusts[it->m_thrusts.size() - 1].m_t[0] - currStep < .5) { CSVector a(it->m_thrusts[it->m_thrusts.size() - 1].m_dvx[0], it->m_thrusts[it->m_thrusts.size() - 1].m_dvy[0], it->m_thrusts[it->m_thrusts.size() - 1].m_dvz[0]); it->getDynamicsPtr()->m_velocity += a; it->m_fuel += a.magSquared(); it->m_thrusts.pop_back(); } } bool temp = false; for (vector<CPlanet>::iterator it = newSS.m_planets.begin(); it < newSS.m_planets.end(); it++) { if (m_par->integration_method == 4) { RK(it->getDynamicsPtr()->m_position, it->getDynamicsPtr()->m_velocity, it->m_delFlag, temp, it->m_name); } else if (m_par->integration_method == 1) { Euler(it->getDynamicsPtr()->m_position, it->getDynamicsPtr()->m_velocity, it->m_name); } else cout << "ERROR, integration method set to " << m_par->integration_method << endl; } for (vector<CSatellite>::iterator it = newSS.m_sats.begin(); it < newSS.m_sats.end(); it++) { if (m_par->integration_method == 4) { RK(it->getDynamicsPtr()->m_position, it->getDynamicsPtr()->m_velocity, it->m_delFlag, it->m_succFlag, "Satellite"); } else if (m_par->integration_method == 1) { Euler(it->getDynamicsPtr()->m_position, it->getDynamicsPtr()->m_velocity, "Satellite"); } else cout << "ERROR, integration method set to " << m_par->integration_method << endl; } unsigned int i = 0; //remove all flagged sats while (newSS.m_sats.begin() + i != newSS.m_sats.end()) { if (newSS.m_sats[i].m_delFlag) { if (newSS.m_sats[i].m_succFlag) { m_succList.push_back(newSS.m_sats[i]); } else { m_deadList.push_back(newSS.m_sats[i]); } cout << newSS.m_sats[i].m_name.selfID << " at timestep " << currStep << endl; newSS.m_sats.erase(newSS.m_sats.begin() + i); } else { i++; } } m_SS = newSS; }
void Decrypt(uint8_t *block, uint8_t *roundKeys) { uint32_t* blk = (uint32_t*) block; uint32_t* rk = (uint32_t*) roundKeys; int8_t i; uint32_t b0 = blk[0]; uint32_t b1 = blk[1]; uint32_t b2 = blk[2]; uint32_t b3 = blk[3]; for (i = NUMBER_OF_ROUNDS - 1, rk += 92; i >= 0; i -= 4, rk -= 4) { b0 = (rotr(b0, 9) - (b3 ^ RK(rk, 0))) ^ RK(rk, 1); b1 = (rotl(b1, 5) - (b0 ^ RK(rk, 2))) ^ RK(rk, 1); b2 = (rotl(b2, 3) - (b1 ^ RK(rk, 3))) ^ RK(rk, 1); rk -= 4; b3 = (rotr(b3, 9) - (b2 ^ RK(rk, 0))) ^ RK(rk, 1); b0 = (rotl(b0, 5) - (b3 ^ RK(rk, 2))) ^ RK(rk, 1); b1 = (rotl(b1, 3) - (b0 ^ RK(rk, 3))) ^ RK(rk, 1); rk -= 4; b2 = (rotr(b2, 9) - (b1 ^ RK(rk, 0))) ^ RK(rk, 1); b3 = (rotl(b3, 5) - (b2 ^ RK(rk, 2))) ^ RK(rk, 1); b0 = (rotl(b0, 3) - (b3 ^ RK(rk, 3))) ^ RK(rk, 1); rk -= 4; b1 = (rotr(b1, 9) - (b0 ^ RK(rk, 0))) ^ RK(rk, 1); b2 = (rotl(b2, 5) - (b1 ^ RK(rk, 2))) ^ RK(rk, 1); b3 = (rotl(b3, 3) - (b2 ^ RK(rk, 3))) ^ RK(rk, 1); } blk[0] = b0; blk[1] = b1; blk[2] = b2; blk[3] = b3; }