changeset 5181:41cd70503c72

[project @ 2005-03-03 05:49:55 by jwe]
author jwe
date Thu, 03 Mar 2005 05:49:55 +0000
parents e7438487c857
children 5b361aa47dff
files scripts/ChangeLog scripts/general/isequal.m scripts/general/sortrows.m scripts/set/ismember.m scripts/set/setdiff.m scripts/strings/strmatch.m
diffstat 6 files changed, 195 insertions(+), 166 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog
+++ b/scripts/ChangeLog
@@ -1,3 +1,8 @@
+2005-03-03  Paul Kienzle  <pkienzle@users.sf.net>
+
+	* statistics/distributions/binomial_pdf.m: Extend the feasible
+	computation range.
+
 2005-02-25  John W. Eaton  <jwe@octave.org>
 
 	Sparse merge.
--- a/scripts/general/isequal.m
+++ b/scripts/general/isequal.m
@@ -1,58 +1,78 @@
 ## Copyright (C) 2000 Paul Kienzle
 ##
-## This program 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 of the License, or
-## (at your option) any later version.
+## This file is part of Octave.
 ##
-## This program 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.
+## 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 this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+## along with Octave; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
 
 ## isequal(x1, x2, ...)
 ##    true if all parts of x1, x2, ... are equal
 
-function t = isequal(x,varargin)
-  if nargin != 2
-    usage("isequal(x,y,...)");
+## Author: Paul Kienzle
+## Adapted-by: jwe
+
+function t = isequal (x, varargin)
+
+  if (nargin != 2)
+    usage ("isequal (x, y, ...)");
   endif
 
-  for arg = 1:length(varargin)
+  for arg = 1:length (varargin)
     y = varargin{arg};
-    if isstruct(x)
+    if (isstruct (x))
       t = isstruct (y);
       for [v, k] = x
-        t = t && struct_contains (y, k) && isequal (getfield(x,k), getfield(y,k));
+        t = (t
+	     && struct_contains (y, k)
+	     && isequal (getfield (x, k), getfield (y, k)));
       endfor
-      for [v,k] = y
+      for [v, k] = y
         t = t && struct_contains (x, k);
       endfor
-    elseif islist(x)
+    elseif (islist (x))
       t = islist(y) && length(x) == length(y);
-      if !t, return; endif
-      for i = 1:length(x)
+      if (! t)
+	return;
+      endif
+      for i = 1:length (x)
 	t = isequal (x{i}, y{i});
-	if !t, return; endif
+	if (! t)
+	  return;
+	endif
       endfor
-    elseif any (size (x) != size (y))
+    elseif (any (size (x) != size (y)))
       t = false;
-    elseif iscell(x) || islist(x)
-      t = iscell (y) || islist(y);
-      if !t, return; endif
-      x = x (:);
-      y = y (:);
-      for i = 1:length(x)
+    elseif (iscell (x) || islist (x))
+      t = iscell (y) || islist (y);
+      if (! t)
+	return;
+      endif
+      x = x(:);
+      y = y(:);
+      for i = 1:length (x)
 	t = isequal (x{i}, y{i});
-	if !t, return; endif
+	if (! t)
+	  return;
+	endif
       endfor
     else
-      t = all (x (:) == y (:));
+      t = all (x(:) == y(:));
     endif
-    if !t, return; endif
+    if (! t)
+      return;
+    endif
   endfor
+
 endfunction
--- a/scripts/general/sortrows.m
+++ b/scripts/general/sortrows.m
@@ -1,18 +1,21 @@
 ## Copyright (C) 2000 Daniel Calvelo
 ##
-## This program 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 of the License, or
-## (at your option) any later version.
+## This file is part of Octave.
 ##
-## This program 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.
+## 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 this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+## along with Octave; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
 
 ## B = sortrows (A)
 ##     returns matrix with rows sorted "lexicographically" 
@@ -24,38 +27,37 @@
 ## Set implicit_str_to_num_ok and implicit_num_to_str_ok to 1 if you 
 ## use this for string sorting and octave 2.1.50 or earlier.
 
-## Author: Daniel Calvelo
-## 2001-02-24 Paul Kienzle
-##    * cleanup according to Octave conventions
-##    * return reverse index
-##    * handle string arguments
+## Author: Daniel Calvelo, Paul Kienzle
+## Adapted-by: jwe
 
 function [s, i] = sortrows (m, c)
   
-  if nargin < 2
-    indices = [ 1 : size(m,2) ]';
+  if (nargin < 2)
+    indices = [1:size(m,2)]';
   else
