- 締切済み
共分散行列を求めるプログラム
wolvの回答
- wolv
- ベストアンサー率37% (376/1001)
define K データ系列の数 define N 各系列の要素の数 : 途中略 : float data[K][N]; float kyobunsan[K][K]; int i,k1,k2; for(k1=0;k1<K;k1++)for(k2=0;k2<K;k2++){ /* *1 */ kyobunsan[k1][k2]=0; for(i=0;i<N;i++){ kyobunsan[k1][k2] +=data[k1][i]*data[k2][i]; /* *2 */ } } 共分散、正確なところは忘れたので、適当に書いてあります。*1,*2の行は共分散の定義にあうように適当に書き直してください。 また、プログラミングが苦手でもアルゴリズムはわかるように書いたつもりですが、プログラムとしては不完全なので適当に追加してください。
関連するQ&A
- 分散共分散行列とは?
分散共分散行列のことを調べたのですが、参考になるものがあまり見つかりません。教えてください。 分散共分散行列とは、どのようなもののことを言うのでしょうか? また、どうしてその行列が分散を表しているのでしょうか? その、行列の行列式?が小さければ、分散が小さいといえるのでしょうか? 良く分からないので、詳しい方、ぜひぜひ教えてください。 よろしくお願いします。
- ベストアンサー
- 数学・算数
- 共分散行列と分散共分散行列の違いとはなんですか?
共分散行列と分散共分散行列の違いとはなんですか? 現在、共分散行列について調べているのですが、分散共分散行列ばかりが引っかかって混乱しています。
- ベストアンサー
- 数学・算数
- 分散共分散行列のプログラム
C言語での質問なんですが,平均値ベクトルはわかるんですけど,分散共分散行列の解がよくわかりません.わかる方是非教えてください.よろしくお願いします.
- ベストアンサー
- C・C++・C#
- 多次元正規分布の分散共分散行列について
p次元確率変数ベクトル X(i) が p次元正規分布 N(0,Σ) に従っているとき p次正方行列 A で X を一次変換した Y (Y=AX) が従う多次元正規分布の分散共分散行列はどうやって求めればよいでしょうか? 考え方だけでも良いのでおしえてください。 お願いします。
- ベストアンサー
- 数学・算数
- 共分散行列の求め方
数個のデータから共分散行列を生成するプログラムを実装しようと 考えています。そこで、次のようなプログラムを書きましたが、 結果があっているかがわかりません。共分散行列の生成方法に 詳しい方がおられましたら、どうか教えて頂きたいと思います。 共分散行列生成に用いた式は Σ = E[(X-E[X])(X-E[X])^T] です。 (Σ:共分散行列 X:データ E[X]:Xの平均 ^T:転置行列) double xave = 0.0; //式のE[x]にあたる部分 double work [ ]; //データを入れる一次元配列(式のXにあたる) double a[][]; //共分散行列を入れる配列 work[0] = 3; //5つのデータを格納 work[1] = -2; work[2] = 5; work[3] = -3; work[4] = 2; for(i = 0; i < N; i++){ //E[x]を求めるためにxaveに全要素合計を入れる xave += work[i]; } xave /= N; //全要素合計をデータ数で割る for(i = 0; i < N; i++){ //要素Xから平均を引く(X-E[x]にあたる) work[i] -= xave; } for(i = 0; i < N; i++){ for(j = 0; j < N; j++){ a[i][j] = work[i]*work[j]/N; //a[][]に値を格納 Nで割っているのは式の一番外側のEにあたる } } <実行結果> 0.0 | 0.0 | 0.0 | 0.0 | 0.0 0.0 | 4.0 | -6.0 | 8.0 | -8.0 0.0 | -6.0 | 9.0 | -12.0 | 12.0 0.0 | 8.0 | -12.0 | 16.0 | -16.0 0.0 | -8.0 | 12.0 | -16.0 | 16.0
- ベストアンサー
- 数学・算数
- 分散共分散行列の逆行列
以下の行列を考えます. 行列X(M行N列,成分の値は分散1のガウスノイズ) 行列Xの分散共分散行列S(M行M列), 行列Sの逆行列Y(M行M列) N=M+1のときはN≠M+1のときに比べて行列Yの各成分の大きさがかなり大きくなる,という結果が得られました. (計算にはMATLABの関数covとpinvを用いました.) これは数学的に正しいことなのでしょうか. また,正しいとしたらどうしてこのようなことが起こるのでしょうか. 行列Yの計算結果の例を以下に示します.(行列Yを500回算出し,それらの平均値を示しています.) http://wisteria.orz.ne.jp/download/pinvcovX.jpg 縦・横方向の軸は行列Yのインデックスを,高さ方向の軸は行列Yの成分の値を示しています. 上述した現象の原因についてご教授いただけると幸いです.
- ベストアンサー
- 数学・算数