词条 | Lanczos算法 |
释义 | 概述Lanczos算法是一种将对称矩阵通过正交相似变换变成对称三对角矩阵的算法,以20世纪匈牙利数学家Cornelius Lanczos命名。Lanczos算法实际上是Arnoldi算法对于对称矩阵的特殊形式,可应用于对称矩阵线性方程组求解的Krylov子空间方法以及对称矩阵的特征值问题。 算法Lanczos算法 给定对称矩阵A; 选取单位向量v_1; 设定v_0为零向量; 设定b_0=0; for j=1:m a_i=(Av_i,v_i); b_i=||Av_i-a_iv_i-b_{i-1}v_{i-1}||; b_i v_{i+1} = Av_i - a_i v_i - b_{i-1}v_{i-1}; end 由上述Lanczos算法得:V'AV=T, 其中V=[v_1,...,v_m], T=tridiag(b,a,b), a=[a_1,...,a_m], b=[b_1,...,b_m]. 该算法的一个matlab实现程序A代表任意一个需要三对角化的矩阵,b是任意一个向量,且b的行数与A的列数相同因为要用到v = A*q; nmax是你想要得到的矩阵的大小,例如nmax=12,最后得到12*12的三对角矩阵。 结果输出的是一个三对角矩阵 输入形式为:T = lanczos([1 2 3;4 5 6;7 8 9],[1;1;1],12); function T = lanczos(A, b, nmax) m = size(A,1); beta(1) = 0; qprev = zeros(m, 1); q = b / norm(b); for n = 1:nmax v = A*q; alpha(n) = q' * v; v = v - beta(n) * qprev - alpha(n) * q; beta(n+1) = norm(v); qprev = q; q = v / beta(n+1); end beta = beta(2:end-1); T = diag(alpha) + diag(beta,1) + diag(beta,-1); |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。