power method with rayleigh coeff

조회 수: 8 (최근 30일)
Sonali
Sonali 2024년 4월 12일
댓글: Sonali 2024년 4월 14일
Hello, I'm working on Rayleigh iteration and my program is as follows. I am getting wrong values. I was wondering if someone could suggest something.
function [eigval, eigvec,itern] = rayl(A, x0, tol, nmax)
x = x0;
iter = 0;
e0 = 0;
while iter < nmax
y = A * x;
en = (x' * y) / (x' * x);
if abs(en - e0) <= tol
break;
end
x = y / norm(y);
e0 = en;
iter = iter + 1;
end
eigval = en;
eigvec = x;
itern =iter;
end
.........................................................................
Calling in function:
A=[4 1 -1 0;1 3 -1 0;-1 -1 5 2;0 0 2 4]
tol=1.d-8; nmax=100; x0=[1 1 1 1]';
[eig_val_ray, xr,iter] = rayl(A, x0, nmax, tol)
................................................................
output:
eig_val_ray = 4.5000
xr = 4×1
1
1
1
1
iter = 0

채택된 답변

Alan Stevens
Alan Stevens 2024년 4월 13일
Make sure you call the function with the arguments in the same order as those defined in the function!
A=[4 1 -1 0;1 3 -1 0;-1 -1 5 2;0 0 2 4];
tol=1.d-8; nmax=100; x0=[1 1 1 1]';
[eig_val_ray, xr,iter] = rayl(A, x0, tol, nmax); %%%%%%%%%%%%%%%%%%%
eig_val_ray
eig_val_ray = 7.0861
xr
xr = 4x1
-0.3325 -0.2671 0.7590 0.4919
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
iter
iter = 24
function [eigval, eigvec,itern] = rayl(A, x0, tol, nmax)%%%%%%%%%%%%%%
x = x0;
iter = 0;
e0 = 0;
while iter < nmax
y = A * x;
en = (x' * y) / (x' * x);
if abs(en - e0) <= tol
break;
end
x = y / norm(y);
e0 = en;
iter = iter + 1;
end
eigval = en;
eigvec = x;
itern =iter;
end

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 PHY Components에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by