예제 #1
0
int stratified_resampling(struct particle p[], int N){
    static double s;

    double sum[N];
    
    
    cum_sum(p,sum,N);
    
    
    double x = randu(s,s+(1.0/N));
    int index;
    
    for(int i = 0;i<N;i++){
        if(sum[i]>x){
            //free(sum);
            index = i;
            break;
        }
    }
    
    //printf("\t%f\t%f\t%f\n",x,sum[0],sum[N-1]);
    
    s += (double)(1.0/N);
    
    if((1-s)<0.1/N)
        s = 0;
    
    return index;
    
}
예제 #2
0
int systematic_resampling(struct particle p[], int N){
    static int s;
    
    s++;
    
    double sum[N];
    
    
    cum_sum(p,sum,N);
    
    
    double x = randu(0,(1.0/N));
    
    x += (float)(s-1.0)/N;  // systematic resampling
    
    int index;
    
    for(int i = 0;i<N;i++){
        if(sum[i]>x){
            //free(sum);
            index = i;
            break;
        }
    }
  
    if(N == s)
        s = 0;
    
    return index;
    
}
예제 #3
0
BOOST_SYMBOL_EXPORT
void cum_sum(double const *src, double *dst, size_t length,
                   BOOST_SIMD_DEFAULT_SITE)
{
    one_dimension_source<cum_sum_tag> f
        = one_dimension_source<cum_sum_tag>(src, dst, length);
    cum_sum(f);
}
JNI_METHOD(void, cumSum)(JNIEnv *env, jobject,
                         jdoubleArray jsrc, jint src_offset,
                         jdoubleArray jdst, jint dst_offset,
                         jint length)
{
    jdouble *src = (jdouble *) env->GetPrimitiveArrayCritical(jsrc, NULL);
    jdouble *dst = (jdouble *) env->GetPrimitiveArrayCritical(jdst, NULL);
    source_1d<cum_sum_tag> f(src + src_offset, dst + dst_offset, length);
    cum_sum(f);
    env->ReleasePrimitiveArrayCritical(jsrc, src, JNI_ABORT);
    env->ReleasePrimitiveArrayCritical(jdst, dst, JNI_ABORT);
}
예제 #5
0
int
multimodal_resampling(struct particle p[], int N)
{
    //double *sum;
    //sum = (double*)calloc(N,sizeof(double));
    double sum[N];
    
    
    cum_sum(p,sum,N);
    
    double x = randu(0,1);
    for(int i = 0;i<N;i++){
        if(sum[i]>x){
            //free(sum);
            return i;
        }
    }
    return -1; //error
}