matlab - 获取对称矩阵的特征值和特征向量的简单Lanczos算法代码

标签 matlab linear-algebra eigenvector eigenvalue lanczos

我想用 Lanczos 算法编写一个简单的程序(用 C 语言)。我遇到了一个 Matlab 示例,它帮助我进一步理解了算法,但是从这段代码中我找不到获取特征值和特征向量的方法。我可以遵循算法,但我想我一定遗漏了一些东西。 有人可以指导我从这个例子中获取特征值,以便我可以理解该方法,然后用 C 语言编写代码吗?

% Create a random symmetric matrix 
D=6
for i=1:D,
    for j=1:i,
        A(i,j)=rand; 
        A(j,i)=A(i,j);
    end 
end

% Iteration with j=0 
r0 = rand(D,1); 
b0 = sqrt(r0'*r0); 
q1 = r0/b0; 
a1 = q1'*A*q1

%Iteration with j=1
r1 = A*q1 - a1*q1
b1 = sqrt(r1'*r1)
q2 = r1/b1;
a2 = q2'*A*q2

%Iteration with j=2
r2 = A*q2 - a2*q2 - b1*q1;
b2 = sqrt(r2'*r2)
q3 = r2/b2
a3 = q3'*A*q3

% Create Matrix Q
Q = [q1 q2 q3];

%Check orthogonality
EYE = Q'*Q
T = Q'*A*Q

最佳答案

在最初的 Lanczos 方法中,首先要计算矩阵 A 的最大特征值。然后计算与该特征值对应的特征向量。计算完这两个对象后,您可以减少您在一个对象上使用的矩阵的维数,然后找到新矩阵的最大特征值。你要迭代这 m 次,其中 m 是初始矩阵 A 的维数。

但是如果你想同时计算所有的特征值,你要使用Paige iterative procedure (see in middle) 首先在其中构建三对角矩阵。然后您使用一种众所周知的快速算法计算它的特征值,因为这种矩阵非常稀疏,并且通过上面文章中指定的公式,您可以轻松计算初始矩阵的特征值及其对应的特征向量。

关于matlab - 获取对称矩阵的特征值和特征向量的简单Lanczos算法代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275239/

相关文章:

matlab - 我不断收到警告,说我使用polyfit()查找多项式时,多项式的条件不好

python - 使用 matplotlib 可视化数据

matlab - MATLAB 中的多种日期格式

c# - 线性函数 : y = mx + b (2 points given) in code

matrix - 计算变换椭圆的 AABB

python - 用 numpy 减少循环

matlab - 更改 Matlab 中的整列和行

python - PCA 计算中的复杂特征值

python - python 的简单 QR 迭代的特征值不正确

c - 特征向量中心性