X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fm%2Fspecial-matrix%2Fhilb.m;fp=octave_packages%2Fm%2Fspecial-matrix%2Fhilb.m;h=d34ba7dbcd60f96ceaad177ae9e2b2a4ba532026;hp=0000000000000000000000000000000000000000;hb=1c0469ada9531828709108a4882a751d2816994a;hpb=63de9f36673d49121015e3695f2c336ea92bc278 diff --git a/octave_packages/m/special-matrix/hilb.m b/octave_packages/m/special-matrix/hilb.m new file mode 100644 index 0000000..d34ba7d --- /dev/null +++ b/octave_packages/m/special-matrix/hilb.m @@ -0,0 +1,79 @@ +## Copyright (C) 1993-2012 John W. Eaton +## +## 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 +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} hilb (@var{n}) +## Return the Hilbert matrix of order @var{n}. The @math{i,j} element +## of a Hilbert matrix is defined as +## @tex +## $$ +## H(i, j) = {1 \over (i + j - 1)} +## $$ +## @end tex +## @ifnottex +## +## @example +## H(i, j) = 1 / (i + j - 1) +## @end example +## +## @end ifnottex +## +## Hilbert matrices are close to being singular which make them difficult to +## invert with numerical routines. +## Comparing the condition number of a random matrix 5x5 matrix with that of +## a Hilbert matrix of order 5 reveals just how difficult the problem is. +## +## @example +## @group +## cond (rand (5)) +## @result{} 14.392 +## cond (hilb (5)) +## @result{} 4.7661e+05 +## @end group +## @end example +## +## @seealso{invhilb} +## @end deftypefn + +## Author: jwe + +function retval = hilb (n) + + if (nargin != 1) + print_usage (); + elseif (! isscalar (n)) + error ("hilb: N must be a scalar integer"); + endif + + retval = zeros (n); + tmp = 1:n; + for i = 1:n + retval(i, :) = 1.0 ./ tmp; + tmp++; + endfor + +endfunction + + +%!assert (hilb (2), [1, 1/2; 1/2, 1/3]) +%!assert (hilb (3), [1, 1/2, 1/3; 1/2, 1/3, 1/4; 1/3, 1/4, 1/5]) + +%!error hilb () +%!error hilb (1, 2) +%!error hilb (ones(2)) +