Mir 1.0
Mir application programming interface
Basic operations with vectors and matrices

Macros

#define mirml_mh_in_prod(a, b, p)   mirml_mh_in_prod_(a,b,0,p)
 Usual way of computing the inner product.
 

Functions

mirkl_error_tmirml_mh_m_add (const mirml_mh_matrix_t *A, const mirml_mh_matrix_t *B, mirml_mh_matrix_t **out)
 Matrix addition A+B. More...
 
mirkl_error_tmirml_mh_m_sub (const mirml_mh_matrix_t *A, const mirml_mh_matrix_t *B, mirml_mh_matrix_t **out)
 Matrix subtraction A-B. More...
 
mirkl_error_tmirml_mh_m_mlt (const mirml_mh_matrix_t *A, const mirml_mh_matrix_t *B, mirml_mh_matrix_t **out)
 Matrix-matrix multiplication. More...
 
mirkl_error_tmirml_mh_mmtr_mlt (const mirml_mh_matrix_t *A, const mirml_mh_matrix_t *B, mirml_mh_matrix_t **out)
 Matrix-matrix transposed multiplication. More...
 
mirkl_error_tmirml_mh_mtrm_mlt (const mirml_mh_matrix_t *A, const mirml_mh_matrix_t *B, mirml_mh_matrix_t **out)
 Matrix transposed-matrix multiplication. More...
 
mirkl_error_tmirml_mh_mv_mlt (const mirml_mh_matrix_t *A, const mirml_mh_vector_t *b, mirml_mh_vector_t **out)
 
mirkl_error_tmirml_mh_vm_mlt (const mirml_mh_matrix_t *A, const mirml_mh_vector_t *b, mirml_mh_vector_t **out)
 
mirkl_error_tmirml_mh_sm_mlt (double s, const mirml_mh_matrix_t *A, mirml_mh_matrix_t **out)
 Scalar-matrix multiplication. More...
 
mirkl_error_tmirml_mh_m_transp (const mirml_mh_matrix_t *in, mirml_mh_matrix_t **out)
 
mirkl_error_tmirml_mh_swap_rows (mirml_mh_matrix_t *A, mirkl_size_t i, mirkl_size_t j, mirkl_size_t lo, mirkl_size_t hi)
 
mirkl_error_tmirml_mh_swap_cols (mirml_mh_matrix_t *A, mirkl_size_t i, mirkl_size_t j, mirkl_size_t lo, mirkl_size_t hi)
 
mirkl_error_tmirml_mh_ms_mltadd (const mirml_mh_matrix_t *A1, const mirml_mh_matrix_t *A2, double s, mirml_mh_matrix_t **out)
 
mirkl_error_tmirml_mh_mv_mltadd (const mirml_mh_vector_t *v1, const mirml_mh_vector_t *v2, const mirml_mh_matrix_t *A, double alpha, mirml_mh_vector_t **out)
 
mirkl_error_tmirml_mh_vm_mltadd (const mirml_mh_vector_t *v1, const mirml_mh_vector_t *v2, const mirml_mh_matrix_t *A, double alpha, mirml_mh_vector_t **out)
 
mirkl_error_tmirml_mh_m_pow_ (const mirml_mh_matrix_t *A, int p, mirml_mh_matrix_t **tmp, mirml_mh_matrix_t **out)
 
mirkl_error_tmirml_mh_m_pow (const mirml_mh_matrix_t *A, int p, mirml_mh_matrix_t **out)
 
mirkl_error_tmirml_mh_m_exp_ (mirml_mh_matrix_t *A, double eps, mirml_mh_matrix_t **out, int *q_out, int *j_out)
 
mirkl_error_tmirml_mh_m_exp (mirml_mh_matrix_t *A, double eps, mirml_mh_matrix_t **out)
 
mirkl_error_tmirml_mh_m_poly (const mirml_mh_matrix_t *A, const mirml_mh_vector_t *a, mirml_mh_matrix_t **out)
 
