Files
CalWay_Python/227-4.py
2025-06-18 23:22:51 +08:00

59 lines
1.8 KiB
Python

#列 行
def getIndexFromDownMatrix(col, row):
if row > col:
row, col = col, row
return (1+col)*col//2+row
# 平方根法求解
def SqrtSolve(A,b):
n = len(b)
L = [0]*(n*(n+1)//2)
for j in range(n):
for i in range(j,n):
if i == j:
L[getIndexFromDownMatrix(i,j)] = A[getIndexFromDownMatrix(i,j)]
for k in range(j):
L[getIndexFromDownMatrix(i,j)] -= L[getIndexFromDownMatrix(j,k)]**2
L[getIndexFromDownMatrix(i,j)] = L[getIndexFromDownMatrix(i,j)]**0.5
else:
L[getIndexFromDownMatrix(i,j)] = A[getIndexFromDownMatrix(i,j)]
for k in range(j):
L[getIndexFromDownMatrix(i,j)] -= L[getIndexFromDownMatrix(i,k)]*L[getIndexFromDownMatrix(j,k)]
L[getIndexFromDownMatrix(i,j)] /= L[getIndexFromDownMatrix(j,j)]
# 打印下三角矩阵
print("下三角矩阵 L:")
for i in range(n):
L_row = []
for j in range(n):
if j <= i:
L_row.append(L[getIndexFromDownMatrix(i,j)])
else:
L_row.append(0)
print(L_row)
# print(L)
for i in range(n):
for k in range(i):
b[i] -= L[getIndexFromDownMatrix(i,k)]*b[k]
b[i] /= L[getIndexFromDownMatrix(i,i)]
# 打印 b 向量
print("y 向量:")
print(b)
for i in range(n-1,-1,-1):
for k in range(i+1,n):
b[i] -= L[getIndexFromDownMatrix(k,i)]*b[k]
b[i] /= L[getIndexFromDownMatrix(i,i)]
return b
#把A,b换成题干的数值###########################################
if __name__ == "__main__":
# 储存下三角矩阵 a11, a21, a22, a31, a32, a33 ...
A = [4,2,2,-2,-3,14]
b = [10,5,4]
# print("x:")
print("x: \n",SqrtSolve(A,b))