diff toolbox/rschur.m @ 2:c124219d7bfa draft

Re-add the 1995 toolbox after noticing the statement in the ~higham/mctoolbox/ webpage.
author Antonio Pino Robles <data.script93@gmail.com>
date Thu, 07 May 2015 18:36:24 +0200
parents 8f23314345f4
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolbox/rschur.m	Thu May 07 18:36:24 2015 +0200
@@ -0,0 +1,33 @@
+function A = rschur(n, mu, x, y)
+%RSCHUR   An upper quasi-triangular matrix.
+%         A = RSCHUR(N, MU, X, Y) is an N-by-N matrix in real Schur form.
+%         All the diagonal blocks are 2-by-2 (except for the last one, if N
+%         is odd) and the k'th has the form [x(k) y(k); -y(k) x(k)].
+%         Thus the eigenvalues of A are x(k) +/- i*y(k).
+%         MU (default 1) controls the departure from normality.
+%         Defaults: X(k) = -k^2/10, Y(k) = -k, i.e., the eigenvalues
+%                   lie on the parabola x = -y^2/10.
+
+%         References:
+%         F. Chatelin, Eigenvalues of Matrices, John Wiley, Chichester, 1993;
+%            Section 4.2.7.
+%         F. Chatelin and V. Fraysse, Qualitative computing: Elements
+%            of a theory for finite precision computation, Lecture notes,
+%            CERFACS, Toulouse, France and THOMSON-CSF, Orsay, France,
+%            June 1993.
+
+m = floor(n/2)+1;
+alpha = 10; beta = 1;
+
+if nargin < 4, y = -(1:m)/beta; end
+if nargin < 3, x = -(1:m).^2/alpha; end
+if nargin < 2, mu = 1; end
+
+A = diag( mu*ones(n-1,1), 1 );
+for i=1:2:2*(m-1)
+    j = (i+1)/2;
+    A(i:i+1,i:i+1) = [x(j) y(j); -y(j) x(j)];
+end
+if 2*m ~= n,
+   A(n,n) = x(m);
+end