-    indices = c (:);
+    indices = c(:);
   endif
 
-  if (isstr (m)) 
+  if (isstr (m))
     s = toascii (m);
   else
     s = m;
   endif
 
-  ## since sort is 'stable' the order of identical elements will be
-  ## preserved, so by traversing the sort indices in reverse order
-  ## we will make sure that identical elements in index i are subsorted
-  ## by index j.
+  ## Since sort is 'stable' the order of identical elements will be
+  ## preserved, so by traversing the sort indices in reverse order we
+  ## will make sure that identical elements in index i are subsorted by
+  ## index j.
   indices = flipud (indices);
-  i = [1 : size(m,1)]';
-  for ii = 1 : length (indices);
-    [ trash, idx ] = sort ( s ( : , indices (ii) ) ); 
-    s = s ( idx, : );
-    i = i (idx );
+  i = [1:size(m,1)]';
+  for ii = 1:length (indices);
+    [trash, idx] = sort (s(:,indices(ii)));
+    s = s(idx,:);
+    i = i(idx);
   endfor
+
   if (isstr (m))
-    s = setstr(s);
+    s = setstr (s);
   endif
+
 endfunction
--- a/scripts/set/ismember.m
+++ b/scripts/set/ismember.m
@@ -1,18 +1,21 @@
 ## Copyright (C) 2000 Paul Kienzle
 ##
-## This program 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 of the License, or
-## (at your option) any later version.
+## This file is part of Octave.
 ##
-## This program 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.
+## 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 this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+## along with Octave; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} ismember(@var{A}, @var{S})
@@ -23,23 +26,27 @@
 ## @end deftypefn
 ## @seealso{unique, union, intersect, setxor, setdiff}
 
-function c = ismember(a,S)
-  if nargin != 2
-    usage("ismember(A,S)");
+## Author: Paul Kienzle
+## Adapted-by: jwe
+
+function c = ismember (a, S)
+
+  if (nargin != 2)
+    usage ("ismember (A, S)");
   endif
 
-  [ra, ca] = size(a);
-  if isempty(a) || isempty(S)
-    c = zeros(ra, ca);
+  [ra, ca] = size (a);
+  if (isempty (a) || isempty (S))
+    c = zeros (ra, ca);
   else
-    S = unique(S(:));
-    lt = length(S);
-    if lt == 1
-      c = ( a == S );
-    elseif ra*ca == 1
+    S = unique (S(:));
+    lt = length (S);
+    if (lt == 1)
+      c = (a == S);
+    elseif (ra*ca == 1)
       c = any (a == S);
     else
-      ## Magic : the following code determines for each a, the index i
+      ## Magic:  the following code determines for each a, the index i
       ## such that S(i)<= a < S(i+1).  It does this by sorting the a
       ## into S and remembering the source index where each element came
       ## from.  Since all the a's originally came after all the S's, if 
@@ -68,11 +75,12 @@
       ## easy to now check membership by comparing S(a_idx) == a.  This
       ## magic works because S starts out sorted, and because sort
       ## preserves the relative order of identical elements.
-      [v, p] = sort ( [ S(2:lt) ; a(:) ] );
+      [v, p] = sort ([S(2:lt); a(:)]);
       idx(p) = cumsum (p <= lt-1) + 1;
-      idx = idx (lt : lt+ra*ca-1);
-      c = ( a == reshape (S (idx), size (a)) );
+      idx = idx(lt:lt+ra*ca-1);
+      c = (a == reshape (S(idx), size (a)));
     endif
   endif
+
 endfunction
   
\ No newline at end of file
--- a/scripts/set/setdiff.m
+++ b/scripts/set/setdiff.m
@@ -1,18 +1,21 @@
 ## Copyright (C) 2000 Paul Kienzle
 ##
-## This program 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 of the License, or
-## (at your option) any later version.
+## This file is part of Octave.
 ##
-## This program 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.
+## 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 this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+## along with Octave; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} setdiff(@var{a}, @var{b})
@@ -24,23 +27,28 @@
 ## @end deftypefn
 ## @seealso{unique, union, intersect, setxor, ismember}
 
-function c = setdiff(a,b)
-  if nargin != 2
-    usage("setdiff(a,b)");
+## Author: Paul Kienzle
+## Adapted-by: jwe
+
+function c = setdiff (a, b)
+
+  if (nargin != 2)
+    usage ("setdiff (a, b)");
   endif
 
