4


1

グラムシュミット直交化

独立した列を持つ行列A(必ずしも正方形ではない)が与えられた場合、Matlabの関数「qr」を使用して、Gram-Schmidt反復を適用し、その列空間の(直交行列Qの形式で)正規直交基底を生成できました

A=[1,1;1,0;1,2]

[Q,R] = qr(A)

その後

>> Q(:,1:size(A,2))
ans =
  -0.577350269189626  -0.000000000000000
  -0.577350269189626  -0.707106781186547
  -0.577350269189626   0.707106781186547

列が正規直交であることを確認できます

Q(:,1)'*Q(:,2) equals zero and

norm(Q(:,1)) equals norm(Q(:,2)) equals 1

独立した列(Aなど)を持つ行列が与えられた場合、Rには(Gram-Schmidt)直交行列Qを生成する関数がありますか? Rの `qr`関数は直交Qを生成しません。

2 Answer


12


「qr」は機能しますが、独自の規則を使用して、「qr.Q」および「qr.R」でさらに操作する「qr」オブジェクトを生成します。

> A
     [,1] [,2]
[1,]    1    1
[2,]    1    0
[3,]    1    2
> A.qr <- qr(A)
> qr.Q(A.qr)
           [,1]          [,2]
[1,] -0.5773503 -5.551115e-17
[2,] -0.5773503 -7.071068e-01
[3,] -0.5773503  7.071068e-01
> qr.R(A.qr)
          [,1]      [,2]
[1,] -1.732051 -1.732051
[2,]  0.000000  1.414214

これはあなたが望んでいた出力ですか?


3


http://www.rseek.org [rseek.org]を介して簡単に検索すると、パッケージhttp://cran.r-project.org/package=far[far]と、その機能「orthonormalization」を試すことができます。