Implementation of the Fresnel Integrals



I have done an implementation of the Fresnel Integrals S(z) and C(z).

Following features are available:

1. Numerical evaluation for real and complex values in float and bigfloat
   precision

   For the numerical evaluation new routines are implemented which are 
   optimized for the Fresnel Integrals. Only for complex values the expansion 
   in continued fractions is not implemented. For this case the Fresnel 
   Integrals are calculated via the Error function Erf. Unfortunately, the
   accuracy of the results for this case is not as good as for other
   numerical evaluations. 

2. Mirror symmetry

   To get mirror symmetry the property COMMUTES-WITH-CONJUGATE is set to T.

3. Reflection rule

   The property REFLECTION-RULE is set to ODD-FUNCION-REFLECT.
   Therefore the following simplifications are done:

   fresnel_s(-x) = -fresnel_s(x)
   fresnel_c(-x) = -fresnel_c(x)

   The simplification is applied when the flag TRIGSIGN is TRUE. Perhaps a
   different flag should be introduced to switch of the simplification 
   independently from the trig functions.

4. Implementation of the derivatives.

5. Implementation of the integrals for the elementary function.

6. Specific values for 0, INF, MINF

7. Handling of arguments which are a taylor expansion.

   taylor(fresnel_s(x),x,0,12) and fresnel_s(taylor(x,x,0,12)) both give
   the taylor expansion of the Fresnel Integral up to an order O(x^12).

8. Simplification for pure imaginary arguments.

   fresnel_s(%i*x) = -%i*fresnel_s(x)
   fresnel_c(%i*x) =  %i*fresnel_c(x)

   The simplification depends on the known flag %IARGS which is by default set
   to TRUE. (See comment to point 3.)

9. Change representation to Error function Erf

   The change depends on the flag ERF_REPRESENTATION.

10. Change representation to Hypergeomentric 1F2 function

   The change depends on the flag HYPERGEOMETRIC_REPRESENTATION.
   This feature is implemented to do in the future more general algorithm
   for the integration of special functions with the help of the Hypergeometric
   functions. Perhaps it is more useful for this case to have the 
   Hypergeometric function on the property list. This can be changed.

This time I had a look at the taylor code and have implemented more
simplifications for odd functions and for pure imaginary arguments. This works
like the simplification for the trig functions.

Examples for all features can be found in the test file rtest_gamma.mac.

Dieter Kaiser