20250604
This commit is contained in:
60
228-15.py
Normal file
60
228-15.py
Normal file
@@ -0,0 +1,60 @@
|
||||
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}")
|
||||
Reference in New Issue
Block a user