463 const double lambda2 = 0.3585685828003180919906451539079374954541;
464 const double lambda4 = 0.9486832980505137995996680633298155601160;
465 const double lambda5 = 0.6882472016116852977216287342936235251269;
466 const double weight2 = 980. / 6561.;
467 const double weight4 = 200. / 19683.;
468 const double weightE2 = 245. / 486.;
469 const double weightE4 = 25. / 729.;
470 const double ratio = (lambda2 * lambda2) / (lambda4 * lambda4);
473 unsigned i, j, iR, dim = r_->
dim, npts = 0;
474 double *diff, *pts, *vals;
477 pts = r_->
pts; vals = r_->
vals;
479 for (iR = 0; iR < nR; ++iR) {
480 const double *center = R[iR].
h.
data;
481 const double *halfwidth = R[iR].
h.
data + dim;
483 for (i = 0; i < dim; ++i)
486 for (i = 0; i < dim; ++i)
488 for (i = 0; i < dim; ++i)
502 for (i = 0; i < dim; ++i)
509 f(dim, npts, pts, fdata, fdim, vals);
515 for (i = 0; i < dim * nR; ++i) diff[i] = 0;
517 for (j = 0; j < fdim; ++j) {
518 for (iR = 0; iR < nR; ++iR) {
519 double result, res5th;
520 double val0, sum2=0, sum3=0, sum4=0, sum5=0;
531 for (k = 0; k < dim; ++k) {
532 double v0 = vals[k0 + 4*k];
533 double v1 = vals[(k0 + 4*k) + 1];
534 double v2 = vals[(k0 + 4*k) + 2];
535 double v3 = vals[(k0 + 4*k) + 3];
540 diff[iR * dim + k] +=
541 fabs(v0 + v1 - 2*val0 - ratio * (v2 + v3 - 2*val0));
546 sum4 += vals[k0 + k];
550 sum5 += vals[k0 + k];
554 res5th = R[iR].
h.
vol * (r->
weightE1 * val0 + weightE2 * sum2 + r->
weightE3 * sum3 + weightE4 * sum4);
556 R[iR].
ee[j].
val = result;
557 R[iR].
ee[j].
err = fabs(res5th - result);
564 for (iR = 0; iR < nR; ++iR) {
566 unsigned dimDiffMax = 0;
568 for (i = 0; i < dim; ++i)
569 if (diff[iR*dim + i] > maxdiff) {
570 maxdiff = diff[iR*dim + i];
double weightE1
Definition: cubature.c:443
static void evalR0_0fs4d(double *pts, unsigned dim, double *p, const double *c, const double *r1, const double *r2)
Definition: cubature.c:396
double * widthLambda2
Definition: cubature.c:439
static void evalR_Rfs(double *pts, unsigned dim, double *p, const double *c, const double *r)
Definition: cubature.c:347
#define SUCCESS
Definition: cubature.c:109
double weight1
Definition: cubature.c:442
double weight3
Definition: cubature.c:442
static void evalRR0_0fs(double *pts, unsigned dim, double *p, const double *c, const double *r)
Definition: cubature.c:374
unsigned splitDim
Definition: cubature.c:187
unsigned num_points
Definition: cubature.c:234
#define num0_0(dim)
Definition: cubature.c:420
double * vals
Definition: cubature.c:237
double * widthLambda
Definition: cubature.c:439
double * p
Definition: cubature.c:439
static int alloc_rule_pts(rule *r, unsigned num_regions)
Definition: cubature.c:251
unsigned dim
Definition: cubature.c:233
Definition: cubature.c:435
double * pts
Definition: cubature.c:236
#define numR0_0fs(dim)
Definition: cubature.c:421
double err
Definition: cubature.c:116
double val
Definition: cubature.c:116
double weightE3
Definition: cubature.c:443
#define numRR0_0fs(dim)
Definition: cubature.c:422
double weight5
Definition: cubature.c:442
hypercube h
Definition: cubature.c:186
double vol
Definition: cubature.c:136
#define numR_Rfs(dim)
Definition: cubature.c:423
#define FAILURE
Definition: cubature.c:110
esterr * ee
Definition: cubature.c:189
double * data
Definition: cubature.c:135