cpplib04.gms : Test extrinsic functions in cppcclib

Description

Here we test that the extrinsic function in cppcclib for the tri-variate
normal distribution CDF works as expected, by comparing the function
values to precomputed ones and derivative values to numeric derivatives.

Note that both the GAMS extrinsic values and the precomputed values for the
CDF are computed via an iterative approximation scheme that has
low precision compared to other functions (e.g. uni- or bi-variate
normal CDF).  Precision depends on the inputs.  For the interesting
case (x/y/z not far from zero, r/s/t closer to zero so the covariance
matrix has nice rank) precision better than 1e-8 is not assured.

Contributor: Steve


Small Model of Type : GAMS


Category : GAMS Test library


Main file : cpplib04.gms

$Title Test extrinsic functions in cppcclib (CPPLIB04,SEQ=655)

$ontext
Here we test that the extrinsic function in cppcclib for the tri-variate
normal distribution CDF works as expected, by comparing the function
values to precomputed ones and derivative values to numeric derivatives.

Note that both the GAMS extrinsic values and the precomputed values for the
CDF are computed via an iterative approximation scheme that has
low precision compared to other functions (e.g. uni- or bi-variate
normal CDF).  Precision depends on the inputs.  For the interesting
case (x/y/z not far from zero, r/s/t closer to zero so the covariance
matrix has nice rank) precision better than 1e-8 is not assured.

Contributor: Steve
$offtext
$ondollar

$funclibin mvnLib cppcclib

function xdf    'CDF of trivariate normal'  / mvnLib.cdfTVN /;

$if not set INFILE $set INFILE tvnInit

$macro f0         xdf.value(      data(T,'x'),data(T,'y'),data(T,'z'),data(T,'r'),data(T,'s'),data(T,'t'))
$macro f1(j)      xdf.grad (j:    data(T,'x'),data(T,'y'),data(T,'z'),data(T,'r'),data(T,'s'),data(T,'t'))
$macro f1n(j)     xdf.gradn(j:    data(T,'x'),data(T,'y'),data(T,'z'),data(T,'r'),data(T,'s'),data(T,'t'))
$macro f2(j1,j2)  xdf.hess (j1:j2:data(T,'x'),data(T,'y'),data(T,'r'),data(T,'r'),data(T,'s'),data(T,'t'))
$macro f2n(j1,j2) xdf.hessn(j1:j2:data(T,'x'),data(T,'y'),data(T,'r'),data(T,'r'),data(T,'s'),data(T,'t'))

$include extrtest3a.inc

fdata(T, 'f_') = data(T,'cdf');

scalar
 aeps0       'absolute error tolerance: function' / 1e-7 /
 reps0       'relative error tolerance: function' / 1e-8 /
 aeps1       'absolute error tolerance: grad'     / 2e-2 /
 reps1       'relative error tolerance: grad'     / 2e-2 /
 aeps2       'absolute error tolerance: hess'     / 1e-2 /
 reps2       'relative error tolerance: hess'     / 1e-2 /
 aepsr       'absolute error tolerance: hess Xr'  / .01 /
 repsr       'relative error tolerance: hess Xr'  / .15 /
 ;

$include extrtest3b.inc