42#include "fcarouge/linalg.hpp"
44#include <benchmark/benchmark.h>
54template <
typename Numerator, fcarouge::algebraic Denominator>
57 return rhs.transpose()
58 .fullPivHouseholderQr()
59 .solve(
lhs.transpose())
69template <auto StateSize, auto OutputSize>
81 internal::for_constexpr<0, OutputSize, 1>(
88 ::benchmark::ClobberMemory();
89 const auto start{clock::now()};
93 ::benchmark::ClobberMemory();
94 const auto end{clock::now()};
97 std::chrono::duration<double>{end -
start}.count());
104 ->Name(
"update_linalg_${STATE_SIZE}x${OUTPUT_SIZE}x0")
105 ->Unit(::benchmark::kNanosecond)
106 ->ComputeStatistics(
"min", [](
const auto &
results) {
107 return std::ranges::min(
results);
109 return std::ranges::max(
results);
implementation::output output
Type of the observation column vector Z.
constexpr void update(const auto &...arguments)
Updates the estimates with the outcome of a measurement.
The Kalman filter class and library top-level header.
column_vector< float, Size > vector
Benchmark implementation.
Eigen::Vector< Type, Row > column_vector
Compile-time sized Eigen3 column vector.
constexpr auto operator/(const Numerator &lhs, const Denominator &rhs) -> quotient< Numerator, Denominator >
A user-definable algebraic division solution.