26#if defined (HAVE_CONFIG_H)
74 int nargin = args.length ();
76 if (nargin < 1 || nargin > 2)
79 const octave_value oct_z = (nargin == 1) ? args(0) : args(1);
80 const octave_idx_type k = (nargin == 1) ? 0 : args(0).strict_idx_type_value (
"psi: K must be an integer");
82 error (
"psi: K must be non-negative");
88#define FLOAT_BRANCH(T, A, M, E) \
89 if (oct_z.is_ ## T ##_type ()) \
91 const A ## NDArray z = oct_z.M ## array_value (); \
92 A ## NDArray psi_z (z.dims ()); \
94 const E *zv = z.data (); \
95 E *psi_zv = psi_z.rwdata (); \
96 const octave_idx_type n = z.numel (); \
97 for (octave_idx_type i = 0; i < n; i++) \
98 *psi_zv++ = math::psi (*zv++); \
108 error (
"psi: Z must be a floating point");
115 error (
"psi: Z must be a floating point");
123 error (
"psi: Z must be real value for polygamma (K > 0)");
125#define FLOAT_BRANCH(T, A, M, E) \
126 if (oct_z.is_ ## T ##_type ()) \
128 const A ## NDArray z = oct_z.M ## array_value (); \
129 A ## NDArray psi_z (z.dims ()); \
131 const E *zv = z.data (); \
132 E *psi_zv = psi_z.rwdata (); \
133 const octave_idx_type n = z.numel (); \
134 for (octave_idx_type i = 0; i < n; i++) \
137 error ("psi: Z must be non-negative for polygamma (K > 0)"); \
139 *psi_zv++ = math::psi (k, *zv++); \
147 error (
"psi: Z must be a floating point for polygamma (K > 0)");
238OCTAVE_END_NAMESPACE(octave)
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
#define DEFUN(name, args_name, nargout_name, doc)
Macro to define a builtin function.
void error(const char *fmt,...)
std::complex< double > Complex
std::complex< float > FloatComplex
#define FLOAT_BRANCH(T, A, M, E)