76 int nargin = args.length ();
78 if (nargin < 2 || nargin > 3)
86 double m = args(1).xdouble_value (
"ellipj: M must be a scalar or matrix");
93 double u = args(0).xdouble_value (
"ellipj: U must be a scalar or matrix");
98 math::ellipj (u, m, sn, cn, dn, err);
100 return ovl (sn, cn, dn, err);
110 math::ellipj (u, m, sn, cn, dn, err);
112 return ovl (sn, cn, dn, err);
129 double *perr = err.
rwdata ();
133 math::ellipj (pu[i], m, psn[i], pcn[i], pdn[i], perr[i]);
135 return ovl (sn, cn, dn, err);
140 NDArray m = args(1).xarray_value (
"ellipj: M must be a scalar or matrix");
150 double u = u_arg.
xdouble_value (
"ellipj: U must be a scalar or matrix");
152 NDArray sn (sz_m), cn (sz_m), dn (sz_m);
155 const double *pm = m.
data ();
156 double *psn = sn.rwdata ();
157 double *pcn = cn.rwdata ();
158 double *pdn = dn.
rwdata ();
159 double *perr = err.
rwdata ();
163 math::ellipj (u, pm[i], psn[i], pcn[i], pdn[i], perr[i]);
165 return ovl (sn, cn, dn, err);
175 const double *pm = m.
data ();
179 double *perr = err.
rwdata ();
183 math::ellipj (u, pm[i], psn[i], pcn[i], pdn[i], perr[i]);
185 return ovl (sn, cn, dn, err);
199 && sz_u(1) == 1 && sz_m(0) == 1)
206 NDArray sn (sz_out), cn (sz_out), dn (sz_out);
209 const double *pu = u.
data ();
210 const double *pm = m.
data ();
214 math::ellipj (pu[i], pm[j], sn(i, j), cn(i, j), dn(i, j), err(i, j));
216 return ovl (sn, cn, dn, err);
218 else if (sz_m == sz_u)
220 NDArray sn (sz_m), cn (sz_m), dn (sz_m);
223 const double *pu = u.
data ();
224 const double *pm = m.
data ();
225 double *psn = sn.rwdata ();
226 double *pcn = cn.rwdata ();
227 double *pdn = dn.
rwdata ();
228 double *perr = err.
rwdata ();
232 math::ellipj (pu[i], pm[i], psn[i], pcn[i], pdn[i], perr[i]);
234 return ovl (sn, cn, dn, err);
237 error (
"ellipj: Invalid size combination for U and M");
247 && sz_u(1) == 1 && sz_m(0) == 1)
258 const double *pm = m.
data ();
262 math::ellipj (pu[i], pm[j], sn(i, j), cn(i, j), dn(i, j), err(i, j));
264 return ovl (sn, cn, dn, err);
266 else if (sz_m == sz_u)
272 const double *pm = m.
data ();
276 double *perr = err.
rwdata ();
280 math::ellipj (pu[i], pm[i], psn[i], pcn[i], pdn[i], perr[i]);
282 return ovl (sn, cn, dn, err);
285 error (
"ellipj: Invalid size combination for U and M");
#define DEFUN(name, args_name, nargout_name, doc)
Macro to define a builtin function.