Exemple #1
0
void mcmclib_Givens_representation(gsl_matrix* M,
				   const gsl_vector* alpha_sigma) {
  size_t n = M->size1;
  size_t offset = n * (n-1) / 2;

  gsl_vector* alpha1 = gsl_vector_alloc(offset);
  for(size_t i=0; i<offset; i++)
    gsl_vector_set(alpha1, i, gsl_vector_get(alpha_sigma, i));
  gsl_vector* sigma1 = gsl_vector_alloc(n);
  for(size_t i=0; i<n; i++) {
    double bi = exp(gsl_vector_get(alpha_sigma, i + offset));
    gsl_vector_set(sigma1, i, bi);
  }
  vSortDesc(sigma1);

  gsl_matrix* A = gsl_matrix_alloc(n, n);
  mcmclib_Givens_rotations(A, alpha1);
  gsl_matrix* D = gsl_matrix_alloc(n, n);
  gsl_matrix_set_zero(D);
  for(size_t i=0; i<n; i++)
    gsl_matrix_set(D, i, i, gsl_vector_get(sigma1, i));
  gsl_matrix* AD = gsl_matrix_alloc(n, n);
  gsl_matrix_set_zero(AD);
  gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, A, D, 0.0, AD);
  gsl_matrix_set_zero(M);
  gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, AD, A, 0.0, M);

  gsl_matrix_free(AD);
  gsl_matrix_free(D);
  gsl_matrix_free(A);
  gsl_vector_free(alpha1);
  gsl_vector_free(sigma1);
}
Exemple #2
0
void VarproFunction::computeJacobianOfCorrection( const gsl_vector* yr, 
         const gsl_matrix *Rorig, const gsl_matrix *perm, gsl_matrix *jac ) {
  size_t nrow = perm != NULL ? perm->size2 : getNrow();
  gsl_matrix_set_zero(jac);
  gsl_matrix_set_zero(myTmpGradR);

  fillZmatTmpJac(myTmpJac, yr, Rorig, 1);

  for (size_t i = 0; i < perm->size2; i++) {
    for (size_t j = 0; j < getD(); j++) {
      gsl_vector_view jac_col = gsl_matrix_column(jac, i * getD() + j);

      /* Compute first term (correction of Gam^{-1} z_{ij}) */
      gsl_vector_set_zero(myTmpCorr);
      mulZmatPerm(myTmpJacobianCol, myTmpJac, perm, i, j);
      myGam->multInvGammaVector(myTmpJacobianCol);
      myStruct->multByGtUnweighted(myTmpCorr, Rorig, myTmpJacobianCol, -1, 1);

      /* Compute second term (gamma * dG_{ij} * yr) */
      gsl_matrix_set_zero(myTmpGradR);
      setPhiPermCol(i, perm, myPhiPermCol);
      gsl_matrix_set_col(myTmpGradR, j, myPhiPermCol);
      myStruct->multByGtUnweighted(myTmpCorr, myTmpGradR, yr, -1, 1);

      myStruct->multByWInv(myTmpCorr, 1);
      gsl_vector_memcpy(&jac_col.vector, myTmpCorr);
    }
  }
}
Exemple #3
0
/* 
    This code returns 1 if and only if SC_EIG is an eigenvalue
    of the partitioned matrix of our current graph.
*/   
unsigned partAMcond(void) {

    unsigned i,j;
    unsigned total_edges = 0; 

    gsl_matrix_set_zero(par_adj);

    for (i = 0; i < N+1; i++) {
        gsl_matrix_set(par_adj, i, i, -SC_EIG);
        for (j = i+1; j < N+1; j++) {
            if (nbrs[i] & (1U << j))  {
                gsl_matrix_set(par_adj, i, j, 1);
                gsl_matrix_set(par_adj, j, i, 1);
            }   
        }
        unsigned deg = bitCount[ nbrs[i] ];

        gsl_matrix_set(par_adj, i, N+1, VAL-deg);
        gsl_matrix_set(par_adj, N+1, i, (double)(VAL-deg)/(NTOT-N-1));
        
        total_edges += deg;
    }

    gsl_matrix_set(par_adj, N+1, N+1, -SC_EIG + (double) 2*(NTOT*VAL/2 + total_edges/2 - (N+1)*VAL)/(NTOT-N-1));
    
    int signum;
    gsl_linalg_LU_decomp(par_adj, par_perm, &signum);
    double det = gsl_linalg_LU_det(par_adj, signum);

    /* The determinant is not zero. Hence SC_EIG is not an eigenvalue of our graph. */
    if (fabs(det) > 0.0000001) {
        return 0;
    }
    return 1;
}
gsl_matrix * SgFilter::pseudoInverse(gsl_matrix *A, int n_row, int n_col){
	gsl_matrix * A_t = gsl_matrix_alloc (n_col, n_row); 	//A_t is transpose
	gsl_matrix_transpose_memcpy (A_t, A);	

	gsl_matrix * U = gsl_matrix_alloc (n_col, n_row);
	gsl_matrix * V= gsl_matrix_alloc (n_row, n_row);
	gsl_vector * S = gsl_vector_alloc (n_row);

	// Computing the SVD of the transpose of A
	gsl_vector * work = gsl_vector_alloc (n_row);
	gsl_linalg_SV_decomp (A_t, V, S, work);
	gsl_vector_free(work);

	gsl_matrix_memcpy (U, A_t);

	//Inverting S
	gsl_matrix * Sp = gsl_matrix_alloc (n_row, n_row);
	gsl_matrix_set_zero (Sp);
	for (int i = 0; i < n_row; i++)
		gsl_matrix_set (Sp, i, i, gsl_vector_get(S, i));	// Vector 'S' to matrix 'Sp'
	
	gsl_permutation * p = gsl_permutation_alloc (n_row);
	int signum;
	gsl_linalg_LU_decomp (Sp, p, &signum);				// Computing the LU decomposition

	// Compute the inverse
	gsl_matrix * SI = gsl_matrix_calloc (n_row, n_row);

	for (int i = 0; i < n_row; i++) {
		if (gsl_vector_get (S, i) > 0.0000000001)
	  		gsl_matrix_set (SI, i, i, 1.0 / gsl_vector_get (S, i));
	}		
	
	gsl_matrix * VT = gsl_matrix_alloc (n_row, n_row);
	gsl_matrix_transpose_memcpy (VT, V);					// Tranpose of V

	//THE PSEUDOINVERSE
	//Computation of the pseudoinverse of trans(A) as pinv(A) = U·inv(S).trans(V)   with trans(A) = U.S.trans(V)	
	gsl_matrix * SIpVT = gsl_matrix_alloc (n_row, n_row);
	gsl_blas_dgemm (CblasNoTrans, CblasNoTrans,				// Calculating  inv(S).trans(V)
                	1.0, SI, VT,
                	0.0, SIpVT);

			
	gsl_matrix * pinv = gsl_matrix_alloc (n_col, n_row);	// Calculating  U·inv(S).trans(V)
	gsl_blas_dgemm (CblasNoTrans, CblasNoTrans,
                	1.0, U, SIpVT,
                	0.0, pinv);

	gsl_matrix_free(VT);
	gsl_matrix_free(SI);
	gsl_matrix_free(SIpVT);
	gsl_matrix_free(A_t);
	gsl_matrix_free(U);
	gsl_matrix_free(A);
	gsl_matrix_free(V);
	gsl_vector_free(S);

	return pinv;
}
Exemple #5
0
// Find B s.t. B B^T = A. This is useful for generating vectors from a multivariate normal distribution.
// Operates on A in-place if sqrt_A == NULL.
void sqrt_matrix(gsl_matrix* A, gsl_matrix* sqrt_A, gsl_eigen_symmv_workspace* esv, gsl_vector *eival, gsl_matrix *eivec, gsl_matrix* sqrt_eival) {
	size_t N = A->size1;
	assert(A->size2 == N);
	
	assert(sqrt_eival->size1 == N);
	assert(sqrt_eival->size2 == N);
	
	gsl_matrix_set_zero(sqrt_eival);
	
	if(sqrt_A == NULL) {
		sqrt_A = A;
	} else {
		assert(sqrt_A->size1 == N);
		assert(sqrt_A->size2 == N);
		gsl_matrix_memcpy(sqrt_A, A);
	}
	
	// Calculate the eigendecomposition of the covariance matrix
	gsl_eigen_symmv(sqrt_A, eival, eivec, esv);
	double tmp;
	for(size_t i=0; i<N; i++) {
		tmp = gsl_vector_get(eival, i);
		gsl_matrix_set(sqrt_eival, i, i, sqrt(fabs(tmp)));
		if(tmp < 0.) {
			for(size_t j=0; j<N; j++) { gsl_matrix_set(eivec, j, i, -gsl_matrix_get(eivec, j, i)); }
		}
	}
	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1., eivec, sqrt_eival, 0., sqrt_A);
}
tnn_error tnn_module_bprop_linear(tnn_module *m){
  tnn_error ret;
  gsl_matrix w;
  gsl_matrix dw;

  //Routine check
  if(m->t != TNN_MODULE_TYPE_LINEAR){
    return TNN_ERROR_MODULE_MISTYPE;
  }
  if(m->input->valid != true || m->output->valid != true || m->w.valid != true){
    return TNN_ERROR_STATE_INVALID;
  }

  //Transform the matrix
  TNN_MACRO_ERRORTEST(tnn_numeric_v2m(&m->w.x, &w, m->output->size, m->input->size),ret);
  TNN_MACRO_ERRORTEST(tnn_numeric_v2m(&m->w.dx, &dw, m->output->size, m->input->size), ret);

  //bprop to input
  TNN_MACRO_GSLTEST(gsl_blas_dgemv(CblasTrans, 1.0, &w, &m->output->dx, 0.0, &m->input->dx));

  //bprop to dw
  gsl_matrix_set_zero(&dw);
  TNN_MACRO_GSLTEST(gsl_blas_dger(1.0, &m->output->dx, &m->input->x, &dw));

  return TNN_ERROR_SUCCESS;
}
Exemple #7
0
int 
Matrix::multiplyWithMatrix(Matrix* b)
{
	if(col!=b->getRowCnt())
	{
		return -1;
	}
	
	gsl_matrix* res=gsl_matrix_alloc(row,b->getColCnt());
	gsl_matrix_set_zero(res);
	
	gsl_matrix_float* resmatrix=gsl_matrix_float_alloc(row,b->getColCnt());
	convertToFloat(resmatrix,res,row,b->getColCnt());

	gsl_matrix_float* cmatrix=gsl_matrix_float_alloc(row,col);
	convertToFloat(cmatrix,matrix,row,col);

	gsl_matrix_float* bmatrix=gsl_matrix_float_alloc(b->getRowCnt(),b->getColCnt());
	convertToFloat(bmatrix,b->matrix,b->getRowCnt(),b->getColCnt());
	
	gsl_blas_sgemm(CblasNoTrans, CblasNoTrans, 1, cmatrix, bmatrix, 0, resmatrix);
	convertFromFloat(resmatrix,res,row,b->getColCnt());

	gsl_matrix_float_free(resmatrix);
	gsl_matrix_float_free(cmatrix);
	gsl_matrix_float_free(bmatrix);
	
	gsl_matrix_memcpy(matrix, res);
	gsl_matrix_free(res);
	return 0;
}
Exemple #8
0
static int
wood_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x,
         const gsl_vector * u, void * params, gsl_vector * v,
         gsl_matrix * JTJ)
{
  gsl_matrix_view J = gsl_matrix_view_array(wood_J, wood_N, wood_P);
  double x1 = gsl_vector_get(x, 0);
  double x3 = gsl_vector_get(x, 2);
  double s90 = sqrt(90.0);
  double s10 = sqrt(10.0);

  gsl_matrix_set_zero(&J.matrix);

  gsl_matrix_set(&J.matrix, 0, 0, -20.0*x1);
  gsl_matrix_set(&J.matrix, 0, 1, 10.0);
  gsl_matrix_set(&J.matrix, 1, 0, -1.0);
  gsl_matrix_set(&J.matrix, 2, 2, -2.0*s90*x3);
  gsl_matrix_set(&J.matrix, 2, 3, s90);
  gsl_matrix_set(&J.matrix, 3, 2, -1.0);
  gsl_matrix_set(&J.matrix, 4, 1, s10);
  gsl_matrix_set(&J.matrix, 4, 3, s10);
  gsl_matrix_set(&J.matrix, 5, 1, 1.0/s10);
  gsl_matrix_set(&J.matrix, 5, 3, -1.0/s10);

  if (v)
    gsl_blas_dgemv(TransJ, 1.0, &J.matrix, u, 0.0, v);

  if (JTJ)
    gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &J.matrix, 0.0, JTJ);

  (void)params; /* avoid unused parameter warning */

  return GSL_SUCCESS;
}
/**
 * setup the decomp, allocs the variable grid
 */
