#模 范数 def Norm(x,v): if len(x[0]) == 1: if v == 1: return sum([abs(i[0]) for i in x]) elif v == 2: return (sum([i[0]**2 for i in x]))**0.5 elif v == float("inf"): return max([abs(i[0]) for i in x]) else: if v == 1: return max([sum([abs(x[i][j]) for i in range(len(x))]) for j in range(len(x[0]))]) elif v == float("inf"): return max([sum([abs(i) for i in x[j]]) for j in range(len(x))]) return None # 计算矩阵的行列式 def Det(A): if len(A) == 2: return A[0][0] * A[1][1] - A[0][1] * A[1][0] det = 0 for c in range(len(A)): sub_matrix = [row[:c] + row[c+1:] for row in A[1:]] det += ((-1) ** c) * A[0][c] * Det(sub_matrix) return det # 计算矩阵的逆矩阵 def Inverse(A): n = len(A) # 计算代数余子式矩阵 B = [[0 for i in range(n)] for j in range(n)] for i in range(n): for j in range(n): minor = [row[:j] + row[j+1:] for row in (A[:i] + A[i+1:])] B[j][i] = ((-1) ** (i + j)) * sum(minor[k][l] * (-1) ** (k + l) for k in range(n - 1) for l in range(n - 1)) det = Det(A) print(det) if det == 0: print("矩阵不可逆") return None A_inv = [[B[i][j] / det for j in range(n)] for i in range(n)] return A_inv # 计算矩阵的条件数 def Cond(A,v): inv_A = Inverse(A) print(inv_A,Norm(A, v), Norm(inv_A, v)) return Norm(A, v) * Norm(inv_A, v) if __name__ == "__main__": A = [ [1,2], [1.001,2.001] ] print(f"矩阵A的条件数为: {Cond(A, float('inf')):.5f}") A = [ [1,2], [3,4] ] print(f"矩阵A的条件数为: {Cond(A, float('inf')):.5f}")