题目截图 生成A和B
from scipy import linalg import numpy as np A = np.random.normal(0,1,100000).reshape(200,500) B = linalg.toeplitz(list(range(1,500)))题目截图 代码
# 9.1 print(A + A) print(np.dot(A, A.T)) print(np.dot(A.T, A)) print(np.dot(A, B)) def compute(x): return np.dot(A, B - x * np.eye(500))题目截图 代码
# 9.2 b = np.linspace(1, 500, 500) # 解线性方程 print(np.linalg.solve(B, b))题目截图 代码
# 9.3 # 求范数 print(linalg.norm(A, 'fro')) print(linalg.norm(B, np.inf)) # 求奇异值 b = linalg.svdvals(B).tolist() print(max(b)) print(min(b))题目截图 代码
def getMatrix(n): return np.random.normal(0, 1, n*n).reshape(n, n) def calculateTime(n): Z = getMatrix(n) # Z矩阵 v = np.array(list(range(1, n+1))[::-1]) # 初始向量 a, tempa = linalg.norm(v, np.inf), 0 # 特征值 x = 0 # 记录次数 t = time.clock() # 记录时间 while True: tempa = a y = np.dot(Z, v) a = linalg.norm(y, np.inf) v = y / a x += 1 if abs(tempa - a) < 0.000001:# 判停条件 break t = time.clock() - t return x, t, v, a result = calculateTime(10) print("次数为:%d"%result[0]) print("时间为:%f"%result[1]) print("特征向量为:",end="") print(result[2]) print("特征值为:%f"%result[3])结果截图
题目截图 代码
# 9.5 def getSingle(n, p): M = np.random.binomial(1, p, [n, n]) return max(linalg.svdvals(M)) print(getSingle(10, 0.25)) print(getSingle(100, 0.25)) print(getSingle(1000, 0.25)) print(getSingle(2000, 0.25))结果截图 由结果可知,当n足够大时,矩阵的最大奇异值收敛于np
题目截图 代码
A = np.random.normal(0, 1, 400).reshape(20, 20) def getClosed(A, val): a = min(A[A>val]) b = max(A[A<=val]) return b if abs(a-val) > abs(b-val) else a print(getClosed(A, 0.5))