How can I generate a lot of (for example N=20000 or more) auto-correlated random numbers {x_n, n=1,2,...,N} with uniform or normal probability distribution and finite correlation length (Here eq. correlation length = 3), i.e. =a0*d(n-m,0)+a1*d(n-m,1)+a2*d(n-m,2)+a3*d(n-m,3) where 1>=a0>=a1>=a2>=a3>=0 will given as inputs.
I write a code according to "Method 1 of simulation", but it takes a lot of Ram and time.
Can any one write an optimized code for me about this problem in fortran, matlab or mathematica or propose a revised or new algorithm for it?
I find the answer to my question. The answer is based on Davies and Harte method and generate n=2^g random numbers. Here sigma(1)=a0, sigma(2)=a1, and .... The matlab code is :
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all; close all; clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
g=25; n=2^g;
sigma=[1 0.5]; mv=size(sigma); m=mv(2);
r=zeros(1,2*n);
for i=1:m
end
%disp(r);
lambda=fft(r); %disp(lambda);
z=randn(1,2*n); %disp(z);
y=zeros(1,2*n); y(1)=sqrt(2*n*lambda(1))*z(1); y(n+1)=sqrt(2*n*lambda(n+1))*z(2*n); for i=1:n-1
end
%disp(y);
x=ifft(y); %disp(x);
fileID = fopen('CorrelatedRandomNumbers.txt','w');
fprintf(fileID,'%d\n',x);
sizx=size(x);
disp([' nt = ' num2str(sizx(2)/2)]);
[ACF, lags, bounds] = autocorr(x, [], 2);
fileID = fopen('AutoCorrelation.txt','w');
fprintf(fileID,'%d\n',ACF);
disp('End of Program ...')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%