help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: statistics distributions function names


From: Ben Barrowes
Subject: Re: statistics distributions function names
Date: Fri, 01 Jul 2005 13:10:40 -0600
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.7) Gecko/20050414

Following the example of is_bool.m in the scripts/deprecated directory, weibrnd.m would hold the weibull_rnd.m code:

## Copyright (C) 1995, 1996, 1997  Kurt Hornik
##
## 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, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
## 02110-1301, USA.

## -*- texinfo -*-
## @deftypefn {Function File} {} weibrnd (@var{alpha}, @var{sigma}, @var{r}, @var{c}) ## @deftypefnx {Function File} {} weibrnd (@var{alpha}, @var{sigma}, @var{sz})
## Return an @var{r} by @var{c} matrix of random samples from the
## Weibull distribution with parameters @var{alpha} and @var{sigma}
## which must be scalar or of size @var{r} by @var{c}. Or if @var{sz}
## is a vector return a matrix of size @var{sz}.
##
## If @var{r} and @var{c} are omitted, the size of the result matrix is
## the common size of @var{alpha} and @var{sigma}.
## @end deftypefn

## Author: KH <address@hidden>
## Description: Random deviates from the Weibull distribution

function rnd = weibrnd (shape, scale, r, c)

if (nargin > 1)
  if (!isscalar(shape) || !isscalar(scale))
    [retval, shape, scale] = common_size (shape, scale);
    if (retval > 0)
  error ("weibrnd: shape and scale must be of common size or scalar");
    endif
  endif
endif

if (nargin == 4)
  if (! (isscalar (r) && (r > 0) && (r == round (r))))
    error ("weibrnd: r must be a positive integer");
  endif
  if (! (isscalar (c) && (c > 0) && (c == round (c))))
    error ("weibrnd: c must be a positive integer");
  endif
  sz = [r, c];

  if (any (size (scale) != 1) &&
  ((length (size (scale)) != length (sz)) ||
   any (size (scale) != sz)))
error ("weilbull_rnd: shape and scale must be scalar or of size [r, c]");
  endif
elseif (nargin == 3)
  if (isscalar (r) && (r > 0))
    sz = [r, r];
  elseif (isvector(r) && all (r > 0))
    sz = r(:)';
  else
    error ("weibrnd: r must be a postive integer or vector");
  endif

  if (any (size (scale) != 1) &&
  ((length (size (scale)) != length (sz)) ||
   any (size (scale) != sz)))
    error ("weibrnd: shape and scale must be scalar or of size sz");
  endif
elseif (nargin == 2)
  sz = size(shape);
else
  usage ("weibrnd (alpha, sigma, r, c)");
endif

if (isscalar (shape) && isscalar (scale))
  if ((shape > 0) & (shape < Inf) & (scale > 0) & (scale < Inf))
    rnd = (scale * (- log (1 - rand (sz))) .^ (1 / shape));
  else
    rnd = NaN * ones (sz);
  endif
else
  rnd = NaN * ones (sz);
  k = find ((shape > 0) & (shape < Inf) & (scale > 0) & (scale < Inf));
  if (any (k))
    rnd(k) = (scale(k)
      .* (- log (1 - rand (size (k)))) .^ (1 ./ shape(k)));
  endif
endif

endfunction


but weibull_rnd.m would be moved to scripts/deprecated directory and contain:

## Copyright (C) 1995, 1996, 1997  Kurt Hornik
##
## 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, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
## 02110-1301, USA.

## -*- texinfo -*-
## @deftypefn {Function File} {} weibull_rnd (@var{alpha}, @var{sigma}, @var{r}, @var{c}) ## @deftypefnx {Function File} {} weibull_rnd (@var{alpha}, @var{sigma}, @var{sz})
##
## This function has been deprecated.  Use weibrnd instead.
##
## Return an @var{r} by @var{c} matrix of random samples from the
## Weibull distribution with parameters @var{alpha} and @var{sigma}
## which must be scalar or of size @var{r} by @var{c}. Or if @var{sz}
## is a vector return a matrix of size @var{sz}.
##
## If @var{r} and @var{c} are omitted, the size of the result matrix is
## the common size of @var{alpha} and @var{sigma}.
## @end deftypefn

## Author: KH <address@hidden>
## Description: Random deviates from the Weibull distribution

