| 
0
 | 
     1 /*
 | 
| 
 | 
     2  * Copyright 1996-2006 Catherine Loader.
 | 
| 
 | 
     3  */
 | 
| 
 | 
     4 /*
 | 
| 
 | 
     5  *   Headers for math utility functions.
 | 
| 
 | 
     6  */
 | 
| 
 | 
     7 
 | 
| 
 | 
     8 #ifndef I_MUT_H
 | 
| 
 | 
     9 #define I_MUT_H
 | 
| 
 | 
    10 
 | 
| 
 | 
    11 #include <stdio.h>
 | 
| 
 | 
    12 #include <stdlib.h>
 | 
| 
 | 
    13 #include <string.h>
 | 
| 
 | 
    14 #include <math.h>
 | 
| 
 | 
    15 
 | 
| 
 | 
    16 typedef int (*prf)();
 | 
| 
 | 
    17 extern prf mut_printf;
 | 
| 
 | 
    18 extern void mut_redirect();
 | 
| 
 | 
    19 
 | 
| 
 | 
    20 typedef struct {
 | 
| 
 | 
    21   double *Z;   /* jacobian matrix, length p*p          */
 | 
| 
 | 
    22   double *Q;   /* eigenvalue matrix, length p*p        */
 | 
| 
 | 
    23   double *wk;  /* work vector in eig_solve, length p   */
 | 
| 
 | 
    24   double *dg;  /* diag vector in eigd, length p        */
 | 
| 
 | 
    25   int p;       /* dimension */
 | 
| 
 | 
    26   int st;      /* status    */
 | 
| 
 | 
    27   int sm;      /* requested decomposition */
 | 
| 
 | 
    28 } jacobian;
 | 
| 
 | 
    29 
 | 
| 
 | 
    30 /* m_jacob.c */
 | 
| 
 | 
    31 extern int jac_reqd();
 | 
| 
 | 
    32 extern double *jac_alloc();
 | 
| 
 | 
    33 extern void jacob_dec(),   chol_dec(),   eig_dec();
 | 
| 
 | 
    34 extern int  jacob_solve(), chol_solve(), eig_solve();
 | 
| 
 | 
    35 extern int  jacob_hsolve(),chol_hsolve(),eig_hsolve();
 | 
| 
 | 
    36 extern int  jacob_isolve(),chol_isolve(),eig_isolve();
 | 
| 
 | 
    37 extern double jacob_qf(),  chol_qf(),    eig_qf();
 | 
| 
 | 
    38 extern int  jacob_mult(),  chol_mult();
 | 
| 
 | 
    39 
 | 
| 
 | 
    40 /* m_max.c */
 | 
| 
 | 
    41 extern double max_grid(), max_golden(), max_quad(), max_nr();
 | 
| 
 | 
    42 
 | 
| 
 | 
    43 /* maxbv.c */
 | 
| 
 | 
    44 extern double maxbvgrid(), maxbvstep(), maxquadstep(), maxbv(), maxbvq();
 | 
| 
 | 
    45 
 | 
| 
 | 
    46 /* quadmin.c */
 | 
| 
 | 
    47 extern void quadmin(), project(), resproj(), conquadmin();
 | 
| 
 | 
    48 
 | 
| 
 | 
    49 /* m_qr.c */
 | 
| 
 | 
    50 extern void qr(), qrinvx(), qrtinvx(), qrsolv();
 | 
| 
 | 
    51 
 | 
| 
 | 
    52 /* m_svd.c */
 | 
| 
 | 
    53 extern void svd(), hsvdsolve();
 | 
| 
 | 
    54 extern int svdsolve();
 | 
| 
 | 
    55 
 | 
| 
 | 
    56 /* m_solve.c */
 | 
| 
 | 
    57 extern double solve_bisect(), solve_secant(), solve_nr(), solve_fp();
 | 
| 
 | 
    58 
 | 
| 
 | 
    59 /* m_vector.c */
 | 
| 
 | 
    60 extern void setzero(), unitvec(), addouter();
 | 
| 
 | 
    61 extern void matrixmultiply(), multmatscal(), transpose();
 | 
| 
 | 
    62 extern double innerprod(), m_trace(), vecsum();
 | 
| 
 | 
    63 
 | 
| 
 | 
    64 #define BDF_NONE  0
 | 
| 
 | 
    65 #define BDF_EXPLEFT  1
 | 
| 
 | 
    66 #define BDF_EXPRIGHT 2
 | 
| 
 | 
    67 
 | 
| 
 | 
    68 /* return codes for functions optimized by max_nr */
 | 
| 
 | 
    69 #define NR_OK 0
 | 
