111
This commit is contained in:
@@ -32,7 +32,7 @@ def SOR(A,b,x,w,err,N):
|
|||||||
|
|
||||||
if count > N:
|
if count > N:
|
||||||
return None,count, 0
|
return None,count, 0
|
||||||
|
#把矩阵改成题干的矩阵,b改成题干结果,err精度要求修改##########################
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
A = [
|
A = [
|
||||||
[4,-1,0,-1,0,0],
|
[4,-1,0,-1,0,0],
|
||||||
@@ -46,7 +46,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
x = [0,0, 0, 0, 0, 0]
|
x = [0,0, 0, 0, 0, 0]
|
||||||
err = 1e-5
|
err = 1e-5
|
||||||
|
#w换成题干要求的值###########################
|
||||||
w = 1
|
w = 1
|
||||||
x1,k,sta = SOR(A, b, x, w, err, 100)
|
x1,k,sta = SOR(A, b, x, w, err, 100)
|
||||||
print(f"w = {w}, 解为: {x1}, 迭代次数: {k}, 状态: {'收敛' if sta == 1 else '未收敛'}")
|
print(f"w = {w}, 解为: {x1}, 迭代次数: {k}, 状态: {'收敛' if sta == 1 else '未收敛'}")
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ def Inverse(A):
|
|||||||
minor = [row[:j] + row[j+1:] for row in (A[:i] + A[i+1:])]
|
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))
|
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)
|
det = Det(A)
|
||||||
print(det)
|
print("det(A):",det)
|
||||||
if det == 0:
|
if det == 0:
|
||||||
print("矩阵不可逆")
|
print("矩阵不可逆")
|
||||||
return None
|
return None
|
||||||
@@ -45,17 +45,18 @@ def Cond(A,v):
|
|||||||
print(inv_A,Norm(A, v), Norm(inv_A, v))
|
print(inv_A,Norm(A, v), Norm(inv_A, v))
|
||||||
return Norm(A, v) * Norm(inv_A, v)
|
return Norm(A, v) * Norm(inv_A, v)
|
||||||
|
|
||||||
|
#把矩阵换成题干的矩阵#########################
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
A = [
|
A = [
|
||||||
[1,2],
|
[1,2],
|
||||||
[1.001,2.001]
|
[1.001,2.001]
|
||||||
]
|
]
|
||||||
|
#把范数的种类数换成题干的要求,inf是无穷范数#########################
|
||||||
print(f"矩阵A的条件数为: {Cond(A, float('inf')):.5f}")
|
print(f"矩阵A的条件数为: {Cond(A, float('inf')):.5f}")
|
||||||
|
#把矩阵换成题干的矩阵#########################
|
||||||
A = [
|
A = [
|
||||||
[1,2],
|
[1,2],
|
||||||
[3,4]
|
[3,4]
|
||||||
]
|
]
|
||||||
|
#把范数的种类数换成题干的要求,inf是无穷范数########################
|
||||||
print(f"矩阵A的条件数为: {Cond(A, float('inf')):.5f}")
|
print(f"矩阵A的条件数为: {Cond(A, float('inf')):.5f}")
|
||||||
|
|||||||
@@ -71,14 +71,14 @@ def IterativeMethod(A, b, err, N):
|
|||||||
A_c = [[A[i][j] for j in range(len(A[0]))] for i in range(len(A))]
|
A_c = [[A[i][j] for j in range(len(A[0]))] for i in range(len(A))]
|
||||||
d1 = SovleRowMain(A_c, r1,4)[3]
|
d1 = SovleRowMain(A_c, r1,4)[3]
|
||||||
x0 = [x0[i] + d1[i] for i in range(len(x0))]
|
x0 = [x0[i] + d1[i] for i in range(len(x0))]
|
||||||
print(f"第{count+1}次迭代, x{count+2} = {x0}, r{count+1} = {r1}, d{count+1} = {d1}")
|
print(f"第{count+1}次迭代, r{count+1} = {r1}, d{count+1} = {d1}, x{count+2} = {x0}")
|
||||||
err_now = max(abs(r1[i]) for i in range(len(r1)))
|
err_now = max(abs(r1[i]) for i in range(len(r1)))
|
||||||
count += 1
|
count += 1
|
||||||
if err_now < err:
|
if err_now < err:
|
||||||
break
|
break
|
||||||
return x0,count
|
return x0,count
|
||||||
|
|
||||||
|
#把矩阵换成题干的矩阵,b换成题干结果,err精度要求修改##########################
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
A = [
|
A = [
|
||||||
[51,82],
|
[51,82],
|
||||||
@@ -91,5 +91,5 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
x = IterativeMethod(A, b, err, N)[0]
|
x = IterativeMethod(A, b, err, N)[0]
|
||||||
print(f"解为: {x}")
|
print(f"解为: {x}")
|
||||||
|
#先用15题的代码求范数与逆矩阵
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user