Matlab
從多元高斯分佈生成值
我目前正在嘗試模擬 a 的值維隨機變量具有均值向量的多元正態分佈和協方差矩陣.
我希望使用類似於逆 CDF 方法的過程,這意味著我想首先生成一個維均勻隨機變量然後將其代入該分佈的逆 CDF,從而產生價值.
我遇到了問題,因為該過程沒有得到很好的記錄,並且MATLAB 中的 mvnrnd 函數與我在 Wikipedia 上找到的描述之間存在細微差別。
就我而言,我也是隨機選擇分佈的參數。特別是,我生成了每一種手段,, 從均勻分佈. 然後我建立協方差矩陣使用以下程序:
- 創建下三角矩陣在哪裡為了和為了
- 讓在哪裡表示轉置.
這個程序讓我可以確保是對稱且正定的。它還提供了一個下三角矩陣以便,我認為這是從分佈中產生價值所必需的。
使用維基百科上的指南,我應該能夠生成用一個維均勻如下:
然而,根據 MATLAB 函數,這通常是這樣完成的:
在哪裡是 a 的逆 CDF維,可分,正態分佈,兩種方法唯一的區別就是是否使用或者.
MATLAB 或 Wikipedia 是要走的路嗎?還是兩者都錯了?
如果是標準法線 RV 的列向量,那麼如果您設置, 的協方差是.
我認為您遇到的問題可能源於 matlab 的mvnrnd函數將行向量作為樣本返回,即使您將平均值指定為列向量也是如此。例如,
> size(mvnrnd(ones(10,1),eye(10)) > ans = > 1 10
請注意,轉換行向量會為您提供相反的公式。如果是一個行向量,那麼也是一個行向量,所以是一個列向量,協方差可以寫.
根據您所寫的內容,維基百科的公式是正確的:如果是matlab返回的行向量,你不能左乘它. (但右乘會給你一個具有相同協方差的樣本)。