Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

cholcov

コレスキーのような共分散分解

構文

T = cholcov(SIGMA)
[T,num] = cholcov(SIGMA)
[T,num] = cholcov(SIGMA,0)

説明

T = cholcov(SIGMA) は、SIGMA = T'*T となる T を計算します。SIGMA は正方で対称な半正定値行列でなければなりません。SIGMA が正定値の場合、T は正方で、上三角コレスキー因子になります。SIGMA が正定値でない場合、TSIGMA の固有値分解によって計算されます。この場合、T は三角または正方である必要はありません。対応する固有値が (小さな許容誤差内で) ゼロに近い固有ベクトルは、省略されます。負の固有値が残っている場合、T は空になります。

[T,num] = cholcov(SIGMA) は、SIGMA の負の固有値の数 num を返します。num が正の場合、T は空になります。num がゼロの場合、SIGMA は半正定値です。SIGMA が正方で対称でない場合、numNaN になり、T は空です。

[T,num] = cholcov(SIGMA,0) は、SIGMA が正定値で T がコレスキー因子の場合、ゼロに等しい num を返します。SIGMA が正定値ではない場合、num は正の整数になり、T は空になります。[...] = cholcov(SIGMA,1)[...] = cholcov(SIGMA) と等価です。

次の 4 行 4 列の共分散行列はランク落ちしています。

C1 = [2 1 1 2;1 2 1 2;1 1 2 2;2 2 2 3]
C1 =
     2     1     1     2
     1     2     1     2
     1     1     2     2
     2     2     2     3
rank(C1)
ans =
     3

因子 C1cholcov を使用します。

T = cholcov(C1)
T =
   -0.2113    0.7887   -0.5774         0
    0.7887   -0.2113   -0.5774         0
    1.1547    1.1547    1.1547    1.7321

C2 = T'*T
C2 =
    2.0000   1.0000   1.0000   2.0000
    1.0000   2.0000   1.0000   2.0000
    1.0000   1.0000   2.0000   2.0000
    2.0000   2.0000   2.0000   3.0000

T を使用して、指定した共分散の乱数データを生成します。

C3 = cov(randn(1e6,3)*T)
C3 =
    1.9973    0.9982    0.9995    1.9975
    0.9982    1.9962    0.9969    1.9956
    0.9995    0.9969    1.9980    1.9972
    1.9975    1.9956    1.9972    2.9951

拡張機能

バージョン履歴

R2007a で導入

参考

|