/* nag_stat_prob_multi_students_t (g01hdc) Example Program.
*
* Copyright 2024 Numerical Algorithms Group.
*
* Mark 30.1, 2024.
*/
#include <math.h>
#include <nag.h>
#include <stdio.h>
#include <string.h>
#define RC(I, J) rc[(I - 1) * tdrc + J - 1]
int main(void) {
/* Integer scalar and array declarations */
Integer exit_status = 0;
Integer fmax, i, ierr, j, tdrc, n, nsampl, numsub;
Nag_Boolean iscov;
/* Double scalar and array declarations */
double epsabs, epsrel, errest, nu, prob;
double *a = 0, *b = 0, *delta = 0, *rc = 0;
/* NAG structures */
Nag_TailProbability *tail = 0;
NagError fail;
/* Character scalar and array declarations */
char nag_enum_arg[30 + 1];
printf("nag_stat_prob_multi_students_t (g01hdc) Example Program Results\n\n");
/* Skip heading in data file */
scanf("%*[^\n] ");
scanf("%" NAG_IFMT, &n);
scanf("%30s%*[^\n] ", nag_enum_arg);
/* nag_enum_name_to_value (x04nac).
* Converts NAG enum member name to value
*/
iscov = (Nag_Boolean)nag_enum_name_to_value(nag_enum_arg);
tdrc = n;
numsub = 200;
nsampl = 8;
fmax = 25000;
epsabs = 0.0;
epsrel = 1.0e-3;
if (!(tail = NAG_ALLOC(n, Nag_TailProbability)) ||
!(a = NAG_ALLOC(n, double)) || !(b = NAG_ALLOC(n, double)) ||
!(delta = NAG_ALLOC(n, double)) || !(rc = NAG_ALLOC(tdrc * n, double))) {
printf("Allocation failure\n");
exit_status = -1;
goto END;
}
while (1) {
ierr = scanf("%*[^\n] ");
if (ierr == EOF)
break;
scanf("%lf%*[^\n] ", &nu);
/* read NAG enum member name as string and convert using
* nag_enum_name_to_value (x04nac).
*/
for (j = 0; j < n; j++) {
scanf("%30s", nag_enum_arg);
tail[j] = (Nag_TailProbability)nag_enum_name_to_value(nag_enum_arg);
}
scanf("%*[^\n]");
for (j = 0; j < n; j++)
scanf("%lf", &a[j]);
scanf("%*[^\n] ");
for (j = 0; j < n; j++)
scanf("%lf", &b[j]);
scanf("%*[^\n] ");
for (j = 0; j < n; j++)
scanf("%lf", &delta[j]);
scanf("%*[^\n] ");
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
scanf("%lf", &RC(i, j));
scanf("%*[^\n] ");
/* nag_stat_prob_multi_students_t (g01hdc). Multivariate Student's t
* probability */
INIT_FAIL(fail);
prob = nag_stat_prob_multi_students_t(n, tail, a, b, nu, delta, iscov, rc,
tdrc, epsabs, epsrel, numsub, nsampl,
fmax, &errest, &fail);
if (fail.code == NE_NOERROR) {
printf("%24s%24.7e\n", "Probability: ", prob);
printf("%24s%24.2e\n\n", "Error estimate:", errest);
} else {
printf("nag_stat_prob_multi_students_t (g01hdc) failed.\n%s\n",
fail.message);
exit_status = 1;
}
}
END:
NAG_FREE(a);
NAG_FREE(b);
NAG_FREE(delta);
NAG_FREE(rc);
NAG_FREE(tail);
return exit_status;
}