[ANN] Random field generation with GaussianRandomFields.jl

package
announcement

#1

Dear Julia friends

It is my pleasure to present GaussianRandomFields, a package for generating Gaussian random fields in arbitrary dimension. These random fields can for example be used as input data for PDEs with random coefficients. A simulation of such a PDE typically requires many samples from the random field, that must be computed efficiently. Here’s an excerpt from the documentation, listing some key features:

  • Support for stationary (isotropic and anisotropic) and separable non-stationary covariance functions.
  • Default implementation of most standard covariance functions such as Gaussian, Exponential and Matérn covariances. Adding a user-defined covariance function is very easy.
  • Implementation of most common methods to generate Gaussian random fields: Cholesky factorization, Karhunen-Loève expansion and circulant embedding.
  • Easy generation of Gaussian random fields defined on a Finite Element mesh.
  • Versatile plotting features for easy visualisation of Gaussian random fields.

Many examples and some nice pictures can found in the tutorial. This is a small teaser:

Any comments or remarks are highly appreciated!

Pieterjan


#2

Cool! How does it compare to https://github.com/STOR-i/GaussianProcesses.jl?


#3

I think GaussianProcess.jl is mainly tailored for Gaussian process regression in machine learning. From the docs: “Given a set of observed real-valued points over a space, the Gaussian Process is used to make inference on the values at the remaining points in the space.” The random fields in GaussianRandomFields.jl are unconditional random fields, so there is no data that needs to be fitted.

Also, as far as I can see from the source code, GaussianProcesses.jl uses a Cholesky factorisation to generate the Gaussian prior. A matrix factorisation approach may become really expensive for lots of data points, especially in higher dimensions. There are other, more efficient, random field generators available in that case.

Maybe these other generation techniques can also be used in the GaussianProcesses framework.