$title Test extrinsic functions in cppcclib (CPPLIB05,SEQ=656) $onText Here we test that the extrinsic function in cppcclib for the tri-variate normal distribution PDF works as expected, by comparing the function values to precomputed ones and derivative values to numeric derivatives. Contributor: Steve $offText $onDollar $funcLibIn mvnLib cppcclib function xdf 'PDF of trivariate normal' / mvnLib.pdfTVN /; $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,'pdf'); 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