Lanczos法的目的:将实对称矩阵转换成为三对角矩阵(稀疏矩阵),从而便于计算机储存和后续的计算。
在三对角矩阵矩阵上,采用QR分解,得到矩阵的特征值。
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 20 12:41:40 2018
@author: yujin.wang
"""
import numpy as np
import scipy as sci
import matplotlib.pyplot as plt
import time
import sys
def lanczos(A,b,nmax):
m = np.size(A,1)
alpha = []
beta = [0]
qprev = np.zeros(m)
q = b / np.linalg.norm(b)
for n in range(nmax):
v = np.dot(q,A) #*sci.linalg.inv(q)
temp = np.dot(v,q.T)
alpha.append(temp[0][0,0])
v = v - np.dot(beta[-1],qprev)-np.dot(alpha[-1],q)
beta.append(sci.linalg.norm(v))
qprev = q
q = v/beta[-1]
beta = beta[1:-1]
T = np.diag(alpha) + np.diag(beta,1) +np.diag(beta,-1)
return T
def qreigen(A,num=100):
m = np.size(A,1)
p = np.eye(m)
for i in range(num):
v = np.diag(A)
q,r &