Пример #1
0
void
getmaxRowCol (gsl_matrix * m, gsl_vector * max_row, gsl_vector * max_col)
{

    unsigned int s1 = m->size1;
    unsigned int s2 = m->size2;

    double max = 0.;
    unsigned int i_max = 0;
    unsigned int j_max = 0;
    findpeak (m, &i_max, &j_max, &max);

    max_row = gsl_vector_alloc (s2);
    for (unsigned int j = 0; j < s2; j++)
    {
        gsl_vector_set (max_row, j, gsl_matrix_get (m, i_max, j));
    }

    max_col = gsl_vector_alloc (s1);
    for (unsigned int i = 0; i < s1; i++)
    {
        gsl_vector_set (max_col, i, gsl_matrix_get (m, i, j_max));
    }

    return;
}
Пример #2
0
float bingdev(float *xbin, float *ybin, unsigned int nbin, long *idnum)
{
 int i;
 int bin,peak,wing;
 float firstdev,seconddev,fx,x;
 float stddev,F;
 int findbin(float x, float *xbin, unsigned int nbin);
 int findpeak(float *ybin, unsigned int nbin);

 /* set the gaussian parameters so that f(x) is larger than ybin */
 peak=findpeak(ybin,nbin);
 wing = ( (peak < nbin/2) ? nbin-1: 0 );
 stddev = sqrt( 0.5*pow((xbin[wing]-xbin[peak]),2)/log(ybin[peak]/ybin[wing]) );
 F = 1.25*ybin[peak]*stddev*SQRT2PI;

 do {
   /* First deviate - Gaussian */
   firstdev = gasdev(idnum);
   x = firstdev *stddev + xbin[peak];
   fx = 1./(stddev*SQRT2PI) * exp( -0.5*pow(firstdev,2) );
   fx *= F;

   /* Second deviate between 0 and fx - reject if not under ybin */
   if ( (bin = findbin(x,xbin,nbin)) > 0 ) {	/*within range; proceed*/
     seconddev = fx * ran1(idnum);
   }
 } while ((seconddev > ybin[bin]) || (bin<0));

 return x; 
}