nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
linalg/include/nk/linalg/solvers.hpp
Go to the documentation of this file.
1
3// toolboxes/linalg/include/nk/linalg/solvers.hpp
4//
5// Linear-system solvers: linsolve, lsqminnorm, lsqnonneg.
6// Migrated from toolboxes/builtin/src/language/arrays/{matrix,lsq}.cpp.
7
8#pragma once
9
10#include <memory_resource>
11#include <string>
12#include <nk/value/value.hpp>
13
14namespace nk::linalg {
15
18
19
25Value linsolve(const Value &A, const Value &B, std::pmr::memory_resource *mr = nullptr);
26
31Value lsqminnorm(const Value &A, const Value &B, bool have_tol, double tol_user,
32 std::pmr::memory_resource *mr = nullptr);
33
35struct NnlsResult {
37 double resnorm;
41 std::string algorithm;
42 std::string message;
43};
44
50 std::pmr::memory_resource *mr = nullptr);
51
52
54} // namespace nk::linalg
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
Value linsolve(const Value &A, const Value &B, std::pmr::memory_resource *mr=nullptr)
Solve A·X = B (X = linsolve(A, B)).
NnlsResult lsqnonneg_impl(const Value &C, const Value &d, std::pmr::memory_resource *mr=nullptr)
Non-negative least-squares (x = lsqnonneg(C, d)).
Value lsqminnorm(const Value &A, const Value &B, bool have_tol, double tol_user, std::pmr::memory_resource *mr=nullptr)
Minimum-norm least-squares solution (X = lsqminnorm(A, B)).
Value residual
Residual column d − C·x.
Value x
Non-negative solution column.
int iterations
Outer-loop iteration count.
double resnorm
Squared 2-norm of the residual ‖C·x − d‖².
std::string algorithm
Always "active-set".
std::string message
Termination message.