power method with rayleigh coeff

8 visualizaciones (últimos 30 días)
Sonali
Sonali el 12 de Abr. de 2024
Comentada: Sonali el 14 de Abr. de 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

Respuesta aceptada

Alan Stevens
Alan Stevens el 13 de Abr. de 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

Más respuestas (0)

Categorías

Más información sobre PHY Components en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by