src/mappers.cc
| changeset 10289: |
4b124317dc38 |
| parent: | 44e889c67abe |
| author: |
John W. Eaton <jwe@octave.org> |
| date: |
Tue Feb 09 20:58:55 2010 -0500 (36 minutes ago) |
| permissions: |
-rw-r--r-- |
| description: |
base_properties::set_children: account for hidden children |
3Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 John W. Eaton
6This file is part of Octave.
8Octave is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 3 of the License, or (at your
11option) any later version.
13Octave is distributed in the hope that it will be useful, but WITHOUT
14ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18You should have received a copy of the GNU General Public License
19along with Octave; see the file COPYING. If not, see
20<http://www.gnu.org/licenses/>.
32#include "lo-specfun.h"
33#include "lo-mappers.h"
41@deftypefn {Mapping Function} {} abs (@var{z})\n\
42Compute the magnitude of @var{z}, defined as\n\
44$|z| = \\sqrt{x^2 + y^2}$.\n\
47|@var{z}| = @code{sqrt (x^2 + y^2)}.\n\
61 if (args.length () == 1)
62 retval = args(0).abs ();
72%!assert(abs (-3.5), 3.5);
73%!assert(abs (3+4i), 5);
74%!assert(abs (3-4i), 5);
75%!assert(abs ([1.1, 3i; 3+4i, -3-4i]), [1.1, 3; 5, 5]);
77%!assert(abs (single(1)), single(1));
78%!assert(abs (single(-3.5)), single(3.5));
79%!assert(abs (single(3+4i)), single(5));
80%!assert(abs (single(3-4i)), single(5));
81%!assert(abs (single([1.1, 3i; 3+4i, -3-4i])), single([1.1, 3; 5, 5]));
90@deftypefn {Mapping Function} {} acos (@var{x})\n\
91Compute the inverse cosine in radians for each element of @var{x}.\n\
92@seealso{cos, acosd}\n\
96 if (args.length () == 1)
97 retval = args(0).acos ();
109%! v = [0, pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6, pi];
110%! x = [1, rt3/2, rt2/2, 1/2, 0, -1/2, -rt2/2, -rt3/2, -1];
111%! assert(acos (x), v, sqrt(eps));
116%! v = single ([0, pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6, pi]);
117%! x = single ([1, rt3/2, rt2/2, 1/2, 0, -1/2, -rt2/2, -rt3/2, -1]);
118%! assert(acos (x), v, sqrt(eps('single')));
127@deftypefn {Mapping Function} {} acosh (@var{x})\n\
128Compute the inverse hyperbolic cosine for each element of @var{x}.\n\
133 if (args.length () == 1)
134 retval = args(0).acosh ();
144%! v = [0, pi/2*i, pi*i, pi/2*i];
146%! assert(acosh (x), v, sqrt(eps));
149%! v = single([0, pi/2*i, pi*i, pi/2*i]);
150%! x = single([1, 0, -1, 0]);
151%! assert(acosh (x), v, sqrt (eps('single')));
160@deftypefn {Mapping Function} {} angle (@var{z})\n\
165 if (args.length () == 1)
166 retval = args(0).arg ();
175@deftypefn {Mapping Function} {} arg (@var{z})\n\
176@deftypefnx {Mapping Function} {} angle (@var{z})\n\
177Compute the argument of @var{z}, defined as,\n\
179$\\theta = atan2 (y, x),$\n\
182@var{theta} = @code{atan2 (@var{y}, @var{x})},\n\
197 if (args.length () == 1)
198 retval = args(0).arg ();
208%!assert(arg (i), pi/2);
209%!assert(arg (-1), pi);
210%!assert(arg (-i), -pi/2);
211%!assert(arg ([1, i; -1, -i]), [0, pi/2; pi, -pi/2]);
213%!assert(arg (single(1)), single(0));
214%!assert(arg (single(i)), single(pi/2));
215%!assert(arg (single(-1)), single(pi));
216%!assert(arg (single(-i)), single(-pi/2));
217%!assert(arg (single([1, i; -1, -i])), single([0, pi/2; pi, -pi/2]), 2e1*eps('single'));
226@deftypefn {Mapping Function} {} asin (@var{x})\n\
227Compute the inverse sine in radians for each element of @var{x}.\n\
228@seealso{sin, asind}\n\
232 if (args.length () == 1)
233 retval = args(0).asin ();
244%! v = [0, pi/6, pi/4, pi/3, pi/2, pi/3, pi/4, pi/6, 0];
245%! x = [0, 1/2, rt2/2, rt3/2, 1, rt3/2, rt2/2, 1/2, 0];
246%! assert(all (abs (asin (x) - v) < sqrt (eps)));
253@deftypefn {Mapping Function} {} asinh (@var{x})\n\
254Compute the inverse hyperbolic sine for each element of @var{x}.\n\
259 if (args.length () == 1)
260 retval = args(0).asinh ();
270%! v = [0, pi/2*i, 0, -pi/2*i];
272%! assert(asinh (x), v, sqrt (eps));
275%! v = single([0, pi/2*i, 0, -pi/2*i]);
276%! x = single([0, i, 0, -i]);
277%! assert(asinh (x), v, sqrt (eps('single')));
286@deftypefn {Mapping Function} {} atan (@var{x})\n\
287Compute the inverse tangent in radians for each element of @var{x}.\n\
288@seealso{tan, atand}\n\
292 if (args.length () == 1)
293 retval = args(0).atan ();
305%! v = [0, pi/6, pi/4, pi/3, -pi/3, -pi/4, -pi/6, 0];
306%! x = [0, rt3/3, 1, rt3, -rt3, -1, -rt3/3, 0];
307%! assert(atan (x), v, sqrt (eps));
312%! v = single([0, pi/6, pi/4, pi/3, -pi/3, -pi/4, -pi/6, 0]);
313%! x = single([0, rt3/3, 1, rt3, -rt3, -1, -rt3/3, 0]);
314%! assert(atan (x), v, sqrt (eps('single')));
323@deftypefn {Mapping Function} {} atanh (@var{x})\n\
324Compute the inverse hyperbolic tangent for each element of @var{x}.\n\
329 if (args.length () == 1)
330 retval = args(0).atanh ();
342%! assert(atanh (x), v, sqrt (eps));
345%! v = single([0, 0]);
346%! x = single([0, 0]);
347%! assert(atanh (x), v, sqrt (eps('single')));
356@deftypefn {Mapping Function} {} ceil (@var{x})\n\
357Return the smallest integer not less than @var{x}. This is equivalent to\n\
358rounding towards positive infinity. If @var{x} is\n\
359complex, return @code{ceil (real (@var{x})) + ceil (imag (@var{x})) * I}.\n\
366@seealso{floor, round, fix}\n\
370 if (args.length () == 1)
371 retval = args(0).ceil ();
381%!assert(ceil ([2, 1.1, -1.1, -1]), [2, 2, -1, -1]);
383%% compelx double precison
384%!assert(ceil ([2+2i, 1.1+1.1i, -1.1-1.1i, -1-i]), [2+2i, 2+2i, -1-i, -1-i]);
387%!assert(ceil (single([2, 1.1, -1.1, -1])), single([2, 2, -1, -1]));
389%% compelx single preci
390%!assert(ceil (single ([2+2i, 1.1+1.1i, -1.1-1.1i, -1-i])), single([2+2i, 2+2i, -1-i, -1-i]));
399@deftypefn {Mapping Function} {} conj (@var{z})\n\
400Return the complex conjugate of @var{z}, defined as\n\
402$\\bar{z} = x - iy$.\n\
405@code{conj (@var{z})} = @var{x} - @var{i}@var{y}.\n\
407@seealso{real, imag}\n\
411 if (args.length () == 1)
412 retval = args(0).conj ();
421%!assert(conj (1), 1);
422%!assert(conj (i), -i)
423%!assert(conj (1+i), 1-i)
424%!assert(conj (1-i), 1+i)
425%!assert(conj ([-1, -i; -1+i, -1-i]), [-1, i; -1-i, -1+i]);
427%!assert(conj (single(1)), single(1));
428%!assert(conj (single(i)), single(-i))
429%!assert(conj (single(1+i)), single(1-i))
430%!assert(conj (single(1-i)), single(1+i))
431%!assert(conj (single([-1, -i; -1+i, -1-i])), single([-1, i; -1-i, -1+i]));
440@deftypefn {Mapping Function} {} cos (@var{x})\n\
441Compute the cosine for each element of @var{x} in radians.\n\
442@seealso{acos, cosd, cosh}\n\
446 if (args.length () == 1)
447 retval = args(0).cos ();
459%! x = [0, pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6, pi];
460%! v = [1, rt3/2, rt2/2, 1/2, 0, -1/2, -rt2/2, -rt3/2, -1];
461%! assert(cos (x), v, sqrt (eps));
466%! x = single([0, pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6, pi]);
467%! v = single([1, rt3/2, rt2/2, 1/2, 0, -1/2, -rt2/2, -rt3/2, -1]);
468%! assert(cos (x), v, sqrt (eps('single')));
477@deftypefn {Mapping Function} {} cosh (@var{x})\n\
478Compute the hyperbolic cosine for each element of @var{x}.\n\
479@seealso{acosh, sinh, tanh}\n\
483 if (args.length () == 1)
484 retval = args(0).cosh ();
494%! x = [0, pi/2*i, pi*i, 3*pi/2*i];
496%! assert(cosh (x), v, sqrt (eps));
499%! x = single([0, pi/2*i, pi*i, 3*pi/2*i]);
500%! v = single([1, 0, -1, 0]);
501%! assert(cosh (x), v, sqrt (eps ('single')));
510@deftypefn {Mapping Function} {} erf (@var{z})\n\
511Computes the error function,\n\
514 {\\rm erf} (z) = {2 \\over \\sqrt{\\pi}}\\int_0^z e^{-t^2} dt\n\
523erf (z) = (2/sqrt (pi)) | e^(-t^2) dt\n\
529@seealso{erfc, erfinv}\n\
533 if (args.length () == 1)
534 retval = args(0).erf ();
544%! a = -1i*sqrt(-1/(6.4187*6.4187));
545%! assert (erf(a), erf(real(a)));
549%! v=[0, .520499877813047, .842700792949715];
550%! assert(all(abs(erf(x)-v)<1.e-10) && all(abs(erf(-x)+v)<1.e-10) && all(abs(erfc(x)+v-1)<1.e-10) && all(abs(erfinv(v)-x)<1.e-10));
553%! a = -1i*sqrt(single (-1/(6.4187*6.4187)));
554%! assert (erf(a), erf(real(a)));
557%! x=single ([0,.5,1]);
558%! v=single ([0, .520499877813047, .842700792949715]);
559%! assert(all(abs(erf(x)-v)<1.e-6) && all(abs(erf(-x)+v)<1.e-6) && all(abs(erfc(x)+v-1)<1.e-6) && all(abs(erfinv(v)-x)<1.e-6));
561%% test/octave.test/arith/erf-2.m
564%% test/octave.test/arith/erf-3.m
571DEFUN (erfinv, args, ,
573@deftypefn {Mapping Function} {} erfinv (@var{x})\n\
574Computes the inverse error function, i.e. @var{y} such that\n\
576 erf(@var{y}) == @var{x}\n\
578@seealso{erfc, erf}\n\
582 if (args.length () == 1)
583 retval = args(0).erfinv ();
592%!assert (erf (erfinv ([-0.9 -0.3 0 0.4 0.8])), [-0.9 -0.3 0 0.4 0.8], eps)
593%!assert (erf (erfinv (single ([-0.9 -0.3 0 0.4 0.8]))), single ([-0.9 -0.3 0 0.4 0.8]), 1e-8)
595%!assert (erf (erfinv ([-0.999 -0.99 0.9999 0.99999])), [-0.999 -0.99 0.9999 0.99999], eps)
596%!assert (erf (erfinv (single ([-0.999 -0.99 0.9999 0.99999]))), single ([-0.999 -0.99 0.9999 0.99999]), 1e-8)
597%% backward - loss of accuracy
598%!assert (erfinv (erf ([-3 -1 -0.4 0.7 1.3 2.8])), [-3 -1 -0.4 0.7 1.3 2.8], -1e-12)
599%!assert (erfinv (erf (single ([-3 -1 -0.4 0.7 1.3 2.8]))), single ([-3 -1 -0.4 0.7 1.3 2.8]), -1e-4)
601%!assert (erfinv ([-1, 1, 1.1, -2.1]), [-Inf, Inf, NaN, NaN])
607@deftypefn {Mapping Function} {} erfc (@var{z})\n\
608Computes the complementary error function,\n\
610$1 - {\\rm erf} (z)$.\n\
613@code{1 - erf (@var{z})}.\n\
615@seealso{erf, erfinv}\n\
619 if (args.length () == 1)
620 retval = args(0).erfc ();
630%! a = -1i*sqrt(-1/(6.4187*6.4187));
631%! assert (erfc(a), erfc(real(a)));
637@deftypefn {Mapping Function} {} exp (@var{x})\n\
645for each element of @var{x}. To compute the matrix\n\
646exponential, see @ref{Linear Algebra}.\n\
651 if (args.length () == 1)
652 retval = args(0).exp ();
661%!assert(exp ([0, 1, -1, -1000]), [1, e, 1/e, 0], sqrt (eps));
662%!assert(exp (1+i), e * (cos (1) + sin (1) * i), sqrt (eps));
663%!assert(exp (single([0, 1, -1, -1000])), single([1, e, 1/e, 0]), sqrt (eps('single')));
664%!assert(exp (single(1+i)), single (e * (cos (1) + sin (1) * i)), sqrt (eps('single')));
669%!assert(exp (Inf) == Inf && exp (-Inf) == 0 && isnan (exp (NaN)));
670%!assert(exp (Inf ('single')) == Inf('single') && exp (-Inf('single')) == 0 && isnan (exp (NaN('single'))));
676@deftypefn {Mapping Function} {} expm1 (@var{x})\n\
682@code{exp (@var{x}) - 1}\n\
684accurately in the neighborhood of zero.\n\
689 if (args.length () == 1)
690 retval = args(0).expm1 ();
697DEFUN (finite, args, ,
699@deftypefn {Mapping Function} {} finite (@var{x})\n\
700Return 1 for elements of @var{x} that are finite values and zero\n\
701otherwise. For example,\n\
705finite ([13, Inf, NA, NaN])\n\
706 @result{} [ 1, 0, 0, 0 ]\n\
712 if (args.length () == 1)
713 retval = args(0).finite ();
722%!assert(!(finite (Inf)));
723%!assert(!(finite (NaN)));
724%!assert(finite (rand(1,10)));
726%!assert(!(finite (single(Inf))));
727%!assert(!(finite (single(NaN))));
728%!assert(finite (single(rand(1,10))));
734@deftypefn {Mapping Function} {} fix (@var{x})\n\
735Truncate fractional portion of @var{x} and return the integer portion. This\n\
736is equivalent to rounding towards zero. If @var{x} is complex, return\n\
737@code{fix (real (@var{x})) + fix (imag (@var{x})) * I}.\n\
744@seealso{ceil, floor, round}\n\
748 if (args.length () == 1)
749 retval = args(0).fix ();
758%!assert(fix ([1.1, 1, -1.1, -1]), [1, 1, -1, -1]);
759%!assert(fix ([1.1+1.1i, 1+i, -1.1-1.1i, -1-i]), [1+i, 1+i, -1-i, -1-i]);
760%!assert(fix (single([1.1, 1, -1.1, -1])), single([1, 1, -1, -1]));
761%!assert(fix (single([1.1+1.1i, 1+i, -1.1-1.1i, -1-i])), single([1+i, 1+i, -1-i, -1-i]));
770@deftypefn {Mapping Function} {} floor (@var{x})\n\
771Return the largest integer not greater than @var{x}. This is equivalent to\n\
772rounding towards negative infinity. If @var{x} is\n\
773complex, return @code{floor (real (@var{x})) + floor (imag (@var{x})) * I}.\n\
776floor ([-2.7, 2.7])\n\
780@seealso{ceil, round, fix}\n\
784 if (args.length () == 1)
785 retval = args(0).floor ();
794%!assert(floor ([2, 1.1, -1.1, -1]), [2, 1, -2, -1]);
795%!assert(floor ([2+2i, 1.1+1.1i, -1.1-1.1i, -1-i]), [2+2i, 1+i, -2-2i, -1-i]);
796%!assert(floor (single ([2, 1.1, -1.1, -1])), single ([2, 1, -2, -1]));
797%!assert(floor (single([2+2i, 1.1+1.1i, -1.1-1.1i, -1-i])), single([2+2i, 1+i, -2-2i, -1-i]));
806@deftypefn {Mapping Function} {} gamma (@var{z})\n\
807Computes the Gamma function,\n\
810 \\Gamma (z) = \\int_0^\\infty t^{z-1} e^{-t} dt.\n\
819gamma (z) = | t^(z-1) exp (-t) dt.\n\
825@seealso{gammainc, lgamma}\n\
829 if (args.length () == 1)
830 retval = args(0).gamma ();
840%! a = -1i*sqrt(-1/(6.4187*6.4187));
841%! assert (gamma(a), gamma(real(a)));
844%! x = [.5, 1, 1.5, 2, 3, 4, 5];
845%! v = [sqrt(pi), 1, .5*sqrt(pi), 1, 2, 6, 24];
846%! assert(gamma(x), v, sqrt(eps))
849%! a = single(-1i*sqrt(-1/(6.4187*6.4187)));
850%! assert (gamma(a), gamma(real(a)));
853%! x = single([.5, 1, 1.5, 2, 3, 4, 5]);
854%! v = single([sqrt(pi), 1, .5*sqrt(pi), 1, 2, 6, 24]);
855%! assert(gamma(x), v, sqrt(eps('single')))
864@deftypefn {Mapping Function} {} imag (@var{z})\n\
865Return the imaginary part of @var{z} as a real number.\n\
866@seealso{real, conj}\n\
870 if (args.length () == 1)
871 retval = args(0).imag ();
880%!assert(imag (1), 0);
881%!assert(imag (i), 1);
882%!assert(imag (1+i), 1);
883%!assert(imag ([i, 1; 1, i]), full (eye (2)));
885%!assert(imag (single(1)), single(0));
886%!assert(imag (single(i)), single(1));
887%!assert(imag (single(1+i)), single(1));
888%!assert(imag (single([i, 1; 1, i])), full (eye (2,'single')));
895DEFUNX ("isalnum", Fisalnum, args, ,
897@deftypefn {Mapping Function} {} isalnum (@var{s})\n\
898Return 1 for characters that are letters or digits (@code{isalpha\n\
899(@var{s})} or @code{isdigit (@var{s})} is true).\n\
903 if (args.length () == 1)
904 retval = args(0).xisalnum ();
911DEFUNX ("isalpha", Fisalpha, args, ,
913@deftypefn {Mapping Function} {} isalpha (@var{s})\n\
914@deftypefnx {Mapping Function} {} isletter (@var{s})\n\
915Return true for characters that are letters (@code{isupper (@var{s})}\n\
916or @code{islower (@var{s})} is true).\n\
920 if (args.length () == 1)
921 retval = args(0).xisalpha ();
928DEFUNX ("isascii", Fisascii, args, ,
930@deftypefn {Mapping Function} {} isascii (@var{s})\n\
931Return 1 for characters that are ASCII (in the range 0 to 127 decimal).\n\
935 if (args.length () == 1)
936 retval = args(0).xisascii ();
943DEFUNX ("iscntrl", Fiscntrl, args, ,
945@deftypefn {Mapping Function} {} iscntrl (@var{s})\n\
946Return 1 for control characters.\n\
950 if (args.length () == 1)
951 retval = args(0).xiscntrl ();
958DEFUNX ("isdigit", Fisdigit, args, ,
960@deftypefn {Mapping Function} {} isdigit (@var{s})\n\
961Return 1 for characters that are decimal digits.\n\
965 if (args.length () == 1)
966 retval = args(0).xisdigit ();
975@deftypefn {Mapping Function} {} isinf (@var{x})\n\
976Return 1 for elements of @var{x} that are infinite and zero\n\
977otherwise. For example,\n\
981isinf ([13, Inf, NA, NaN])\n\
982 @result{} [ 0, 1, 0, 0 ]\n\
988 if (args.length () == 1)
989 retval = args(0).isinf ();
998%!assert(isinf (Inf));
999%!assert(!isinf (NaN));
1000%!assert(!(isinf (NA)));
1001%!assert(isinf (rand(1,10)), false(1,10));
1002%!assert(isinf([NaN -Inf -1 0 1 Inf NA]), [false, true, false, false, false, true, false]);
1004%!assert(isinf (single(Inf)));
1005%!assert(!(isinf (single(NaN))));
1006%!assert(!(isinf (single(NA))));
1007%!assert(isinf (single(rand(1,10))), false(1,10));
1008%!assert(isinf(single([NaN -Inf -1 0 1 Inf NA])), [false, true, false, false, false, true, false]);
1012DEFUNX ("isgraph", Fisgraph, args, ,
1014@deftypefn {Mapping Function} {} isgraph (@var{s})\n\
1015Return 1 for printable characters (but not the space character).\n\
1018 octave_value retval;
1019 if (args.length () == 1)
1020 retval = args(0).xisgraph ();
1027DEFUNX ("islower", Fislower, args, ,
1029@deftypefn {Mapping Function} {} islower (@var{s})\n\
1030Return 1 for characters that are lower case letters.\n\
1033 octave_value retval;
1034 if (args.length () == 1)
1035 retval = args(0).xislower ();
1044@deftypefn {Mapping Function} {} isna (@var{x})\n\
1045Return 1 for elements of @var{x} that are NA (missing) values and zero\n\
1046otherwise. For example,\n\
1050isna ([13, Inf, NA, NaN])\n\
1051 @result{} [ 0, 0, 1, 0 ]\n\
1057 octave_value retval;
1058 if (args.length () == 1)
1059 retval = args(0).isna ();
1068%!assert(!(isna (Inf)));
1069%!assert(!isna (NaN));
1071%!assert(isna (rand(1,10)), false(1,10));
1072%!assert(isna([NaN -Inf -1 0 1 Inf NA]), [false, false, false, false, false, false, true]);
1074%!assert(!(isna (single(Inf))));
1075%!assert(!isna (single(NaN)));
1076%!assert(isna (single(NA)));
1077%!assert(isna (single(rand(1,10))), false(1,10));
1078%!assert(isna(single([NaN -Inf -1 0 1 Inf NA])), [false, false, false, false, false, false, true]);
1082DEFUN (isnan, args, ,
1084@deftypefn {Mapping Function} {} isnan (@var{x})\n\
1085Return 1 for elements of @var{x} that are NaN values and zero\n\
1086otherwise. NA values are also considered NaN values. For example,\n\
1090isnan ([13, Inf, NA, NaN])\n\
1091 @result{} [ 0, 0, 1, 1 ]\n\
1097 octave_value retval;
1098 if (args.length () == 1)
1099 retval = args(0).isnan ();
1108%!assert(!(isnan (Inf)));
1109%!assert(isnan (NaN));
1110%!assert(isnan (NA));
1111%!assert(isnan (rand(1,10)), false(1,10));
1112%!assert(isnan([NaN -Inf -1 0 1 Inf NA]), [true, false, false, false, false, false, true]);
1114%!assert(!(isnan (single(Inf))));
1115%!assert(isnan (single(NaN)));
1116%!assert(isnan (single(NA)));
1117%!assert(isnan (single(rand(1,10))), false(1,10));
1118%!assert(isnan(single([NaN -Inf -1 0 1 Inf NA])), [true, false, false, false, false, false, true]);
1122DEFUNX ("isprint", Fisprint, args, ,
1124@deftypefn {Mapping Function} {} isprint (@var{s})\n\
1125Return 1 for printable characters (including the space character).\n\
1128 octave_value retval;
1129 if (args.length () == 1)
1130 retval = args(0).xisprint ();
1137DEFUNX ("ispunct", Fispunct, args, ,
1139@deftypefn {Mapping Function} {} ispunct (@var{s})\n\
1140Return 1 for punctuation characters.\n\
1143 octave_value retval;
1144 if (args.length () == 1)
1145 retval = args(0).xispunct ();
1152DEFUNX ("isspace", Fisspace, args, ,
1154@deftypefn {Mapping Function} {} isspace (@var{s})\n\
1155Return 1 for whitespace characters (space, formfeed, newline,\n\
1156carriage return, tab, and vertical tab).\n\
1159 octave_value retval;
1160 if (args.length () == 1)
1161 retval = args(0).xisspace ();
1168DEFUNX ("isupper", Fisupper, args, ,
1170@deftypefn {Mapping Function} {} isupper (@var{s})\n\
1171Return 1 for upper case letters.\n\
1174 octave_value retval;
1175 if (args.length () == 1)
1176 retval = args(0).xisupper ();
1183DEFUNX ("isxdigit", Fisxdigit, args, ,
1185@deftypefn {Mapping Function} {} isxdigit (@var{s})\n\
1186Return 1 for characters that are hexadecimal digits.\n\
1189 octave_value retval;
1190 if (args.length () == 1)
1191 retval = args(0).xisxdigit ();
1198DEFUN (lgamma, args, ,
1200@deftypefn {Mapping Function} {} lgamma (@var{x})\n\
1201@deftypefnx {Mapping Function} {} gammaln (@var{x})\n\
1202Return the natural logarithm of the gamma function of @var{x}.\n\
1203@seealso{gamma, gammainc}\n\
1206 octave_value retval;
1207 if (args.length () == 1)
1208 retval = args(0).lgamma ();
1218%! a = -1i*sqrt(-1/(6.4187*6.4187));
1219%! assert (lgamma(a), lgamma(real(a)));
1222%! x = [.5, 1, 1.5, 2, 3, 4, 5];
1223%! v = [sqrt(pi), 1, .5*sqrt(pi), 1, 2, 6, 24];
1224%! assert(lgamma(x), log(v), sqrt(eps))
1227%! a = single(-1i*sqrt(-1/(6.4187*6.4187)));
1228%! assert (lgamma(a), lgamma(real(a)));
1231%! x = single([.5, 1, 1.5, 2, 3, 4, 5]);
1232%! v = single([sqrt(pi), 1, .5*sqrt(pi), 1, 2, 6, 24]);
1233%! assert(lgamma(x), log(v), sqrt(eps ('single')))
1242@deftypefn {Mapping Function} {} log (@var{x})\n\
1243Compute the natural logarithm,\n\
1248@code{ln (@var{x})},\n\
1250for each element of @var{x}. To compute the\n\
1251matrix logarithm, see @ref{Linear Algebra}.\n\
1252@seealso{exp, log1p, log2, log10, logspace}\n\
1255 octave_value retval;
1256 if (args.length () == 1)
1257 retval = args(0).log ();
1266%!assert(log ([1, e, e^2]), [0, 1, 2], sqrt (eps));
1267%!assert(log ([-0.5, -1.5, -2.5]), log([0.5, 1.5, 2.5]) + pi*1i, sqrt (eps));
1269%!assert(log (single([1, e, e^2])), single([0, 1, 2]), sqrt (eps('single')));
1270%!assert(log (single([-0.5, -1.5, -2.5])), single(log([0.5, 1.5, 2.5]) + pi*1i), 4*eps('single'));
1277DEFUN (log10, args, ,
1279@deftypefn {Mapping Function} {} log10 (@var{x})\n\
1280Compute the base-10 logarithm of each element of @var{x}.\n\
1281@seealso{log, log2, logspace, exp}\n\
1284 octave_value retval;
1285 if (args.length () == 1)
1286 retval = args(0).log10 ();
1295%!assert(log10 ([0.01, 0.1, 1, 10, 100]), [-2, -1, 0, 1, 2], sqrt (eps));
1296%!assert(log10 (single([0.01, 0.1, 1, 10, 100])), single([-2, -1, 0, 1, 2]), sqrt (eps ('single')));
1299%!error log10 (1, 2);
1303DEFUN (log1p, args, ,
1305@deftypefn {Mapping Function} {} log1p (@var{x})\n\
1311@code{log (1 + @var{x})}\n\
1313accurately in the neighborhood of zero.\n\
1314@seealso{log, exp, expm1}\n\
1317 octave_value retval;
1318 if (args.length () == 1)
1319 retval = args(0).log1p ();
1328@deftypefn {Mapping Function} {} real (@var{z})\n\
1329Return the real part of @var{z}.\n\
1330@seealso{imag, conj}\n\
1333 octave_value retval;
1334 if (args.length () == 1)
1335 retval = args(0).real ();
1344%!assert(real (1), 1);
1345%!assert(real (i), 0);
1346%!assert(real (1+i), 1);
1347%!assert(real ([1, i; i, 1]), full (eye (2)));
1349%!assert(real (single(1)), single(1));
1350%!assert(real (single(i)), single(0));
1351%!assert(real (single(1+i)), single(1));
1352%!assert(real (single([1, i; i, 1])), full (eye (2,'single')));
1359DEFUN (round, args, ,
1361@deftypefn {Mapping Function} {} round (@var{x})\n\
1362Return the integer nearest to @var{x}. If @var{x} is complex, return\n\
1363@code{round (real (@var{x})) + round (imag (@var{x})) * I}.\n\
1366round ([-2.7, 2.7])\n\
1370@seealso{ceil, floor, fix}\n\
1373 octave_value retval;
1374 if (args.length () == 1)
1375 retval = args(0).round ();
1384%!assert(round (1), 1);
1385%!assert(round (1.1), 1);
1386%!assert(round (5.5), 6);
1387%!assert(round (i), i);
1388%!assert(round (2.5+3.5i), 3+4i);
1389%!assert(round (-2.6), -3);
1390%!assert(round ([1.1, -2.4; -3.7, 7.1]), [1, -2; -4, 7]);
1392%!assert(round (single(1)), single(1));
1393%!assert(round (single(1.1)), single(1));
1394%!assert(round (single(5.5)), single(6));
1395%!assert(round (single(i)), single(i));
1396%!assert(round (single(2.5+3.5i)), single(3+4i));
1397%!assert(round (single(-2.6)), single(-3));
1398%!assert(round (single([1.1, -2.4; -3.7, 7.1])), single([1, -2; -4, 7]));
1401%!error round (1, 2);
1405DEFUN (roundb, args, ,
1407@deftypefn {Mapping Function} {} roundb (@var{x})\n\
1408Return the integer nearest to @var{x}. If there are two nearest\n\
1409integers, return the even one (banker's rounding). If @var{x} is complex,\n\
1410return @code{roundb (real (@var{x})) + roundb (imag (@var{x})) * I}.\n\
1414 octave_value retval;
1415 if (args.length () == 1)
1416 retval = args(0).roundb ();
1425@deftypefn {Mapping Function} {} sign (@var{x})\n\
1426Compute the @dfn{signum} function, which is defined as\n\
1429{\\rm sign} (@var{x}) = \\cases{1,&$x>0$;\\cr 0,&$x=0$;\\cr -1,&$x<0$.\\cr}\n\
1437sign (x) = 0, x = 0;\n\
1443For complex arguments, @code{sign} returns @code{x ./ abs (@var{x})}.\n\
1446 octave_value retval;
1447 if (args.length () == 1)
1448 retval = args(0).signum ();
1457%!assert(sign (-2) , -1);
1458%!assert(sign (3), 1);
1459%!assert(sign (0), 0);
1460%!assert(sign ([1, -pi; e, 0]), [1, -1; 1, 0]);
1462%!assert(sign (single(-2)) , single(-1));
1463%!assert(sign (single(3)), single(1));
1464%!assert(sign (single(0)), single(0));
1465%!assert(sign (single([1, -pi; e, 0])), single([1, -1; 1, 0]));
1474@deftypefn {Mapping Function} {} sin (@var{x})\n\
1475Compute the sine for each element of @var{x} in radians.\n\
1476@seealso{asin, sind, sinh}\n\
1479 octave_value retval;
1480 if (args.length () == 1)
1481 retval = args(0).sin ();
1493%! x = [0, pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6, pi];
1494%! v = [0, 1/2, rt2/2, rt3/2, 1, rt3/2, rt2/2, 1/2, 0];
1495%! assert(sin (x), v, sqrt (eps));
1500%! x = single([0, pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6, pi]);
1501%! v = single([0, 1/2, rt2/2, rt3/2, 1, rt3/2, rt2/2, 1/2, 0]);
1502%! assert(sin (x), v, sqrt (eps('single')));
1511@deftypefn {Mapping Function} {} sinh (@var{x})\n\
1512Compute the hyperbolic sine for each element of @var{x}.\n\
1513@seealso{asinh, cosh, tanh}\n\
1516 octave_value retval;
1517 if (args.length () == 1)
1518 retval = args(0).sinh ();
1528%! x = [0, pi/2*i, pi*i, 3*pi/2*i];
1529%! v = [0, i, 0, -i];
1530%! assert(sinh (x), v, sqrt (eps));
1533%! x = single([0, pi/2*i, pi*i, 3*pi/2*i]);
1534%! v = single([0, i, 0, -i]);
1535%! assert(sinh (x), v, sqrt (eps('single')));
1544@deftypefn {Mapping Function} {} sqrt (@var{x})\n\
1545Compute the square root of each element of @var{x}. If @var{x} is negative,\n\
1546a complex result is returned. To compute the matrix square root, see\n\
1547@ref{Linear Algebra}.\n\
1548@seealso{realsqrt}\n\
1551 octave_value retval;
1552 if (args.length () == 1)
1553 retval = args(0).sqrt ();
1562%!assert(sqrt (4), 2)
1563%!assert(sqrt (-1), i)
1564%!assert(sqrt (1+i), exp (0.5 * log (1+i)), sqrt (eps));
1565%!assert(sqrt([4, -4; i, 1-i]), [2, 2i; exp(0.5 * log (i)), exp(0.5 * log (1-i))], sqrt(eps));
1567%!assert(sqrt (single(4)), single(2))
1568%!assert(sqrt (single(-1)), single(i))
1569%!assert(sqrt (single(1+i)), single(exp (0.5 * log (1+i))), sqrt (eps('single')));
1570%!assert(sqrt(single([4, -4; i, 1-i])), single([2, 2i; exp(0.5 * log (i)), exp(0.5 * log (1-i))]), sqrt(eps('single')));
1579@deftypefn {Mapping Function} {} tan (@var{z})\n\
1580Compute the tangent for each element of @var{x} in radians.\n\
1581@seealso{atan, tand, tanh}\n\
1584 octave_value retval;
1585 if (args.length () == 1)
1586 retval = args(0).tan ();
1598%! x = [0, pi/6, pi/4, pi/3, 2*pi/3, 3*pi/4, 5*pi/6, pi];
1599%! v = [0, rt3/3, 1, rt3, -rt3, -1, -rt3/3, 0];
1600%! assert(tan (x), v, sqrt (eps));
1605%! x = single([0, pi/6, pi/4, pi/3, 2*pi/3, 3*pi/4, 5*pi/6, pi]);
1606%! v = single([0, rt3/3, 1, rt3, -rt3, -1, -rt3/3, 0]);
1607%! assert(tan (x), v, sqrt (eps('single')));
1616@deftypefn {Mapping Function} {} tanh (@var{x})\n\
1617Compute hyperbolic tangent for each element of @var{x}.\n\
1618@seealso{atanh, sinh, cosh}\n\
1621 octave_value retval;
1622 if (args.length () == 1)
1623 retval = args(0).tanh ();
1635%! assert(tanh (x), v, sqrt (eps));
1638%! x = single([0, pi*i]);
1639%! v = single([0, 0]);
1640%! assert(tanh (x), v, sqrt (eps('single')));
1647DEFUNX ("toascii", Ftoascii, args, ,
1649@deftypefn {Mapping Function} {} toascii (@var{s})\n\
1650Return ASCII representation of @var{s} in a matrix. For example,\n\
1654toascii (\"ASCII\")\n\
1655 @result{} [ 65, 83, 67, 73, 73 ]\n\
1662 octave_value retval;
1663 if (args.length () == 1)
1664 retval = args(0).xtoascii ();
1671DEFUNX ("tolower", Ftolower, args, ,
1673@deftypefn {Mapping Function} {} tolower (@var{s})\n\
1674@deftypefnx {Mapping Function} {} lower (@var{s})\n\
1675Return a copy of the string or cell string @var{s}, with each upper-case\n\
1676character replaced by the corresponding lower-case one; non-alphabetic\n\
1677characters are left unchanged. For example,\n\
1681tolower (\"MiXeD cAsE 123\")\n\
1682 @result{} \"mixed case 123\"\n\
1688 octave_value retval;
1689 if (args.length () == 1)
1690 retval = args(0).xtolower ();
1697DEFALIAS (lower, tolower);
1701%!error <Invalid call to tolower.*> tolower();
1702%!error <Invalid call to tolower.*> lower();
1703%!assert(tolower("OCTAVE"), "octave");
1704%!assert(tolower("123OCTave!_&"), "123octave!_&");
1705%!assert(tolower({"ABC", "DEF", {"GHI", {"JKL"}}}), {"abc", "def", {"ghi", {"jkl"}}});
1706%!assert(tolower(["ABC"; "DEF"]), ["abc"; "def"]);
1707%!assert(tolower({["ABC"; "DEF"]}), {["abc";"def"]});
1708%!assert(tolower(68), "d");
1709%!assert(tolower({[68, 68; 68, 68]}), {["dd";"dd"]});
1712%! assert(tolower(a)(3,3,3,3), "d");
1717DEFUNX ("toupper", Ftoupper, args, ,
1719@deftypefn {Built-in Function} {} toupper (@var{s})\n\
1720@deftypefnx {Built-in Function} {} upper (@var{s})\n\
1721Return a copy of the string or cell string @var{s}, with each lower-case\n\
1722character replaced by the corresponding upper-case one; non-alphabetic\n\
1723characters are left unchanged. For example,\n\
1727toupper (\"MiXeD cAsE 123\")\n\
1728 @result{} \"MIXED CASE 123\"\n\
1734 octave_value retval;
1735 if (args.length () == 1)
1736 retval = args(0).xtoupper ();
1743DEFALIAS (upper, toupper);
1747%!error <Invalid call to toupper.*> toupper();
1748%!error <Invalid call to toupper.*> upper();
1749%!assert(toupper("octave"), "OCTAVE");
1750%!assert(toupper("123OCTave!_&"), "123OCTAVE!_&");
1751%!assert(toupper({"abc", "def", {"ghi", {"jkl"}}}), {"ABC", "DEF", {"GHI", {"JKL"}}});
1752%!assert(toupper(["abc"; "def"]), ["ABC"; "DEF"]);
1753%!assert(toupper({["abc"; "def"]}), {["ABC";"DEF"]});
1754%!assert(toupper(100), "D");
1755%!assert(toupper({[100, 100; 100, 100]}), {["DD";"DD"]});
1758%! assert(toupper(a)(3,3,3,3), "D");
1762DEFALIAS (gammaln, lgamma);
1764DEFALIAS (isfinite, finite);