changeset 54:98eb51c870b2

[project @ 1993-08-11 21:29:50 by jwe]
author jwe
date Wed, 11 Aug 1993 21:30:43 +0000
parents 4565ad8b4697
children b973bf9a9dba
files scripts/general/is_square.m scripts/linear-algebra/qzhess.m
diffstat 2 files changed, 51 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/general/is_square.m
+++ b/scripts/general/is_square.m
@@ -9,7 +9,7 @@
 
   if (nargin == 1)
     [nr, nc] = size (x);
-    if( nr == nc) 
+    if (nr == nc) 
       retval = nr;
     else
       retval = 0;
--- a/scripts/linear-algebra/qzhess.m
+++ b/scripts/linear-algebra/qzhess.m
@@ -1,45 +1,56 @@
-function [aa,bb,q,z] = qzhess(a,b)
+function [aa, bb, q, z] = qzhess (a, b)
 
-% compute the qz decomposition of the matrix pencil (a - lambda b)
-% result: (for MATLAB compatibility):
-%	q*a*z = aa, q*b*z = bb
-%	q, z orthogonal, 
-%	v = matrix of generalized eigenvectors
-%
-% This ought to be done in a compiled program
-% Algorithm taken from Golub and Van Loan, MATRIX COMPUTATIONS, 2nd ed.
+# Compute the qz decomposition of the matrix pencil (a - lambda b)
+#
+# result: (for Matlab compatibility):
+#
+#   aa = q*a*z and bb = q*b*z, with q, z orthogonal, and
+#   v = matrix of generalized eigenvectors.
+#
+# This ought to be done in a compiled program
+#
+# Algorithm taken from Golub and Van Loan, Matrix Computations, 2nd ed.
 
-[na,ma] = size(a);
-[nb,mb] = size(b);
-if( (na ~= ma) | (na ~= nb) | (nb ~= mb) ) 
-  disp('qz: incompatible dimensions');
-  return;
-endif
+  if (nargin != 2)
+    error ("usage: [aa, bb, q, z] = qzhess (a, b)");
+  endif
+
+  [na, ma] = size (a);
+  [nb, mb] = size (b);
+  if (na != ma || na != nb || nb != mb)
+    error ("qzhess: incompatible dimensions");
+  endif
+
+# Reduce to hessenberg-triangular form.
 
-% reduce to hessenberg-triangular form
-[q,bb] = qr(b);
-aa = q'*a;
-q = q';
-z = eye(na);
-for j=1:(na-2)
-  for i=na:-1:(j+2)
-    %disp(['zero out aa(',num2str(i),',',num2str(j),')'])
-    rot= givens(aa(i-1,j),aa(i,j));
-    aa((i-1):i,:) = rot*aa((i-1):i,:);
-    bb((i-1):i,:) = rot*bb((i-1):i,:);
-    q( (i-1):i,:) = rot*q( (i-1):i,:);
-    
-    %disp(['now zero out bb(',num2str(i),',',num2str(i-1),')'])
-    rot = givens(bb(i,i),bb(i,i-1))';
-    bb(:,(i-1):i) = bb(:,(i-1):i)*rot';
-    aa(:,(i-1):i) = aa(:,(i-1):i)*rot';
-    z(:, (i-1):i) = z(:, (i-1):i)*rot';
+  [q, bb] = qr (b);
+  aa = q' * a;
+  q = q';
+  z = eye (na);
+  for j = 1:(na-2)
+    for i = na:-1:(j+2)
+
+# disp (["zero out aa(", num2str(i), ",", num2str(j), ")"])
+
+      rot = givens (aa (i-1, j), aa (i, j));
+      aa ((i-1):i, :) = rot *aa ((i-1):i, :);
+      bb ((i-1):i, :) = rot *bb ((i-1):i, :);
+      q  ((i-1):i, :) = rot *q  ((i-1):i, :);
+
+# disp (["now zero out bb(", num2str(i), ",", num2str(i-1), ")"])
+
+      rot = givens (bb (i, i), bb (i, i-1))';
+      bb (:, (i-1):i) = bb (:, (i-1):i) * rot';
+      aa (:, (i-1):i) = aa (:, (i-1):i) * rot';
+      z  (:, (i-1):i) = z  (:, (i-1):i) * rot';
+
+    endfor
   endfor
-endfor
 
-bb(2,1) = 0;
-for i=3:na
-  bb(i,1:(i-1)) = zeros(1,i-1);
-  aa(i,1:(i-2)) = zeros(1,i-2);
-endfor
+  bb (2, 1) = 0.0;
+  for i = 3:na
+    bb (i, 1:(i-1)) = zeros (1, i-1);
+    aa (i, 1:(i-2)) = zeros (1, i-2);
+  endfor
+
 endfunction