Main Content

qrupdate

QR 分解のランク 1 の更新

構文

[Q1,R1] = qrupdate(Q,R,u,v)

説明

[Q1,R1] = qrupdate(Q,R,u,v) は、[Q,R] = qr(A)A の元の QR 分解の場合、A + u*v' の QR 分解を返します。ここで、uv は、適切な長さの列ベクトルです。

行列

mu = sqrt(eps)

mu =

   1.4901e-08

A = [ones(1,4); mu*eye(4)];

は、A'*A の作成での危険性を示す最小二乗で良く知られた例です。代わりに、直交行列 Q と上三角行列 R への QR 分解を使用します。

 [Q,R] = qr(A);

予期したとおり、R は上三角行列になります。

R =

   -1.0000   -1.0000   -1.0000   -1.0000
         0    0.0000    0.0000    0.0000
         0         0    0.0000    0.0000
         0         0         0    0.0000
         0         0         0         0

この場合、最初の行を除く R の上三角要素は sqrt(eps) の次数になります。

以下のようにベクトルが更新されたとします。

 u = [-1 0 0 0 0]'; v = ones(4,1);

以下のように、A にランク 1 の行列を加えたかなり自明な QR 分解を最初から計算する代わりに、

[QT,RT] = qr(A + u*v')

QT =

     0     0     0     0     1
    -1     0     0     0     0
     0    -1     0     0     0
     0     0    -1     0     0
     0     0     0    -1     0

RT =

  1.0e-007 *

   -0.1490         0         0         0
         0   -0.1490         0         0
         0         0   -0.1490         0
         0         0         0   -0.1490
         0         0         0         0

関数 qrupdate を使用できます。

[Q1,R1] = qrupdate(Q,R,u,v)

Q1 =

   -0.0000   -0.0000   -0.0000   -0.0000    1.0000
    1.0000   -0.0000   -0.0000   -0.0000    0.0000
    0.0000    1.0000   -0.0000   -0.0000    0.0000
    0.0000    0.0000    1.0000   -0.0000    0.0000
   -0.0000   -0.0000   -0.0000    1.0000    0.0000

R1 =

   1.0e-007 *
    0.1490    0.0000    0.0000    0.0000
         0    0.1490    0.0000    0.0000
         0         0    0.1490    0.0000
         0         0         0    0.1490
         0         0         0         0

両方の分解は異なっていても、正しいことに注意してください。

ヒント

qrupdate は、非スパース行列に対してのみ機能します。

アルゴリズム

qrupdate は、Golub と Van Loan の Matrix Computations の第 3 版の 12.5.1 節のアルゴリズムを使用します。 N = max(m,n) の場合、何もない場合から新規の QR 分解を計算するのは、ほぼ O(N3) のアルゴリズムで、一方、この方法で既存の因子を更新するのは、O(N2) アルゴリズムであるため、qrupdate は便利です。

参照

[1] Golub, Gene H. and Charles Van Loan, Matrix Computations, Third Edition, Johns Hopkins University Press, Baltimore, 1996

拡張機能

バージョン履歴

R2006a より前に導入

参考

|