[Solved] Power method, eigenvalues.

function l = ww(A,E)
n = length(A);
y = [];
x = [];
for i = 1:n % starting vector
x(i) = A(i,1);
end;
l = 0;
blad = E; % starting value of error
while blad>=E
for i = 1:n % A*x
y(i) = 0;
for j = 1:n
y(i) = y(i) + A(i,j)*x(j);
end;
end;
blad = l;
l = 0; % Rayleigh
m = 0;
for i = 1:n
l = l + x(i)*y(i);
m = m + x(i)*x(i);
end;
l = l/m; % eigenvalue
blad = abs(l - blad); % error
x = y;
end;
end
That's how I've tried to compute eigenvalues. It works for some matrices, but for:
A =
0 -0.3333 -0.3333
-0.3333 0 0.3333
0.6000 0.2000 0
it doesn't work. How can I fix that?

7 comentarios

Walter Roberson
Walter Roberson el 12 de Mayo de 2011
What difference do you see between what you expect and what is output?
Matt Fig
Matt Fig el 12 de Mayo de 2011
And what is the input E??
John D'Errico
John D'Errico el 12 de Mayo de 2011
Wow. Looks just like Fortran code to me.
Andrew Newell
Andrew Newell el 13 de Mayo de 2011
Fortran 77; 90 has vector operations.
Kamil
Kamil el 13 de Mayo de 2011
@ Matt Fig
E - error of approximation.
Lorenzo Amabili
Lorenzo Amabili el 17 de Mzo. de 2017
Editada: Lorenzo Amabili el 17 de Mzo. de 2017
@Kamil
@Teja Muppirala
how do you set E initially? I am sorry in case this question is silly but I am still new to this field. Thank you!
karim hamza
karim hamza el 29 de Abr. de 2017
i have an error [not enough input argument]

Iniciar sesión para comentar.

 Respuesta aceptada

Teja Muppirala
Teja Muppirala el 13 de Mayo de 2011

3 votos

Simple power iteration only works when there is a single dominant eigenvalue. The matrix
A =[ 0 -0.3333 -0.3333
-0.3333 0 0.3333
0.6000 0.2000 0];
has 3 eigenvalues,
-0.3333
0.1667 + 0.3249i
0.1667 - 0.3249i
with absolute values:
0.3333
0.3651
0.3651
As you can see, the dominant eigenvalue is not unique. That is why your algorithm fails to converge.
One way to fix this is by using shifts (you can read all about it on Google).
But why not just use MATLAB's built in eigevnalue solver, EIG?
eig(A)

1 comentario

Kamil
Kamil el 13 de Mayo de 2011
Thank you, I forgot about that.
I didn't use EIG, because I'm studying Numerical Methods and I'm trying to exercise that way.

Iniciar sesión para comentar.

Más respuestas (3)

Andrew Newell
Andrew Newell el 12 de Mayo de 2011

0 votos

While we wait for more information, here is a vectorized version of whatever your algorithm is doing:
function l = ww(A,E)
x = A(:,1);
l = 0;
blad = E; % starting value of error
while blad>=E
y = A*x;
blad = l;
l = x.*y; % Rayleigh
m = x.*x;
l = l/m; % eigenvalue
blad = abs(l - blad); % error
x = y;
end;

2 comentarios

devalaraju venkata naga amulya
devalaraju venkata naga amulya el 24 de Jul. de 2019
when i run the above code there is an error of input values A and E(in line function) can u help it with me im sorry im very new to the matlab
Dhruv Bhavsar
Dhruv Bhavsar el 28 de Ag. de 2020
Try calling the function in the command prompt even if you get the above mentioned error.
If it works then copy the function at the bottom of a new script and write the codes to be implemented above the function defined.
I have attached my code file for your reference.

Iniciar sesión para comentar.

Kamil
Kamil el 13 de Mayo de 2011

0 votos

Are there any other methods of computing eigenvalues?
Akankshya
Akankshya el 13 de Feb. de 2024

0 votos

function l = ww(A,E)
x = A(:,1);
l = 0;
blad = E; % starting value of error
while blad>=E
y = A*x;
blad = l;
l = x.*y; % Rayleigh
m = x.*x;
l = l/m; % eigenvalue
blad = abs(l - blad); % error
x = y;
end

Categorías

Más información sobre Linear Algebra en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 12 de Mayo de 2011

Respondida:

el 13 de Feb. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by