0
對於這個問題,我必須採用一個大的100×100隨機生成的矩陣和一個初始的x向量,並試圖獲得特徵值和相關對流的最大絕對值爲以及迭代次數。使用功率法找出最大特徵值
所描述的功率方法:
我一定要找到最大特徵值的絕對VAL,對應的特徵向量,以及迭代次數。
我的代碼:
%% problem 2b: Power method
% code snippet from class generates A and x
nx = 10;
ex = ones(nx,1);
Dxx = spdiags([ex -2*ex ex], [-1 0 1], nx, nx);
A = kron(Dxx, speye(nx)) + kron(speye(nx), Dxx);
rng(2);
x = rand(nx*nx,1); % initial vector
yk = [] % stores yk values
count = 0; % keeps track of iterations
value = 1; % 1 to ensure while loop is entered
tolerance = 10^(-6); % tol
while (value >= tolerance)
yk = A*x; % yk = A*xk
xnext = yk/norm(yk); % Xk+1=yk/2norm(yk)
rk = dot(xnext,(A*xnext)); % rk = Xk+1 * (A*Xk+1)
count = count+1; % iterate count
value = norm(yk - rk*x); % update tolerance check
x = xnext;
end
value
x % final eigenvector
rk % the largest eignvalue in abs value
count % the number of iterations
根據問題的答案,我的最大特徵值-RK-是正確的,但對應的特徵向量和迭代的次數是不正確。有人能爲我澄清這一點嗎?當我使用時,特徵值和特徵向量一致:
[C, D] = eigs(A)
謝謝,這是令人放心的。我會問我的教授這件事。我只是不明白我如何得到正確的特徵值,但是特徵向量和迭代計數是錯誤的。 –
@JackL。 - 我想我知道你可能會感到困惑。我會更新我的答案......但是在權力方法中,有些人規範化了特徵向量,使得最大分量設置爲1.你所做的是用2-規範進行規範化,這是正確的方法。這可能是迭代次數和特徵向量不同的地方......但請記住,特徵向量是非唯一的。它們相當於一個比例因子。讓我更新我的帖子。 – rayryeng
@JackL。 - 沒關係。我已經回答了過去類似的事情。檢查這裏:http://stackoverflow.com/questions/29198277/power-method-in-matlab/29199316#29199316 - 看看這個方法是否產生了「正確的」迭代和特徵向量,但記住特徵向量是有效的一個規模。讓我知道你的教授說什麼。 – rayryeng