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