7 if (count < 2) {
initOK = 0;
return; }
12 if (x == NULL) {
initOK = 0;
return; }
13 if (y == NULL) {
initOK = 0;
return; }
15 xVals = (
double *) malloc((
unsigned long int)(
valsCount *
sizeof(double)));
17 memcpy(
xVals, x, (
unsigned long int)(count *
sizeof(
double)));
19 yVals = (
double *) malloc((
unsigned long int)(
valsCount *
sizeof(double)));
21 memcpy(
yVals, y, (
unsigned long int)(count *
sizeof(
double)));
23 y2Vals = (
double *) malloc((
unsigned long int)(
valsCount *
sizeof(double)));
27 dj = pow(count, 0.25);
78 retVal = (retVal < jl) ? retVal : jl;
79 return (retVal > 0) ? retVal : 0;
124 while (ju - jl > 1) {
134 retVal = (retVal < jl) ? retVal : jl;
135 return (retVal > 0) ? retVal : 0;
141 double p, qn, sig, un;
142 double * u = (
double *) malloc ((
unsigned long int)((
lastVal) *
sizeof(
double)));
143 if (u == NULL) {
return 1; }
144 if (y1_0 > 0.99e99) {
148 u[0] = (3.0 / (xv[1] - xv[0]))
149 * ((yv[1] - yv[0]) / (xv[1] - xv[0]) - y1_0);
151 for (i = 1; i <
lastVal; i++) {
152 sig = (xv[i] - xv[i - 1]) / (xv[i + 1] - xv[i - 1]);
153 p = sig *
y2Vals[i - 1] + 2.0;
154 y2Vals[i] = (sig - 1.0) / p;
155 u[i] = (yv[i + 1] - yv[i]) / (xv[i + 1] - xv[i])
156 - (yv[i] - yv[i - 1]) / (xv[i] - xv[i - 1]);
157 u[i] = (6.0 * u[i] / (xv[i + 1] - xv[i - 1]) - sig * u[i - 1]) / p;
159 if (y1_n > 0.99e99) {
175 int klo = jl, khi = jl + 1;
179 a = (xVals[khi] - x) / h;
180 b = (x - xVals[klo]) / h;
182 + ((a * a * a - a) *
y2Vals[klo] + (b * b * b - b) *
y2Vals[khi]) * (h * h)