嗨,我尝试了这个QR算法,试图找到对称三对角矩阵的特征向量和特征值。它完美地找到了所有的特征值,但我得到了错误的特征向量。有什么建议吗? 我也知道QR_分解函数是正确的,因为当我设置uk=0时,我得到了正确的特征值和特征向量
def QR_desc_wilkinson(matriz):
n, m = np.shape(matriz)
converg = []
eigenvalues = np.zeros((n,))
V_ident = np.eye(n)
k = 0
uk = 0
n -= 1
while n > 1:
print('@@@@@@@@@@@@@@@@@@@@@@@@')
print(k)
if k == 0:
Q, R = QR_factorization(matriz)
converg.append(abs(matriz[n, n - 1]))
if converg[-1] < pow(10, -6):
eigenvalues[n] = matriz[n, n]
n -= 1
matriz = np.matmul(R, Q)
V_ident = np.matmul(V_ident, Q)
else:
delta = (matriz[n-1, n-1] - matriz[n, n]) / 2
if delta == 0:
delta_l = 1
else:
delta_l = delta
uk = matriz[n, n] + delta - np.sign(delta_l) * math.sqrt(delta ** 2 + matriz[n, n-1] ** 2) # delta + np.sign(delta_l)* delta matriz[n, n]
uk_matriz = uk * np.eye(m)
Q, R = QR_fatorizacao(matriz - uk_matriz)
converg.append(abs(matriz[n, n-1]))
if converg[-1] < pow(10, -6):
print(n)
eigenvalues[n] = matriz[n][n]
n -= 1
if n == 1:
break
V_ident = np.matmul(V_ident, Q)
matriz = np.matmul(R, Q) + uk_matriz
k = k + 1
eigenvalues[0] = matriz[0][0]
eigenvalues[1] = matriz[1][1]
return eigenvalues, converg, V_ident
目前没有回答
相关问题 更多 >
编程相关推荐