Statistiques
| Révision :

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

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

1 87 storres
print "sageMatrixOperations loading..."
2 75 storres
def smo_is_diagonal_complete_matrix(mat):
3 74 storres
    """
4 75 storres
    Check that all the element on the diagonal are not 0.
5 74 storres
    """
6 74 storres
    dimensions = mat.dimensions()
7 74 storres
    # Must be a bidimensional matrix.
8 74 storres
    if len(dimensions) != 2:
9 74 storres
        return False
10 74 storres
    # Must be square.
11 74 storres
    if dimensions[0] != dimensions[1]:
12 74 storres
        return False
13 75 storres
    # A 1x1 matrix is diagonal complete if it's single element is not 0.
14 74 storres
    if dimensions[0] == 1:
15 75 storres
        if mat[0, 0] != 0:
16 75 storres
            return True
17 75 storres
        else:
18 75 storres
            return False
19 75 storres
    # End if
20 74 storres
    for rowIndex in xrange(0, dimensions[0]):
21 75 storres
        if mat[rowIndex, rowIndex] == 0:
22 75 storres
            print mat.rows()[rowIndex], rowIndex
23 75 storres
            return False
24 74 storres
    return True
25 75 storres
# End smo_is_diagonal_complete_matrix
26 74 storres
27 75 storres
def smo_is_lower_triangular_matrix(mat):
28 74 storres
    """
29 75 storres
    Check that the matrix is lower triangular.
30 74 storres
    """
31 74 storres
    dimensions = mat.dimensions()
32 74 storres
    # Must be a bidimensional matrix.
33 74 storres
    if len(dimensions) != 2:
34 74 storres
        return False
35 74 storres
    # Must be square.
36 74 storres
    if dimensions[0] != dimensions[1]:
37 74 storres
        return False
38 75 storres
    # A 1x1 matrix is lower triangular.
39 74 storres
    if dimensions[0] == 1:
40 75 storres
        return True
41 74 storres
    for rowIndex in xrange(0, dimensions[0]):
42 75 storres
        for colIndex in xrange(rowIndex + 1, dimensions[1]):
43 75 storres
            if mat[rowIndex, colIndex] != 0:
44 75 storres
                print mat.rows()[rowIndex]
45 75 storres
                return False
46 74 storres
    return True
47 75 storres
# End smo_is_lower_triangular_matrix
48 75 storres
49 83 storres
def smo_is_upper_triangular_matrix(mat):
50 83 storres
    """
51 83 storres
    Check that the matrix is upper triangular.
52 83 storres
    """
53 83 storres
    dimensions = mat.dimensions()
54 83 storres
    # Must be a bidimensional matrix.
55 83 storres
    if len(dimensions) != 2:
56 83 storres
        return False
57 83 storres
    # Must be square.
58 83 storres
    if dimensions[0] != dimensions[1]:
59 83 storres
        return False
60 83 storres
    # A 1x1 matrix is lower triangular.
61 83 storres
    if dimensions[0] == 1:
62 83 storres
        return True
63 83 storres
    for rowIndex in xrange(1, dimensions[0]):
64 83 storres
        for colIndex in xrange(0, rowIndex):
65 83 storres
            if mat[rowIndex, colIndex] != 0:
66 83 storres
                print mat.rows()[rowIndex]
67 83 storres
                return False
68 83 storres
    return True
69 83 storres
# End smo_is_upper_triangular_matrix
70 83 storres
71 94 storres
def smo_max_non_null_abs(mat):
72 94 storres
    """
73 94 storres
    Compute the maximum absolute value of the matrix elements.
74 94 storres
    """
75 94 storres
    maxNonNull = -Infinity
76 94 storres
    mlist = mat._list()
77 94 storres
    for i in mlist:
78 94 storres
        if i != 0 and i.abs() > maxNonNull :
79 94 storres
            maxNonNull = i.abs()
80 94 storres
    return maxNonNull
81 94 storres
# End smo_min_non_null_abs
82 94 storres
83 94 storres
#
84 94 storres
85 94 storres
def smo_min_non_null_abs(mat):
86 94 storres
    """
87 94 storres
    Compute the minimum absolute value of the matrix elements.
88 94 storres
    """
89 94 storres
    minNonNull = Infinity
90 94 storres
    mlist = mat._list()
91 94 storres
    for i in mlist:
92 94 storres
        if i != 0 and i.abs() < minNonNull :
93 94 storres
            minNonNull = i.abs()
94 94 storres
    return minNonNull
95 94 storres
# End smo_min_non_null_abs
96 95 storres
97 103 storres
def smo_transformation_row_matrix_strings(varPrefixString, matrix):
98 104 storres
    """
99 104 storres
    Create a string that will be evaluated to create one variable per
100 104 storres
    matrix row.
101 104 storres
    The first application is the computation of transformation matrices.
102 104 storres
    """
103 95 storres
    m = matrix.nrows()
104 95 storres
    if m == 0 :
105 95 storres
        return None
106 95 storres
    varDeclarationString = "var('"
107 95 storres
    varListArrayDeclaration ="["
108 95 storres
    varListString = ""
109 95 storres
    for k in xrange(1,m+1):
110 95 storres
        if k != m:
111 95 storres
            varListString += varPrefixString + str(k) + ","
112 95 storres
        else:
113 95 storres
            varListString += varPrefixString + str(k)
114 95 storres
    varDeclarationString += varListString + "')"
115 95 storres
    varListArrayDeclaration += "]"
116 95 storres
    return(varDeclarationString, varListArrayDeclaration)
117 95 storres
# End smo_transformation_row_matrix_strings.
118 96 storres
119 96 storres
def smo_zero_rows_index_list(matrix):
120 96 storres
    """
121 96 storres
    Compute the list of indices of the rows that have a 0 norm.
122 96 storres
    """
123 97 storres
    if 0 == matrix.nrows():
124 96 storres
        return []
125 96 storres
    zeroRowsList = []
126 96 storres
    rowIndex = 0
127 96 storres
    for row in matrix.rows():
128 96 storres
        if row.norm(p=1) == 0 :
129 96 storres
            zeroRowsList.append(rowIndex)
130 97 storres
        rowIndex += 1
131 96 storres
    return zeroRowsList
132 96 storres
133 96 storres
# End smo_zero_rows_index_list
134 95 storres
135 87 storres
print "\t...sageMatrixOperations loaded"