annotate scripts/linear-algebra/housh.m @ 3427:e098ebb77023

[project @ 2000-01-13 09:25:53 by jwe]
author jwe
date Thu, 13 Jan 2000 09:25:59 +0000
parents f8dde1807dee
children 3234a698073a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3427
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
1 ## Copyright (C) 1995, 1998 A. Scottedward Hodel
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
2 ##
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
3 ## This file is part of Octave.
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
4 ##
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
6 ## under the terms of the GNU General Public License as published by the
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
7 ## Free Software Foundation; either version 2, or (at your option) any
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
8 ## later version.
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
9 ##
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but WITHOUT
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
11 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
12 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
13 ## for more details.
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
14 ##
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
15 ## You should have received a copy of the GNU General Public License
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
16 ## along with Octave; see the file COPYING. If not, write to the Free
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
17 ## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
3211
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
18
3427
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
19 ## function [housv,beta,zer] = housh(x,j,z)
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
20 ## computes householder reflection vector housv to reflect x to be
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
21 ## jth column of identity, i.e., (I - beta*housv*housv')x =e(j)
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
22 ## inputs
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
23 ## x: vector
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
24 ## j: index into vector
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
25 ## z: threshold for zero (usually should be the number 0)
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
26 ## outputs: (see Golub and Van Loan)
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
27 ## beta: If beta = 0, then no reflection need be applied (zer set to 0)
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
28 ## housv: householder vector
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
29 ## mar 6,1987 : rev dec 17,1988
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
30 ## rev sep 19,1991 (blas)
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
31 ## translated from FORTRAN Aug 1995
3211
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
32
3427
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
33 ## Author: A. S. Hodel
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
34
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
35 function [housv, beta, zer] = housh (x, j, z)
3211
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
36
3427
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
37 ## check for valid inputs
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
38 if (!is_vector (x) && ! is_scalar (x))
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
39 error ("housh: first input must be a vector")
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
40 elseif (! is_scalar(j))
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
41 error ("housh: second argment must be an integer scalar")
3211
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
42 else
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
43 housv = x;
3427
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
44 m = max (abs (housv));
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
45 if (m != 0.0)
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
46 housv = housv / m;
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
47 alpha = norm (housv);
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3284
diff changeset
48 if (alpha > z)
3427
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
49 beta = 1.0 / (alpha * (alpha + abs (housv(j))));
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
50 sg = sign (housv(j));
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
51 if (sg == 0)
3211
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
52 sg = 1;
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
53 endif
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
54 housv(j) = housv(j) + alpha*sg;
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
55 else
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
56 beta = 0.0;
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
57 endif
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
58 else
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
59 beta = 0.0;
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
60 endif
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
61 zer = (beta == 0);
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
62 endif
3427
e098ebb77023 [project @ 2000-01-13 09:25:53 by jwe]
jwe
parents: 3426
diff changeset
63
3211
440b2b28e74a [project @ 1998-11-05 04:16:22 by jwe]
jwe
parents:
diff changeset
64 endfunction