예제 #1
0
def inverse(A):
    if not A or len(A) != len(A[0]):
        raise Exception("Invalid input")
    length = len(A)
    res = append(A, eye(length))
    for i in range(length):
        res[i] = Vector.multiply_integer(res[i], 1 / res[i][i])
        for j in range(length):
            if i == j:
                continue
            res[j] = Vector.minus(res[j], Vector.multiply_integer(res[i], res[j][i]))
    for i in range(length):
        res[i] = res[i][length:]
    return res
예제 #2
0
def determinant(A):
    if not A or len(A) != len(A[0]):
        raise Exception("Invalid input")
    new_A = [[0] * len(A[0]) for _ in range(len(A))]
    for i in range(len(A)):
        for j in range(len(A)):
            new_A[i][j] = A[i][j]
    for i in range(len(A)):
        for j in range(i + 1, len(A)):
            new_A[j] = Vector.minus(new_A[j], Vector.multiply_integer(new_A[i], new_A[j][i] / new_A[i][i]))
    res = 1
    for i in range(len(A)):
        res *= new_A[i][i]
    return res