New body of code in development version: complex special functions

Ethan A Merritt <[email protected]>
Newsgroups gmane.comp.graphics.gnuplot.devel
Organization University of Washington
Message-ID <1815811.gQJb5C6hv9@stonelion>
Since splitting off the stable branch for version 5.4 a year ago,
I have been working on new directions for development.
One of these is the expansion of support for complex functions
and in particular for complex special functions.
These are generally incomplete or altogether missing in other packages,
so it is an area where gnuplot can fill a gap.

This work is now merged into the main git repository.
Demos for some of the additions are in the on-line collection:

    http:/gnuplot.info/demo_5.5/

You can exercise them interactively in a new demo

    load 'special_functions.dem'

Here is a summary from the documentation.
The full manual contains additional information about the implementations
with references.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
This version of gnuplot provides a larger set of complex-valued functions
and updated versions of functions that were present in earlier versions. 

*  Updated incomplete gamma function with improved domain and precision. 
   Complex arguments accepted. 
*  Updated incomplete beta function with improved domain and precision. 
*  New function for the inverse incomplete gamma function. 
*  New function for the inverse incomplete beta function. 
*  New complex function LambertW(z,k) returns the kth branch of multivalued 
   function W_k(z). 
   Note that the older function lambertw(x) = real(LambertW( real(z), 0 )). 
*  New complex function lnGamma(z). 
   Note that existing function lgamma(x) = real(lnGamma(real(z)). 
*  Synchrotron function F(x). 
*  acosh(z) domain extended to cover negative real axis. 
*  asin(z) asinh(z) improved precision for complex arguments. 
*  Complex function conj(z) returns the complex conjugate of z. 
*  Predefined variable I = sqrt(-1) = {0,1} for convenience.

Additional special functions are supported if a suitable external
library is found at build time.
 *  Complex Bessel functions Iν(z), Jν(z), Kν(z), Yν(z) of order ν (real)
    with complex argument z.
 *  Complex Hankel functions H1ν(z), H2ν(z) of order ν with complex z.
 *  Complex Airy functions Ai(z), Bi(z).
 *  Complex exponential integral of order n.
 *  Fresnel integrals C(x) and S(x).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


There is room for further development.
Please add comments and suggestions!

- Existing built-in functions, old and new, are inconsistent about how
  they return very large values (floating overflow)
    Some return VERYLARGE (system-dependent but generally 9.e+307)
    Some return NaN
    Some return +Inf
  It would be nice to agree on a uniform convention and on how
  to handle it while plotting.

- Support for complex igamma(z) in the domain real(z) < 0 

- Support for complex elliptic integrals

- Modify "fit" to automatically handle complex-valued functions

- Support is dependent on external libraries found during configuration
  (libcerf libopenspecfun libamos).  Many linux distros have packages
  for libcerf and libopenspecfun.  I don't know how available they are
  for Windows or OSX. Much of the code in these libraries originally
  came from netlib and could be included in the gnuplot repository if
  we wanted to do so.

	Ethan

_______________________________________________
gnuplot-beta mailing list
[email protected]
Membership management via: https://lists.sourceforge.net/lists/listinfo/gnuplot-beta
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.