Beispiel #1
0
 def _negate_column(self, matrix, dim, min_row, column_i, secondary_matrix=None, secondary_dim=(0, 0)):
     for k in range(min_row, dim[0]):
         matrix[k][column_i] *= -1
     if secondary_matrix is not None:
         for k in range(secondary_dim[1]):
             secondary_matrix[column_i][k] *= -1
         self._transform = mh.multiply_matrices(self._transform, [[self._negate_transform_value(i, j, column_i) for j in range(self._m1_base)] for i in range(self._m1_base)], (self._m1_base, self._m1_base), (self._m1_base, self._m1_base))
Beispiel #2
0
 def _add_row(self, matrix, dim, min_column, row_i, row_j, coefficient, save_to_transform=False):
     '''Add row_i to the row_j with coefficient c
     If save_to_transform=True, then we should save transformation in transform matrix, because we make it fro M2 and change the basis of the M1
     '''
     for k in range(min_column, dim[1]):
         matrix[row_j][k] += coefficient * matrix[row_i][k]
     if save_to_transform:
         self._transform = mh.multiply_matrices(self._transform, [[self._add_transform_value(i, j, row_j, row_i, -1*coefficient) for j in range(self._m1_base)] for i in range(self._m1_base)], (self._m1_base, self._m1_base), (self._m1_base, self._m1_base))
Beispiel #3
0
 def _negate_row(self, matrix, dim, min_column, row_i, secondary_matrix=None, secondary_dim=(0, 0), save_to_transform=False):
     for k in range(min_column, dim[1]):
         matrix[row_i][k] *= -1
     if secondary_matrix is not None:
         for k in range(secondary_dim[0]):
             secondary_matrix[k][row_i] *= -1
     if save_to_transform:
         self._transform = mh.multiply_matrices(self._transform, [[self._negate_transform_value(i, j, row_i) for j in range(self._m1_base)] for i in range(self._m1_base)], (self._m1_base, self._m1_base), (self._m1_base, self._m1_base))
Beispiel #4
0
 def _add_column(self, matrix, dim, min_row, column_i, column_j, coefficient, secondary_matrix=None, secondary_dim=(0, 0)):
     '''Add column_i to the column_j with coefficient c
     For secondary matrix subtract from i-th row the j-th row with coefficient c
     '''
     for k in range(min_row, dim[0]):
         matrix[k][column_j] += coefficient*matrix[k][column_i]
     if secondary_matrix is not None:
         for k in range(secondary_dim[1]):
             secondary_matrix[column_i][k] -= coefficient*secondary_matrix[column_j][k]
         self._transform = mh.multiply_matrices(self._transform, [[self._add_transform_value(i, j, column_i, column_j, coefficient) for j in range(self._m1_base)] for i in range(self._m1_base)], (self._m1_base, self._m1_base), (self._m1_base, self._m1_base))
Beispiel #5
0
 def _switch_row(self, matrix, dim, min_column, row_i, row_j, second_matrix=None, second_dim=(0, 0), save_to_transform=False):
     '''If second matrix is not None, switch columns of it
     '''
     for k in range(min_column, dim[1]):
         c = matrix[row_i][k]
         matrix[row_i][k] = matrix[row_j][k]
         matrix[row_j][k] = c
     if second_matrix is not None:
         for k in range(second_dim[0]):
             c = second_matrix[k][row_i]
             second_matrix[k][row_i] = second_matrix[k][row_j]
             second_matrix[k][row_j] = c
     if second_matrix is not None or save_to_transform:
         self._transform = mh.multiply_matrices(self._transform, [[self._switch_transfrom_value(i, j, row_i, row_j) for j in range(self._m1_base)] for i in range(self._m1_base)], (self._m1_base, self._m1_base), (self._m1_base, self._m1_base))
Beispiel #6
0
 def _switch_columns(self, matrix, dim, min_row, column_i, column_j, second_matrix=None, second_dim=(0, 0)):
     '''If second_matrix is not None, then switch row of it
     '''
     for k in range(min_row, dim[0]):
         c = matrix[k][column_i]
         matrix[k][column_i] = matrix[k][column_j]
         matrix[k][column_j] = c
     if second_matrix is not None:
         for k in range(second_dim[1]):
             c = second_matrix[column_i][k]
             second_matrix[column_i][k] = second_matrix[column_j][k]
             second_matrix[column_j][k] = c
         # if second_matrix is not None, then we switch columns of the M1 matrix
         self._transform = mh.multiply_matrices(self._transform, [[self._switch_transfrom_value(i, j, column_i, column_j) for j in range(self._m1_base)] for i in range(self._m1_base)], (self._m1_base, self._m1_base), (self._m1_base, self._m1_base))
Beispiel #7
0
    def check_correct(self):
        '''Is matrices, presented in processor, are boundary maps, i.e. M1 * M2 = 0

        Return pair (bool, int), where bool is True for correct matrix pair, int is key for incorrect result
        key = -1: correct result
        key = 0: wrong dimensions
        key = 1: M1 * M2 is not equal to zero matrix
        '''
        # check dimensions
        m1_dim = mh.get_size(self._m1)
        m2_dim = mh.get_size(self._m2)
        if m1_dim[1] == m2_dim[0]:
            # make multiplication
            mult = mh.multiply_matrices(self._m1, self._m2, m1_dim, m2_dim)
            # is all elements are zero
            s = mh.get_size(mult)
            for i in range(s[0]):
                for j in range(s[1]):
                    if mult[i][j] != 0:
                        return (False, 1)
            return (True, -1)
        else:
            return (False, 0)