int gsl_linalg_LQ_solve_T (const gsl_matrix * LQ, const gsl_vector * tau, const gsl_vector * b, gsl_vector * x) { if (LQ->size1 != LQ->size2) { GSL_ERROR ("LQ matrix must be square", GSL_ENOTSQR); } else if (LQ->size2 != b->size) { GSL_ERROR ("matrix size must match b size", GSL_EBADLEN); } else if (LQ->size1 != x->size) { GSL_ERROR ("matrix size must match solution size", GSL_EBADLEN); } else { /* Copy x <- b */ gsl_vector_memcpy (x, b); /* Solve for x */ gsl_linalg_LQ_svx_T (LQ, tau, x); return GSL_SUCCESS; } }
CAMLprim value ml_gsl_linalg_LQ_svx_T(value LQ, value TAU, value X) { _DECLARE_MATRIX(LQ); _DECLARE_VECTOR2(TAU, X); _CONVERT_MATRIX(LQ); _CONVERT_VECTOR2(TAU, X); gsl_linalg_LQ_svx_T(&m_LQ, &v_TAU, &v_X); return Val_unit; }
/** * C++ version of gsl_linalg_LQ_svx_T(). * @param LQ A matrix * @param tau A vector * @param x A vector * @return Error code on failure */ inline int LQ_svx_T( matrix const& LQ, vector const& tau, vector& x ){ return gsl_linalg_LQ_svx_T( LQ.get(), tau.get(), x.get() ); }