diff toolbox/comp.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/comp.m	Thu May 07 18:36:24 2015 +0200
@@ -0,0 +1,41 @@
+function C = comp(A, k)
+%COMP    Comparison matrices.
+%        COMP(A) is DIAG(B) - TRIL(B,-1) - TRIU(B,1), where B = ABS(A).
+%        COMP(A, 1) is A with each diagonal element replaced by its
+%        absolute value, and each off-diagonal element replaced by minus
+%        the absolute value of the largest element in absolute value in
+%        its row.  However, if A is triangular COMP(A, 1) is too.
+%        COMP(A, 0) is the same as COMP(A).
+%        COMP(A) is often denoted by M(A) in the literature.
+
+%        Reference (e.g.):
+%        N.J. Higham, A survey of condition number estimation for
+%        triangular matrices, SIAM Review, 29 (1987), pp. 575-596.
+
+if nargin == 1, k = 0; end
+[m, n] = size(A);
+p = min(m, n);
+
+if k == 0
+
+% This code uses less temporary storage than the `high level' definition above.
+   C = -abs(A);
+   for j=1:p
+     C(j,j) = abs(A(j,j));
+   end
+
+elseif k == 1
+
+   C = A';
+   for j=1:p
+       C(k,k) = 0;
+   end
+   mx = max(abs(C));
+   C = -mx'*ones(1,n);
+   for j=1:p
+       C(j,j) = abs(A(j,j));
+   end
+   if all( A == tril(A) ), C = tril(C); end
+   if all( A == triu(A) ), C = triu(C); end
+
+end