2015-10-18 160 views
0

想象一下我們有4個矢量,V1,V2,nf1nf2。我們需要生成n=8736隨機數的每對(V1,V2)(V1,nf1)(V2,nf2)(nf1,nf2)是歸屬關係如下:在copuland(copula隨機數)函數中的Matlab線性相關矩陣

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); 

這一切都確定,當Rvv0.6,並Random_no將是一個8736 by 4矩陣,是因爲我們通過Rho矩陣指定每對列相關。但是當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)); 

我不明白是什麼問題以及如何我真的用系詞產生相關的隨機數。如果有人能幫助我解決這個問題,我將非常感激。

回答

0

我不能回答有關理論,但在copularnd代碼得到這個:

case 'gaussian' 
    Rho = varargin{1}; 
    n = varargin{2}; 
    d = size(Rho,1); 
    if isscalar(Rho) 
     if ~(-1 < Rho && Rho < 1) 
      error(message('stats:copularnd:BadScalarCorrelation')); 
     end 
     Rho = [1 Rho; Rho 1]; 
     d = 2; 
    elseif any(diag(Rho) ~= 1) 
     error(message('stats:copularnd:BadCorrelationMatrix')); 
    end 
    % MVNRND will check that Rho is square, symmetric, and positive semi-definite. 
    u = normcdf(mvnrnd(zeros(1,d),Rho,n)); 

因爲那裏沒有關於它的幫助,我想那一定是明確的人的任何信息,誰知道什麼系詞是:)但不適合我

有很多方法來生成正半定矩陣:http://www.mathworks.com/matlabcentral/newsreader/view_thread/163489