# HG changeset patch
# User Juan Pablo Carbajal
# Date 1320776222 -3600
# Branch stable
# Node ID 822244b076ac078c59eb86946042ec7151f74c23
# Parent 5289d7c2460db8c55912320ce8a0f56a9e44c9bc
Fixing bug in norm when 3 arguments given
diff -r 5289d7c2460d -r 822244b076ac src/data.cc
--- a/src/data.cc Wed Nov 02 20:50:20 2011 -0700
+++ b/src/data.cc Tue Nov 08 19:17:02 2011 +0100
@@ -4823,17 +4823,30 @@
if (! error_state)
{
- octave_value p_arg = (nargin > 1) ? args(1) : octave_value (2);
+ octave_value p_arg;
+ if (nargin > 1 && args(nargin-1).is_string ())
+ {
+ std::string str = args(nargin-1).string_value ();
+ if (str == "fro")
+ p_arg = octave_value (2);
+ else if (str == "inf")
+ error ("norm: Inf not yet implemented for cols/rows");
+ }
+ else if (nargin > 1)
+ p_arg = args(1);
+ else
+ p_arg = octave_value (2);
+
switch (strflag)
{
case sfmatrix:
retval(0) = xnorm (x_arg, p_arg);
break;
case sfcols:
- retval(0) = xcolnorms (x_arg, p_arg);
+ retval(0) = xcolnorms (x_arg, p_arg);
break;
case sfrows:
- retval(0) = xrownorms (x_arg, p_arg);
+ retval(0) = xrownorms (x_arg, p_arg);
break;
case sffrob:
retval(0) = xfrobnorm (x_arg);
@@ -4903,6 +4916,16 @@
%! fhi = single(1e+300);
%!assert (norm(flo*m2,"fro"), single(sqrt(30)*flo), -eps('single'))
%!assert (norm(fhi*m2,"fro"), single(sqrt(30)*fhi), -eps('single'))
+
+%!shared q
+%! q = rand(1e3,3);
+%!assert(norm(q,3,"rows") ,sum(q.^3,2).^(1/3),sqrt(eps));
+%!assert(norm(q,"fro","rows") ,sum(q.^2,2).^(1/2),sqrt(eps));
+%!assert(norm(q,"fro","rows") ,sqrt(sumsq(q,2)),sqrt(eps));
+%!assert(norm(q,"fro","cols") ,sqrt(sumsq(q,1)),sqrt(eps));
+%!assert(norm(q,3,"cols") ,sum(q.^3,1).^(1/3),sqrt(eps));
+%!error norm(q,"Inf","row");
+%!error norm(q,"Inf","cols");
*/
static octave_value
# HG changeset patch
# User Juan Pablo Carbajal
# Date 1320776222 -3600
# Branch stable
# Node ID 708e4224c424b3219c9e5c957bca9e019b9a96aa
# Parent 5289d7c2460db8c55912320ce8a0f56a9e44c9bc
Fixing bug in norm when 3 arguments given
diff -r 5289d7c2460d -r 708e4224c424 src/data.cc
--- a/src/data.cc Wed Nov 02 20:50:20 2011 -0700
+++ b/src/data.cc Tue Nov 08 19:17:02 2011 +0100
@@ -4823,17 +4823,30 @@
if (! error_state)
{
- octave_value p_arg = (nargin > 1) ? args(1) : octave_value (2);
+ octave_value p_arg;
+ if (nargin > 1 && args(nargin-1).is_string ())
+ {
+ std::string str = args(nargin-1).string_value ();
+ if (str == "fro")
+ p_arg = octave_value (2);
+ else if (str == "inf")
+ error ("norm: Inf not yet implemented for cols/rows");
+ }
+ else if (nargin > 1)
+ p_arg = args(1);
+ else
+ p_arg = octave_value (2);
+
switch (strflag)
{
case sfmatrix:
retval(0) = xnorm (x_arg, p_arg);
break;
case sfcols:
- retval(0) = xcolnorms (x_arg, p_arg);
+ retval(0) = xcolnorms (x_arg, p_arg);
break;
case sfrows:
- retval(0) = xrownorms (x_arg, p_arg);
+ retval(0) = xrownorms (x_arg, p_arg);
break;
case sffrob:
retval(0) = xfrobnorm (x_arg);
@@ -4903,6 +4916,16 @@
%! fhi = single(1e+300);
%!assert (norm(flo*m2,"fro"), single(sqrt(30)*flo), -eps('single'))
%!assert (norm(fhi*m2,"fro"), single(sqrt(30)*fhi), -eps('single'))
+
+%!shared q
+%! q = rand(1e3,3);
+%!assert(norm(q,3,"rows") ,sum(q.^3,2).^(1/3),sqrt(eps));
+%!assert(norm(q,"fro","rows") ,sum(q.^2,2).^(1/2),sqrt(eps));
+%!assert(norm(q,"fro","rows") ,sqrt(sumsq(q,2)),sqrt(eps));
+%!assert(norm(q,"fro","cols") ,sqrt(sumsq(q,1)),sqrt(eps));
+%!assert(norm(q,3,"cols") ,sum(q.^3,1).^(1/3),sqrt(eps));
+%!error norm(q,"inf","rows");
+%!error norm(q,"inf","cols");
*/
static octave_value
# HG changeset patch
# User Juan Pablo Carbajal
# Date 1320882838 -3600
# Branch stable
# Node ID 7e4214ba23f1525b63eed2fd349a5eb245540bbf
# Parent 708e4224c424b3219c9e5c957bca9e019b9a96aa
Adding is_function_handle to ov-fcn-handle.cc
diff -r 708e4224c424 -r 7e4214ba23f1 src/ov-fcn-handle.cc
--- a/src/ov-fcn-handle.cc Tue Nov 08 19:17:02 2011 +0100
+++ b/src/ov-fcn-handle.cc Thu Nov 10 00:53:58 2011 +0100
@@ -1742,6 +1742,38 @@
%! assert (testrecursionfunc (@(x) x, 1), 8);
*/
+
+DEFUN (is_function_handle, args, ,
+ "-*- texinfo -*-\n\
address@hidden {Built-in Function} {} is_function_handle (@var{x})\n\
+Return true if @var{x} is a function handle.\n\
address@hidden, isfloat, isinteger, islogical, isnumeric, iscellstr, isa}\n\
address@hidden deftypefn")
+{
+ octave_value retval;
+
+ int nargin = args.length ();
+
+ if (nargin == 1)
+ retval = args(0).is_function_handle ();
+ else
+ print_usage ();
+
+ return retval;
+}
+
+/*
+%!shared fh
+%! fh=@(x)x;
+
+%!assert (is_function_handle (fh), logical (1));
+%!assert (is_function_handle ({fh}), logical (0));
+%!assert (is_function_handle (1), logical (0));
+%!error is_function_handle ();
+
+ */
+
+
octave_fcn_binder::octave_fcn_binder (const octave_value& f,
const octave_value& root,
const octave_value_list& templ,