Statistiques
| Révision :

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

Historique | Voir | Annoter | Télécharger (3,66 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
    m = matrix.nrows()
99
    if m == 0 :
100
        return None
101
    varDeclarationString = "var('"
102
    varListArrayDeclaration ="[" 
103
    varListString = ""
104
    for k in xrange(1,m+1):
105
        if k != m:
106
            varListString += varPrefixString + str(k) + ","
107
        else:
108
            varListString += varPrefixString + str(k)
109
    varDeclarationString += varListString + "')"
110
    varListArrayDeclaration += "]" 
111
    return(varDeclarationString, varListArrayDeclaration) 
112
# End smo_transformation_row_matrix_strings.
113

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

    
128
# End smo_zero_rows_index_list
129
      
130
print "\t...sageMatrixOperations loaded"