Mercurial > hg > octave-lyh
diff src/data.cc @ 3354:87721841efd7
[project @ 1999-11-17 19:06:11 by jwe]
author | jwe |
---|---|
date | Wed, 17 Nov 1999 19:06:15 +0000 |
parents | 15cddaacbc2d |
children | 4f40efa995c1 |
line wrap: on
line diff
--- a/src/data.cc +++ b/src/data.cc @@ -49,12 +49,6 @@ #define ABS(x) (((x) < 0) ? (-x) : (x)) #endif -// Should expressions like ones (-1, 5) result in an empty matrix or -// an error? A positive value means yes. A negative value means -// yes, but print a warning message. Zero means it should be -// considered an error. -static int Vtreat_neg_dim_as_zero; - DEFUN (all, args, , "all (X): are all elements of X nonzero?") { @@ -889,131 +883,10 @@ return retval; } -static void -check_dimensions (int& nr, int& nc, const char *warnfor) -{ - if (nr < 0 || nc < 0) - { - if (Vtreat_neg_dim_as_zero) - { - nr = (nr < 0) ? 0 : nr; - nc = (nc < 0) ? 0 : nc; - - if (Vtreat_neg_dim_as_zero < 0) - warning ("%s: converting negative dimension to zero", - warnfor); - } - else - error ("%s: can't create a matrix with negative dimensions", - warnfor); - } -} - -static void -get_dimensions (const octave_value& a, const char *warn_for, - int& nr, int& nc) -{ - if (a.is_scalar_type ()) - { - nr = nc = a.nint_value (); - } - else - { - nr = a.rows (); - nc = a.columns (); - - if ((nr == 1 && nc == 2) || (nr == 2 && nc == 1)) - { - ColumnVector v = a.vector_value (); - - if (error_state) - return; - - nr = NINT (v (0)); - nc = NINT (v (1)); - } - else - warning ("%s (A): use %s (size (A)) instead", warn_for, warn_for); - } - - check_dimensions (nr, nc, warn_for); // May set error_state. -} - -static void -get_dimensions (const octave_value& a, const octave_value& b, - const char *warn_for, int& nr, int& nc) +static octave_value +fill_matrix (const octave_value_list& args, double val, const char *fcn) { - nr = a.is_empty () ? 0 : a.nint_value (); - nc = b.is_empty () ? 0 : b.nint_value (); - - if (error_state) - error ("%s: expecting two scalar arguments", warn_for); - else - check_dimensions (nr, nc, warn_for); // May set error_state. -} - -static octave_value -fill_matrix (const octave_value& a, double val, const char *warn_for) -{ - int nr, nc; - get_dimensions (a, warn_for, nr, nc); - - if (error_state) - return octave_value (); - - Matrix m (nr, nc, val); - - return m; -} - -static octave_value -fill_matrix (const octave_value& a, const octave_value& b, - double val, const char *warn_for) -{ - int nr, nc; - get_dimensions (a, b, warn_for, nr, nc); // May set error_state. - - if (error_state) - return octave_value (); - - Matrix m (nr, nc, val); - - return m; -} - -DEFUN (ones, args, , - "ones (N), ones (N, M), ones (X): create a matrix of all ones") -{ - octave_value_list retval; - - int nargin = args.length (); - - switch (nargin) - { - case 0: - retval = 1.0; - break; - - case 1: - retval = fill_matrix (args(0), 1.0, "ones"); - break; - - case 2: - retval = fill_matrix (args(0), args(1), 1.0, "ones"); - break; - - default: - print_usage ("ones"); - break; - } - - return retval; -} - -DEFUN (zeros, args, , - "zeros (N), zeros (N, M), zeros (X): create a matrix of all zeros") -{ - octave_value_list retval; + octave_value retval; int nargin = args.length (); @@ -1024,51 +897,48 @@ break; case 1: - retval = fill_matrix (args(0), 0.0, "zeros"); + { + int nr, nc; + get_dimensions (args(0), fcn, nr, nc); + + if (! error_state) + retval = Matrix (nr, nc, val); + } break; case 2: - retval = fill_matrix (args(0), args(1), 0.0, "zeros"); + { + int nr, nc; + get_dimensions (args(0), args(1), fcn, nr, nc); + + if (! error_state) + retval = Matrix (nr, nc, val); + } break; default: - print_usage ("zeros"); + print_usage (fcn); break; } return retval; } -static octave_value -identity_matrix (const octave_value& a) +DEFUN (ones, args, , + "ones (N), ones (N, M), ones (X): create a matrix of all ones") { - int nr, nc; - get_dimensions (a, "eye", nr, nc); // May set error_state. - - if (error_state) - return octave_value (); - - Matrix m (nr, nc, 0.0); - - if (nr > 0 && nc > 0) - { - int n = MIN (nr, nc); - for (int i = 0; i < n; i++) - m (i, i) = 1.0; - } - - return m; + return fill_matrix (args, 1.0, "ones"); } -static octave_value -identity_matrix (const octave_value& a, const octave_value& b) +DEFUN (zeros, args, , + "zeros (N), zeros (N, M), zeros (X): create a matrix of all zeros") { - int nr, nc; - get_dimensions (a, b, "eye", nr, nc); // May set error_state. + return fill_matrix (args, 0.0, "zeros"); +} - if (error_state) - return octave_value (); - +static Matrix +identity_matrix (int nr, int nc) +{ Matrix m (nr, nc, 0.0); if (nr > 0 && nc > 0) @@ -1084,7 +954,7 @@ DEFUN (eye, args, , "eye (N), eye (N, M), eye (X): create an identity matrix") { - octave_value_list retval; + octave_value retval; int nargin = args.length (); @@ -1095,11 +965,23 @@ break; case 1: - retval = identity_matrix (args(0)); + { + int nr, nc; + get_dimensions (args(0), "eye", nr, nc); + + if (! error_state) + retval = identity_matrix (nr, nc); + } break; case 2: - retval = identity_matrix (args(0), args(1)); + { + int nr, nc; + get_dimensions (args(0), args(1), "eye", nr, nc); + + if (! error_state) + retval = identity_matrix (nr, nc); + } break; default: @@ -1173,14 +1055,6 @@ return retval; } -static int -treat_neg_dim_as_zero (void) -{ - Vtreat_neg_dim_as_zero = check_preference ("treat_neg_dim_as_zero"); - - return 0; -} - void symbols_of_data (void) { @@ -1351,11 +1225,9 @@ @end iftex\n\ @end defvr"); - DEFVAR (treat_neg_dim_as_zero, 0.0, treat_neg_dim_as_zero, - "convert negative dimensions to zero"); - DEFCONST (true, true, "logical true value"); + } /*