Method: Stick::Matrix::Householder.QR

Defined in:
lib/stick/matrix/householder.rb

.QR(mat) ⇒ Object

a QR factorization that uses Householder transformation Q^T * A = R MC, Golub & van Loan, pg 224, 5.2.1 Householder QR



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/stick/matrix/householder.rb', line 11

def Householder.QR(mat)
  h = []
  a = mat.clone
  m = a.row_size
  n = a.column_size
  n.times{|j|
    v, beta = a[j..m - 1, j].house

    h[j] = Matrix.diag(Matrix.I(j), Matrix.I(m-j)- beta * (v * v.t))

    a[j..m-1, j..n-1] = (Matrix.I(m-j) - beta * (v * v.t)) * a[j..m-1, j..n-1]
    a[(j+1)..m-1,j] = v[2..(m-j)] if j < m - 1 }
  h
end