changeset 26158:e5a40e1395fb

polyeig.m: Simplify code by using nargin. * polyeig.m: Use pre-defined variable nargin rather than 'nin = numel (varargin)'. Use in-place operator with broadcasting './=' rather than './ diag (t)'. Align code for readability.
author Rik <rik@octave.org>
date Sat, 01 Dec 2018 03:25:02 -0800
parents e2626799445f
children aa678451b758
files scripts/polynomial/polyeig.m
diffstat 1 files changed, 12 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/polynomial/polyeig.m	Sat Dec 01 02:48:55 2018 -0800
+++ b/scripts/polynomial/polyeig.m	Sat Dec 01 03:25:02 2018 -0800
@@ -40,18 +40,15 @@
 ## @seealso{eig, eigs, compan}
 ## @end deftypefn
 
-## Author: Fotios Kasolis
-
 function [z, v] = polyeig (varargin)
 
   if (nargin < 1 || nargout > 2)
     print_usage ();
   endif
 
-  nin = numel (varargin);
   n = rows (varargin{1});
 
-  for i = 1 : nin
+  for i = 1 : nargin
     if (! issquare (varargin{i}))
       error ("polyeig: coefficients must be square matrices");
     endif
@@ -61,33 +58,33 @@
   endfor
 
   ## matrix polynomial degree
-  l = nin - 1;
+  l = nargin - 1;
 
   ## form needed matrices
   C = [ zeros(n * (l - 1), n), eye(n * (l - 1));
        -cell2mat(varargin(1:end-1)) ];
 
   D = [ eye(n * (l - 1)), zeros(n * (l - 1), n);
-       zeros(n, n * (l - 1)), varargin{end} ];
+        zeros(n, n * (l - 1)), varargin{end} ];
 
   ## solve generalized eigenvalue problem
-  if (nargout == 2)
+  if (nargout < 2)
+    z = eig (C, D);
+  else
     [z, v] = eig (C, D);
     v = diag (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);
-  else
-    z = eig (C, D);
+    t = max (z);    # max() takes the abs if complex.
+    z ./= t;
   endif
 
 endfunction
 
 
 %!shared C0, C1
-%! C0 = [8, 0; 0, 4]; C1 = [1, 0; 0, 1];
+%! C0 = [8, 0; 0, 4];
+%! C1 = [1, 0; 0, 1];
 
 %!test
 %! z = polyeig (C0, C1);
@@ -104,4 +101,5 @@
 %!error polyeig ()
 %!error [a,b,c] = polyeig (1)
 %!error <coefficients must be square matrices> polyeig (ones (3,2))
-%!error <coefficients must have the same dimensions> polyeig (ones (3,3), ones (2,2))
+%!error <coefficients must have the same dimensions>
+%! polyeig (ones (3,3), ones (2,2))