2016-02-17 121 views
0

我有利用了冪級數型方法(通過放氣法)計算所有小矩陣的特徵值和向量下述(編)碼:通貨緊縮在特徵值和向量計算(功率法)

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 
+0

請記錄您的測試用例中出現錯誤的地方以及預期結果。 – LutzL

回答

1

它是功率的方法,沒有權力系列在這裏。


一個顯而易見的問題是,你假設左特徵向量等於右特徵向量。這僅適用於對稱(和常規)矩陣。如果您使用任何其他矩陣,這是一個奇蹟,正確計算特徵值。

+0

您能否提一下這樣做的代碼行?會很有幫助。 – Shubashree

+0

'Anew = A-lambda * x * transpose(x);',第二個'x'應該是一個左特徵向量'y',其中'transpose(y)* A = lambda * transpose(y)'。或者你的目標是一個史密斯(?)範式,那麼特徵向量必須形成一個正交基,並且你的通縮形式是適用的。 – LutzL

+0

你好。目前,我已經考慮了一個對稱矩陣作爲輸入,但沒有得到正確的答案。我也無法弄清楚錯誤。我已經記錄了測試用例的答案。矢量因負號而不同。 – Shubashree