def decompose(self, matrix): orthogonal_matrix = MatrixFactory.identity(size=matrix.row_count) for j in range(matrix.column_count - 1): e = numpy.zeros((matrix.column_count - j, 1)) e[0, 0] = 1 e = Matrix(e) h = self.create_householder_reflection( matrix.get_column_vector(j, j), e) h = MatrixFactory.build_block_matrix( d=h, row_count=orthogonal_matrix.row_count, col_count=orthogonal_matrix.row_count) for i in range(j): h.matrix_vectors[i, i] = 1 matrix = h * matrix orthogonal_matrix = h * orthogonal_matrix return orthogonal_matrix.transpose(), matrix
def test_create_identity(self): for matrix in MatrixCollection.complete: matrix = Matrix(matrix) self.assertEqual(matrix, MatrixFactory.identity(matrix.row_count) * matrix)