mirkl_error_tmirml_mh_in_prod_ (const mirml_mh_vector_t *a, const mirml_mh_vector_t *b, mirkl_size_t i0, double *prod)
 Inner product of two vectors from i0 downwards. More...
 
mirkl_error_tmirml_mh_sv_mlt (double scalar, const mirml_mh_vector_t *vector, mirml_mh_vector_t **out)
 Scalar-vector multiplication. More...
 
mirkl_error_tmirml_mh_v_add (const mirml_mh_vector_t *v1, const mirml_mh_vector_t *v2, mirml_mh_vector_t **out)
 Vector addition. More...
 
mirkl_error_tmirml_mh_sv_add (const mirml_mh_vector_t *v1, const double v2, mirml_mh_vector_t **out)
 Scalar to vector addition element-wise. More...
 
mirkl_error_tmirml_mh_v_mltadd (const mirml_mh_vector_t *v1, const mirml_mh_vector_t *v2, double scale, mirml_mh_vector_t **out)
 scalar/vector multiplication and addition. More...
 
mirkl_error_tmirml_mh_v_sub (const mirml_mh_vector_t *v1, const mirml_mh_vector_t *v2, mirml_mh_vector_t **out)
 Vector subtraction. More...
 
mirkl_error_tmirml_mh_sv_sub (const mirml_mh_vector_t *v1, const double v2, mirml_mh_vector_t **out)
 Scalar from vector subtraction element-wise. More...
 
mirkl_error_tmirml_mh_v_map (double(*f)(double), const mirml_mh_vector_t *x, mirml_mh_vector_t **out)
 Maps function f over components of x. More...
 
mirkl_error_tmirml_mh_v_map_ (double(*f)(void *, double), void *params, const mirml_mh_vector_t *x, mirml_mh_vector_t **out)
 Similar to mirml_mh_v_map but additionally accepts pointer to user data, which is transferred to callback. More...
 
mirkl_error_tmirml_mh_v_lincomb (int n, const mirml_mh_vector_t *v[], const double a[], mirml_mh_vector_t **out)
 Linear combination. More...
 
mirkl_error_tmirml_mh_v_linlist (mirml_mh_vector_t **out, mirml_mh_vector_t *v1, double a1,...)
 Linear combinations taken from a list of arguments. More...
 
mirkl_error_tmirml_mh_v_star (const mirml_mh_vector_t *x1, const mirml_mh_vector_t *x2, mirml_mh_vector_t **out)
 Computes componentwise (Hadamard) product of vectors. More...
 
mirkl_error_tmirml_mh_v_slash (const mirml_mh_vector_t *x1, const mirml_mh_vector_t *x2, mirml_mh_vector_t **out)
 Computes componentwise ratio of vectors. More...
 
mirkl_error_tmirml_mh_v_min (const mirml_mh_vector_t *x, mirkl_size_t *min_idx, double *minval)
 Computes minimum component of vector. More...
 
mirkl_error_tmirml_mh_v_max (const mirml_mh_vector_t *x, mirkl_size_t *max_idx, double *maxval)
 Computes maximal component of vector. More...
 
mirkl_error_tmirml_mh_v_sort (mirml_mh_vector_t *x, mirml_mh_permutation_t *order)
 Sorts vector. More...
 
mirkl_error_tmirml_mh_v_sum (const mirml_mh_vector_t *x, double *ret)
 Returns sum of entries of a vector.
 
mirkl_error_tmirml_mh_v_conv (const mirml_mh_vector_t *x1, const mirml_mh_vector_t *x2, mirml_mh_vector_t **out)
 Computes convolution product of two vectors.
 
mirkl_error_tmirml_mh_v_pconv (const mirml_mh_vector_t *x1, const mirml_mh_vector_t *x2, mirml_mh_vector_t **out)
 Computes a periodic convolution product of two vectors. More...
 