void setup_fdecomp_(int* ngrid)
{
  nptsGrid = *ngrid;
  printf("#(c) npts:%d\n", nptsGrid);
  grid = gsl_matrix_alloc(nptsGrid, nptsGrid);
  gsl_matrix_set_zero(grid); // clear the grid
}
Exemple #10
0
void kjg_fpca_XTXA (
        const gsl_matrix *A1,
        gsl_matrix *B,
        gsl_matrix *A2) {
    size_t m = get_ncols();
    size_t n = get_nrows();

    size_t i, r;                                                // row index
    double *Y = malloc(sizeof(double) * n * KJG_FPCA_ROWS);  // normalized

    gsl_matrix_view Bi, Xi;

    gsl_matrix_set_zero(A2);

    for (i = 0; i < m; i += KJG_FPCA_ROWS) {
        r = kjg_geno_get_normalized_rows(i, KJG_FPCA_ROWS, Y);
        Xi = gsl_matrix_view_array(Y, r, n);
        Bi = gsl_matrix_submatrix(B, i, 0, r, B->size2);
        gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1, &Xi.matrix, A1, 0,
                &Bi.matrix);
        gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1, &Xi.matrix, &Bi.matrix,
                1, A2);
    }

    free(Y);
}
Exemple #11
0
//Multiply this with b
Matrix* 
Matrix::multiplyMatrix(Matrix* b)
{
	if(col!=b->getRowCnt())
	{
		return NULL;
	}
	Matrix* res=new Matrix(row,b->getColCnt());
	gsl_matrix_set_zero (res->matrix);

	gsl_matrix_float* resmatrix=gsl_matrix_float_alloc(row,b->getColCnt());
	convertToFloat(resmatrix,res->matrix,row,b->getColCnt());

	gsl_matrix_float* cmatrix=gsl_matrix_float_alloc(row,col);
	convertToFloat(cmatrix,matrix,row,col);

	gsl_matrix_float* bmatrix=gsl_matrix_float_alloc(b->getRowCnt(),b->getColCnt());
	convertToFloat(bmatrix,b->matrix,b->getRowCnt(),b->getColCnt());
	
	gsl_blas_sgemm (CblasNoTrans, CblasNoTrans, 1, cmatrix, bmatrix, 0, resmatrix);
	convertFromFloat(resmatrix,res->matrix,row,b->getColCnt());
	gsl_matrix_float_free(resmatrix);
	gsl_matrix_float_free(cmatrix);
	gsl_matrix_float_free(bmatrix);
	return res;	
}
Exemple #12
0
gsl_matrix* matrix_multiply(gsl_matrix* matrix1, gsl_matrix* matrix2){

  gsl_matrix *matrix3;
  int i, j, k;

  // checks to see if the dimensions of matrix 1 and 2 are compatible for matrix multiplication
  if (matrix1->size2 != matrix2->size1){
    printf("Cannot multiply due to incompatitble matrix dimensions.\n\n");
    matrix3 = NULL;
  }
  else {
    // the resulting matrix has the same number of rows as matrix 1 and the same 
    // number of columns as matrix 2
    matrix3 = gsl_matrix_alloc(matrix1->size1, matrix2->size2); 
    gsl_matrix_set_zero(matrix3);

    // apply the definition of matrix multiplication
    for (k=0; k<(matrix2->size2);k++){
      for (j=0; j<(matrix1->size1);j++){
	for (i=0; i<(matrix1->size2);i++){
	  gsl_matrix_set(matrix3,j,k, gsl_matrix_get(matrix3,j,k) + (gsl_matrix_get(matrix1,j,i)*gsl_matrix_get(matrix2,i,k)));
	  
	}
      }
    }
  }

  return matrix3;

}
Exemple #13
0
static int
wood_df (const gsl_vector * x, void *params, gsl_matrix * J)
{
  double x1 = gsl_vector_get(x, 0);
  double x3 = gsl_vector_get(x, 2);
  double s90 = sqrt(90.0);
  double s10 = sqrt(10.0);

  gsl_matrix_set_zero(J);

  gsl_matrix_set(J, 0, 0, -20.0*x1);
  gsl_matrix_set(J, 0, 1, 10.0);
  gsl_matrix_set(J, 1, 0, -1.0);
  gsl_matrix_set(J, 2, 2, -2.0*s90*x3);
  gsl_matrix_set(J, 2, 3, s90);
  gsl_matrix_set(J, 3, 2, -1.0);
  gsl_matrix_set(J, 4, 1, s10);
  gsl_matrix_set(J, 4, 3, s10);
  gsl_matrix_set(J, 5, 1, 1.0/s10);
  gsl_matrix_set(J, 5, 3, -1.0/s10);

  (void)params; /* avoid unused parameter warning */

  return GSL_SUCCESS;
}
Exemple #14
0
void Testmcar_model(CuTest* tc) {
  gsl_matrix* W = gsl_matrix_alloc(N, N);
  gsl_matrix_set_zero(W);
  for(size_t i=0; i<(N-1); i++)
    DECL_AD(i, i+1);

  mcmclib_mcar_tilde_lpdf* llik = mcmclib_mcar_tilde_lpdf_alloc(P, W);
  gsl_vector* e = gsl_vector_alloc(N * P);
  gsl_vector_set_all(e, 2.0);
  p = mcmclib_mcar_model_alloc(llik, e);

  double l1 = lpdf_alpha12sigma(-2.0);
  double l2 = lpdf_alpha12sigma(-5.0);
  CuAssertTrue(tc, gsl_finite(l1));
  CuAssertTrue(tc, gsl_finite(l2));
  CuAssertTrue(tc, l1 > l2);
  CuAssertTrue(tc, l1 == lpdf_alpha12sigma(-2.0));

  gsl_vector* alphasigma = gsl_vector_alloc(P * (P-1) / 2 + P);
  gsl_vector_set_all(llik->alpha12sigma, -1.0);
  gsl_vector_set_all(alphasigma, 0.0);
  l1 = mcmclib_mcar_model_alphasigma_lpdf(p, alphasigma);
  CuAssertTrue(tc, gsl_finite(l1));
  gsl_vector_set(alphasigma, P+1, 1.0);
  CuAssertTrue(tc, !gsl_finite(mcmclib_mcar_model_alphasigma_lpdf(p, alphasigma)));
  gsl_vector_free(alphasigma);

  mcmclib_mcar_model_free(p);
  gsl_vector_free(e);
  mcmclib_mcar_tilde_lpdf_free(llik);
  gsl_matrix_free(W);
}
Exemple #15
0
int
gsl_multifit_linear_Lk(const size_t p, const size_t k, gsl_matrix *L)
{
  if (p <= k)
    {
      GSL_ERROR("p must be larger than derivative order", GSL_EBADLEN);
    }
  else if (k >= GSL_MULTIFIT_MAXK - 1)
    {
      GSL_ERROR("derivative order k too large", GSL_EBADLEN);
    }
  else if (p - k != L->size1 || p != L->size2)
    {
      GSL_ERROR("L matrix must be (p-k)-by-p", GSL_EBADLEN);
    }
  else
    {
      double c_data[GSL_MULTIFIT_MAXK];
      gsl_vector_view cv = gsl_vector_view_array(c_data, k + 1);
      size_t i, j;

      /* zeroth derivative */
      if (k == 0)
        {
          gsl_matrix_set_identity(L);
          return GSL_SUCCESS;
        }

      gsl_matrix_set_zero(L);
  
      gsl_vector_set_zero(&cv.vector);
      gsl_vector_set(&cv.vector, 0, -1.0);
      gsl_vector_set(&cv.vector, 1, 1.0);

      for (i = 1; i < k; ++i)
        {
          double cjm1 = 0.0;

          for (j = 0; j < k + 1; ++j)
            {
              double cj = gsl_vector_get(&cv.vector, j);

              gsl_vector_set(&cv.vector, j, cjm1 - cj);
              cjm1 = cj;
            }
        }

      /* build L, the c_i are the entries on the diagonals */
      for (i = 0; i < k + 1; ++i)
        {
          gsl_vector_view v = gsl_matrix_superdiagonal(L, i);
          double ci = gsl_vector_get(&cv.vector, i);

          gsl_vector_set_all(&v.vector, ci);
        }

      return GSL_SUCCESS;
    }
} /* gsl_multifit_linear_Lk() */
Exemple #16
0
/* rebuild asymm. matrix from its SVD decomposition */
static void anti_SVD(gsl_matrix* A,
		     const gsl_matrix* P1,
		     const gsl_matrix* P2,
		     const gsl_vector* sigma) {
  const size_t p = A->size1;
  gsl_matrix* Delta = gsl_matrix_alloc(p, p);
  gsl_matrix_set_zero(Delta);
  for(size_t i=0; i<p; i++)
    gsl_matrix_set(Delta, i, i, exp(gsl_vector_get(sigma, i)));
  gsl_matrix* P1Delta = gsl_matrix_alloc(p, p);
  gsl_matrix_set_zero(P1Delta);
  gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, P1, Delta, 0.0, P1Delta);
  gsl_matrix_set_zero(A);
  gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, P1Delta, P2, 0.0, A);
  gsl_matrix_free(Delta);
  gsl_matrix_free(P1Delta);
}
Exemple #17
0
Fichier : lls.c Projet : pa345/lib
int
lls_reset(lls_workspace *w)
{
  gsl_matrix_set_zero(w->ATA);
  gsl_vector_set_zero(w->ATb);
  w->bTb = 0.0;

  return 0;
}
Exemple #18
0
/* The following functions handles the correlation 
   tensor in the exciton matrix */
