GNU Octave  9.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ellipj.cc
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 2013-2024 The Octave Project Developers
4 //
5 // See the file COPYRIGHT.md in the top-level directory of this
6 // distribution or <https://octave.org/copyright/>.
7 //
8 // This file is part of Octave.
9 //
10 // Octave is free software: you can redistribute it and/or modify it
11 // under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // Octave is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with Octave; see the file COPYING. If not, see
22 // <https://www.gnu.org/licenses/>.
23 //
24 ////////////////////////////////////////////////////////////////////////
25 
26 #if defined (HAVE_CONFIG_H)
27 # include "config.h"
28 #endif
29 
30 #include "defun.h"
31 #include "error.h"
32 #include "lo-specfun.h"
33 
35 
36 DEFUN (ellipj, args, ,
37  doc: /* -*- texinfo -*-
38 @deftypefn {} {[@var{sn}, @var{cn}, @var{dn}, @var{err}] =} ellipj (@var{u}, @var{m})
39 @deftypefnx {} {[@var{sn}, @var{cn}, @var{dn}, @var{err}] =} ellipj (@var{u}, @var{m}, @var{tol})
40 Compute the Jacobi elliptic functions @var{sn}, @var{cn}, and @var{dn}
41 of complex argument @var{u} and real parameter @var{m}.
42 
43 If @var{m} is a scalar, the results are the same size as @var{u}.
44 If @var{u} is a scalar, the results are the same size as @var{m}.
45 If @var{u} is a column vector and @var{m} is a row vector, the
46 results are matrices with @code{length (@var{u})} rows and
47 @code{length (@var{m})} columns. Otherwise, @var{u} and
48 @var{m} must conform in size and the results will be the same size as the
49 inputs.
50 
51 The value of @var{u} may be complex.
52 The value of @var{m} must be 0 @leq{} @var{m} @leq{} 1.
53 
54 The optional input @var{tol} is currently ignored (@sc{matlab} uses this to
55 allow faster, less accurate approximation).
56 
57 If requested, @var{err} contains the following status information
58 and is the same size as the result.
59 
60 @enumerate 0
61 @item
62 Normal return.
63 
64 @item
65 Error---no computation, algorithm termination condition not met,
66 return @code{NaN}.
67 @end enumerate
68 
69 Reference: Milton @nospell{Abramowitz} and Irene A @nospell{Stegun},
70 @cite{Handbook of Mathematical Functions}, Chapter 16 (Sections 16.4, 16.13,
71 and 16.15), Dover, 1965.
72 
73 @seealso{ellipke}
74 @end deftypefn */)
75 {
76  int nargin = args.length ();
77 
78  if (nargin < 2 || nargin > 3)
79  print_usage ();
80 
81  octave_value u_arg = args(0);
82  octave_value m_arg = args(1);
83 
84  if (m_arg.is_scalar_type ())
85  {
86  double m = args(1).xdouble_value ("ellipj: M must be a scalar or matrix");
87 
88  if (u_arg.is_scalar_type ())
89  {
90  if (u_arg.isreal ())
91  {
92  // u real, m scalar
93  double u = args(0).xdouble_value ("ellipj: U must be a scalar or matrix");
94 
95  double sn, cn, dn;
96  double err = 0;
97 
98  math::ellipj (u, m, sn, cn, dn, err);
99 
100  return ovl (sn, cn, dn, err);
101  }
102  else
103  {
104  // u complex, m scalar
105  Complex u = u_arg.xcomplex_value ("ellipj: U must be a scalar or matrix");
106 
107  Complex sn, cn, dn;
108  double err = 0;
109 
110  math::ellipj (u, m, sn, cn, dn, err);
111 
112  return ovl (sn, cn, dn, err);
113  }
114  }
115  else
116  {
117  // u is matrix, m is scalar
118  ComplexNDArray u = u_arg.xcomplex_array_value ("ellipj: U must be a scalar or matrix");
119 
120  dim_vector sz_u = u.dims ();
121 
122  ComplexNDArray sn (sz_u), cn (sz_u), dn (sz_u);
123  NDArray err (sz_u);
124 
125  const Complex *pu = u.data ();
126  Complex *psn = sn.fortran_vec ();
127  Complex *pcn = cn.fortran_vec ();
128  Complex *pdn = dn.fortran_vec ();
129  double *perr = err.fortran_vec ();
130  octave_idx_type nel = u.numel ();
131 
132  for (octave_idx_type i = 0; i < nel; i++)
133  math::ellipj (pu[i], m, psn[i], pcn[i], pdn[i], perr[i]);
134 
135  return ovl (sn, cn, dn, err);
136  }
137  }
138  else
139  {
140  NDArray m = args(1).xarray_value ("ellipj: M must be a scalar or matrix");
141 
142  dim_vector sz_m = m.dims ();
143 
144  if (u_arg.is_scalar_type ())
145  {
146  // u is scalar, m is array
147  if (u_arg.isreal ())
148  {
149  // u is real scalar, m is array
150  double u = u_arg.xdouble_value ("ellipj: U must be a scalar or matrix");
151 
152  NDArray sn (sz_m), cn (sz_m), dn (sz_m);
153  NDArray err (sz_m);
154 
155  const double *pm = m.data ();
156  double *psn = sn.fortran_vec ();
157  double *pcn = cn.fortran_vec ();
158  double *pdn = dn.fortran_vec ();
159  double *perr = err.fortran_vec ();
160  octave_idx_type nel = m.numel ();
161 
162  for (octave_idx_type i = 0; i < nel; i++)
163  math::ellipj (u, pm[i], psn[i], pcn[i], pdn[i], perr[i]);
164 
165  return ovl (sn, cn, dn, err);
166  }
167  else
168  {
169  // u is complex scalar, m is array
170  Complex u = u_arg.xcomplex_value ("ellipj: U must be a scalar or matrix");
171 
172  ComplexNDArray sn (sz_m), cn (sz_m), dn (sz_m);
173  NDArray err (sz_m);
174 
175  const double *pm = m.data ();
176  Complex *psn = sn.fortran_vec ();
177  Complex *pcn = cn.fortran_vec ();
178  Complex *pdn = dn.fortran_vec ();
179  double *perr = err.fortran_vec ();
180  octave_idx_type nel = m.numel ();
181 
182  for (octave_idx_type i = 0; i < nel; i++)
183  math::ellipj (u, pm[i], psn[i], pcn[i], pdn[i], perr[i]);
184 
185  return ovl (sn, cn, dn, err);
186  }
187  }
188  else
189  {
190  // u is array, m is array
191  if (u_arg.isreal ())
192  {
193  // u is real array, m is array
194  NDArray u = u_arg.xarray_value ("ellipj: U must be a scalar or matrix");
195 
196  dim_vector sz_u = u.dims ();
197 
198  if (sz_u.ndims () == 2 && sz_m.ndims () == 2
199  && sz_u(1) == 1 && sz_m(0) == 1)
200  {
201  // u is real column vector, m is row vector
202  octave_idx_type ur = sz_u(0);
203  octave_idx_type mc = sz_m(1);
204  dim_vector sz_out (ur, mc);
205 
206  NDArray sn (sz_out), cn (sz_out), dn (sz_out);
207  NDArray err (sz_out);
208 
209  const double *pu = u.data ();
210  const double *pm = m.data ();
211 
212  for (octave_idx_type j = 0; j < mc; j++)
213  for (octave_idx_type i = 0; i < ur; i++)
214  math::ellipj (pu[i], pm[j], sn(i, j), cn(i, j), dn(i, j), err(i, j));
215 
216  return ovl (sn, cn, dn, err);
217  }
218  else if (sz_m == sz_u)
219  {
220  NDArray sn (sz_m), cn (sz_m), dn (sz_m);
221  NDArray err (sz_m);
222 
223  const double *pu = u.data ();
224  const double *pm = m.data ();
225  double *psn = sn.fortran_vec ();
226  double *pcn = cn.fortran_vec ();
227  double *pdn = dn.fortran_vec ();
228  double *perr = err.fortran_vec ();
229  octave_idx_type nel = m.numel ();
230 
231  for (octave_idx_type i = 0; i < nel; i++)
232  math::ellipj (pu[i], pm[i], psn[i], pcn[i], pdn[i], perr[i]);
233 
234  return ovl (sn, cn, dn, err);
235  }
236  else
237  error ("ellipj: Invalid size combination for U and M");
238  }
239  else
240  {
241  // u is complex array, m is array
242  ComplexNDArray u = u_arg.xcomplex_array_value ("ellipj: U must be a scalar or matrix");
243 
244  dim_vector sz_u = u.dims ();
245 
246  if (sz_u.ndims () == 2 && sz_m.ndims () == 2
247  && sz_u(1) == 1 && sz_m(0) == 1)
248  {
249  // u is complex column vector, m is row vector
250  octave_idx_type ur = sz_u(0);
251  octave_idx_type mc = sz_m(1);
252  dim_vector sz_out (ur, mc);
253 
254  ComplexNDArray sn (sz_out), cn (sz_out), dn (sz_out);
255  NDArray err (sz_out);
256 
257  const Complex *pu = u.data ();
258  const double *pm = m.data ();
259 
260  for (octave_idx_type j = 0; j < mc; j++)
261  for (octave_idx_type i = 0; i < ur; i++)
262  math::ellipj (pu[i], pm[j], sn(i, j), cn(i, j), dn(i, j), err(i, j));
263 
264  return ovl (sn, cn, dn, err);
265  }
266  else if (sz_m == sz_u)
267  {
268  ComplexNDArray sn (sz_m), cn (sz_m), dn (sz_m);
269  NDArray err (sz_m);
270 
271  const Complex *pu = u.data ();
272  const double *pm = m.data ();
273  Complex *psn = sn.fortran_vec ();
274  Complex *pcn = cn.fortran_vec ();
275  Complex *pdn = dn.fortran_vec ();
276  double *perr = err.fortran_vec ();
277  octave_idx_type nel = m.numel ();
278 
279  for (octave_idx_type i = 0; i < nel; i++)
280  math::ellipj (pu[i], pm[i], psn[i], pcn[i], pdn[i], perr[i]);
281 
282  return ovl (sn, cn, dn, err);
283  }
284  else
285  error ("ellipj: Invalid size combination for U and M");
286  }
287  }
288  } // m matrix
289 
290  return ovl ();
291 }
292 
293 /*
294 ## demos taken from inst/ellipj.m
295 
296 %!demo
297 %! N = 150;
298 %! # m = [1-logspace(0,log(eps),N-1), 1]; # m near 1
299 %! # m = [0, logspace(log(eps),0,N-1)]; # m near 0
300 %! m = linspace (0,1,N); # m equally spaced
301 %! u = linspace (-20, 20, N);
302 %! M = ones (length (u), 1) * m;
303 %! U = u' * ones (1, length (m));
304 %! [sn, cn, dn] = ellipj (U,M);
305 %!
306 %! ## Plotting
307 %! data = {sn,cn,dn};
308 %! dname = {"sn","cn","dn"};
309 %! for i=1:3
310 %! subplot (1,3,i);
311 %! data{i}(data{i} > 1) = 1;
312 %! data{i}(data{i} < -1) = -1;
313 %! image (m,u,32*data{i}+32);
314 %! title (dname{i});
315 %! endfor
316 %! colormap (hot (64));
317 
318 %!demo
319 %! N = 200;
320 %! # m = [1-logspace(0,log(eps),N-1), 1]; # m near 1
321 %! # m = [0, logspace(log(eps),0,N-1)]; # m near 0
322 %! m = linspace (0,1,N); # m equally spaced
323 %! u = linspace (0,20,5);
324 %! M = ones (length (u), 1) * m;
325 %! U = u' * ones (1, length (m));
326 %! [sn, cn, dn] = ellipj (U,M);
327 %!
328 %! ## Plotting
329 %! data = {sn,cn,dn};
330 %! dname = {"sn","cn","dn"};
331 %! for i=1:3
332 %! subplot (1,3,i);
333 %! plot (m, data{i});
334 %! title (dname{i});
335 %! grid on;
336 %! endfor
337 */
338 
339 /*
340 ## tests taken from inst/test_sncndn.m
341 
342 %!test
343 %! k = (tan (pi/8))^2; m = k*k;
344 %! SN = [
345 %! -1. + I * 0. , -0.8392965923 + 0. * I
346 %! -1. + I * 0.2 , -0.8559363407 + 0.108250955 * I
347 %! -1. + I * 0.4 , -0.906529758 + 0.2204040232 * I
348 %! -1. + I * 0.6 , -0.9931306727 + 0.3403783409 * I
349 %! -1. + I * 0.8 , -1.119268095 + 0.4720784944 * I
350 %! -1. + I * 1. , -1.29010951 + 0.6192468708 * I
351 %! -1. + I * 1.2 , -1.512691987 + 0.7850890595 * I
352 %! -1. + I * 1.4 , -1.796200374 + 0.9714821804 * I
353 %! -1. + I * 1.6 , -2.152201882 + 1.177446413 * I
354 %! -1. + I * 1.8 , -2.594547417 + 1.396378892 * I
355 %! -1. + I * 2. , -3.138145339 + 1.611394819 * I
356 %! -0.8 + I * 0. , -0.7158157937 + 0. * I
357 %! -0.8 + I * 0.2 , -0.7301746722 + 0.1394690862 * I
358 %! -0.8 + I * 0.4 , -0.7738940898 + 0.2841710966 * I
359 %! -0.8 + I * 0.6 , -0.8489542135 + 0.4394411376 * I
360 %! -0.8 + I * 0.8 , -0.9588386397 + 0.6107824358 * I
361 %! -0.8 + I * 1. , -1.108848724 + 0.8038415767 * I
362 %! -0.8 + I * 1.2 , -1.306629972 + 1.024193359 * I
363 %! -0.8 + I * 1.4 , -1.563010199 + 1.276740951 * I
364 %! -0.8 + I * 1.6 , -1.893274688 + 1.564345558 * I
365 %! -0.8 + I * 1.8 , -2.318944084 + 1.88491973 * I
366 %! -0.8 + I * 2. , -2.869716809 + 2.225506523 * I
367 %! -0.6 + I * 0. , -0.5638287208 + 0. * I
368 %! -0.6 + I * 0.2 , -0.5752723012 + 0.1654722474 * I
369 %! -0.6 + I * 0.4 , -0.610164314 + 0.3374004736 * I
370 %! -0.6 + I * 0.6 , -0.6702507087 + 0.5224614298 * I
371 %! -0.6 + I * 0.8 , -0.7586657365 + 0.7277663879 * I
372 %! -0.6 + I * 1. , -0.8803349115 + 0.9610513652 * I
373 %! -0.6 + I * 1.2 , -1.042696526 + 1.230800819 * I
374 %! -0.6 + I * 1.4 , -1.256964505 + 1.546195843 * I
375 %! -0.6 + I * 1.6 , -1.540333527 + 1.916612621 * I
376 %! -0.6 + I * 1.8 , -1.919816065 + 2.349972151 * I
377 %! -0.6 + I * 2. , -2.438761841 + 2.848129496 * I
378 %! -0.4 + I * 0. , -0.3891382858 + 0. * I
379 %! -0.4 + I * 0.2 , -0.3971152026 + 0.1850563793 * I
380 %! -0.4 + I * 0.4 , -0.4214662882 + 0.3775700801 * I
381 %! -0.4 + I * 0.6 , -0.4635087491 + 0.5853434119 * I
382 %! -0.4 + I * 0.8 , -0.5256432877 + 0.8168992398 * I
383 %! -0.4 + I * 1. , -0.611733177 + 1.081923504 * I
384 %! -0.4 + I * 1.2 , -0.7278102331 + 1.391822501 * I
385 %! -0.4 + I * 1.4 , -0.8833807998 + 1.760456461 * I
386 %! -0.4 + I * 1.6 , -1.093891878 + 2.205107766 * I
387 %! -0.4 + I * 1.8 , -1.385545188 + 2.747638761 * I
388 %! -0.4 + I * 2. , -1.805081271 + 3.41525351 * I
389 %! -0.2 + I * 0. , -0.1986311721 + 0. * I
390 %! -0.2 + I * 0.2 , -0.2027299916 + 0.1972398665 * I
391 %! -0.2 + I * 0.4 , -0.2152524522 + 0.402598347 * I
392 %! -0.2 + I * 0.6 , -0.2369100139 + 0.6246336356 * I
393 %! -0.2 + I * 0.8 , -0.2690115146 + 0.8728455227 * I
394 %! -0.2 + I * 1. , -0.3136938773 + 1.158323088 * I
395 %! -0.2 + I * 1.2 , -0.3743615191 + 1.494672508 * I
396 %! -0.2 + I * 1.4 , -0.4565255082 + 1.899466033 * I
397 %! -0.2 + I * 1.6 , -0.5694611346 + 2.39667232 * I
398 %! -0.2 + I * 1.8 , -0.7296612675 + 3.020990664 * I
399 %! -0.2 + I * 2. , -0.9685726188 + 3.826022536 * I
400 %! 0. + I * 0. , 0. + 0. * I
401 %! 0. + I * 0.2 , 0. + 0.201376364 * I
402 %! 0. + I * 0.4 , 0. + 0.4111029248 * I
403 %! 0. + I * 0.6 , 0. + 0.6380048435 * I
404 %! 0. + I * 0.8 , 0. + 0.8919321473 * I
405 %! 0. + I * 1. , 0. + 1.184486615 * I
406 %! 0. + I * 1.2 , 0. + 1.530096023 * I
407 %! 0. + I * 1.4 , 0. + 1.947754612 * I
408 %! 0. + I * 1.6 , 0. + 2.464074356 * I
409 %! 0. + I * 1.8 , 0. + 3.119049475 * I
410 %! 0. + I * 2. , 0. + 3.97786237 * I
411 %! 0.2 + I * 0. , 0.1986311721 + 0. * I
412 %! 0.2 + I * 0.2 , 0.2027299916 + 0.1972398665 * I
413 %! 0.2 + I * 0.4 , 0.2152524522 + 0.402598347 * I
414 %! 0.2 + I * 0.6 , 0.2369100139 + 0.6246336356 * I
415 %! 0.2 + I * 0.8 , 0.2690115146 + 0.8728455227 * I
416 %! 0.2 + I * 1. , 0.3136938773 + 1.158323088 * I
417 %! 0.2 + I * 1.2 , 0.3743615191 + 1.494672508 * I
418 %! 0.2 + I * 1.4 , 0.4565255082 + 1.899466033 * I
419 %! 0.2 + I * 1.6 , 0.5694611346 + 2.39667232 * I
420 %! 0.2 + I * 1.8 , 0.7296612675 + 3.020990664 * I
421 %! 0.2 + I * 2. , 0.9685726188 + 3.826022536 * I
422 %! 0.4 + I * 0. , 0.3891382858 + 0. * I
423 %! 0.4 + I * 0.2 , 0.3971152026 + 0.1850563793 * I
424 %! 0.4 + I * 0.4 , 0.4214662882 + 0.3775700801 * I
425 %! 0.4 + I * 0.6 , 0.4635087491 + 0.5853434119 * I
426 %! 0.4 + I * 0.8 , 0.5256432877 + 0.8168992398 * I
427 %! 0.4 + I * 1. , 0.611733177 + 1.081923504 * I
428 %! 0.4 + I * 1.2 , 0.7278102331 + 1.391822501 * I
429 %! 0.4 + I * 1.4 , 0.8833807998 + 1.760456461 * I
430 %! 0.4 + I * 1.6 , 1.093891878 + 2.205107766 * I
431 %! 0.4 + I * 1.8 , 1.385545188 + 2.747638761 * I
432 %! 0.4 + I * 2. , 1.805081271 + 3.41525351 * I
433 %! 0.6 + I * 0. , 0.5638287208 + 0. * I
434 %! 0.6 + I * 0.2 , 0.5752723012 + 0.1654722474 * I
435 %! 0.6 + I * 0.4 , 0.610164314 + 0.3374004736 * I
436 %! 0.6 + I * 0.6 , 0.6702507087 + 0.5224614298 * I
437 %! 0.6 + I * 0.8 , 0.7586657365 + 0.7277663879 * I
438 %! 0.6 + I * 1. , 0.8803349115 + 0.9610513652 * I
439 %! 0.6 + I * 1.2 , 1.042696526 + 1.230800819 * I
440 %! 0.6 + I * 1.4 , 1.256964505 + 1.546195843 * I
441 %! 0.6 + I * 1.6 , 1.540333527 + 1.916612621 * I
442 %! 0.6 + I * 1.8 , 1.919816065 + 2.349972151 * I
443 %! 0.6 + I * 2. , 2.438761841 + 2.848129496 * I
444 %! 0.8 + I * 0. , 0.7158157937 + 0. * I
445 %! 0.8 + I * 0.2 , 0.7301746722 + 0.1394690862 * I
446 %! 0.8 + I * 0.4 , 0.7738940898 + 0.2841710966 * I
447 %! 0.8 + I * 0.6 , 0.8489542135 + 0.4394411376 * I
448 %! 0.8 + I * 0.8 , 0.9588386397 + 0.6107824358 * I
449 %! 0.8 + I * 1. , 1.108848724 + 0.8038415767 * I
450 %! 0.8 + I * 1.2 , 1.306629972 + 1.024193359 * I
451 %! 0.8 + I * 1.4 , 1.563010199 + 1.276740951 * I
452 %! 0.8 + I * 1.6 , 1.893274688 + 1.564345558 * I
453 %! 0.8 + I * 1.8 , 2.318944084 + 1.88491973 * I
454 %! 0.8 + I * 2. , 2.869716809 + 2.225506523 * I
455 %! 1. + I * 0. , 0.8392965923 + 0. * I
456 %! 1. + I * 0.2 , 0.8559363407 + 0.108250955 * I
457 %! 1. + I * 0.4 , 0.906529758 + 0.2204040232 * I
458 %! 1. + I * 0.6 , 0.9931306727 + 0.3403783409 * I
459 %! 1. + I * 0.8 , 1.119268095 + 0.4720784944 * I
460 %! 1. + I * 1. , 1.29010951 + 0.6192468708 * I
461 %! 1. + I * 1.2 , 1.512691987 + 0.7850890595 * I
462 %! 1. + I * 1.4 , 1.796200374 + 0.9714821804 * I
463 %! 1. + I * 1.6 , 2.152201882 + 1.177446413 * I
464 %! 1. + I * 1.8 , 2.594547417 + 1.396378892 * I
465 %! 1. + I * 2. , 3.138145339 + 1.611394819 * I
466 %! ];
467 %! CN = [
468 %! -1. + I * 0. , 0.5436738271 + 0. * I
469 %! -1. + I * 0.2 , 0.5541219664 + 0.1672121517 * I
470 %! -1. + I * 0.4 , 0.5857703552 + 0.3410940893 * I
471 %! -1. + I * 0.6 , 0.6395034233 + 0.5285979063 * I
472 %! -1. + I * 0.8 , 0.716688504 + 0.7372552987 * I
473 %! -1. + I * 1. , 0.8189576795 + 0.9755037374 * I
474 %! -1. + I * 1.2 , 0.9477661951 + 1.253049471 * I
475 %! -1. + I * 1.4 , 1.103540657 + 1.581252712 * I
476 %! -1. + I * 1.6 , 1.284098214 + 1.973449038 * I
477 %! -1. + I * 1.8 , 1.481835651 + 2.4449211 * I
478 %! -1. + I * 2. , 1.679032464 + 3.011729224 * I
479 %! -0.8 + I * 0. , 0.6982891589 + 0. * I
480 %! -0.8 + I * 0.2 , 0.71187169 + 0.1430549855 * I
481 %! -0.8 + I * 0.4 , 0.7530744458 + 0.2920273465 * I
482 %! -0.8 + I * 0.6 , 0.8232501212 + 0.4531616768 * I
483 %! -0.8 + I * 0.8 , 0.9245978896 + 0.6334016187 * I
484 %! -0.8 + I * 1. , 1.060030206 + 0.8408616109 * I
485 %! -0.8 + I * 1.2 , 1.232861756 + 1.085475913 * I
486 %! -0.8 + I * 1.4 , 1.446126965 + 1.379933558 * I
487 %! -0.8 + I * 1.6 , 1.701139468 + 1.741030588 * I
488 %! -0.8 + I * 1.8 , 1.994526268 + 2.191509596 * I
489 %! -0.8 + I * 2. , 2.312257188 + 2.762051518 * I
490 %! -0.6 + I * 0. , 0.8258917445 + 0. * I
491 %! -0.6 + I * 0.2 , 0.842151698 + 0.1130337928 * I
492 %! -0.6 + I * 0.4 , 0.8915487431 + 0.2309124769 * I
493 %! -0.6 + I * 0.6 , 0.975948103 + 0.3588102098 * I
494 %! -0.6 + I * 0.8 , 1.098499209 + 0.5026234141 * I
495 %! -0.6 + I * 1. , 1.263676101 + 0.6695125973 * I
496 %! -0.6 + I * 1.2 , 1.477275851 + 0.8687285705 * I
497 %! -0.6 + I * 1.4 , 1.746262523 + 1.112955966 * I
498 %! -0.6 + I * 1.6 , 2.078179075 + 1.420581466 * I
499 %! -0.6 + I * 1.8 , 2.479425208 + 1.819580713 * I
500 %! -0.6 + I * 2. , 2.950586798 + 2.354077344 * I
501 %! -0.4 + I * 0. , 0.9211793498 + 0. * I
502 %! -0.4 + I * 0.2 , 0.9395019377 + 0.07822091534 * I
503 %! -0.4 + I * 0.4 , 0.9952345231 + 0.1598950363 * I
504 %! -0.4 + I * 0.6 , 1.090715991 + 0.2487465067 * I
505 %! -0.4 + I * 0.8 , 1.229998843 + 0.34910407 * I
506 %! -0.4 + I * 1. , 1.419103868 + 0.4663848201 * I
507 %! -0.4 + I * 1.2 , 1.666426377 + 0.607877235 * I
508 %! -0.4 + I * 1.4 , 1.983347336 + 0.7841054404 * I
509 %! -0.4 + I * 1.6 , 2.385101684 + 1.01134031 * I
510 %! -0.4 + I * 1.8 , 2.89185416 + 1.316448705 * I
511 %! -0.4 + I * 2. , 3.529393374 + 1.74670531 * I
512 %! -0.2 + I * 0. , 0.9800743122 + 0. * I
513 %! -0.2 + I * 0.2 , 0.9997019476 + 0.03999835809 * I
514 %! -0.2 + I * 0.4 , 1.059453907 + 0.08179712295 * I
515 %! -0.2 + I * 0.6 , 1.16200643 + 0.1273503824 * I
516 %! -0.2 + I * 0.8 , 1.312066413 + 0.1789585449 * I
517 %! -0.2 + I * 1. , 1.516804331 + 0.2395555269 * I
518 %! -0.2 + I * 1.2 , 1.786613221 + 0.313189147 * I
519 %! -0.2 + I * 1.4 , 2.136422971 + 0.405890925 * I
520 %! -0.2 + I * 1.6 , 2.588021972 + 0.527357091 * I
521 %! -0.2 + I * 1.8 , 3.174302819 + 0.6944201617 * I
522 %! -0.2 + I * 2. , 3.947361147 + 0.9387994989 * I
523 %! 0. + I * 0. , 1. + 0. * I
524 %! 0. + I * 0.2 , 1.020074723 + 0. * I
525 %! 0. + I * 0.4 , 1.08120563 + 0. * I
526 %! 0. + I * 0.6 , 1.18619146 + 0. * I
527 %! 0. + I * 0.8 , 1.339978715 + 0. * I
528 %! 0. + I * 1. , 1.550164037 + 0. * I
529 %! 0. + I * 1.2 , 1.827893279 + 0. * I
530 %! 0. + I * 1.4 , 2.189462954 + 0. * I
531 %! 0. + I * 1.6 , 2.659259752 + 0. * I
532 %! 0. + I * 1.8 , 3.275434266 + 0. * I
533 %! 0. + I * 2. , 4.101632484 + 0. * I
534 %! 0.2 + I * 0. , 0.9800743122 + 0. * I
535 %! 0.2 + I * 0.2 , 0.9997019476 - 0.03999835809 * I
536 %! 0.2 + I * 0.4 , 1.059453907 - 0.08179712295 * I
537 %! 0.2 + I * 0.6 , 1.16200643 - 0.1273503824 * I
538 %! 0.2 + I * 0.8 , 1.312066413 - 0.1789585449 * I
539 %! 0.2 + I * 1. , 1.516804331 - 0.2395555269 * I
540 %! 0.2 + I * 1.2 , 1.786613221 - 0.313189147 * I
541 %! 0.2 + I * 1.4 , 2.136422971 - 0.405890925 * I
542 %! 0.2 + I * 1.6 , 2.588021972 - 0.527357091 * I
543 %! 0.2 + I * 1.8 , 3.174302819 - 0.6944201617 * I
544 %! 0.2 + I * 2. , 3.947361147 - 0.9387994989 * I
545 %! 0.4 + I * 0. , 0.9211793498 + 0. * I
546 %! 0.4 + I * 0.2 , 0.9395019377 - 0.07822091534 * I
547 %! 0.4 + I * 0.4 , 0.9952345231 - 0.1598950363 * I
548 %! 0.4 + I * 0.6 , 1.090715991 - 0.2487465067 * I
549 %! 0.4 + I * 0.8 , 1.229998843 - 0.34910407 * I
550 %! 0.4 + I * 1. , 1.419103868 - 0.4663848201 * I
551 %! 0.4 + I * 1.2 , 1.666426377 - 0.607877235 * I
552 %! 0.4 + I * 1.4 , 1.983347336 - 0.7841054404 * I
553 %! 0.4 + I * 1.6 , 2.385101684 - 1.01134031 * I
554 %! 0.4 + I * 1.8 , 2.89185416 - 1.316448705 * I
555 %! 0.4 + I * 2. , 3.529393374 - 1.74670531 * I
556 %! 0.6 + I * 0. , 0.8258917445 + 0. * I
557 %! 0.6 + I * 0.2 , 0.842151698 - 0.1130337928 * I
558 %! 0.6 + I * 0.4 , 0.8915487431 - 0.2309124769 * I
559 %! 0.6 + I * 0.6 , 0.975948103 - 0.3588102098 * I
560 %! 0.6 + I * 0.8 , 1.098499209 - 0.5026234141 * I
561 %! 0.6 + I * 1. , 1.263676101 - 0.6695125973 * I
562 %! 0.6 + I * 1.2 , 1.477275851 - 0.8687285705 * I
563 %! 0.6 + I * 1.4 , 1.746262523 - 1.112955966 * I
564 %! 0.6 + I * 1.6 , 2.078179075 - 1.420581466 * I
565 %! 0.6 + I * 1.8 , 2.479425208 - 1.819580713 * I
566 %! 0.6 + I * 2. , 2.950586798 - 2.354077344 * I
567 %! 0.8 + I * 0. , 0.6982891589 + 0. * I
568 %! 0.8 + I * 0.2 , 0.71187169 - 0.1430549855 * I
569 %! 0.8 + I * 0.4 , 0.7530744458 - 0.2920273465 * I
570 %! 0.8 + I * 0.6 , 0.8232501212 - 0.4531616768 * I
571 %! 0.8 + I * 0.8 , 0.9245978896 - 0.6334016187 * I
572 %! 0.8 + I * 1. , 1.060030206 - 0.8408616109 * I
573 %! 0.8 + I * 1.2 , 1.232861756 - 1.085475913 * I
574 %! 0.8 + I * 1.4 , 1.446126965 - 1.379933558 * I
575 %! 0.8 + I * 1.6 , 1.701139468 - 1.741030588 * I
576 %! 0.8 + I * 1.8 , 1.994526268 - 2.191509596 * I
577 %! 0.8 + I * 2. , 2.312257188 - 2.762051518 * I
578 %! 1. + I * 0. , 0.5436738271 + 0. * I
579 %! 1. + I * 0.2 , 0.5541219664 - 0.1672121517 * I
580 %! 1. + I * 0.4 , 0.5857703552 - 0.3410940893 * I
581 %! 1. + I * 0.6 , 0.6395034233 - 0.5285979063 * I
582 %! 1. + I * 0.8 , 0.716688504 - 0.7372552987 * I
583 %! 1. + I * 1. , 0.8189576795 - 0.9755037374 * I
584 %! 1. + I * 1.2 , 0.9477661951 - 1.253049471 * I
585 %! 1. + I * 1.4 , 1.103540657 - 1.581252712 * I
586 %! 1. + I * 1.6 , 1.284098214 - 1.973449038 * I
587 %! 1. + I * 1.8 , 1.481835651 - 2.4449211 * I
588 %! 1. + I * 2. , 1.679032464 - 3.011729224 * I
589 %! ];
590 %! DN = [
591 %! -1. + I * 0. , 0.9895776106 + 0. * I
592 %! -1. + I * 0.2 , 0.9893361555 + 0.002756935338 * I
593 %! -1. + I * 0.4 , 0.9885716856 + 0.005949639805 * I
594 %! -1. + I * 0.6 , 0.9871564855 + 0.01008044183 * I
595 %! -1. + I * 0.8 , 0.9848512162 + 0.01579337596 * I
596 %! -1. + I * 1. , 0.9812582484 + 0.02396648455 * I
597 %! -1. + I * 1.2 , 0.9757399152 + 0.0358288294 * I
598 %! -1. + I * 1.4 , 0.9672786056 + 0.0531049859 * I
599 %! -1. + I * 1.6 , 0.954237868 + 0.0781744383 * I
600 %! -1. + I * 1.8 , 0.933957524 + 0.1141918269 * I
601 %! -1. + I * 2. , 0.9020917489 + 0.1650142936 * I
602 %! -0.8 + I * 0. , 0.992429635 + 0. * I
603 %! -0.8 + I * 0.2 , 0.9924147861 + 0.003020708044 * I
604 %! -0.8 + I * 0.4 , 0.99236555 + 0.00652359532 * I
605 %! -0.8 + I * 0.6 , 0.9922655715 + 0.0110676219 * I
606 %! -0.8 + I * 0.8 , 0.9920785856 + 0.01737733806 * I
607 %! -0.8 + I * 1. , 0.9917291795 + 0.02645738598 * I
608 %! -0.8 + I * 1.2 , 0.9910606387 + 0.03974949378 * I
609 %! -0.8 + I * 1.4 , 0.9897435004 + 0.05935252515 * I
610 %! -0.8 + I * 1.6 , 0.987077644 + 0.08832675281 * I
611 %! -0.8 + I * 1.8 , 0.9815667458 + 0.1310872821 * I
612 %! -0.8 + I * 2. , 0.970020127 + 0.1938136793 * I
613 %! -0.6 + I * 0. , 0.9953099088 + 0. * I
614 %! -0.6 + I * 0.2 , 0.995526009 + 0.002814772354 * I
615 %! -0.6 + I * 0.4 , 0.9962071136 + 0.006083312292 * I
616 %! -0.6 + I * 0.6 , 0.9974557125 + 0.01033463525 * I
617 %! -0.6 + I * 0.8 , 0.9994560563 + 0.01626207722 * I
618 %! -0.6 + I * 1. , 1.00249312 + 0.02484336286 * I
619 %! -0.6 + I * 1.2 , 1.006973922 + 0.0375167093 * I
620 %! -0.6 + I * 1.4 , 1.013436509 + 0.05645315628 * I
621 %! -0.6 + I * 1.6 , 1.022504295 + 0.08499262247 * I
622 %! -0.6 + I * 1.8 , 1.034670023 + 0.1283564595 * I
623 %! -0.6 + I * 2. , 1.049599899 + 0.194806122 * I
624 %! -0.4 + I * 0. , 0.9977686897 + 0. * I
625 %! -0.4 + I * 0.2 , 0.9981836165 + 0.002167241934 * I
626 %! -0.4 + I * 0.4 , 0.9994946045 + 0.004686808612 * I
627 %! -0.4 + I * 0.6 , 1.001910789 + 0.00797144174 * I
628 %! -0.4 + I * 0.8 , 1.005817375 + 0.01256717724 * I
629 %! -0.4 + I * 1. , 1.011836374 + 0.01925509038 * I
630 %! -0.4 + I * 1.2 , 1.020923572 + 0.02920828367 * I
631 %! -0.4 + I * 1.4 , 1.034513743 + 0.04425213602 * I
632 %! -0.4 + I * 1.6 , 1.054725746 + 0.06732276244 * I
633 %! -0.4 + I * 1.8 , 1.08462027 + 0.1033236812 * I
634 %! -0.4 + I * 2. , 1.128407402 + 0.1608240664 * I
635 %! -0.2 + I * 0. , 0.9994191176 + 0. * I
636 %! -0.2 + I * 0.2 , 0.9999683719 + 0.001177128019 * I
637 %! -0.2 + I * 0.4 , 1.001705496 + 0.00254669712 * I
638 %! -0.2 + I * 0.6 , 1.004913944 + 0.004334880912 * I
639 %! -0.2 + I * 0.8 , 1.010120575 + 0.006842775622 * I
640 %! -0.2 + I * 1. , 1.018189543 + 0.01050520136 * I
641 %! -0.2 + I * 1.2 , 1.030482479 + 0.01598431001 * I
642 %! -0.2 + I * 1.4 , 1.049126108 + 0.02433134655 * I
643 %! -0.2 + I * 1.6 , 1.077466003 + 0.0372877718 * I
644 %! -0.2 + I * 1.8 , 1.120863308 + 0.05789156398 * I
645 %! -0.2 + I * 2. , 1.188162088 + 0.09181238708 * I
646 %! 0. + I * 0. , 1. + 0. * I
647 %! 0. + I * 0.2 , 1.000596698 + 0. * I
648 %! 0. + I * 0.4 , 1.002484444 + 0. * I
649 %! 0. + I * 0.6 , 1.005973379 + 0. * I
650 %! 0. + I * 0.8 , 1.011641536 + 0. * I
651 %! 0. + I * 1. , 1.020441432 + 0. * I
652 %! 0. + I * 1.2 , 1.033885057 + 0. * I
653 %! 0. + I * 1.4 , 1.054361188 + 0. * I
654 %! 0. + I * 1.6 , 1.085694733 + 0. * I
655 %! 0. + I * 1.8 , 1.134186672 + 0. * I
656 %! 0. + I * 2. , 1.210701071 + 0. * I
657 %! 0.2 + I * 0. , 0.9994191176 + 0. * I
658 %! 0.2 + I * 0.2 , 0.9999683719 - 0.001177128019 * I
659 %! 0.2 + I * 0.4 , 1.001705496 - 0.00254669712 * I
660 %! 0.2 + I * 0.6 , 1.004913944 - 0.004334880912 * I
661 %! 0.2 + I * 0.8 , 1.010120575 - 0.006842775622 * I
662 %! 0.2 + I * 1. , 1.018189543 - 0.01050520136 * I
663 %! 0.2 + I * 1.2 , 1.030482479 - 0.01598431001 * I
664 %! 0.2 + I * 1.4 , 1.049126108 - 0.02433134655 * I
665 %! 0.2 + I * 1.6 , 1.077466003 - 0.0372877718 * I
666 %! 0.2 + I * 1.8 , 1.120863308 - 0.05789156398 * I
667 %! 0.2 + I * 2. , 1.188162088 - 0.09181238708 * I
668 %! 0.4 + I * 0. , 0.9977686897 + 0. * I
669 %! 0.4 + I * 0.2 , 0.9981836165 - 0.002167241934 * I
670 %! 0.4 + I * 0.4 , 0.9994946045 - 0.004686808612 * I
671 %! 0.4 + I * 0.6 , 1.001910789 - 0.00797144174 * I
672 %! 0.4 + I * 0.8 , 1.005817375 - 0.01256717724 * I
673 %! 0.4 + I * 1. , 1.011836374 - 0.01925509038 * I
674 %! 0.4 + I * 1.2 , 1.020923572 - 0.02920828367 * I
675 %! 0.4 + I * 1.4 , 1.034513743 - 0.04425213602 * I
676 %! 0.4 + I * 1.6 , 1.054725746 - 0.06732276244 * I
677 %! 0.4 + I * 1.8 , 1.08462027 - 0.1033236812 * I
678 %! 0.4 + I * 2. , 1.128407402 - 0.1608240664 * I
679 %! 0.6 + I * 0. , 0.9953099088 + 0. * I
680 %! 0.6 + I * 0.2 , 0.995526009 - 0.002814772354 * I
681 %! 0.6 + I * 0.4 , 0.9962071136 - 0.006083312292 * I
682 %! 0.6 + I * 0.6 , 0.9974557125 - 0.01033463525 * I
683 %! 0.6 + I * 0.8 , 0.9994560563 - 0.01626207722 * I
684 %! 0.6 + I * 1. , 1.00249312 - 0.02484336286 * I
685 %! 0.6 + I * 1.2 , 1.006973922 - 0.0375167093 * I
686 %! 0.6 + I * 1.4 , 1.013436509 - 0.05645315628 * I
687 %! 0.6 + I * 1.6 , 1.022504295 - 0.08499262247 * I
688 %! 0.6 + I * 1.8 , 1.034670023 - 0.1283564595 * I
689 %! 0.6 + I * 2. , 1.049599899 - 0.194806122 * I
690 %! 0.8 + I * 0. , 0.992429635 + 0. * I
691 %! 0.8 + I * 0.2 , 0.9924147861 - 0.003020708044 * I
692 %! 0.8 + I * 0.4 , 0.99236555 - 0.00652359532 * I
693 %! 0.8 + I * 0.6 , 0.9922655715 - 0.0110676219 * I
694 %! 0.8 + I * 0.8 , 0.9920785856 - 0.01737733806 * I
695 %! 0.8 + I * 1. , 0.9917291795 - 0.02645738598 * I
696 %! 0.8 + I * 1.2 , 0.9910606387 - 0.03974949378 * I
697 %! 0.8 + I * 1.4 , 0.9897435004 - 0.05935252515 * I
698 %! 0.8 + I * 1.6 , 0.987077644 - 0.08832675281 * I
699 %! 0.8 + I * 1.8 , 0.9815667458 - 0.1310872821 * I
700 %! 0.8 + I * 2. , 0.970020127 - 0.1938136793 * I
701 %! 1. + I * 0. , 0.9895776106 + 0. * I
702 %! 1. + I * 0.2 , 0.9893361555 - 0.002756935338 * I
703 %! 1. + I * 0.4 , 0.9885716856 - 0.005949639805 * I
704 %! 1. + I * 0.6 , 0.9871564855 - 0.01008044183 * I
705 %! 1. + I * 0.8 , 0.9848512162 - 0.01579337596 * I
706 %! 1. + I * 1. , 0.9812582484 - 0.02396648455 * I
707 %! 1. + I * 1.2 , 0.9757399152 - 0.0358288294 * I
708 %! 1. + I * 1.4 , 0.9672786056 - 0.0531049859 * I
709 %! 1. + I * 1.6 , 0.954237868 - 0.0781744383 * I
710 %! 1. + I * 1.8 , 0.933957524 - 0.1141918269 * I
711 %! 1. + I * 2. , 0.9020917489 - 0.1650142936 * I
712 %! ];
713 %! tol = 1e-9;
714 %! for x = 0:10
715 %! for y = 0:10
716 %! ur = -1 + x * 0.2;
717 %! ui = y * 0.2;
718 %! ii = 1 + y + x*11;
719 %! [sn, cn, dn] = ellipj (ur + I * ui, m);
720 %! assert (sn, SN(ii, 2), tol);
721 %! assert (cn, CN(ii, 2), tol);
722 %! assert (dn, DN(ii, 2), tol);
723 %! endfor
724 %! endfor
725 
726 ## tests taken from test_ellipj.m
727 %!test
728 %! u1 = pi/3; m1 = 0;
729 %! res1 = [sin(pi/3), cos(pi/3), 1];
730 %! [sn,cn,dn] = ellipj (u1,m1);
731 %! assert ([sn,cn,dn], res1, 10*eps);
732 
733 %!test
734 %! u2 = log (2); m2 = 1;
735 %! res2 = [ 3/5, 4/5, 4/5 ];
736 %! [sn,cn,dn] = ellipj (u2,m2);
737 %! assert ([sn,cn,dn], res2, 10*eps);
738 
739 %!test
740 %! u3 = log (2)*1i; m3 = 0;
741 %! res3 = [3i/4,5/4,1];
742 %! [sn,cn,dn] = ellipj (u3,m3);
743 %! assert ([sn,cn,dn], res3, 10*eps);
744 
745 %!test
746 %! u4 = -1; m4 = tan (pi/8)^4;
747 %! res4 = [-0.8392965923,0.5436738271,0.9895776106];
748 %! [sn,cn,dn] = ellipj (u4, m4);
749 %! assert ([sn,cn,dn], res4, 1e-10);
750 
751 %!test
752 %! u5 = -0.2 + 0.4i; m5 = tan (pi/8)^4;
753 %! res5 = [ -0.2152524522 + 0.402598347i, ...
754 %! 1.059453907 + 0.08179712295i, ...
755 %! 1.001705496 + 0.00254669712i ];
756 %! [sn,cn,dn] = ellipj (u5,m5);
757 %! assert ([sn,cn,dn], res5, 1e-9);
758 
759 %!test
760 %! u6 = 0.2 + 0.6i; m6 = tan (pi/8)^4;
761 %! res6 = [ 0.2369100139 + 0.624633635i, ...
762 %! 1.16200643 - 0.1273503824i, ...
763 %! 1.004913944 - 0.004334880912i ];
764 %! [sn,cn,dn] = ellipj (u6,m6);
765 %! assert ([sn,cn,dn], res6, 1e-8);
766 
767 %!test
768 %! u7 = 0.8 + 0.8i; m7 = tan (pi/8)^4;
769 %! res7 = [0.9588386397 + 0.6107824358i, ...
770 %! 0.9245978896 - 0.6334016187i, ...
771 %! 0.9920785856 - 0.01737733806i ];
772 %! [sn,cn,dn] = ellipj (u7,m7);
773 %! assert ([sn,cn,dn], res7, 1e-10);
774 
775 %!test
776 %! u = [0,pi/6,pi/4,pi/2]; m=0;
777 %! res = [0,1/2,1/sqrt(2),1;1,cos(pi/6),1/sqrt(2),0;1,1,1,1];
778 %! [sn,cn,dn] = ellipj (u,m);
779 %! assert ([sn;cn;dn], res, 100*eps);
780 %! [sn,cn,dn] = ellipj (u',0);
781 %! assert ([sn,cn,dn], res', 100*eps);
782 
783 ## FIXME: need to check [real,complex]x[scalar,rowvec,colvec,matrix]x[u,m]
784 
785 ## One test for u column vector x m row vector
786 %!test
787 %! u = [0,pi/6,pi/4,pi/2]'; m = [0 0 0 0];
788 %! res = [0,1/2,1/sqrt(2),1;1,cos(pi/6),1/sqrt(2),0;1,1,1,1]';
789 %! [sn,cn,dn] = ellipj (u,m);
790 %! assert (sn, repmat (res(:,1), [1,4]), 100*eps);
791 %! assert (cn, repmat (res(:,2), [1,4]), 100*eps);
792 %! assert (dn, repmat (res(:,3), [1,4]), 100*eps);
793 
794 %!test
795 %! ## Test Jacobi elliptic functions
796 %! ## against "exact" solution from Mathematica 3.0
797 %! ## David Billinghurst <David.Billinghurst@riotinto.com>
798 %! ## 1 February 2001
799 %! u = [ 0.25; 0.25; 0.20; 0.20; 0.672; 0.5];
800 %! m = [ 0.0; 1.0; 0.19; 0.81; 0.36; 0.9999999999];
801 %! S = [ sin(0.25);
802 %! tanh(0.25);
803 %! 0.19842311013970879516;
804 %! 0.19762082367187648571;
805 %! 0.6095196917919021945;
806 %! 0.4621171572617320908 ];
807 %! C = [ cos(0.25);
808 %! sech(0.25);
809 %! 0.9801164570409401062;
810 %! 0.9802785369736752032;
811 %! 0.7927709286533560550;
812 %! 0.8868188839691764094 ];
813 %! D = [ 1.0;
814 %! sech(0.25);
815 %! 0.9962526643271134302;
816 %! 0.9840560289645665155;
817 %! 0.9307281387786906491;
818 %! 0.8868188839812167635 ];
819 %! [sn,cn,dn] = ellipj (u,m);
820 %! assert (sn, S, 8*eps);
821 %! assert (cn, C, 8*eps);
822 %! assert (dn, D, 8*eps);
823 
824 %!test <*43344>
825 %! ## Test continuity of dn when cn is near zero
826 %! m = 0.5;
827 %! u = ellipke (0.5);
828 %! x = [-1e-3, -1e-12, 0, 1e-12, 1e-3];
829 %! [~, ~, dn] = ellipj (u + x, m);
830 %! D = 1/sqrt (2) * ones (size (x));
831 %! assert (dn, D, 1e-6);
832 
833 %!error ellipj ()
834 %!error ellipj (1)
835 %!error ellipj (1,2,3,4)
836 %!warning <required value 0 <= M <= 1> ellipj (1,2);
837 ## FIXME: errors commented out until lasterr() truly returns the last error.
838 %!#error <M must be a scalar or matrix> ellipj (1, "1")
839 %!#error <U must be a scalar or matrix> ellipj ("1", 1)
840 %!#error <U must be a scalar or matrix> ellipj ({1}, 1)
841 %!#error <U must be a scalar or matrix> ellipj ({1, 2}, 1)
842 %!#error <M must be a scalar or matrix> ellipj (1, {1, 2})
843 %!#error <U must be a scalar or matrix> ellipj ("1", [1, 2])
844 %!#error <U must be a scalar or matrix> ellipj ({1}, [1, 2])
845 %!#error <U must be a scalar or matrix> ellipj ({1}, [1, 2])
846 %!#error <U must be a scalar or matrix> ellipj ("1,2", [1, 2])
847 %!#error <U must be a scalar or matrix> ellipj ({1, 2}, [1, 2])
848 %!error <Invalid size combination for U and M> ellipj ([1:4], [1:3])
849 %!error <Invalid size combination for U and M> ellipj (complex (1:4,1:4), [1:3])
850 
851 */
852 
853 OCTAVE_END_NAMESPACE(octave)
T * fortran_vec()
Size of the specified dimension.
Definition: Array-base.cc:1764
const T * data() const
Size of the specified dimension.
Definition: Array.h:663
const dim_vector & dims() const
Return a const-reference so that dims ()(i) works efficiently.
Definition: Array.h:503
octave_idx_type numel() const
Number of elements in the array.
Definition: Array.h:414
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:94
octave_idx_type ndims() const
Number of dimensions.
Definition: dim-vector.h:257
bool is_scalar_type() const
Definition: ov.h:744
bool isreal() const
Definition: ov.h:738
Complex xcomplex_value(const char *fmt,...) const
double xdouble_value(const char *fmt,...) const
ComplexNDArray xcomplex_array_value(const char *fmt,...) const
NDArray xarray_value(const char *fmt,...) const
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
void print_usage(void)
Definition: defun-int.h:72
#define DEFUN(name, args_name, nargout_name, doc)
Macro to define a builtin function.
Definition: defun.h:56
void() error(const char *fmt,...)
Definition: error.cc:988
void ellipj(double u, double m, double &sn, double &cn, double &dn, double &err)
Definition: lo-specfun.cc:1487
T octave_idx_type m
Definition: mx-inlines.cc:781
std::complex< double > Complex
Definition: oct-cmplx.h:33
octave_value_list ovl(const OV_Args &... args)
Construct an octave_value_list with less typing.
Definition: ovl.h:219