void UpdateWeinerProcess(parameterStruct *param, double beadDW[][DIM]){ int i=0; double b[3]; int N = param->N; var = sqrt(param->dt); if (N%2 != 0){ GaussianRandom(&beadDW[0][0],&b[0]); GaussianRandom(&beadDW[0][1],&b[1]); GaussianRandom(&beadDW[0][2],&b[2]); for(i=1;i<N;i+=2){ GaussianRandom(&beadDW[i][0],&beadDW[i+1][0]); GaussianRandom(&beadDW[i][1],&beadDW[i+1][1]); GaussianRandom(&beadDW[i][2],&beadDW[i+1][2]); } } else{ for(i=0;i<N;i+=2){ GaussianRandom(&beadDW[i][0],&beadDW[i+1][0]); GaussianRandom(&beadDW[i][1],&beadDW[i+1][1]); GaussianRandom(&beadDW[i][2],&beadDW[i+1][2]); } } beadDW[0][0] = 0.; beadDW[0][1] = 0.; beadDW[0][2] = 0.; for(i=1;i<N;i++){ beadDW[i][0] *= var; beadDW[i][1] *= var; beadDW[i][2] *= var; } }
int CUKF::AddControlNoise() { Vn= D_V + GaussianRandom()*sqrt(Q->data.db[0]); Gn= G + GaussianRandom()*sqrt(Q->data.db[3]); // Vn = D_V + 0.0001; // Gn = G + 0.0001; #ifdef NOISEFREE Vn= D_V; Gn= G; #endif //NOISEFREE return 0; }