[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
-------------------------------------------------------------