Sha256: b2a8a5e34a3e8616212dbeb332540788cf1e37f6ab7dddbb885ba7ba0a1d42b9
Contents?: true
Size: 1.36 KB
Versions: 1
Compression:
Stored size: 1.36 KB
Contents
module Stick class Matrix module LU # Return the Gauss vector, MC, Golub, 3.2.1 Gauss Transformation, p94 def LU.gauss_vector(mat, k) t = mat.column2matrix(k) tk = t[k, 0] (0..k).each{|i| t[i, 0] = 0} return t if tk == 0 (k+1...mat.row_size).each{|i| t[i, 0] = t[i, 0].to_f / tk} t end # Return the Gauss transformation matrix: M_k = I - tau * e_k^T def LU.gauss(mat, k) i = Matrix.I(mat.column_size) tau = gauss_vector(mat, k) e = i.row2matrix(k) i - tau * e end # LU factorization: A = LU # where L is lower triangular and U is upper triangular def LU.factorization(mat) u = mat.clone n = u.column_size i = Matrix.I(n) l = i.clone (n-1).times {|k| mk = gauss(u, k) u = mk * u # M_{n-1} * ... * M_1 * A = U l += i - mk # L = M_1^{-1} * ... * M_{n-1}^{-1} = I + sum_{k=1}^{n-1} tau * e } return l, u end end # Return the upper triangular matrix of LU factorization # M_{n-1} * ... * M_1 * A = U def U LU.factorization(self)[1] end # Return the lower triangular matrix of LU factorization # L = M_1^{-1} * ... * M_{n-1}^{-1} = I + sum_{k=1}^{n-1} tau * e def L LU.factorization(self)[0] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
stick-1.3.3 | lib/stick/matrix/lu.rb |