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