cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
lu.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_ALGORITHMS_SOLVER_LU_H
4#define pRC_ALGORITHMS_SOLVER_LU_H
5
15
16namespace pRC::Solver
17{
24 class LU
25 {
26 public:
47 class RA = RemoveConstReference<XA>, class XB,
48 class RB = RemoveReference<XB>, class XX = decltype(zero<RB>()),
49 class RX = RemoveReference<XX>>
50 requires IsInvocable<Apply<OT, OR, OH>, XA, XX>
51 inline constexpr auto operator()(XA &&A, XB &&b) const
52 {
53 constexpr auto N = RA::size(0);
54
55 auto A_ = lu<OH>(transform<OT>(forward<XA>(A)));
56
57 Tensor Upper = upperTriangular(A_);
59 extractDiagonal(Lower) = unit();
60
63
64 auto const z = eval(apply<OT, OR, OH>(A, x));
65
66 if(!isApprox(z, b))
67 {
68 Logging::error("LU solver failed");
69 }
70
71 return x;
72 }
73 };
74}
75#endif // pRC_ALGORITHMS_SOLVER_LU_H
Class representing an LU solver for linear equations A*x=b.
Definition lu.hpp:25
Definition tensor.hpp:25
Definition concepts.hpp:31
Uncopyable z
Definition gmock-matchers-containers_test.cc:378
const double y
Definition gmock-matchers-containers_test.cc:377
int x
Definition gmock-matchers-containers_test.cc:376
static void error(Xs &&...args)
Definition log.hpp:14
Restrict
Definition restrict.hpp:9
Hint
Definition hint.hpp:9
Transform
Definition transform.hpp:9
Definition backward_substitution.hpp:13
static constexpr auto transform(X &&a)
Definition transform.hpp:15
static constexpr decltype(auto) solve(Solver &&solver, XA &&A, XB &&b)
Definition solve.hpp:18
static constexpr auto unit()
Definition unit.hpp:13
static constexpr auto upperTriangular(X &&a)
Definition upper_triangular.hpp:14
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr decltype(auto) apply(JacobiRotation< T > const &r, X &&m, Index const p, Index const q)
Definition jacobi_rotation.hpp:321
static constexpr auto strictlyLowerTriangular(X &&a)
Definition strictly_lower_triangular.hpp:14
static constexpr auto lu(X &&a)
LU decomposition of a square matrix.
Definition lu.hpp:33
static constexpr auto extractDiagonal(X &&a)
Definition extract_diagonal.hpp:16
static constexpr auto isApprox(XE &&expected, XA &&approx, TT const &tolerance=NumericLimits< TT >::tolerance())
Definition is_approx.hpp:14
RemoveConst< RemoveReference< T > > RemoveConstReference
Definition basics.hpp:47
static constexpr auto zero()
Definition zero.hpp:12
static constexpr decltype(auto) eval(X &&a)
Definition eval.hpp:12
Definition apply.hpp:17