Detailed Description

Function Documentation

◆ mirml_mh_in_prod_()

mirkl_error_t * mirml_mh_in_prod_ ( const mirml_mh_vector_t a,
const mirml_mh_vector_t b,
mirkl_size_t  i0,
double *  prod 
)

Inner product of two vectors from i0 downwards.

prod = a(i0:dim)^T * b(i0:dim)

◆ mirml_mh_m_add()

mirkl_error_t * mirml_mh_m_add ( const mirml_mh_matrix_t A,
const mirml_mh_matrix_t B,
mirml_mh_matrix_t **  out 
)

Matrix addition A+B.

Result is returned in out.

Note
May be in-situ, that is A == out

◆ mirml_mh_m_mlt()

mirkl_error_t * mirml_mh_m_mlt ( const mirml_mh_matrix_t A,
const mirml_mh_matrix_t B,
mirml_mh_matrix_t **  out 
)

Matrix-matrix multiplication.

A*B is returned, result stored in out.

◆ mirml_mh_m_sub()

mirkl_error_t * mirml_mh_m_sub ( const mirml_mh_matrix_t A,
const mirml_mh_matrix_t B,
mirml_mh_matrix_t **  out 
)

Matrix subtraction A-B.

Result is returned in out.

Note
May be in-situ, that is A == out

◆ mirml_mh_mmtr_mlt()

mirkl_error_t * mirml_mh_mmtr_mlt ( const mirml_mh_matrix_t A,
const mirml_mh_matrix_t B,
mirml_mh_matrix_t **  out 
)

Matrix-matrix transposed multiplication.

A*B^T is returned, and stored in out.

◆ mirml_mh_mtrm_mlt()

mirkl_error_t * mirml_mh_mtrm_mlt ( const mirml_mh_matrix_t A,
const mirml_mh_matrix_t B,
mirml_mh_matrix_t **  out 
)

Matrix transposed-matrix multiplication.

A^T*B is returned, result stored in out.

◆ mirml_mh_sm_mlt()

mirkl_error_t * mirml_mh_sm_mlt ( double  s,
const mirml_mh_matrix_t A,
mirml_mh_matrix_t **  out 
)

Scalar-matrix multiplication.

s*A is returned in out.

Note
May be in-situ, that is A == out

◆ mirml_mh_sv_add()

mirkl_error_t * mirml_mh_sv_add ( const mirml_mh_vector_t v1,
const double  v2,
mirml_mh_vector_t **  out 
)

Scalar to vector addition element-wise.

out = v1 + v2

Note
May be in-situ.

◆ mirml_mh_sv_mlt()

mirkl_error_t * mirml_mh_sv_mlt ( double  scalar,
const mirml_mh_vector_t vector,
mirml_mh_vector_t **  out 
)

Scalar-vector multiplication.

out = scalar*vector

Note
May be in-situ.

◆ mirml_mh_sv_sub()

mirkl_error_t * mirml_mh_sv_sub ( const mirml_mh_vector_t v1,
const double  v2,
mirml_mh_vector_t **  out 
)

Scalar from vector subtraction element-wise.

out = v1 - v2

Note
May be in-situ.

◆ mirml_mh_v_add()

mirkl_error_t * mirml_mh_v_add ( const mirml_mh_vector_t v1,
const mirml_mh_vector_t v2,
mirml_mh_vector_t **  out 
)

Vector addition.

out = v1 + v2

Note
May be in-situ.

◆ mirml_mh_v_lincomb()

mirkl_error_t * mirml_mh_v_lincomb ( int  n,
const mirml_mh_vector_t v[],
const double  a[],
mirml_mh_vector_t **  out 
)

Linear combination.

Returns sum_i a[i]*v[i], a[i] real, v[i] vectors

◆ mirml_mh_v_linlist()

mirkl_error_t * mirml_mh_v_linlist ( mirml_mh_vector_t **  out,
mirml_mh_vector_t v1,
double  a1,
  ... 
)

