rsLQR  0.1
linalg.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 #include "matrix.h"
16 
17 #ifdef USE_MKL
18 static const int kUseMKL = 1;
19 #else
20 static const int kUseMKL = 0;
21 #endif
22 
23 #ifdef USE_EIGEN
24 static const int kUseEigen = 1;
25 #else
26 static const int kUseEigen = 0;
27 #endif
28 
29 #ifdef USE_CLAP
30 static const int kUseClap = 1;
31 #else
32 static const int kUseClap = 0;
33 #endif
34 
35 #ifdef USE_BLAS
36 static const int kUseBLAS = 1;
37 #else
38 static const int kUseBLAS = 0;
39 #endif
40 
53 typedef struct {
54  char uplo;
55  int success;
56  char lib;
57  void* fact;
58  int is_freed;
59 } CholeskyInfo;
60 
67 
76 void FreeFactorization(CholeskyInfo* cholinfo);
77 
83  libBLAS = 0,
84  libMKL = 1,
85  libEigen = 2,
86  libInternal = 3,
87 };
88 
103 int MatrixAddition(Matrix* A, Matrix* B, double alpha);
104 
114 
125 
136 int MatrixCholeskySolve(Matrix* A, Matrix* b);
137 
147 
165 void MatrixMultiply(Matrix* A, Matrix* B, Matrix* C, bool tA, bool tB, double alpha,
166  double beta);
167 
183 void MatrixSymmetricMultiply(Matrix* Asym, Matrix* B, Matrix* C, double alpha, double beta);
184 
191 void MatrixCopyDiagonal(Matrix* dest, Matrix* src);
192 
201 
207 
CholeskyInfo
Stores info about a Cholesky decomposition.
Definition: linalg.h:53
CholeskyInfo::fact
void * fact
pointer to Eigen data
Definition: linalg.h:57
MatrixLinearAlgebraLibrary
MatrixLinearAlgebraLibrary
List of supported linear algebra libraries.
Definition: linalg.h:82
DefaultCholeskyInfo
CholeskyInfo DefaultCholeskyInfo()
Construct a default CholeskyInfo object.
Definition: linalg.c:22
CholeskyInfo::success
int success
0 if success, failure otherwise
Definition: linalg.h:55
CholeskyInfo::is_freed
int is_freed
has the Eigen data been freed
Definition: linalg.h:58
matrix.h
Matrix type and basic operations.
MatrixCholeskySolve
int MatrixCholeskySolve(Matrix *A, Matrix *b)
Solve a linear system using a precomputed Cholesky factorization.
Definition: linalg.c:134
Matrix
Represents a matrix of double-precision data.
Definition: matrix.h:71
MatrixCopyDiagonal
void MatrixCopyDiagonal(Matrix *dest, Matrix *src)
Copy just the diagonal element of src to the diagonal of dest.
Definition: linalg.c:215
MatrixCholeskyFactorize
int MatrixCholeskyFactorize(Matrix *mat)
Compute the Cholesky decomposition on the matrix A.
Definition: linalg.c:116
CholeskyInfo::uplo
char uplo
'L' or 'U'
Definition: linalg.h:54
MatrixCholeskySolveWithInfo
int MatrixCholeskySolveWithInfo(Matrix *A, Matrix *b, CholeskyInfo *cholinfo)
Solve a linear system using a precomputed Cholesky factorization.
Definition: linalg.c:89
MatrixPrintLinearAlgebraLibrary
void MatrixPrintLinearAlgebraLibrary()
Prints which linear algebra library is being used to stdout.
Definition: linalg.c:237
MatrixAddition
int MatrixAddition(Matrix *A, Matrix *B, double alpha)
Add two matrices of the same size, storing the result in B.
Definition: linalg.c:38
MatrixSymmetricMultiply
void MatrixSymmetricMultiply(Matrix *Asym, Matrix *B, Matrix *C, double alpha, double beta)
Matrix multiplication with a symmetric matrix A.
Definition: linalg.c:192
MatrixCholeskyFactorizeWithInfo
int MatrixCholeskyFactorizeWithInfo(Matrix *mat, CholeskyInfo *cholinfo)
Compute the Cholesky decomposition on the matrix A.
Definition: linalg.c:55
FreeFactorization
void FreeFactorization(CholeskyInfo *cholinfo)
Frees any data stored by the external library.
Definition: linalg.c:27
MatrixMultiply
void MatrixMultiply(Matrix *A, Matrix *B, Matrix *C, bool tA, bool tB, double alpha, double beta)
Matrix multiplication with scaling.
Definition: linalg.c:153
CholeskyInfo::lib
char lib
'B' for BLAS, 'E' for eigen, 'I' for internal
Definition: linalg.h:56
MatrixGetLinearAlgebraLibrary
enum MatrixLinearAlgebraLibrary MatrixGetLinearAlgebraLibrary()
Get the linear algebra library currently being used.
Definition: linalg.c:223