Skip to content

num::solve_transpose

Defined in header <linear/factorization/block_tridiagonal.hpp>, <linear/factorization/cholesky.hpp>, <linear/factorization/factor.hpp>, <linear/factorization/lu.hpp>, <linear/factorization/mixed_lu.hpp>, <linear/factorization/reuse.hpp>, <linear/factorization/woodbury.hpp>, <linear/solve.hpp>, <linear/solvers/auto_linear.hpp>, <linear/sparse/klu.hpp>

template <class F, class RHS>
RHS solve_transpose(const F &factor, const RHS &b)
requires requires(RHS &x);  // (1)

template <class F, class RHS>
void solve_transpose(detail::transposed_factor<F> factor, const RHS &b, RHS &x);  // (2)

template <std::floating_point T>
void solve_transpose(const lu_result<T> &f, const std::type_identity_t<vec<T>> &b,
                     vec<T> &x);  // (3)

template <std::floating_point T>
void solve_transpose(const lu_result<T> &f, const std::type_identity_t<mat<T>> &B,
                     mat<T> &X);  // (4)

void solve_transpose(const cholesky_result &f, const vec<real> &b, vec<real> &x);  // (5)

void solve_transpose(const cholesky_result &f, const mat<real> &B, mat<real> &X);  // (6)

void solve_transpose(const block_lu_factor &factor, const mat<real> &B, mat<real> &X);  // (7)

void solve_transpose(const block_lu_factor &factor, const vec<real> &b, vec<real> &x);  // (8)

friend void solve_transpose(const auto_linear_solver &, const vec<real> &, vec<real> &);  // (9)

friend void solve_transpose(const auto_linear_solver &, const mat<real> &, mat<real> &);  // (10)

friend void solve_transpose(const klu_factorization &, const vec<real> &, vec<real> &);  // (11)

friend void solve_transpose(const klu_factorization &, const mat<real> &, mat<real> &);  // (12)

void solve_transpose(const block_cholesky_factor &Z, const vec<real> &b, vec<real> &x);  // (13)

void solve_transpose(const block_cholesky_factor &Z, const mat<real> &B, mat<real> &X);  // (14)

template <class F, class RHS>
void solve_transpose(const similar_factor<F> &Z, const RHS &b, RHS &x);  // (15)

void solve_transpose(const mixed_lu &F, const vec<real> &b, vec<real> &x);  // (16)

void solve_transpose(const mixed_lu &F, const mat<real> &B, mat<real> &X);  // (17)

template <class RHS>
friend void solve_transpose(const woodbury_solver &W, const RHS &b, RHS &x);  // (18)

template <class RHS>
friend void solve_transpose(const corrected_factor &Z, const RHS &rhs, RHS &out);  // (19)

template <class RHS>
void solve_transpose(const suffix_block_lu &Z, const RHS &rhs, RHS &out);  // (20)

template <class RHS>
void solve_transpose(const suffix_block_cholesky &Z, const RHS &rhs, RHS &out);  // (21)

(1) Solve \(A^Tx = b\), allocating x.

(2) Undocumented.

(3) Solve \(A^T x = b\). x may be b.

\(A^T = U^T L^T P\), so \(U^T Q = B\), \(L^T Y = Q\), \(X = P^T Y\).

(4) Solve \(A^T X = B\). X may be B.

(5) Solve \(A^Tx=b\), the same solve since \(A\) is symmetric.

(6) Undocumented.

(7) Solve \(A^{T}X = B\) from the same factors, without refactorizing.

\(A = \mathcal{L}\mathcal{U}\) gives \(A^{T} = \mathcal{U}^{T}\mathcal{L}^{T}\), so the block dependency runs the other way: a forward sweep through \(\mathcal{U}^{T}\) (block lower bidiagonal, upper[k]^T below the diagonal) followed by a backward sweep through \(\mathcal{L}^{T}\) (block unit upper bidiagonal, lower[k]^T above it).

(8) Solve \(A^{T}x = b\) from the same factors, without refactorizing.

(9) Solve \(A^Tx = b\). x may be b.

(10) Undocumented.

(11) Solve \(A^Tx = b\). x may be b.

(12) Undocumented.

(13) Undocumented.

(14) Undocumented.

(15) Undocumented.

(16) Solve \(A^Tx = b\) to double-precision accuracy. x may be b.

(17) Solve \(A^TX = B\), refining each column. X may be B.

(18) Solve \((A_{base} + PQ^{T})^{T}x = b\).

x may be b.

(19) Undocumented.

(20) Undocumented.

(21) Undocumented.