Merge branch 'main' of https://gitea.pi5.lhye.work/lhye200/CalWay_Python
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
#正割法计算方程
|
||||||
def SecantSolve(fx, x0, x1, err=1e-10, N0=100):
|
def SecantSolve(fx, x0, x1, err=1e-10, N0=100):
|
||||||
count = 0
|
count = 0
|
||||||
print(f"k={count}: x{count}={x0}, f(x{count})={fx(x0)}")
|
print(f"k={count}: x{count}={x0}, f(x{count})={fx(x0)}")
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#抛物线法解方程(主)
|
||||||
def MullerSolve(fx,x0,x1,x2,err1,err2,N):
|
def MullerSolve(fx,x0,x1,x2,err1,err2,N):
|
||||||
count = 0
|
count = 0
|
||||||
f0 = fx(x0)
|
f0 = fx(x0)
|
||||||
|
|||||||
21
227-3.py
21
227-3.py
@@ -1,10 +1,3 @@
|
|||||||
A = [
|
|
||||||
[0, 3, 4],
|
|
||||||
[1, -1, 1],
|
|
||||||
[2, 1, 2]
|
|
||||||
]
|
|
||||||
|
|
||||||
b = [1, 2, 3]
|
|
||||||
|
|
||||||
# 列主元高斯消元法
|
# 列主元高斯消元法
|
||||||
def SovleRowMain(A,b):
|
def SovleRowMain(A,b):
|
||||||
@@ -61,7 +54,7 @@ def SovleRowMain(A,b):
|
|||||||
|
|
||||||
P[i][p[i]] = 1
|
P[i][p[i]] = 1
|
||||||
return P,L,U,b
|
return P,L,U,b
|
||||||
|
#打印矩阵
|
||||||
def prettyPrintMatrix(matrix):
|
def prettyPrintMatrix(matrix):
|
||||||
for row in matrix:
|
for row in matrix:
|
||||||
print(row)
|
print(row)
|
||||||
@@ -70,6 +63,15 @@ def prettyPrintMatrix(matrix):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# A = np.array(A, dtype=float)
|
# A = np.array(A, dtype=float)
|
||||||
# b = np.array(b, dtype=float)
|
# b = np.array(b, dtype=float)
|
||||||
|
|
||||||
|
A = [
|
||||||
|
[0, 3, 4],
|
||||||
|
[1, -1, 1],
|
||||||
|
[2, 1, 2]
|
||||||
|
]
|
||||||
|
|
||||||
|
b = [1, 2, 3]
|
||||||
|
|
||||||
P,L,U,x = SovleRowMain(A, b)
|
P,L,U,x = SovleRowMain(A, b)
|
||||||
print("P:")
|
print("P:")
|
||||||
prettyPrintMatrix(P)
|
prettyPrintMatrix(P)
|
||||||
@@ -79,4 +81,5 @@ if __name__ == "__main__":
|
|||||||
prettyPrintMatrix(U)
|
prettyPrintMatrix(U)
|
||||||
print("x:")
|
print("x:")
|
||||||
print(x)
|
print(x)
|
||||||
|
|
||||||
|
|
||||||
11
227-4.py
11
227-4.py
@@ -1,8 +1,3 @@
|
|||||||
# 储存下三角矩阵 a11, a21, a22, a31, a32, a33 ...
|
|
||||||
A = [4,2,2,-2,-3,14]
|
|
||||||
|
|
||||||
|
|
||||||
b = [10,5,4]
|
|
||||||
|
|
||||||
#列 行
|
#列 行
|
||||||
def getIndexFromDownMatrix(col, row):
|
def getIndexFromDownMatrix(col, row):
|
||||||
@@ -41,5 +36,11 @@ def SqrtSolve(A,b):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
# 储存下三角矩阵 a11, a21, a22, a31, a32, a33 ...
|
||||||
|
A = [4,2,2,-2,-3,14]
|
||||||
|
|
||||||
|
|
||||||
|
b = [10,5,4]
|
||||||
|
|
||||||
print("x:")
|
print("x:")
|
||||||
print(SqrtSolve(A,b))
|
print(SqrtSolve(A,b))
|
||||||
|
|||||||
22
227-7.py
22
227-7.py
@@ -1,14 +1,3 @@
|
|||||||
# 储存追赶法A矩阵
|
|
||||||
A = [
|
|
||||||
[0,4,-1],
|
|
||||||
[-1,4,-1],
|
|
||||||
[-1,4,-1],
|
|
||||||
[-1,4,-1],
|
|
||||||
[-1,4,0]
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
b = [100,200,200,200,100]
|
|
||||||
|
|
||||||
# 追赶法求解
|
# 追赶法求解
|
||||||
def ZGsolve(A,b):
|
def ZGsolve(A,b):
|
||||||
@@ -33,5 +22,16 @@ def ZGsolve(A,b):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
# 储存追赶法A矩阵
|
||||||
|
A = [
|
||||||
|
[0,4,-1],
|
||||||
|
[-1,4,-1],
|
||||||
|
[-1,4,-1],
|
||||||
|
[-1,4,-1],
|
||||||
|
[-1,4,0]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
b = [100,200,200,200,100]
|
||||||
print("x:")
|
print("x:")
|
||||||
print(ZGsolve(A,b))
|
print(ZGsolve(A,b))
|
||||||
4
227-8.py
4
227-8.py
@@ -1,4 +1,4 @@
|
|||||||
|
#模 范数
|
||||||
def Norm(x,v):
|
def Norm(x,v):
|
||||||
if len(x[0]) == 1:
|
if len(x[0]) == 1:
|
||||||
if v == 1:
|
if v == 1:
|
||||||
@@ -13,7 +13,7 @@ def Norm(x,v):
|
|||||||
elif v == float("inf"):
|
elif v == float("inf"):
|
||||||
return max([sum([abs(i) for i in x[j]]) for j in range(len(x))])
|
return max([sum([abs(i) for i in x[j]]) for j in range(len(x))])
|
||||||
return None
|
return None
|
||||||
|
# 计算矩阵的点积
|
||||||
def Dot(A,B):
|
def Dot(A,B):
|
||||||
if len(A[0]) != len(B):
|
if len(A[0]) != len(B):
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#抛物线法解方程
|
||||||
def MullerSolve(fx,x0,x1,x2,err1,err2,N):
|
def MullerSolve(fx,x0,x1,x2,err1,err2,N):
|
||||||
count = 0
|
count = 0
|
||||||
f0 = fx(x0)
|
f0 = fx(x0)
|
||||||
@@ -40,7 +41,7 @@ def MullerSolve(fx,x0,x1,x2,err1,err2,N):
|
|||||||
f1 = f2
|
f1 = f2
|
||||||
f2 = f3
|
f2 = f3
|
||||||
q = h1
|
q = h1
|
||||||
|
#计算矩阵的行列式
|
||||||
def Det(A):
|
def Det(A):
|
||||||
if len(A) == 2:
|
if len(A) == 2:
|
||||||
return A[0][0] * A[1][1] - A[0][1] * A[1][0]
|
return A[0][0] * A[1][1] - A[0][1] * A[1][0]
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#模 范数
|
||||||
def Norm(x,v):
|
def Norm(x,v):
|
||||||
if len(x[0]) == 1:
|
if len(x[0]) == 1:
|
||||||
if v == 1:
|
if v == 1:
|
||||||
@@ -12,7 +13,7 @@ def Norm(x,v):
|
|||||||
elif v == float("inf"):
|
elif v == float("inf"):
|
||||||
return max([sum([abs(i) for i in x[j]]) for j in range(len(x))])
|
return max([sum([abs(i) for i in x[j]]) for j in range(len(x))])
|
||||||
return None
|
return None
|
||||||
|
#SOR方法 逐次超松弛迭代
|
||||||
def SOR(A,b,x,w,err,N):
|
def SOR(A,b,x,w,err,N):
|
||||||
count = 0
|
count = 0
|
||||||
n = len(A)
|
n = len(A)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
def Norm(x,v):
|
#模 范数
|
||||||
|
def Norm(x,v):
|
||||||
if len(x[0]) == 1:
|
if len(x[0]) == 1:
|
||||||
if v == 1:
|
if v == 1:
|
||||||
return sum([abs(i[0]) for i in x])
|
return sum([abs(i[0]) for i in x])
|
||||||
@@ -13,7 +14,7 @@ def Norm(x,v):
|
|||||||
return max([sum([abs(i) for i in x[j]]) for j in range(len(x))])
|
return max([sum([abs(i) for i in x[j]]) for j in range(len(x))])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# 计算矩阵的行列式
|
||||||
def Det(A):
|
def Det(A):
|
||||||
if len(A) == 2:
|
if len(A) == 2:
|
||||||
return A[0][0] * A[1][1] - A[0][1] * A[1][0]
|
return A[0][0] * A[1][1] - A[0][1] * A[1][0]
|
||||||
@@ -22,7 +23,7 @@ def Det(A):
|
|||||||
sub_matrix = [row[:c] + row[c+1:] for row in A[1:]]
|
sub_matrix = [row[:c] + row[c+1:] for row in A[1:]]
|
||||||
det += ((-1) ** c) * A[0][c] * Det(sub_matrix)
|
det += ((-1) ** c) * A[0][c] * Det(sub_matrix)
|
||||||
return det
|
return det
|
||||||
|
# 计算矩阵的逆矩阵
|
||||||
def Inverse(A):
|
def Inverse(A):
|
||||||
n = len(A)
|
n = len(A)
|
||||||
# 计算代数余子式矩阵
|
# 计算代数余子式矩阵
|
||||||
@@ -38,7 +39,7 @@ def Inverse(A):
|
|||||||
return None
|
return None
|
||||||
A_inv = [[B[i][j] / det for j in range(n)] for i in range(n)]
|
A_inv = [[B[i][j] / det for j in range(n)] for i in range(n)]
|
||||||
return A_inv
|
return A_inv
|
||||||
|
# 计算矩阵的条件数
|
||||||
def Cond(A,v):
|
def Cond(A,v):
|
||||||
inv_A = Inverse(A)
|
inv_A = Inverse(A)
|
||||||
print(inv_A,Norm(A, v), Norm(inv_A, v))
|
print(inv_A,Norm(A, v), Norm(inv_A, v))
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#列主元高斯消元法
|
||||||
def SovleRowMain(A,b,round_num=15):
|
def SovleRowMain(A,b,round_num=15):
|
||||||
ks = 0.00000001
|
ks = 0.00000001
|
||||||
n = len(A)
|
n = len(A)
|
||||||
@@ -56,7 +57,7 @@ def SovleRowMain(A,b,round_num=15):
|
|||||||
|
|
||||||
P[i][p[i]] = 1
|
P[i][p[i]] = 1
|
||||||
return P,L,U,b
|
return P,L,U,b
|
||||||
|
#迭代改善法
|
||||||
def IterativeMethod(A, b, err, N):
|
def IterativeMethod(A, b, err, N):
|
||||||
b_c = [b[i] for i in range(len(b))]
|
b_c = [b[i] for i in range(len(b))]
|
||||||
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))]
|
||||||
|
|||||||
Reference in New Issue
Block a user