2
$\begingroup$

I am triying to generate realizations of a Gaussian random process using the KL expansion. For that, I need to multiply an eigenvector for an eigenvalue and a random variable.

I have tried

realizationNumber = 500;
evecRand = 0*ConstantArray[1, {longitudeOfEigA, longitudeOfEigA}];
For[i = 1, i <= 2, i++,
  For[j = 1, j <= 4, j++;
   evecRand[[j]] = 
    eval[[j]]^0.5*RandomVariate[NormalDistribution[]]*evec[[j]]]];

My result is

evecRand[[7]]
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0}

However, if I write

eval[[j]]^0.5*RandomVariate[NormalDistribution[]]*evec[[j]] 

I get

{0.0950823, 0.0945212, 0.0924617, 0.0889367, 0.0840018, 0.0777355, \
0.0702368, 0.0616249, 0.0520361, 0.0416224, 0.030549, 0.0189913, \
0.00713256, -0.00483922, -0.0167343, -0.0283641, -0.0395443, \
-0.0500977, -0.0598569, -0.0686673, -0.0763893, -0.0829003, \
-0.0880973, -0.0918978, -0.0942416, -0.0950915, -0.0944341, \
-0.0922798, -0.0886626, -0.0836401, -0.0772917, -0.0697182, \
-0.0610395, -0.0513933, -0.0409323, -0.0298226, -0.0182401, \
-0.00636851, 0.00560405, 0.0174878, 0.0290943, 0.0402396, 0.0507471, \
0.0604502, 0.069195, 0.076843, 0.0832729, 0.0883828, 0.0920918, \
0.0943409, 0.0950946, 0.0943409, 0.0920918, 0.0883828, 0.0832729, \
0.076843, 0.069195, 0.0604502, 0.0507471, 0.0402396, 0.0290943, \
0.0174878, 0.00560405, -0.00636851, -0.0182401, -0.0298226, \
-0.0409323, -0.0513933, -0.0610395, -0.0697182, -0.0772917, \
-0.0836401, -0.0886626, -0.0922798, -0.0944341, -0.0950915, \
-0.0942416, -0.0918978, -0.0880973, -0.0829003, -0.0763893, \
-0.0686673, -0.0598569, -0.0500977, -0.0395443, -0.0283641, \
-0.0167343, -0.00483922, 0.00713256, 0.0189913, 0.030549, 0.0416224, \
0.0520361, 0.0616249, 0.0702368, 0.0777355, 0.0840018, 0.0889367, \
0.0924617, 0.0945212, 0.0950823}

Which is what I am looking for. How can I save these vectors to evecRand?

$\endgroup$
2
  • $\begingroup$ Incomplete code. What are eval, evec, longitudeOfEigA, and longitudeOfEigA? $\endgroup$ – Henrik Schumacher Jun 11 at 11:42
  • $\begingroup$ eval and evec are obtained from using Eigensystem. eval is a list of lenght 101, evec is a matrix of size 101*101, longitudeOfEigA is a constant with a value of 101 $\endgroup$ – slow_learner Jun 11 at 14:14
3
$\begingroup$

Here is another way to accomplish what is in the OP's self-answer:

evecRand = 
  Sqrt[eval]*RandomVariate[NormalDistribution[], Length@evec]*evec;

Appendix

Test data:

{eval, evec} = 
  Eigensystem[# . Transpose[#] &@RandomReal[1, {101, 101}]];
$\endgroup$
1
$\begingroup$

In the end, I have been able to write

evecRand = 0*ConstantArray[1, {longitudeOfEigA}];

    For[i = 0, i < realizationNumber, i++,
      For[j = 0, j < longitudeOfEigA, j++;
       evecRand[[j]] = 
        eval[[j]]^0.5*RandomVariate[NormalDistribution[]]*evec[[j]]]];

This somehow provides me with what I want, a matrix of size 101*101.

$\endgroup$
3
  • $\begingroup$ Summer reading: mathematica.stackexchange.com/questions/134609/… $\endgroup$ – Michael E2 Jun 11 at 14:34
  • $\begingroup$ The body of the loop does not depend on i, so what's the point of For[i = 0, i < realizationNumber, i++,...? $\endgroup$ – Michael E2 Jun 11 at 14:40
  • $\begingroup$ I am doing this to calculate one realization of a random process, now that I know how to make this I am going to save evecRand as a member of a matrix of size realizationNumber, or at least I hope I know how to do it $\endgroup$ – slow_learner Jun 11 at 14:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.