【问题标题】:Deflation in Eigen value and vector computation (Power method )特征值和向量计算中的通缩(幂法)
【发布时间】:2016-05-29 08:50:31
【问题描述】:

我有以下(已编辑)代码,用于使用幂级数方法(通过通缩技术)计算小矩阵的所有特征值和向量:

function [eigvect,eigval]=eigen2(A,x0,nit)
% calculates the largest eigenvalue and corresponding eigenvector of
% matrix A by the power method using x0 as the starting vector and
% carrying out nit interactions.
%
eigval=0;
siz=size(A);
siz=siz(1);
for m=1:siz
x = x0;t=x0;
for n = 1:nit
xnew = A*x;
lambda = norm(xnew,inf);
tnew=transpose(A)*t;% computing left eigenvectors
x1=x;
x=xnew/lambda;
x2=x;
t1=t;
t=tnew/lambda;
t2=t;
end
x = x/(norm(x)); %normalise x
t=t/(norm(t));
eigvect(:,m)=x;
eigval(m)=lambda;
teigvect(:,m)=t;
% eigvect
Anew=A-x*transpose(x)*A*x*transpose(x);
A=Anew;
fprintf('\n lambda= %f',lambda);
end
teigvect
fprintf('n = %4d normalised x = %g %g %g\n', n, x');
% eigval
%end

该函数正确计算特征值,但不正确计算非显性特征值的相应特征向量。

有人能指出错误在哪里吗?

EDIT1:由于左右特征向量在对称矩阵中是相等的,所以我在Anew的计算中不涉及左特征向量。

测试用例:

使用matlab的内置特征函数计算:

A=[ 2 1 2; 1 2 1; 2 1 2];

[v,d]=eig(A)

v =

    0.7071    0.3251    0.6280
    0.0000   -0.8881    0.4597
   -0.7071    0.3251    0.6280

d =

   -0.0000         0         0
         0    1.2679         0
         0         0    4.7321

eigen2 函数的结果:

[r,s]=eigen2(A,[3 7 8]',100)

 lambda= 4.732051
 lambda= 1.267949
 lambda= 0.000000
r =

    0.6280   -0.3251    0.7071
    0.4597    0.8881         0
    0.6280   -0.3251    0.7071

s =

    4.7321    1.2679    0.0000

【问题讨论】:

  • 请记录您出错的一个测试用例,以及预期结果。

标签: matlab debugging math signal-processing


【解决方案1】:

是幂法,这里没有幂级数。


一个明显的问题是你假设左特征向量等于右特征向量。这仅适用于对称(和正常)矩阵。如果您使用任何其他矩阵,那么特征值的计算正确是一个奇迹。

【讨论】:

  • 能否请您提及执行此操作的代码行?会很有帮助的。
  • Anew=A-lambda*x*transpose(x);,第二个x应该是左特征向量y,与transpose(y)*A=lambda*transpose(y)。或者你的目标是一个 Smith (?) 范式,那么特征向量必须形成一个标准正交基并且你的通货紧缩形式适用。
  • 你好。暂时,我考虑了一个对称矩阵作为输入,但没有得到正确的答案。我也无法弄清楚错误。我已经将答案与测试用例一起记录了下来。向量相差一个负号。
  • 你不应该使用分量乘积,而应该使用标量或点积,它是所有分量乘积的总和。
  • 完成我昨天的评论:由于精确矩阵是零矩阵,并且算法找到最大的特征值,只要存在噪声,这个最大的特征值和连接的特征向量将由下式确定噪音。在某种意义上,这类似于除以一个接近于零的值。
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多