HypergeometricFunctions       package:fOptions       R Documentation

_C_o_n_f_l_u_e_n_t _H_y_p_e_r_g_e_o_m_e_t_r_i_c _F_u_n_c_t_i_o_n_s

_D_e_s_c_r_i_p_t_i_o_n:

     A collection and description of special mathematical functions
     which compute the confluent hypergeometric  and related 
     functions. For example, these functions  are required to valuate
     Asian Options based on the  theory of exponential Brownian motion.           


     The functions are:

       'kummerM'     the Confluent Hypergeometric Function of the 1st Kind,
       'kummerU'     the Confluent Hypergeometric Function of the 2nd Kind,
       'whittakerM'  the Whittaker M Function,
       'whittakerW'  the Whittaker W Function,
       'hermiteH'    the Hermite Polynomials.

_U_s_a_g_e:

     kummerM(x, a, b, lnchf = 0, ip = 0) 
     kummerU(x, a, b, ip = 0)
     whittakerM(x, kappa, mu, ip = 0) 
     whittakerW(x, kappa, mu, ip = 0)
     hermiteH(x, n, ip = 0)

_A_r_g_u_m_e_n_t_s:

       x: [kummer*] - 
           a complex numeric value or vector. 

    a, b: [kummer*] - 
           complex numeric indexes of the Kummer functions. 

      ip: an integer value that specifies how many array positions are 
          desired, usually 10 is sufficient. Setting 'ip=0' causes  the
          function to estimate the number of array positions.    

kappa, mu: complex numeric indexes of the Whittaker functions. 

   lnchf: an integer value which selects how the result should be 
          represented.  A '0' will return the value in standard 
          exponential form, a '1' will return the LOG of the result. 

       n: [hermiteH] - 
           the index of the Hermite polynomial. 

_D_e_t_a_i_l_s:

     The functions use the TOMS707 Algorithm by M. Nardin, W.F. Perger 
      and A. Bhalla (1989).     A numerical evaluator for the confluent
     hypergeometric function for  complex arguments with large
     magnitudes using a direct summation of  the Kummer series. The
     method used allows an accuracy of up to thirteen       decimal
     places through the use of large real arrays and a single final 
     division.  

     The confluent hypergeometric function is the solution to   the
     differential equation:                                

     zf"(z) + (a-z)f'(z) - bf(z) = 0    

     The Whittaker functions and the hermite Polynomials are dervived
     from Kummer's functions.

_V_a_l_u_e:

     The functions return the values of the selected special
     mathematical function.

_A_u_t_h_o_r(_s):

     Diethelm Wuertz for this R-Port.

_R_e_f_e_r_e_n_c_e_s:

     Abramowitz M., Stegun I.A. (1972);  _Handbook of Mathematical
     Functions with Formulas, Graphs,  and Mathematical Tables_,  9th
     printing, New York, Dover Publishing.  

     Weisstein E.W. (2004); _MathWorld - A Wolfram Web Resource_,
     http://mathworld.wolfram.com

_E_x_a_m_p_l_e_s:

     ## Examples:

     ## kummerM - 
     ## Abramowitz-Stegun: Formula 13.6.3/13.6.21
        x = c(0.001, 0.01, 0.1, 1, 10, 100, 1000)  
        nu = 1; a = nu+1/2; b = 2*nu+1
        M = Re ( kummerM(x = 2*x, a = a, b = b) )
        Bessel = gamma(1+nu) * exp(x)*(x/2)^(-nu) * besselI(x, nu)
        cbind(x, M, Bessel) 

     ## kummerM -
     ## Abramowitz-Stegun: Formula 13.6.14
        x = c(0.001, 0.01, 0.1, 1, 10, 100, 1000)  
        M = Re ( kummerM(2*x, a = 1, b = 2) )
        Sinh = exp(x)*sinh(x)/(x)
        cbind(x, M, Sinh)
        # Now the same for complex x:
        y = rep(1, length = length(x))
        x = complex(real = x, imag = y)
        M = kummerM(2*x, a = 1, b = 2)
        Sinh = exp(x)*sinh(x)/(x)
        cbind(x, M, Sinh)

     ## kummerU -
     ## Abramowitz-Stegun: Formula 13.1.3
        x = c(0.001, 0.01, 0.1, 1, 10, 100, 1000) 
        a = 1/3; b = 2/3
        U = Re ( kummerU(x, a = a, b = b) )
        cbind(x, U)
      
     ## whittakerM - 
     ## Abramowitz-Stegun: Example 13.
        AS = c(1.10622, 0.57469)
        W = c(
          whittakerM(x = 1, kappa = 0, mu = -0.4),
          whittakerW(x = 1, kappa = 0, mu = -0.4) )
        data.frame(AS, W)

     ## kummerM
     ## Abramowitz-Stegun: Example 17.
        x = seq(0, 16, length = 200)
        plot(x = x, y = kummerM(x, -4.5, 1), type = "l", ylim = c(-25,125),
          main = "Figure 13.2:  M(-4.5, 1, x)")
        lines(x = c(0, 16), y = c(0, 0), col = "red")

