changeset 15187:045ae93e8fe9

polyeig: return eigenvectors of the _correct_ size
author Ed Meyer <eem2314@gmail.com>
date Thu, 19 Jul 2012 04:53:34 +0100
parents 504fec921af5
children 3a33f93c9e62
files scripts/polynomial/polyeig.m
diffstat 1 files changed, 11 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/polynomial/polyeig.m	Thu Jul 19 04:50:43 2012 +0100
+++ b/scripts/polynomial/polyeig.m	Thu Jul 19 04:53:34 2012 +0100
@@ -65,14 +65,20 @@
     z = eig (C, D);
   else
     [ z, v ] = eig (C, D);
-    varargout{1} = diag (v);
+    varargout{1} = v;
+    % return n-element eigenvectors normalized so
+    % that the infinity-norm = 1
+    z = z(1:n,:);
+    % max() takes the abs if complex:
+    t = max(z);
+    z /= diag(t);
   endif
 
 endfunction
 
-## sanity test
 %!test
-%! C0 = [8, 0; 0, 0]; C1 = [1, 0; 0, 0];
-%! z = polyeig (C0, C1);
+%! C0 = [8, 0; 0, 4]; C1 = [1, 0; 0, 1];
+%! [v,z] = polyeig (C0, C1);
 %! assert (isequal (z(1), -8), true);
-
+%! d = C0*v + C1*v*z
+%! assert (isequal (norm(d), 0.0), true);