Implementation of Correlated Gaussian Random Fields Model

In summary, the conversation discusses an optimization model for generating correlated gaussian random fields, with a suggested implementation method using a standard formula and Matlab code. The speaker also mentions the importance of verifying the formula through mathematical calculations.
  • #1
confused_engineer
39
2
TL;DR Summary
I have recently found an article with a useful algorithm. However, I don't understand it very well; thus, I would like to know if it is already implemented
Hello everyone. I have been recently working in an optimization model in the presence of uncertainty. I have read https://www.researchgate.net/publication/310742108_Efficient_Simulation_of_Stationary_Multivariate_Gaussian_Random_Fields_with_Given_Cross-Covariance in which, a methodology for generating correlated gaussian random fields. Unfortunately, I have no idea on how to implement it.

I was wondering if someone has seen an implementation of this methodology or knows where I can find one.

Best regards.
Confused engineer.
 
Physics news on Phys.org
  • #2
What exactly are you trying to do?

Here is a standard way that works as long as you don't have too many variables to fit in your computer. Let ##N## correlated random variables arranged in a vector ##\mathbf{x}##, with mean ##\mathbf{m} = E[\mathbf{x}]## and covariance matrix ##\mathbf{K} = E\left[ \left(\mathbf{x}-\mathbf{m}\right)\left(\mathbf{x}-\mathbf{m}\right)^T\right]##. One realization of this, ##\mathbf{x}_i##, can be generated by starting with a vector ##\mathbf{y}_i## that contains independent, unit-variance, zero-mean Gaussian random numbers. Below is Matlab code to show how it can be done. Please do the math and verify that you believe the formula I am using is correct - doing such calculations is how you learn this stuff.

Matlab:
% code assumes you have already defined K as an NxN covariance matrix
% and m as an Nx1 vector
N = 100;
yi = randn(N,1); % unit-variance Gaussian-distributed random numbers
Ksqrt = sqrtm(K);  % matrix square-root
xi = Ksqrt*yi + m;
 
Back
Top