Statistiques
| Révision :

root / pobysoPythonSage / src / sageSLZ / sageMatrixOperations.sage @ 104

Historique | Voir | Annoter | Télécharger (3,83 ko)

1
print "sageMatrixOperations loading..."
2
def smo_is_diagonal_complete_matrix(mat):
3
    """
4
    Check that all the element on the diagonal are not 0.
5
    """
6
    dimensions = mat.dimensions()
7
    # Must be a bidimensional matrix.
8
    if len(dimensions) != 2:
9
        return False
10
    # Must be square.
11
    if dimensions[0] != dimensions[1]:
12
        return False
13
    # A 1x1 matrix is diagonal complete if it's single element is not 0.
14
    if dimensions[0] == 1:
15
        if mat[0, 0] != 0:
16
            return True
17
        else:
18
            return False
19
    # End if
20
    for rowIndex in xrange(0, dimensions[0]):
21
        if mat[rowIndex, rowIndex] == 0:
22
            print mat.rows()[rowIndex], rowIndex
23
            return False
24
    return True
25
# End smo_is_diagonal_complete_matrix
26

    
27
def smo_is_lower_triangular_matrix(mat):
28
    """
29
    Check that the matrix is lower triangular.
30
    """
31
    dimensions = mat.dimensions()
32
    # Must be a bidimensional matrix.
33
    if len(dimensions) != 2:
34
        return False
35
    # Must be square.
36
    if dimensions[0] != dimensions[1]:
37
        return False
38
    # A 1x1 matrix is lower triangular.
39
    if dimensions[0] == 1:
40
        return True
41
    for rowIndex in xrange(0, dimensions[0]):
42
        for colIndex in xrange(rowIndex + 1, dimensions[1]):
43
            if mat[rowIndex, colIndex] != 0:
44
                print mat.rows()[rowIndex]
45
                return False
46
    return True
47
# End smo_is_lower_triangular_matrix
48

    
49
def smo_is_upper_triangular_matrix(mat):
50
    """
51
    Check that the matrix is upper triangular.
52
    """
53
    dimensions = mat.dimensions()
54
    # Must be a bidimensional matrix.
55
    if len(dimensions) != 2:
56
        return False
57
    # Must be square.
58
    if dimensions[0] != dimensions[1]:
59
        return False
60
    # A 1x1 matrix is lower triangular.
61
    if dimensions[0] == 1:
62
        return True
63
    for rowIndex in xrange(1, dimensions[0]):
64
        for colIndex in xrange(0, rowIndex):
65
            if mat[rowIndex, colIndex] != 0:
66
                print mat.rows()[rowIndex]
67
                return False
68
    return True
69
# End smo_is_upper_triangular_matrix
70

    
71
def smo_max_non_null_abs(mat):
72
    """
73
    Compute the maximum absolute value of the matrix elements.
74
    """
75
    maxNonNull = -Infinity
76
    mlist = mat._list()
77
    for i in mlist:
78
        if i != 0 and i.abs() > maxNonNull :
79
            maxNonNull = i.abs()
80
    return maxNonNull
81
# End smo_min_non_null_abs
82

    
83
#
84

    
85
def smo_min_non_null_abs(mat):
86
    """
87
    Compute the minimum absolute value of the matrix elements.
88
    """
89
    minNonNull = Infinity
90
    mlist = mat._list()
91
    for i in mlist:
92
        if i != 0 and i.abs() < minNonNull :
93
            minNonNull = i.abs()
94
    return minNonNull
95
# End smo_min_non_null_abs
96

    
97
def smo_transformation_row_matrix_strings(varPrefixString, matrix):
98
    """
99
    Create a string that will be evaluated to create one variable per
100
    matrix row.
101
    The first application is the computation of transformation matrices.
102
    """
103
    m = matrix.nrows()
104
    if m == 0 :
105
        return None
106
    varDeclarationString = "var('"
107
    varListArrayDeclaration ="[" 
108
    varListString = ""
109
    for k in xrange(1,m+1):
110
        if k != m:
111
            varListString += varPrefixString + str(k) + ","
112
        else:
113
            varListString += varPrefixString + str(k)
114
    varDeclarationString += varListString + "')"
115
    varListArrayDeclaration += "]" 
116
    return(varDeclarationString, varListArrayDeclaration) 
117
# End smo_transformation_row_matrix_strings.
118

    
119
def smo_zero_rows_index_list(matrix):
120
    """
121
    Compute the list of indices of the rows that have a 0 norm.
122
    """
123
    if 0 == matrix.nrows():
124
        return []
125
    zeroRowsList = []
126
    rowIndex = 0
127
    for row in matrix.rows():
128
        if row.norm(p=1) == 0 :
129
            zeroRowsList.append(rowIndex)
130
        rowIndex += 1
131
    return zeroRowsList
132

    
133
# End smo_zero_rows_index_list
134
      
135
print "\t...sageMatrixOperations loaded"