home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
octa21eb.zip
/
octave
/
SCRIPTS.ZIP
/
scripts.fat
/
la
/
housh.m
< prev
next >
Wrap
Text File
|
1999-04-29
|
2KB
|
65 lines
# Copyright (C) 1995, 1998 A. Scottedward Hodel
#
# This file is part of Octave.
#
# Octave is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# Octave is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with Octave; see the file COPYING. If not, write to the Free
# Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
function [housv,beta,zer] = housh(x,j,z)
# function [housv,beta,zer] = housh(x,j,z)
# computes householder reflection vector housv to reflect x to be
# jth column of identity, i.e., (I - beta*housv*housv')x =e(j)
# inputs
# x: vector
# j: index into vector
# z: threshold for zero (usually should be the number 0)
# outputs: (see Golub and Van Loan)
# beta: If beta = 0, then no reflection need be applied (zer set to 0)
# housv: householder vector
# mar 6,1987 : rev dec 17,1988
# rev sep 19,1991 (blas)
# translated from FORTRAN Aug 1995
# A. S. Hodel
# $Revision: 1.1.1.1 $
# $Log$
# check for legal inputs
if( !is_vec(x) && !is_scal(x))
error("housh: first input must be a vector")
elseif( !is_scal(j) )
error("housh: second argment must be an integer scalar")
else
housv = x;
m = max(abs(housv));
if (m ~= 0.0)
housv = housv/m;
alpha = norm(housv);
if (alpha > z)
beta = 1.0/(alpha*(alpha+abs(housv(j))));
sg = sign(housv(j));
if( sg == 0)
sg = 1;
endif
housv(j) = housv(j) + alpha*sg;
else
beta = 0.0;
endif
else
beta = 0.0;
endif
zer = (beta == 0);
endif
endfunction