void bath_js03_init_OpQ(int ndim, gsl_matrix *U)
{
  int nops,i;
  size_t n,m,a,b,c,d;
  size_t idxa,idxb,idxc;
  double dd;

  /* we first count the number of bath operators */
  nops=0;
  while(BATH_JS03OpBra[nops]>0) {
    nops++;
  }

  /* allocate the matrix, totally n^2*n^2 rows... */
  BATH_JS03OpQ=gsl_matrix_alloc(ndim*ndim*ndim*ndim,nops);
  gsl_matrix_set_zero(BATH_JS03OpQ);
  BATH_JS03Ct=gsl_vector_alloc(nops); // as a workspace

  /* construct matrix elements, no tricks here */
  for(i=0;i<nops;i++) {
    n=BATH_JS03OpKet[i]-1;
    m=BATH_JS03OpBra[i]-1; // note: m>=n
    for(a=0,idxa=0;a<ndim;a++,idxa+=ndim*ndim*ndim) {
      for(b=0,idxb=0;b<ndim;b++,idxb+=ndim*ndim) {
	for(c=0,idxc=0;c<ndim;c++,idxc+=ndim) {
	  for(d=0;d<ndim;d++) {
	    //	    printf("(n,m,a,b,c,d) = (%d,%d,%d,%d,%d,%d)\n",n,m,a,b,c,d);
	    if(n==m) {
	      // diagonal term
	      dd=fgsl_matrix_get(U,n,a)*fgsl_matrix_get(U,n,b)*
		fgsl_matrix_get(U,n,c)*fgsl_matrix_get(U,n,d);
	      fgsl_matrix_set(BATH_JS03OpQ,idxa+idxb+idxc+d,i,dd);
	    } else {
	      // off-diagonal term
	      dd=fgsl_matrix_get(U,n,a)*fgsl_matrix_get(U,m,b)*
		fgsl_matrix_get(U,n,c)*fgsl_matrix_get(U,m,d);
	      dd+=fgsl_matrix_get(U,n,a)*fgsl_matrix_get(U,m,b)*
		fgsl_matrix_get(U,m,c)*fgsl_matrix_get(U,n,d);
	      dd+=fgsl_matrix_get(U,m,a)*fgsl_matrix_get(U,n,b)*
		fgsl_matrix_get(U,m,c)*fgsl_matrix_get(U,n,d);
	      dd+=fgsl_matrix_get(U,m,a)*fgsl_matrix_get(U,n,b)*
		fgsl_matrix_get(U,n,c)*fgsl_matrix_get(U,m,d);
	      fgsl_matrix_set(BATH_JS03OpQ,idxa+idxb+idxc+d,i,dd);
	    }
	  }
	}
      }
    }
  }

  printf("OpQ =\n");
  gsl_matrix_lprint(BATH_JS03OpQ);
  printf("\n");
  printf("\n");

}
Exemple #19
0
void StripedDGamma::calcYrtDgammaYr( gsl_matrix *grad, const gsl_matrix *R, 
                                     const gsl_vector *yr ) {
  size_t n_row = 0, k;
  
  gsl_matrix_set_zero(grad);
  for (k = 0; k < myS->getBlocksN(); n_row += myS->getBlock(k)->getN(), k++) {
    gsl_vector_const_view sub_yr = gsl_vector_const_subvector(yr, n_row * R->size2, 
                                  myS->getBlock(k)->getN() * R->size2);    
    myLHDGamma[k]->calcYrtDgammaYr(myTmpGrad, R, &sub_yr.vector);
    gsl_matrix_add(grad, myTmpGrad);
  }
}
Exemple #20
0
static void compute_fg_removal(void)
{
  int ii;
  gsl_matrix *id=gsl_matrix_alloc(glob_n_nu,glob_n_nu);
  gsl_matrix *dum=gsl_matrix_alloc(glob_n_nu,glob_n_nu);
  fg_removal=gsl_matrix_alloc(glob_n_nu,glob_n_nu);
  gsl_matrix_set_identity(id);
  gsl_matrix_set_zero(dum);
  gsl_matrix_set_zero(fg_removal);
  
  //Eliminating the first n_remove principal eigenvectors
  for(ii=0;ii<n_remove;ii++)
    gsl_matrix_set(id,glob_n_nu-ii-1,glob_n_nu-ii-1,0);

  //Computing FG=U*S*U^T
  gsl_blas_dgemm(CblasNoTrans,CblasTrans,1.0,id,eigenvecs,0.0,dum);
  gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,eigenvecs,dum,0.0,fg_removal);
  
  gsl_matrix_free(id);
  gsl_matrix_free(dum);
}
void Compute_Forces(gsl_matrix * Positions, gsl_matrix * Velocities, gsl_matrix * Neighbors, 
                    gsl_vector * ListHead, gsl_vector * List, int type1, int type2, 
                    gsl_matrix * Forces, gsl_vector * Energy, gsl_vector * Kinetic )
{

  // RESET MATRICES AND VECTORS
  // TODO: Redundant?
  gsl_matrix_set_zero(Forces);
  gsl_vector_set_zero(Energy);
  gsl_vector_set_zero(Kinetic);

  // Begin of parallel region
  
  int omp_get_max_threads();
  int chunks = NParticles / omp_get_max_threads();

  #pragma omp parallel
  {
    #pragma omp for schedule (dynamic,chunks) 
    for (int i=0;i<NParticles;i++)
    {
      gsl_vector_view vi = gsl_matrix_row(Velocities, i);

      double * fij = malloc(3*sizeof(double));

      // Compute the kinetic energy of particle i (0.5 mi vi^2)
      double ei = KineticEnergy(&vi.vector, (int) gsl_matrix_get(Positions,i,0));
      gsl_vector_set(Kinetic,i,ei);

      // Obtain the list of neighboring cells to iCell (the cell i belongs to)
      int iCell    = FindParticle(Positions,i);
      gsl_vector_view NeighboringCells = gsl_matrix_row(Neighbors, iCell);
           
      // Obtain the list of neighboring particles that interacts with i
      // i interacts with all Verlet[j] particles (j = 0 .. NNeighbors-1)
      int * Verlet = malloc(27 * NParticles * sizeof(int) / (Mx*My*Mz));
      int NNeighbors = Compute_VerletList(Positions, i, &NeighboringCells.vector, iCell, ListHead, List, Verlet);
      
      // Loop over all the j-neighbors of i-particle
      for (int j=0;j<NNeighbors;j++)
      {
        ei = Compute_Force_ij(Positions, i, Verlet[j], type1, type2, fij);
        Forces->data[i*Forces->tda + 0] += fij[0];
        Forces->data[i*Forces->tda + 1] += fij[1];
        Forces->data[i*Forces->tda + 2] += fij[2];
        Energy->data[i*Energy->stride]  += ei;
      }
      free(Verlet);
      free(fij);
    }
  }
  // End of parallel region
}
void Nav_MotionEstimator::Nav_PKPropagator_Unicycle( double * Uk, double T)
{
	double thPose = gsl_matrix_get(MeanPose, 2, 0);

	/** todo: move uncertanty values to configuration file */
	double Sig1VtError = 0.01;
	double Sig2VthError = 0.01;
	double Sig3VtError = 0.01;
	double Sig4VthError = 0.01;

	double M11 = Sig1VtError * fabs(Uk[0]) + Sig2VthError * fabs(Uk[1]);
	double M22 = Sig3VtError * fabs(Uk[0]) + Sig4VthError * fabs(Uk[1]); //on the ekf use systematic error

	gsl_matrix_set(Nk, 0, 0, pow(M11, 2));
	gsl_matrix_set(Nk, 0, 1, 0);
	gsl_matrix_set(Nk, 1, 0, 0);
	gsl_matrix_set(Nk, 1, 1, pow(M22, 2));

	/**
	 position gradient
	 Fx =[[ 1	0	-vt*T*sin(theta) ]
	 [ 0        1 	 vt*T*cos(theta) ]
	 [ 0	0 		1	 ]]
	 */
	gsl_matrix_set_identity(Fx);
	gsl_matrix_set(Fx, 0, 2, -Uk[0] * T * sin(thPose));
	gsl_matrix_set(Fx, 1, 2, Uk[0] * T * cos(thPose));
	gsl_matrix_transpose_memcpy(FxT, Fx); //F transpose

	/**
	 velocities gradient

	 Fu = [  [ T*cos(theta)	0 ]
	 [ T*sin(theta)      0 ]
	 [	0		T ]]
	 */
	gsl_matrix_set(Fu, 0, 0, T * cos(thPose));
	gsl_matrix_set(Fu, 0, 1, 0);
	gsl_matrix_set(Fu, 1, 0, T * sin(thPose));
	gsl_matrix_set(Fu, 1, 1, 0);
	gsl_matrix_set(Fu, 2, 0, 0);
	gsl_matrix_set(Fu, 2, 1, T);
	gsl_matrix_transpose_memcpy(FuT, Fu); //F transpose

	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Fu, Nk, 0.0, Qk_temp);
	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Qk_temp, FuT, 0.0, Qk);
	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Fx, CovPose, 0.0, Pk_temp);
	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Pk_temp, FxT, 0.0, res3x3);
	gsl_matrix_set_zero(CovPose);
	gsl_matrix_add(CovPose, Qk);
	gsl_matrix_add(CovPose, res3x3);
}
Exemple #23
0
int UpdateAssignment(const gsl_matrix_uint * const mask,
                     gsl_matrix * const Assignment)
{
	unsigned int i, j;

	gsl_matrix_set_zero(Assignment);
	for(i = 0; i < mask->size1; i++)
	{
		for(j = 0; j < mask->size2; j++)
		{
			if(gsl_matrix_uint_get(mask, i, j) == STAR)
				gsl_matrix_set(Assignment, i, j, 1);
		}
	}
}
void StationaryCholesky::computeGammak( const gsl_matrix *Rt, double reg ) {
  gsl_matrix_view submat;
  
  for (size_t k = 0; k < getMu(); k++) { 
    submat = gsl_matrix_submatrix(myGammaK, 0, k * getD(), getD(), getD());
    myStStruct->AtVkB(&submat.matrix, k, Rt, Rt, myTempVijtRt);
 
    if (reg > 0) {
      gsl_vector diag = gsl_matrix_diagonal(&submat.matrix).vector;
      gsl_vector_add_constant(&diag, reg);
    }    
  }
  submat = gsl_matrix_submatrix(myGammaK, 0, getMu() * getD(), getD(), getD());
  gsl_matrix_set_zero(&submat.matrix);
}
Exemple #25
0
void Compute_NeighborMatrix(gsl_matrix * Neighbors)
{
  // RESET THE NEIGHBORING MATRIX  
  gsl_matrix_set_zero(Neighbors);

  // TODO: May we obtain a speedup using vector_view instead
  //       of matrix_set_row?
  gsl_vector * neighborVector = gsl_vector_calloc (27);
  for (int cell=0;cell<Mx*My*Mz;cell++)
  {
      Compute_NeighborCells(cell, neighborVector);
      gsl_matrix_set_row(Neighbors, cell, neighborVector);
  }
  gsl_vector_free(neighborVector);
}
Exemple #26
0
static int
brown3_df (const gsl_vector * x, void *params, gsl_matrix * J)
{
  double x1 = gsl_vector_get(x, 0);
  double x2 = gsl_vector_get(x, 1);

  gsl_matrix_set_zero(J);

  gsl_matrix_set(J, 0, 0, 1.0);
  gsl_matrix_set(J, 1, 1, 1.0);
  gsl_matrix_set(J, 2, 0, x2);
  gsl_matrix_set(J, 2, 1, x1);

  return GSL_SUCCESS;
}
Exemple #27
0
static int
fdfridge_df(const gsl_vector * x, void * params, gsl_matrix * J)
{
  int status;
  gsl_multifit_fdfridge *w = (gsl_multifit_fdfridge *) params;
  const size_t n = w->n;
  const size_t p = w->p;
  gsl_matrix_view J_user = gsl_matrix_submatrix(J, 0, 0, n, p);
  gsl_matrix_view J_tik = gsl_matrix_submatrix(J, n, 0, p, p);
  gsl_vector_view diag = gsl_matrix_diagonal(&J_tik.matrix);

  /* compute user supplied Jacobian */
  status = gsl_multifit_eval_wdf(w->fdf, x, NULL, &J_user.matrix);
  if (status)
    return status;

  if (w->L_diag)
    {
      /* store diag(L_diag) in Tikhonov portion of J */
      gsl_matrix_set_zero(&J_tik.matrix);
      gsl_vector_memcpy(&diag.vector, w->L_diag);
    }
  else if (w->L)
    {
      /* store L in Tikhonov portion of J */
      gsl_matrix_memcpy(&J_tik.matrix, w->L);
    }
  else
    {
      /* store \lambda I_p in Tikhonov portion of J */
      gsl_matrix_set_zero(&J_tik.matrix);
      gsl_vector_set_all(&diag.vector, w->lambda);
    }

  return GSL_SUCCESS;
} /* fdfridge_df() */
Exemple #28
0
// Find B s.t. B B^T = A. This is useful for generating vectors from a multivariate normal distribution.
void sqrt_matrix(gsl_matrix* A, gsl_matrix* sqrt_A, gsl_eigen_symmv_workspace* esv, gsl_vector *eival, gsl_matrix *eivec, gsl_matrix* sqrt_eival) {
	size_t N = A->size1;
	assert(A->size2 == N);
	
	// Allocate workspaces if none are provided
	bool del_esv = false;
	if(esv == NULL) { esv = gsl_eigen_symmv_alloc(N); del_esv = true; }
	bool del_eival = false;
	if(eival == NULL) { eival = gsl_vector_alloc(N); del_eival = true; }
	bool del_eivec = false;
	if(eivec == NULL) { eivec = gsl_matrix_alloc(N, N); del_eival = true; }
	bool del_sqrt_eival = false;
	if(sqrt_eival == NULL) {
		sqrt_eival = gsl_matrix_calloc(N, N);
		del_sqrt_eival = true;
	} else {
		assert(sqrt_eival->size1 == N);
		assert(sqrt_eival->size2 == N);
		gsl_matrix_set_zero(sqrt_eival);
	}
	
	if(sqrt_A == NULL) {
		sqrt_A = A;
	} else {
		assert(sqrt_A->size1 == N);
		assert(sqrt_A->size2 == N);
		gsl_matrix_memcpy(sqrt_A, A);
	}
	
	// Calculate the eigendecomposition of the covariance matrix
	gsl_eigen_symmv(sqrt_A, eival, eivec, esv);
	double tmp;
	for(size_t i=0; i<N; i++) {
		tmp = gsl_vector_get(eival, i);
		gsl_matrix_set(sqrt_eival, i, i, sqrt(fabs(tmp)));
		if(tmp < 0.) {
			for(size_t j=0; j<N; j++) { gsl_matrix_set(eivec, j, i, -gsl_matrix_get(eivec, j, i)); }
		}
	}
	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1., eivec, sqrt_eival, 0., sqrt_A);
	
	// Free workspaces if none were provided
	if(del_sqrt_eival) { gsl_matrix_free(sqrt_eival); }
	if(del_esv) { gsl_eigen_symmv_free(esv); }
	if(del_eivec) { gsl_matrix_free(eivec); }
	if(del_eival) { gsl_vector_free(eival); }
}
Exemple #29
0
///
/// Decompose a metric \f$\mathbf{G}\f$ as \f$ \mathbf{G} = \mathbf{L} \mathbf{D}
/// \mathbf{L}^{\mathrm{T}} \f$, where \f$\mathbf{L}\f$ is a lower-triangular matrix
/// with unit diagonal, and \f$\mathbf{D}\f$ is a diagonal matrix. This decomposition
/// may be useful if the metric cannot yet be guaranteed to be positive definite.
///
int XLALCholeskyLDLTDecompMetric(
  gsl_matrix **p_cholesky,			///< [in,out] Pointer to decomposition; stores \f$\mathbf{L}\f$ in lower triangular part \f$\mathbf{D}\f$ on diagonal
  const gsl_matrix *g_ij			///< [in] Matrix to decompose \f$\mathbf{G}\f$
  )
{


  // Check input
  XLAL_CHECK( g_ij != NULL, XLAL_EFAULT );
  XLAL_CHECK( g_ij->size1 == g_ij->size2, XLAL_ESIZE );
  XLAL_CHECK( p_cholesky != NULL, XLAL_EFAULT );
  if ( *p_cholesky != NULL ) {
    XLAL_CHECK( (*p_cholesky)->size1 == g_ij->size1, XLAL_ESIZE );
    XLAL_CHECK( (*p_cholesky)->size2 == g_ij->size2, XLAL_ESIZE );
  } else {
    GAMAT( *p_cholesky, g_ij->size1, g_ij->size2 );
  }

  // Straightforward implementation of Cholesky–Banachiewicz algorithm
  gsl_matrix_set_zero( *p_cholesky );
#define A(i,j) *gsl_matrix_const_ptr( g_ij, i, j )
#define D(j)   *gsl_matrix_ptr( *p_cholesky, j, j )
#define L(i,j) *gsl_matrix_ptr( *p_cholesky, i, j )
  for ( size_t i = 0; i < g_ij->size1; ++i ) {
    for ( size_t j = 0; j <= i; ++j ) {
      if ( i == j ) {
        D(j) = A(j, j);
        for ( size_t k = 0; k < j; ++k ) {
          D(j) -= L(j, k) * L(j, k) * D(k);
        }
      } else {
        L(i, j) = A(i, j);
        for ( size_t k = 0; k < j; ++k ) {
          L(i, j) -= L(i, k) * L(j, k) * D(k);
        }
        L(i, j) /= D(j);
      }
    }
  }
#undef A
#undef D
#undef L

  return XLAL_SUCCESS;

}
Exemple #30
0
static int
brown3_df (const gsl_vector * x, void *params, gsl_matrix * J)
{
  double x1 = gsl_vector_get(x, 0);
  double x2 = gsl_vector_get(x, 1);

  gsl_matrix_set_zero(J);

  gsl_matrix_set(J, 0, 0, 1.0);
  gsl_matrix_set(J, 1, 1, 1.0);
  gsl_matrix_set(J, 2, 0, x2);
  gsl_matrix_set(J, 2, 1, x1);

  (void)params; /* avoid unused parameter warning */

  return GSL_SUCCESS;
}