MATLAB eigs 返回非常奇怪的结果

MATLAB's eigs returning very odd results

我有一个稀疏的实数对称矩阵,我正在尝试将其分解为 e.v。 奇怪的是:如果我使用 eigs 计算前 20 个特征向量,我得到的结果与我计算前 50 个然后选出前 20 个的结果不同。

opts.v0 = rand(size(K,1),1);
opts.p = 100;

n_ev = 20;
[V,D] = eigs(K, n_ev,'lm',opts);
Display(V,79,95,size(V,1)/(79*95),20)

n_ev = 50;
[V,D] = eigs(K, n_ev,'lm',opts);
Display(V,79,95,size(V,1)/(79*95),20)

n_ev = 70;   
[V,D] = eigs(K, n_ev,'lm',opts);
Display(V,79,95,size(V,1)/(79*95),20)

这可以用特征向量不唯一这一事实来解释吗? 任何其他见解将不胜感激。

谢谢

根据约翰 in a mathworks post

This is because eigs uses a random start

由于 eigs 是一个 ARPACK 库,因此通读其文档可能会很耗时。但是,我们可以假设 1) 它不尝试求解逆矩阵,并且 2) 涉及随机数,因此输出具有随机误差。

实验完成:

clear;clc;close all

K = randn(100);

N = 20;
DD = zeros(N,10);
for ii = 1:10
    [V,D] = eigs(K, N,'lm');
    DS = diag(D);
    [~,DI] = sort(abs(DS),'descend');
    DS = DS(DI);
    DD(:,ii) = DS;
end
DN1 = abs(DD);

N = 50;
DD = zeros(N,10);
for ii = 1:10
    [V,D] = eigs(K, N,'lm');
    DS = diag(D);
    [~,DI] = sort(abs(DS),'descend');
    DS = DS(DI);
    DD(:,ii) = DS;
end
DN2 = abs(DD);
DN2 = DN2(1:20,:);

N = 20;
DD = zeros(N,10);
for ii = 1:10
    [V,D] = eigs(K, N,'lm');
    DS = diag(D);
    [~,DI] = sort(abs(DS),'descend');
    DS = DS(DI);
    DD(:,ii) = DS;
end
DN3 = abs(DD);

这遵循你的程序:首先是前 20 名,然后是前 50 名,然后是前 20 名。在每个步骤中,相同的过程重复 10 次。

我保存了每个步骤的前 20 个并做了快速比较:

Err = (sum((DN1-DN2).^2+(DN2-DN3).^2+(DN1-DN3).^2,1)).^.5;
>> Err

Err =

  Columns 1 through 6

    0.0000    0.0000    0.0000    0.0870    0.0000    0.0000

  Columns 7 through 10

    0.0000    0.0000    0.0870    0.0870

>> min(Err),max(Err)

ans =

   3.1665e-13


ans =

    0.0870

>> 

大部分时间误差与eps(1)相当,但少数误差较大。这表明,为了生成可靠的结果,可能需要重复计算和平均。


但是,如果您的问题仅仅是它们乱序了(我想我现在明白您的意思了),您可以 sort 求值后相对于幅度的向量。我的实验应该可以证明sort之后的前20总是一样的。


编辑:正如@TroyHaskin 在评论中指出的那样,您已经定义了 opts(我公然删除了它)来定义随机种子。让我们添加这些行,看看错误会发生什么:

Err =

  Columns 1 through 6

    0.0016    0.0016    0.0016    0.0016    0.0016    0.0016

  Columns 7 through 10

    0.0016    0.0016    0.0016    0.0016

可能(猜测)的解释:作为感兴趣的人数e.v。增加误差增长,因为 "some" 放宽容差以保证速度性能。