2010-12-06 28 views
4

matlabでは、平均と標準偏差の正規分布ランダムベクトルを生成するのは簡単です。ヘルプから:共分散行列を持つ正規分布ランダムベクトルの生成

平均1と標準 の偏差2.r = 1 + 2. * randn(100,1);で正規分布からの値を生成します。

私は共分散行列Cを持ち、N(0、C)を生成したいと思います。

しかし、どうすればいいですか?

randnヘルプから: 指定された平均値 ベクトルと共分散行列を持つ二変量正規分布から値を生成します。 mu = [1 2]; シグマ= [1.5; .5 2]; R = chol(Sigma)。z = repmat(mu、100,1)+ randn(100,2)* R;

しかし、私は彼らがここで何をしているのか正確にはわかりません。組み込みのMATLAB関数、あなたの仕事をする

+1

どの部分がわかりませんか。 'mu'は平均ベクトル(あなたの場合は0なので、そのままにしておきます)、' Sigma'は共分散行列です.100個の乱数を生成しています。 – Donnie

+0

私はrepmatの部分を理解していません。このようにすることも可能ですか?chol(C、 'lower')+ randn(N、1); Cと共分散行列 – Derk

+0

申し訳ありませんが、私は今理解していると思います。 repmatは、100対の乱数の平均行列を構築するために使用されます。 – Derk

答えて

3

あなたは以下を使用することができます

mvnrnd(mu,SIGMA) 
4

これは多少数学の問題ではなく、プログラミングの質問です。しかし、私は強固な数学とプログラミングの知識を必要とする素晴らしいコードを書いているのは大好きなので、私は後世のためにこれを書いていきます。

独立したものからの相関ランダム変数を生成するには、コレスキー分解(または行列の分解/平方根)を行う必要があります。これは、Xが平均値mおよび共分散値Dを有する多変量法則である場合、Y = AXは平均値Amおよび共分散行列ADA'を有する多変量法則であり、A'は転置であるからです。 Dが恒等行列の場合、共分散行列は、AA'であり、生成しようとしている共分散行列Cと等しくなりたいとします。

コレスキー分解は、このような行列Aを計算し、これを実行する最も効率的な方法です。

詳細については、http://web.as.uky.edu/statistics/users/viele/sta601s03/multnorm.pdf