Esempio n. 1
0
/* P^T L Q decomposition */
CAMLprim value ml_gsl_linalg_PTLQ_decomp (value A, value TAU, value P, value NORM)
{
  int signum;
  _DECLARE_MATRIX(A);
  _DECLARE_VECTOR2(TAU,NORM);
  GSL_PERMUT_OF_BIGARRAY(P);
  _CONVERT_MATRIX(A);
  _CONVERT_VECTOR2(TAU,NORM);
  gsl_linalg_PTLQ_decomp (&m_A, &v_TAU, &perm_P, &signum, &v_NORM);
  return Val_int (signum);
}
Esempio n. 2
0
int
gsl_linalg_PTLQ_decomp2 (const gsl_matrix * A, gsl_matrix * q, gsl_matrix * r, gsl_vector * tau, gsl_permutation * p, int *signum, gsl_vector * norm)
{
  const size_t N = A->size1;
  const size_t M = A->size2;

  if (q->size1 != M || q->size2 !=M) 
    {
      GSL_ERROR ("q must be M x M", GSL_EBADLEN);
    }
  else if (r->size1 != N || r->size2 !=M)
    {
      GSL_ERROR ("r must be N x M", GSL_EBADLEN);
    }
  else if (tau->size != GSL_MIN (M, N))
    {
      GSL_ERROR ("size of tau must be MIN(M,N)", GSL_EBADLEN);
    }
  else if (p->size != N)
    {
      GSL_ERROR ("permutation size must be N", GSL_EBADLEN);
    }
  else if (norm->size != N)
    {
      GSL_ERROR ("norm size must be N", GSL_EBADLEN);
    }

  gsl_matrix_memcpy (r, A);

  gsl_linalg_PTLQ_decomp (r, tau, p, signum, norm);

  /* FIXME:  aliased arguments depends on behavior of unpack routine! */

  gsl_linalg_LQ_unpack (r, tau, q, r);

  return GSL_SUCCESS;
}
Esempio n. 3
0
 /**
  * C++ version of gsl_linalg_PTLQ_decomp().
  * @param A A matrix
  * @param tau A vector
  * @param p A permutation
  * @param signum The sign of the permutation
  * @param norm A norm vector
  * @return Error code on failure
  */
 inline int PTLQ_decomp( matrix& A, vector& tau, permutation& p, int* signum, vector& norm ){
   return gsl_linalg_PTLQ_decomp( A.get(), tau.get(), p.get(), signum, norm.get() ); }