FancySafeBot 0.0.1
A safe robotics library
Loading...
Searching...
No Matches
fsb_linalg.h
1#pragma once
2
3#ifdef __cplusplus
4extern "C"
5{
6#endif
7
8#include <math.h>
9#include <stddef.h>
10#include <stdbool.h>
11
19#define FSB_MAX(a, b) (((a) > (b)) ? (a) : (b))
20#define FSB_MIN(a, b) (((a) < (b)) ? (a) : (b))
21
25typedef double double_t;
26
62
86 const double_t mat[], size_t rows, size_t cols, bool u_full, bool v_full, size_t work_len, double_t work[], double_t unitary_u[],
87 double_t sing_val[], double_t unitary_vt[]);
88
104 const double_t mat[], size_t dim, size_t work_len, double_t work[],
105 double_t val_real[], double_t val_imag[],
106 double_t vec_real[], double_t vec_imag[]);
107
120 const double_t mat[], size_t dim, size_t work_len, double_t work[],
121 double_t val[], double_t vec[]);
122
132 const double_t mat[], size_t dim, double_t mat_chol[]);
133
151 size_t nrhs, size_t dim,
152 size_t work_len, double_t work[],
153 double_t x_vec[]);
154
165bool fsb_linalg_is_posdef(const double_t mat[], size_t dim, size_t work_len, double_t work[]);
166
182 const double_t mat[], const double_t y_vec[], size_t nrhs, size_t dim, size_t work_len,
183 size_t iwork_len, double_t work[], int iwork[], double_t x_vec[]);
184
200FsbLinalgErrorType fsb_linalg_pseudoinverse(const double_t mat[], size_t rows, size_t columns, size_t work_len, double_t work[], double_t inv_mat[]);
201
220 const double_t mat[], size_t rows, size_t columns, const double_t b_vec[], size_t nrhs,
221 size_t work_len, double_t work[], double_t x_vec[]);
222
226void sample_dgels_example(void);
227
232#ifdef __cplusplus
233}
234#endif
bool fsb_linalg_is_posdef(const double_t mat[], size_t dim, size_t work_len, double_t work[])
Check if lower triangular symmetric matrix is positive definite.
Definition fsb_linalg.c:398
FsbLapackErrorType
Error codes for linear algebra functions.
Definition fsb_linalg.h:31
FsbLinalgErrorType fsb_linalg_matrix_eig(const double_t mat[], size_t dim, size_t work_len, double_t work[], double_t val_real[], double_t val_imag[], double_t vec_real[], double_t vec_imag[])
Eigenvalue decomposition.
Definition fsb_linalg.c:88
FsbLinalgErrorType fsb_linalg_cholesky_decomposition(const double_t mat[], size_t dim, double_t mat_chol[])
Cholesky factorization for symmetric positive definite matrix.
Definition fsb_linalg.c:291
FsbLinalgErrorType fsb_linalg_leastsquares_solve(const double_t mat[], size_t rows, size_t columns, const double_t b_vec[], size_t nrhs, size_t work_len, double_t work[], double_t x_vec[])
Solve overdetermined or underdetermined system using least squares.
Definition fsb_linalg.c:578
FsbLinalgErrorType fsb_linalg_svd(const double_t mat[], size_t rows, size_t cols, bool u_full, bool v_full, size_t work_len, double_t work[], double_t unitary_u[], double_t sing_val[], double_t unitary_vt[])
SVD decomposition.
Definition fsb_linalg.c:8
FsbLinalgErrorType fsb_linalg_matrix_sqr_solve(const double_t mat[], const double_t y_vec[], size_t nrhs, size_t dim, size_t work_len, size_t iwork_len, double_t work[], int iwork[], double_t x_vec[])
FsbLinalgErrorType fsb_linalg_cholesky_solve(const double_t mat[], const double_t b_vec[], size_t nrhs, size_t dim, size_t work_len, double_t work[], double_t x_vec[])
Cholesky solve.
Definition fsb_linalg.c:334
FsbLinalgErrorType fsb_linalg_sym_lt_eig(const double_t mat[], size_t dim, size_t work_len, double_t work[], double_t val[], double_t vec[])
Eigenvalue decomposition for symmetric lower triangular matrix.
Definition fsb_linalg.c:212
double double_t
Floating point type.
Definition fsb_linalg.h:25
enum FsbLapackErrorType FsbLinalgErrorType
Error codes for linear algebra functions.
FsbLinalgErrorType fsb_linalg_pseudoinverse(const double_t mat[], size_t rows, size_t columns, size_t work_len, double_t work[], double_t inv_mat[])
Inverse of a matrix where number of columns are great er than or equal to number of rows.
Definition fsb_linalg.c:490
@ EFSB_LAPACK_ERROR_INPUT
Input value error.
Definition fsb_linalg.h:39
@ EFSB_LAPACK_ERROR_NOT_FULL_RANK
Matrix is not full rank.
Definition fsb_linalg.h:60
@ EFSB_LAPACK_ERROR_QUERY
Work query failed.
Definition fsb_linalg.h:51
@ EFSB_LAPACK_ERROR_MEMORY
Not enough memory.
Definition fsb_linalg.h:43
@ EFSB_LAPACK_NOT_POSITIVE_DEFINITE
Matrix not positive definite.
Definition fsb_linalg.h:55
@ EFSB_LAPACK_ERROR_CONVERGE
Solution did not converge.
Definition fsb_linalg.h:47
@ EFSB_LAPACK_SINGULAR
Input matrix is singular.
Definition fsb_linalg.h:59
@ EFSB_LAPACK_ERROR_NONE
No error.
Definition fsb_linalg.h:35