| 
 | 
    70 #define NR_INVALID 1
 | 
| 
 | 
    71 #define NR_BREAK   2
 | 
| 
 | 
    72 #define NR_REDUCE  3
 | 
| 
 | 
    73 #define NR_NCON  10
 | 
| 
 | 
    74 #define NR_NDIV  11
 | 
| 
 | 
    75 
 | 
| 
 | 
    76 
 | 
| 
 | 
    77 /* jacobian status definitions */
 | 
| 
 | 
    78 #define JAC_RAW 0
 | 
| 
 | 
    79 #define JAC_CHOL 1
 | 
| 
 | 
    80 #define JAC_EIG  2
 | 
| 
 | 
    81 #define JAC_EIGD 3
 | 
| 
 | 
    82 
 | 
| 
 | 
    83 /*  Numerical Integration Stuff
 | 
| 
 | 
    84  */
 | 
| 
 | 
    85 #define MXRESULT 5
 | 
| 
 | 
    86 #define MXIDIM  10  /* max. dimension */
 | 
| 
 | 
    87 extern void simpsonm(), simpson4(), integ_disc(), integ_circ();
 | 
| 
 | 
    88 extern void integ_sphere(), monte(), rn3();
 | 
| 
 | 
    89 extern double simpson(), sptarea();
 | 
| 
 | 
    90 
 | 
| 
 | 
    91 /*  Density, distribution stuff
 | 
| 
 | 
    92  */
 | 
| 
 | 
    93 
 | 
| 
 | 
    94 #ifndef PI
 | 
| 
 | 
    95 #define PI          3.141592653589793238462643
 | 
| 
 | 
    96 #endif
 | 
| 
 | 
    97 #define S2PI        2.506628274631000502415765       /* sqrt(2*pi) */
 | 
| 
 | 
    98 #define PIx2        6.283185307179586476925286       /* 2*pi */
 | 
| 
 | 
    99 #define SQRPI       1.772453850905516027298          /* sqrt(pi)   */
 | 
| 
 | 
   100 #define HF_LG_PIx2  0.918938533204672741780329736406 /* 0.5*log(2*pi) */
 | 
| 
 | 
   101 #define SQRT2       1.4142135623730950488            /* sqrt(2.0) */
 | 
| 
 | 
   102 #define gold_rat    0.6180339887498948482045870      /* (sqrt(5.0)-1)/2 */
 | 
| 
 | 
   103 
 | 
| 
 | 
   104 #define LOG_ZERO -1e100
 | 
| 
 | 
   105 #define D_0 ((give_log) ? LOG_ZERO : 0.0)
 | 
| 
 | 
   106 #define D_1 ((give_log) ? 0.0 : 1.0)
 | 
| 
 | 
   107 #define DEXP(x)   ((give_log) ? (x) : exp(x))
 | 
| 
 | 
   108 #define FEXP(f,x) ((give_log) ? -0.5*log(f)+(x) : exp(x)/sqrt(f))
 | 
| 
 | 
   109 
 | 
| 
 | 
   110 #define INVALID_PARAMS 0.0
 | 
| 
 | 
   111 
 | 
| 
 | 
   112 extern double stirlerr(), bd0();
 | 
| 
 | 
   113 extern double dbinom_raw(), dpois_raw();
 | 
| 
 | 
   114 extern double dbinom(), dpois(), dnbinom(), dbeta(), dgamma(), dt(), df(), dhyper();
 | 
| 
 | 
   115 extern double dchisq();
 | 
| 
 | 
   116 
 | 
| 
 | 
   117 extern double igamma(), ibeta();
 | 
| 
 | 
   118 extern double pf(), pchisq();
 | 
| 
 | 
   119 #define pchisq(x,df) igamma((x)/2.0,(df)/2.0)
 | 
| 
 | 
   120 
 | 
| 
 | 
   121 /* order.c */
 | 
| 
 | 
   122 extern void mut_order();
 | 
| 
 | 
   123 
 | 
| 
 | 
   124 /* erf.c */
 | 
| 
 | 
   125 extern double mut_erf(), mut_erfc(), mut_pnorm();
 | 
| 
 | 
   126 
 | 
| 
 | 
   127 /* lgamma.c */
 | 
| 
 | 
   128 extern double mut_lgamma(), mut_lgammai();
 | 
| 
 | 
   129 
 | 
| 
 | 
   130 /* math.c */
 | 
| 
 | 
   131 extern double mut_exp(), mut_daws(), ptail(), logit(), expit();
 | 
| 
 | 
   132 extern int factorial();
 | 
| 
 | 
   133 #endif  /* define I_MUT_H */
 |