У нас есть 4 вектора, V1
, V2
, nf1
и nf2
. Нам нужно сгенерировать n=8736
случайных чисел, каждая пара (V1,V2)
, (V1,nf1)
, (V2,nf2)
и (nf1,nf2)
, чтобы быть коррелировать следующим образом:Matlab линейная корреляционная матрица в функции copularnd (копула случайного числа)
Rvv=0.6 for (V1,V2)
Rvn=0.5 for (V1,nf1) and (V2,nf2)
Rnn=0 for (nf1,nf2)
(Это не важно, что соотношение (V1,nf2)
и (V2, nf1)
есть). Теперь мы используем связку для генерации коррелированных случайных чисел в MATLAB:
Rvv=0.6;
Rvn=0.5;
Rnn=0;
n = 8736;
%V1 V2 nf1 nf2
Rho = [1 Rvv Rvn 0 ; %V1
Rvv 1 0 Rvn; %V2
Rvn 0 1 Rnn; %nf1
0 Rvn Rnn 1 ]; %nf2
Random_no = copularnd('Gaussian',Rho,n);
Это все в порядке, когда Rvv
является 0.6
и Random_no
будет 8736 by 4
матрица, что каждая пара столбцов коррелируют как определено Rho
Matrix. НО когда Rvv=0.9
, MATLAB возвращает ошибку следующим образом:
Error using mvnrnd
SIGMA must be a symmetric positive semi-definite matrix.
Error in copularnd
u = normcdf(mvnrnd(zeros(1,d),Rho,n));
Я не могу понять, в чем проблема и как я могу реально генерировать коррелированные случайные числа, используя связку. Я буду очень признателен, если кто-нибудь сможет мне помочь в этой проблеме. не