[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: eig() function
From: |
Marvin Vis |
Subject: |
Re: eig() function |
Date: |
Thu, 9 Oct 97 09:12:50 MDT |
> function [v,d] = eigsort (x)
> length = is_square (x);
> if !(length)
> error ('Input argument is not a square matrix!\n');
> end;
>
> [v,d] = eig (x);
> [dd,ix] = sort (-diag (d));
> for i=1:length
> d(i,i) = - dd(i);
> end;
> v = v(:,ix)
> endfunction
>
> If sorting the eigenvalues and their corresponding eigenvectors in the
> eig() function is not complicated and can speed up the process, wouldn't
> it be better to add the sorting algorithm as an additional OPT feature in
> the eig function instead of the above macros?
Try using the flipud() and fliplr() functions on your v,d matrices above...
function [v,d] = eigd (x)
[v,d] = eig (x);
v = fliplr(v);
d = flipud(fliplr(d)); % or use: d = diag(flipud(diag(d)))
% ...whichever is faster
end
My personal vote is to not load any of the built-in linear algebra package
subroutines.
The initial eigsort() function above will also sort the eigenvalues in
decending order *including* sign, meaning that my suggestion above is only
the same as the initial eigsort() routine if all of the eigenvalues are
positive reals....furthermore, I think the sort() routine disregards the
imaginary portion of the eigenvalue, whereas the sort in the eig()
function is based on the abs() of the eigenvalues. There would be a
convention to define here if we were to modify eig().
M.
- eig() function, Habibie Sumargo, 1997/10/09
- Re: eig() function,
Marvin Vis <=