Mercurial > hg > octave-lyh
view scripts/linear-algebra/housh.m @ 17198:df4c4b7708a4
Add titles and clean-up plotting %!demos.
* scripts/plot/area.m, scripts/plot/axis.m, scripts/plot/bar.m,
scripts/plot/barh.m, scripts/plot/clabel.m, scripts/plot/colorbar.m,
scripts/plot/comet.m, scripts/plot/comet3.m, scripts/plot/contour.m,
scripts/plot/contour3.m, scripts/plot/contourf.m, scripts/plot/cylinder.m,
scripts/plot/ellipsoid.m, scripts/plot/errorbar.m, scripts/plot/ezplot.m,
scripts/plot/ezplot3.m, scripts/plot/ezpolar.m, scripts/plot/feather.m,
scripts/plot/fplot.m, scripts/plot/hold.m, scripts/plot/isosurface.m,
scripts/plot/legend.m, scripts/plot/loglog.m, scripts/plot/loglogerr.m,
scripts/plot/mesh.m, scripts/plot/meshc.m, scripts/plot/meshz.m,
scripts/plot/patch.m, scripts/plot/pcolor.m, scripts/plot/pie.m,
scripts/plot/pie3.m, scripts/plot/plot.m, scripts/plot/plot3.m,
scripts/plot/polar.m, scripts/plot/rectangle.m, scripts/plot/ribbon.m,
scripts/plot/rose.m, scripts/plot/scatter.m, scripts/plot/scatter3.m,
scripts/plot/semilogx.m, scripts/plot/semilogxerr.m, scripts/plot/semilogy.m,
scripts/plot/semilogyerr.m, scripts/plot/sombrero.m, scripts/plot/stem3.m,
scripts/plot/surf.m, scripts/plot/surfc.m, scripts/plot/surfl.m,
scripts/plot/title.m, scripts/plot/waterfall.m: Add titles and clean-up
plotting %!demos.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 06 Aug 2013 14:34:20 -0700 |
parents | a4969508008e |
children |
line wrap: on
line source
## Copyright (C) 1995-2012 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 3 of the License, 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, see ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- ## @deftypefn {Function File} {[@var{housv}, @var{beta}, @var{zer}] =} housh (@var{x}, @var{j}, @var{z}) ## Compute Householder reflection vector @var{housv} to reflect @var{x} ## to be the j-th column of identity, i.e., ## ## @example ## @group ## (I - beta*housv*housv')x = norm (x)*e(j) if x(j) < 0, ## (I - beta*housv*housv')x = -norm (x)*e(j) if x(j) >= 0 ## @end group ## @end example ## ## @noindent ## Inputs ## ## @table @var ## @item x ## vector ## ## @item j ## index into vector ## ## @item z ## threshold for zero (usually should be the number 0) ## @end table ## ## @noindent ## Outputs (see Golub and Van Loan): ## ## @table @var ## @item beta ## If beta = 0, then no reflection need be applied (@nospell{zer} set to 0) ## ## @item housv ## householder vector ## @end table ## @end deftypefn ## Author: A. S. Hodel ## Created: August 1995 function [housv, beta, zer] = housh (x, j, z) if (nargin != 3) print_usage (); endif ## Check for valid inputs. if (! isvector (x) && ! isscalar (x)) error ("housh: first input must be a vector"); elseif (! isscalar (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 %!test %! x = [1 2 3]'; %! j = 3; %! [hv, b, z] = housh (x, j, 0); %! r = (eye (3) - b*hv*hv') * x; %! d = - norm (x) * [0 0 1]'; %! assert (r, d, 2e-8); %! assert (z, 0, 2e-8); %!test %! x = [7 -3 1]'; %! j = 2; %! [hv, b, z] = housh (x, j, 0); %! r = (eye (3) - b*hv*hv') * x; %! d = norm (x) * [0 1 0]'; %! assert (r, d, 2e-8); %! assert (z, 0, 2e-8); %!test %! x = [1 0 0]'; %! j = 1; %! [hv, b, z] = housh (x, j, 10); %! r = (eye (3) - b*hv*hv') * x; %! d = norm (x) * [1 0 0]'; %! assert (r, d, 2e-8); %! assert (z, 1, 2e-8); %!test %! x = [5 0 4 1]'; %! j = 2; %! [hv, b, z] = housh (x, j, 0); %! r = (eye (4) - b*hv*hv') * x; %! d = - norm (x) * [0 1 0 0]'; %! assert (r, d, 2e-8); %! assert (z, 0, 2e-8); %!error housh ([0]) %!error housh ()