Linear combinations taken from a list of arguments.

Example:

err = mirml_mh_v_linlist(out, v1, a1, v2, a2, v3, a3, NULL);
mirkl_error_t * mirml_mh_v_linlist(mirml_mh_vector_t **out, mirml_mh_vector_t *v1, double a1,...)
Linear combinations taken from a list of arguments.

vi are vectors and ai are numbers (double).

◆ mirml_mh_v_map()

mirkl_error_t * mirml_mh_v_map ( double(*)(double)  f,
const mirml_mh_vector_t x,
mirml_mh_vector_t **  out 
)

Maps function f over components of x.

out[i] = f(x[i])

◆ mirml_mh_v_map_()

mirkl_error_t * mirml_mh_v_map_ ( double(*)(void *, double)  f,
void *  params,
const mirml_mh_vector_t x,
mirml_mh_vector_t **  out 
)

Similar to mirml_mh_v_map but additionally accepts pointer to user data, which is transferred to callback.

Sets out[i] = f(params, x[i]), i = 0, 1, .., dim-1

◆ mirml_mh_v_max()

mirkl_error_t * mirml_mh_v_max ( const mirml_mh_vector_t x,
mirkl_size_t *  max_idx,
double *  maxval 
)

Computes maximal component of vector.

Parameters
[in]xInput vector.
[out]max_idxIndex of maximal component.
[out]maxvalMaximal component of input vector.

◆ mirml_mh_v_min()

mirkl_error_t * mirml_mh_v_min ( const mirml_mh_vector_t x,
mirkl_size_t *  min_idx,
double *  minval 
)

Computes minimum component of vector.

Parameters
[in]xInput vector.
[out]min_idxIndex of minimal component.
[out]minvalMinimal component of input vector.

◆ mirml_mh_v_mltadd()

mirkl_error_t * mirml_mh_v_mltadd ( const mirml_mh_vector_t v1,
const mirml_mh_vector_t v2,
double  scale,
mirml_mh_vector_t **  out 
)

scalar/vector multiplication and addition.

out = v1 + scale*v2

◆ mirml_mh_v_pconv()

mirkl_error_t * mirml_mh_v_pconv ( const mirml_mh_vector_t x1,
const mirml_mh_vector_t x2,
mirml_mh_vector_t **  out 
)

Computes a periodic convolution product of two vectors.

Note
The period is the dimension of x2

◆ mirml_mh_v_slash()

mirkl_error_t * mirml_mh_v_slash ( const mirml_mh_vector_t x1,
const mirml_mh_vector_t x2,
mirml_mh_vector_t **  out 
)

Computes componentwise ratio of vectors.

out[i] = x2[i] / x1[i]

Note
If x1[i] == 0 for some i, then return MirmlMHSingEC error.

◆ mirml_mh_v_sort()

mirkl_error_t * mirml_mh_v_sort ( mirml_mh_vector_t x,
mirml_mh_permutation_t order 
)

Sorts vector.

Additionally generates permutation that gives the order of the components. Example: x = [1.3, 3.7, 0.5] --> [0.5, 1.3, 3.7] and the permutation is order = [2, 0, 1].

Note
If order is NULL on entry then it is ignored.
The sorted vector x is returned.

◆ mirml_mh_v_star()

mirkl_error_t * mirml_mh_v_star ( const mirml_mh_vector_t x1,
const mirml_mh_vector_t x2,
mirml_mh_vector_t **  out 
)

Computes componentwise (Hadamard) product of vectors.

out[i] = x1[i] * x2[i]

◆ mirml_mh_v_sub()

mirkl_error_t * mirml_mh_v_sub ( const mirml_mh_vector_t v1,
const mirml_mh_vector_t v2,
mirml_mh_vector_t **  out 
)

Vector subtraction.

out = v1 - v2

Note
May be in-situ.