d_mat.h – double precision matrices

Memory management

void d_mat_init(d_mat_t mat, slong rows, slong cols)

Initialises a matrix with the given number of rows and columns for use.

void d_mat_clear(d_mat_t mat)

Clears the given matrix.

Basic assignment and manipulation

void d_mat_set(d_mat_t mat1, const d_mat_t mat2)

Sets mat1 to a copy of mat2. The dimensions of mat1 and mat2 must be the same.

void d_mat_swap_entrywise(d_mat_t mat1, d_mat_t mat2)

Swaps two matrices by swapping the individual entries rather than swapping the contents of the structs.

double d_mat_entry(d_mat_t mat, slong i, slong j)

Returns the entry of mat at row \(i\) and column \(j\). Both \(i\) and \(j\) must not exceed the dimensions of the matrix. This function is implemented as a macro.

double d_mat_get_entry(const d_mat_t mat, slong i, slong j)

Returns the entry of mat at row \(i\) and column \(j\). Both \(i\) and \(j\) must not exceed the dimensions of the matrix.

double *d_mat_entry_ptr(const d_mat_t mat, slong i, slong j)

Returns a pointer to the entry of mat at row \(i\) and column \(j\). Both \(i\) and \(j\) must not exceed the dimensions of the matrix.

void d_mat_zero(d_mat_t mat)

Sets all entries of mat to 0.

Random matrix generation

void d_mat_randtest(d_mat_t mat, flint_rand_t state, slong minexp, slong maxexp)

Sets the entries of mat to random signed numbers with exponents between minexp and maxexp or zero.

Input and output

void d_mat_print(const d_mat_t mat)

Prints the given matrix to the stream stdout.

Comparison

int d_mat_equal(const d_mat_t mat1, const d_mat_t mat2)

Returns a non-zero value if mat1 and mat2 have the same dimensions and entries, and zero otherwise.

int d_mat_approx_equal(const d_mat_t mat1, const d_mat_t mat2, double eps)

Returns a non-zero value if mat1 and mat2 have the same dimensions and entries within eps of each other, and zero otherwise.

int d_mat_is_square(const d_mat_t mat)

Returns a non-zero value if the number of rows is equal to the number of columns in mat, and otherwise returns zero.

Transpose

void d_mat_transpose(d_mat_t B, const d_mat_t A)

Sets \(B\) to \(A^T\), the transpose of \(A\). Dimensions must be compatible. \(A\) and \(B\) are allowed to be the same object if \(A\) is a square matrix.

Matrix multiplication

void d_mat_mul_classical(d_mat_t C, const d_mat_t A, const d_mat_t B)

Sets C to the matrix product \(C = A B\). The matrices must have compatible dimensions for matrix multiplication (an exception is raised otherwise). Aliasing is allowed.