function rnd = weibull_rnd (varargin)

 rnd = weibrnd(varargin{:});

endfunction


Here is a patch for weibull_rnd.m:

*** /usr/local/share/octave/2.9.3/m/statistics/distributions/weibull_rnd.m 2005-06-01 14:07:16.000000000 -0600
--- weibull_rnd.m       2005-07-01 13:06:21.000000000 -0600
***************
*** 20,25 ****
--- 20,28 ----
 ## -*- texinfo -*-
## @deftypefn {Function File} {} weibull_rnd (@var{alpha}, @var{sigma}, @var{r}, @var{c}) ## @deftypefnx {Function File} {} weibull_rnd (@var{alpha}, @var{sigma}, @var{sz})
+ ##
+ ## This function has been deprecated.  Use weibrnd instead.
+ ##
 ## Return an @var{r} by @var{c} matrix of random samples from the
 ## Weibull distribution with parameters @var{alpha} and @var{sigma}
 ## which must be scalar or of size @var{r} by @var{c}. Or if @var{sz}
***************
*** 32,95 ****
 ## Author: KH <address@hidden>
 ## Description: Random deviates from the Weibull distribution

! function rnd = weibull_rnd (shape, scale, r, c)
!
!   if (nargin > 1)
!     if (!isscalar(shape) || !isscalar(scale))
!       [retval, shape, scale] = common_size (shape, scale);
!       if (retval > 0)
! error ("weibull_rnd: shape and scale must be of common size or scalar");
!       endif
!     endif
!   endif
!
!   if (nargin == 4)
!     if (! (isscalar (r) && (r > 0) && (r == round (r))))
!       error ("weibull_rnd: r must be a positive integer");
!     endif
!     if (! (isscalar (c) && (c > 0) && (c == round (c))))
!       error ("weibull_rnd: c must be a positive integer");
!     endif
!     sz = [r, c];
!
!     if (any (size (scale) != 1) &&
!       ((length (size (scale)) != length (sz)) ||
!        any (size (scale) != sz)))
! error ("weilbull_rnd: shape and scale must be scalar or of size [r, c]");
!     endif
!   elseif (nargin == 3)
!     if (isscalar (r) && (r > 0))
!       sz = [r, r];
!     elseif (isvector(r) && all (r > 0))
!       sz = r(:)';
!     else
!       error ("weibull_rnd: r must be a postive integer or vector");
!     endif
!
!     if (any (size (scale) != 1) &&
!       ((length (size (scale)) != length (sz)) ||
!        any (size (scale) != sz)))
!       error ("weibull_rnd: shape and scale must be scalar or of size sz");
!     endif
!   elseif (nargin == 2)
!     sz = size(shape);
!   else
!     usage ("weibull_rnd (alpha, sigma, r, c)");
!   endif

!   if (isscalar (shape) && isscalar (scale))
!     if ((shape > 0) & (shape < Inf) & (scale > 0) & (scale < Inf))
!       rnd = (scale * (- log (1 - rand (sz))) .^ (1 / shape));
!     else
!       rnd = NaN * ones (sz);
!     endif
!   else
!     rnd = NaN * ones (sz);
!     k = find ((shape > 0) & (shape < Inf) & (scale > 0) & (scale < Inf));
!     if (any (k))
!       rnd(k) = (scale(k)
!               .* (- log (1 - rand (size (k)))) .^ (1 ./ shape(k)));
!     endif
!   endif

 endfunction
--- 35,42 ----
 ## Author: KH <address@hidden>
 ## Description: Random deviates from the Weibull distribution

! function rnd = weibull_rnd (varargin)

!   rnd = weibrnd(varargin{:});

 endfunction



bb





John W. Eaton wrote:

On  1-Jul-2005, Ben Barrowes wrote:

| This approach is simple, but should work for most of the statistics | function now located in statistics/distributions.

Yes, it would work, but if you apply this to all the distribution
functions you have two nearly identical sets of functions.  I think it
is bad form to have so much duplicate code.  Probably it would be
better to rename the existing code and write new functions that allow
the old function names to work.  Those could go in a subdirectory of
the scripts/deprecated directory.  See the other functions in the
scripts/deprecated directory for examples.  I'm not sure whether they
should print warnings, but if we decide that they should, then I think
we should come up with a uniform way to do that for all deprecated
functions.

jwe



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]