nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
decompositions.hpp
Go to the documentation of this file.
1
3// toolboxes/linalg/include/nk/linalg/decompositions.hpp
4//
5// Classical matrix factorisations: Cholesky, LU, QR, SVD.
6// Migrated from toolboxes/builtin/src/language/arrays/matrix.cpp.
7
8#pragma once
9
10#include <memory_resource>
11#include <tuple>
12#include <nk/value/value.hpp>
13
14namespace nk::linalg {
15
18
19
28Value chol(const Value &A, std::pmr::memory_resource *mr = nullptr);
29
34std::tuple<Value, Value, Value>
35lu_decompose(const Value &A, std::pmr::memory_resource *mr = nullptr);
36
38Value lu_combined(const Value &A, std::pmr::memory_resource *mr = nullptr);
39
44std::tuple<Value, Value>
45qr_decompose(const Value &A, std::pmr::memory_resource *mr = nullptr);
46
48Value qr_R_only(const Value &A, std::pmr::memory_resource *mr = nullptr);
49
53std::tuple<Value, Value, Value>
54svd_decompose(const Value &A, std::pmr::memory_resource *mr = nullptr);
55
57Value svd_values(const Value &A, std::pmr::memory_resource *mr = nullptr);
58
64std::tuple<Value, Value>
65qrupdate(const Value &Q, const Value &R, const Value &u, const Value &v,
66 std::pmr::memory_resource *mr = nullptr);
67
75std::tuple<Value, Value>
76qrinsert(const Value &Q, const Value &R, std::size_t k_1based, const Value &x,
77 std::pmr::memory_resource *mr = nullptr);
78
86std::tuple<Value, Value>
87qrdelete(const Value &Q, const Value &R, std::size_t k_1based,
88 std::pmr::memory_resource *mr = nullptr);
89
108Value cholupdate(const Value &R, const Value &x, int sign = 1,
109 std::pmr::memory_resource *mr = nullptr);
110
111
113} // namespace nk::linalg
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
std::tuple< Value, Value, Value > svd_decompose(const Value &A, std::pmr::memory_resource *mr=nullptr)
Singular value decomposition ([U, S, V] = svd_decompose(A)).
std::tuple< Value, Value, Value > lu_decompose(const Value &A, std::pmr::memory_resource *mr=nullptr)
LU with partial pivoting ([L, U, P] = lu_decompose(A)).
Value lu_combined(const Value &A, std::pmr::memory_resource *mr=nullptr)
Combined L+U output (LU = lu(A) single-output form).
Value chol(const Value &A, std::pmr::memory_resource *mr=nullptr)
Cholesky factorisation (R = chol(A)).
Value qr_R_only(const Value &A, std::pmr::memory_resource *mr=nullptr)
R-only QR output (R = qr(A) single-output form).
std::tuple< Value, Value > qrupdate(const Value &Q, const Value &R, const Value &u, const Value &v, std::pmr::memory_resource *mr=nullptr)
Rank-1 QR update ([Q1, R1] = qrupdate(Q, R, u, v)).
Value cholupdate(const Value &R, const Value &x, int sign=1, std::pmr::memory_resource *mr=nullptr)
Rank-1 Cholesky update / downdate (R1 = cholupdate(R, x[, sign])).
std::tuple< Value, Value > qr_decompose(const Value &A, std::pmr::memory_resource *mr=nullptr)
QR via Householder reflections ([Q, R] = qr_decompose(A)).
std::tuple< Value, Value > qrinsert(const Value &Q, const Value &R, std::size_t k_1based, const Value &x, std::pmr::memory_resource *mr=nullptr)
Insert column into QR ([Q1, R1] = qrinsert(Q, R, k, x)).
std::tuple< Value, Value > qrdelete(const Value &Q, const Value &R, std::size_t k_1based, std::pmr::memory_resource *mr=nullptr)
Delete column from QR ([Q1, R1] = qrdelete(Q, R, k)).
Value svd_values(const Value &A, std::pmr::memory_resource *mr=nullptr)
Singular values only (s = svd(A) single-output form).