-  c = unique(a);
-  if !isempty(c) && !isempty(b)
+  c = unique (a);
+  if (! isempty (c) && ! isempty (b))
     ## form a and b into combined set
-    b = unique(b);
-    [dummy, idx] = sort([ c(:) ; b(:)]);
+    b = unique (b);
+    [dummy, idx] = sort ([c(:); b(:)]);
     ## eliminate those elements of a that are the same as in b
-    n = length(dummy);
-    c(idx(find(dummy(1:n-1) == dummy(2:n)))) = [];
+    n = length (dummy);
+    c(idx(find (dummy(1:n-1) == dummy(2:n)))) = [];
     ## reshape if necessary
-    if ( size(c,1) != 1 && size(b,1) == 1 )
+    if (size (c, 1) != 1 && size (b, 1) == 1)
       c = c.';
     endif
   endif
+
 endfunction
   
\ No newline at end of file
--- a/scripts/strings/strmatch.m
+++ b/scripts/strings/strmatch.m
@@ -1,80 +1,66 @@
+## Copyright (C) 2000 Paul Kienzle
 ## Copyright (C) 2003 Alois Schloegl
 ##
-## This program 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 of the License, or
-## (at your option) any later version.
+## This file is part of Octave.
 ##
-## This program 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.
+## 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 this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-##
-## Copyright (C) 2000 Paul Kienzle
+## along with Octave; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
 
 ## usage: strmatch(s, A [, 'exact'])
 ## Determines which entries of A match string s. A can be a string matrix
 ## or a cell array of strings. If 'exact' is not given, then s only needs 
 ## to match A up to the length of s. Null characters match blanks.
 ## Results are returned as a column vector.
-function idx = strmatch(s,A,exact)
+
+## Author: Paul Kienzle, Alois Schloegl
+## Adapted-by: jwe
+
+function idx = strmatch (s, A, exact)
+
   if (nargin < 2 || nargin > 3)
-    usage("strmatch(s,A,'exact')");
+    usage ("strmatch (s, A, \"exact\")");
   endif
 
-  try istno = implicit_str_to_num_ok;
-  catch istno = 0;
-  end
-  try wstno = warn_str_to_num;
-  catch wstno = 0;
-  end
-  try dfi = do_fortran_indexing;
-  catch dfi = 0;
-  end
-  try wfi = warn_fortran_indexing;
-  catch wfi = 0;
-  end
-  unwind_protect
-    implicit_str_to_num_ok = 1;
-    warn_str_to_num = 0;
-    do_fortran_indexing = 1;
-    warn_fortran_indexing = 0;
-
-    [nr, nc] = size (A);
-    if iscell(A)
-      match = zeros(prod(size(A)),1);
-      if nargin>2,
-        for k = 1:prod(size(A)),
-          match(k) = strcmp(s,A{k}); 
-        end 
-      else
-        for k = 1:prod(size(A)),
-          match(k) = strncmp(s,A{k},length(s));
-        end
+  [nr, nc] = size (A);
+  nel = numel (A);
+  if (iscell (A))
+    match = zeros (nel, 1);
+    if (nargin > 2)
+      for k = 1:nel
+	match(k) = strcmp (s, A{k}); 
+      end
+    else
+      for k = 1:nel
+	match(k) = strncmp (s, A{k}, length (s));
       end
-      idx = find(match);
-    elseif (length (s) > nc)
-      idx = [];
+    end
+    idx = find (match);
+  elseif (length (s) > nc)
+    idx = [];
+  else
+    if (nargin == 3 && length(s) < nc)
+      s(1,nc) = " ";
+    endif
+    s(s == 0) = " ";
+    A(A == 0) = " ";
+    match = s(ones(size(A,1),1),:) == A(:,1:length(s));
+    if (length(s) == 1)
+      idx = find (match);
     else
-      if (nargin == 3 && length(s) < nc) s(1,nc) = ' '; endif
-      s (s==0) = ' ';
-      A (A==0) = ' ';
-      match = s(ones(size(A,1),1),:) == A(:,1:length(s));
-      if (length(s) == 1)
-	idx = find(match);
-      else
-      	idx = find(all(match')');
-      endif
+      idx = find (all (match')');
     endif
+  endif
     
-  unwind_protect_cleanup
-    implicit_str_to_num_ok = istno;
-    warn_str_to_num = wstno;
-    do_fortran_indexing = dfi;
-    warn_fortran_indexing = wfi;
-  end_unwind_protect
 endfunction