Files
CalWay_Python/按方法整理/矩阵-平方根法.py
2025-06-19 00:08:48 +08:00

63 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import math
# 获取下三角矩阵的索引
# 列 行
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] # b向量常数项
# print("x:")
print("x: \n",SqrtSolve(A,b))