FLINT3.7.0-dev

gr_mat_nonsingular_solve_tril, gr_mat_nonsingular_solve_tril_generic, gr_mat_nonsingular_solve_tril_classical, gr_mat_nonsingular_solve_tril_recursive, gr_mat_nonsingular_solve_triu, gr_mat_nonsingular_solve_triu_generic, gr_mat_nonsingular_solve_triu_classical, gr_mat_nonsingular_solve_triu_recursive

Synopsis#include <flint/gr_mat.h>
int gr_mat_nonsingular_solve_tril(gr_mat_t X, const gr_mat_t L, const gr_mat_t B, int unit, gr_ctx_t ctx)source
int gr_mat_nonsingular_solve_tril_generic(gr_mat_t X, const gr_mat_t L, const gr_mat_t B, int unit, gr_ctx_t ctx)source
int gr_mat_nonsingular_solve_tril_classical(gr_mat_t X, const gr_mat_t L, const gr_mat_t B, int unit, gr_ctx_t ctx)source
int gr_mat_nonsingular_solve_tril_recursive(gr_mat_t X, const gr_mat_t L, const gr_mat_t B, int unit, gr_ctx_t ctx)source
int gr_mat_nonsingular_solve_triu(gr_mat_t X, const gr_mat_t U, const gr_mat_t B, int unit, gr_ctx_t ctx)source
int gr_mat_nonsingular_solve_triu_generic(gr_mat_t X, const gr_mat_t U, const gr_mat_t B, int unit, gr_ctx_t ctx)source
int gr_mat_nonsingular_solve_triu_classical(gr_mat_t X, const gr_mat_t U, const gr_mat_t B, int unit, gr_ctx_t ctx)source
int gr_mat_nonsingular_solve_triu_recursive(gr_mat_t X, const gr_mat_t U, const gr_mat_t B, int unit, gr_ctx_t ctx)source

Solve LX = B for a lower triangular L, or UX = B for an upper triangular U. Only the relevant triangle is read. If unit is set, the diagonal is taken to be all ones and is not read (it may hold other data, such as the U factor of a packed LU decomposition). Otherwise the diagonal entries are inverted if possible and divided by otherwise; a division that fails gives GR_DOMAIN, even if the system has a solution.

The classical versions substitute row by row with one dot product per entry of X. The recursive versions split the triangular matrix into blocks and reduce the work to two half-size triangular solves and one matrix product, so that they benefit from fast gr_mat_mul. The default methods GR_METHOD_MAT_NONSINGULAR_SOLVE_TRIL and ..._TRIU use the classical version when B has fewer than 10 rows or columns and the recursive version otherwise; fq, fq_nmod, fq_zech, mpn_mod and nfloat override them. X may be aliased with B.

Cite this page

The FLINT team, “gr_mat_nonsingular_solve_tril, gr_mat_nonsingular_solve_tril_generic, gr_mat_nonsingular_solve_tril_classical, gr_mat_nonsingular_solve_tril_recursive, gr_mat_nonsingular_solve_triu, gr_mat_nonsingular_solve_triu_generic, gr_mat_nonsingular_solve_triu_classical, gr_mat_nonsingular_solve_triu_recursive (gr_mat.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/gr_mat/gr_mat_nonsingular_solve_tril.html (generated 2026-10-20).