Exemple #1
0
void THLapack_(gels)(char trans, int m, int n, int nrhs, real *a, int lda, real *b, int ldb, real *work, int lwork, int *info)
{
#ifdef USE_LAPACK
#if defined(TH_REAL_IS_DOUBLE)
  dgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, info);
#else
  sgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, info);
#endif
#else
  THError("gels : Lapack library not found in compile time\n");
#endif
}
Exemple #2
0
static int fmat_solve_ls_t_inplace(int mi, int ni, float *a, float *bx) {
  
  /* solve system */ 
  FINTEGER info;
  FINTEGER m=mi, nrhs=1, lda=mi, lwork=-1;
  FINTEGER n=ni, ldb=n;
  float work_sz;
  
  sgels_("Transposed", &m, &n, &nrhs, a, &lda, 
         bx, &ldb, &work_sz, &lwork, &info); 
 
  lwork = (long)work_sz;

  float *work = fvec_new(lwork);
 
  sgels_("Transposed", &m, &n, &nrhs, a, &lda, 
         bx, &n, work, &lwork, &info); 
  
  free(work);
  
  return info;
}
Exemple #3
0
void THLapack_(gels)(char trans, int m, int n, int nrhs, real *a, int lda, real *b, int ldb, real *work, int lwork, int *info)
{
#ifdef USE_LAPACK
#if defined(TH_REAL_IS_DOUBLE)
    extern void dgels_(char *trans, int *m, int *n, int *nrhs, double *a, int *lda, double *b, int *ldb, double *work, int *lwork, int *info);
    dgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, info);
#else
    extern void sgels_(char *trans, int *m, int *n, int *nrhs, float *a, int *lda, float *b, int *ldb, float *work, int *lwork, int *info);
    sgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, info);
#endif
#else
    THError("gels : Lapack library not found in compile time\n");
#endif
}
Exemple #4
0
	DLLEXPORT MKL_INT s_thin_qr_solve(MKL_INT m, MKL_INT n, MKL_INT bn, float a[], float b[], float x[], float work[], MKL_INT len)
	{
		MKL_INT info = 0;

		float* clone_a = new float[m*n];
		std::memcpy(clone_a, a, m*n*sizeof(float));

		float* clone_b = new float[m*bn];
		std::memcpy(clone_b, b, m*bn*sizeof(float));
		char N = 'N';
	    sgels_(&N, &m, &n, &bn, clone_a, &m, clone_b, &m, work, &len, &info);

		for (MKL_INT i = 0; i < n; ++i)
		{
			for (MKL_INT j = 0; j < bn; ++j)
			{
				x[j * n + i] = clone_b[j * m + i];
			}
		}

		delete[] clone_a;
		delete[] clone_b;
		return info;
	}