power method with rayleigh coeff

6 views (last 30 days)
Sonali
Sonali on 12 Apr 2024
Commented: Sonali on 14 Apr 2024
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

Accepted Answer

Alan Stevens
Alan Stevens on 13 Apr 2024
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

More Answers (0)

Categories

Find more on Labels and Annotations in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!