55 typedef size_t aa_la_size;
77 #define AA_DVEC_REF(v,i) ((v)->data[(i) * (v)->inc]) 86 #define AA_DMAT_REF(M,i,j) (((M)->data)[(M)->ld*(j) + (i)]) 91 (aa_la_err_fun)(
const char *message );
94 aa_la_err(
const char *message );
97 aa_la_set_err( aa_la_err_fun *fun );
103 #define AA_VEC_ARGS(X) (X->data), ((int)(X->inc)) 108 #define AA_MAT_ARGS(X) (X->data), ((int)(X->ld)) 158 size_t row_start,
size_t col_start,
159 size_t rows,
size_t cols );
177 size_t row_start,
size_t col_start,
178 size_t row_end,
size_t col_end,
220 #define AA_MAT_DIAG(VEC,MAT) \ 221 aa_dvec_view((VEC), (MAT)->cols, (MAT)->data, 1+(MAT)->ld); 370 double alpha,
const struct aa_dmat *A,
372 double beta,
struct aa_dvec *y );
384 aa_dmat_gemm( CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
385 double alpha,
const struct aa_dmat *A,
387 double beta,
struct aa_dmat *C );
AA_API void aa_dvec_copy(const struct aa_dvec *x, struct aa_dvec *y)
Copy x to y.
aa_la_size inc
Increment between successive vector elements.
AA_API int aa_dmat_dzdpinv(const struct aa_dmat *A, double s_min, struct aa_dmat *As)
Dead-zone damped pseudo-inverse.
AA_API double aa_dvec_dot(const struct aa_dvec *x, struct aa_dvec *y)
Dot product.
AA_API void aa_dvec_swap(struct aa_dvec *x, struct aa_dvec *y)
Swap x and y.
AA_API int aa_dmat_inv(struct aa_dmat *A)
Matrix inverse, in-place.
static struct aa_dvec AA_DVEC_INIT(size_t len, double *data, size_t inc)
Fill in a vector descriptor.
AA_API void aa_dmat_scal(struct aa_dmat *A, double alpha)
Scale the matrix A by alpha.
AA_API void aa_dmat_zero(struct aa_dmat *mat)
Zero a matrix.
aa_la_size len
Number of elements in vector.
aa_la_size cols
number of columns
static struct aa_dmat AA_DMAT_INIT(size_t rows, size_t cols, double *data, size_t ld)
Fill in a matrix descriptor.
AA_API double aa_dvec_nrm2(const struct aa_dvec *x)
Euclidean Norm.
AA_API struct aa_dmat * aa_dmat_dup(struct aa_mem_region *reg, const struct aa_dmat *src)
Duplicate matrix out of region.
AA_API struct aa_dmat * aa_dmat_alloc(struct aa_mem_region *reg, size_t rows, size_t cols)
Region-allocate a matrix.
AA_API void aa_dvec_scal(double alpha, struct aa_dvec *x)
Scale x by alpha.
AA_API double aa_dmat_nrm2(const struct aa_dmat *x)
Euclidean Norm.
AA_API void aa_dmat_trans(const struct aa_dmat *A, struct aa_dmat *At)
Matrix transpose.
AA_API void aa_dmat_row_vec(const struct aa_dmat *src, size_t row, struct aa_dvec *dst)
View a row of a matrix as a vector.
Data Structure for Region-Based memory allocation.
AA_API void aa_dmat_block(const struct aa_dmat *src, size_t row_start, size_t col_start, size_t row_end, size_t col_end, struct aa_dmat *dst)
View a block of a matrix.
AA_API void aa_dvec_set(struct aa_dvec *vec, double alpha)
Fill a vector.
AA_API void aa_dmat_lacpy(const char uplo[1], const struct aa_dmat *A, struct aa_dmat *B)
Copies all or part of a two-dimensional matrix A to another matrix B.
AA_API struct aa_dmat * aa_dmat_malloc(size_t rows, size_t cols)
Heap-allocate a matrix.
AA_API void aa_dmat_view(struct aa_dmat *mat, size_t rows, size_t cols, double *data, size_t ld)
Fill in a matrix descriptor.
AA_API int aa_dmat_dpinv(const struct aa_dmat *A, double k, struct aa_dmat *As)
Damped pseudo-inverse.
AA_API void aa_dmat_col_vec(const struct aa_dmat *src, size_t col, struct aa_dvec *dst)
View a column of a matrix as a vector.
AA_API void aa_dmat_gemv(CBLAS_TRANSPOSE trans, double alpha, const struct aa_dmat *A, const struct aa_dvec *x, double beta, struct aa_dvec *y)
General Matrix-Vector multiply.
aa_la_size ld
Leading dimension of matrix.
AA_API struct aa_dvec * aa_dvec_alloc(struct aa_mem_region *reg, size_t len)
Region-allocate a vector.
AA_API void aa_dvec_axpy(double a, const struct aa_dvec *x, struct aa_dvec *y)
Alpha x plus y.
AA_API void aa_dvec_view(struct aa_dvec *vec, size_t len, double *data, size_t inc)
Fill in a vector descriptor.
#define AA_API
calling and name mangling convention for functions
AA_API void aa_dmat_diag_vec(const struct aa_dmat *src, struct aa_dvec *dst)
View the diagonal of a matrix as a vector.
aa_la_size rows
number of rows in matrix
AA_API void aa_dmat_axpy(double alpha, const struct aa_dmat *X, struct aa_dmat *Y)
Y += alpha * X.
AA_API double aa_dvec_ssd(const struct aa_dvec *x, const struct aa_dvec *y)
sum-square-differences of two vectors
AA_API void aa_dmat_copy(const struct aa_dmat *A, struct aa_dmat *B)
Copy a matrix.
AA_API void aa_dmat_inc(struct aa_dmat *A, double alpha)
Increment the matrix A by alpha.
AA_API void aa_dvec_inc(double alpha, struct aa_dvec *x)
Increment x by alpha.
double * data
Pointer to matrix data.
Descriptor for a block matrix.
double * data
Pointer to data.
AA_API void aa_dvec_slice(const struct aa_dvec *src, size_t start, size_t stop, size_t step, struct aa_dvec *dst)
View a slice of a vector.
AA_API double aa_dmat_ssd(const struct aa_dmat *x, const struct aa_dmat *y)
sum-square-differences of two matrices
AA_API void aa_dvec_zero(struct aa_dvec *vec)
Zero a vector.
AA_API struct aa_dvec * aa_dvec_dup(struct aa_mem_region *reg, const struct aa_dvec *src)
Duplicate vector out of region.
AA_API void aa_dmat_set(struct aa_dmat *A, double alpha, double beta)
Fill a matrix diagonal and off-diagonal elements.
AA_API void aa_dmat_view_block(struct aa_dmat *dst, const struct aa_dmat *src, size_t row_start, size_t col_start, size_t rows, size_t cols)
View a block of a matrix.
AA_API struct aa_dvec * aa_dvec_malloc(size_t len)
Heap-allocate a vector.
AA_API void aa_dmat_gemm(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, double alpha, const struct aa_dmat *A, const struct aa_dmat *B, double beta, struct aa_dmat *C)
General Matrix-Matrix multiply.
AA_API int aa_dmat_pinv(const struct aa_dmat *A, double tol, struct aa_dmat *As)
Pseudo-inverse.