fill_covariance_matrix - Fills a covariance matrix for a Gaussian process
Example compile flags (system dependent):
-DLINUX_X86_64 -DLINUX_X86_64_OPTERON -DGNU_COMPILER
-lKJB -lfftw3 -lgsl -lgslcblas -ljpeg -lSVM -lstdc++ -lpthread -lSLATEC -lg2c -lacml -lacml_mv -lblas -lg2c -lncursesw
const Vector_vector *indices,
const Vector_vector *indices_2,
const void *hyper_params,
int (*covariance)(Matrix **,const Vector *,const Vector *,const void *,int)
This routine creates a covariance matrix for a Gaussian process where the
dimension of the indices is given by the dimension of the vectors of indices
and indices_2, and the dimension of the variables is d. Then, it fills *cov
with submatrices that are the result of calling the given covariance function
for a pair of indices.
For example, the submatrix of *cov of elements 0,1,...,d is A, where A is the
matrix gotten in the call
covariance(&A, indices->elements, indices_2->elements, d).
Naturally, indices and indices_2 must have the same length, and all of their
vectors must have equal lengths. Also, covariance must "return" a dxd matrix
(there are some predefined covariance functions in the library). If the routine
succeeds, cov will be a square matrix of dimension indices->elements->length*d.
hyper_params holds any hyper parameters that the covariance function needs. The
covariance function itself should cast it to the correct type.
If the matrix pointed to by cov is NULL, then a matrix of the appropriate size
is created. If it exists, but is the wrong size, then it is recreated. Otherwise,
the storage is recycled.
If the routine fails (due to storage allocation or an error in the covariance
function), then ERROR is returned with and error message being set. Otherwise
NO_ERROR is returned.
This software is not adequatedly tested. It is recomended that
results are checked independantly where appropriate.