MATLAB Function Reference    

cholupdate

オリジナル行列にランク1の行列を加えたもののコレスキ分解

表示

詳細

R1 = cholupdate(R,x) ここで、R = chol(A)Aのオリジナルのコレスキ分解の場合、A + X*X'の上三角コレスキ分解を出力します。Xは、適切な長さの列ベクトルです。cholupdateは、Rの対角部分と上三角部分のみを使います。Rの下三角部分は無視されます。

R1 = cholupdate(R,x,'+') は、R1 = cholupdate(R,x)と同じです。

R1 = cholupdate(R,x,'-') は、 A - x*x'のコレスキ分解を出力します。Rが有効なコレスキ分解でないか、オリジナルの行列が正定行列でない場合は、エラーメッセージが表示され、コレスキ分解はありません。

[R1,p] = cholupdate(R,x,'-') は、エラーメッセージを出力しません。p0ならば、R1A - x*x'のコレスキ分解です。p0より大きければ、R1はオリジナルのAのコレスキ分解です。p1ならば、オリジナルの行列が正定行列でないので、cholupdateは失敗します。 p2ならば、Rの上三角部分が有効なコレスキ分解でないので、cholupdateは失敗します。

注意

cholupdate は、フル行列に対してのみ機能します。

例題

これは、rank(x*x')が1なので、ランク1の行列を加えたものです。

cholを使って、R1 = chol(A + x*x')のコレスキ分解を計算する代わりに、cholupdateを使うことができます。

つぎに、Aの最後の要素から 1を引いて、正定性を壊します(実際には、行列を特異にします)。

cholcholupdateを比較します。

しかし、Aの最後の要素から 0.5を引くと、正定行列を作成し、コレスキ分解を計算するために、cholupdateを使うことができます。

アルゴリズム

cholupdate は、LINPACKのサブルーチンZCHUDZCHDDのアルゴリズムを使います。何もない場合から新規のコレスキ分解を計算するのは、 アルゴリズムで、この方法で既存の因子にランク1の行列を加えるのはアルゴリズムなので、cholupdateは、役に立ちます。

参考文献

Dongarra, J.J., J.R. Bunch, C.B. Moler, and G.W. Stewart, LINPACK Users' Guide, SIAM, Philadelphia, 1979.

参考

chol, qrupdate


  cholinc cla