14inline T linspace(T *Array,
double d1,
double d2,
int n){
19 Increment = (d2-d1)/((
double)(n-1));
21 for (i = 0; i < n-1; i++){
22 Array[i] = d1+ j*Increment;
30inline int spline (
int n,
int end1,
int end2,
31 double slope1,
double slope2,
32 double x[],
double y[],
33 double b[],
double c[],
double d[],
121 for (i = 1; i < n; ++i) {
122 if (x[i] <= x[i-1]) {
136 c[1] = (y[1] - y[0]) / d[0];
137 for (i = 1; i < nm1; ++i) {
138 d[i] = x[i+1] - x[i];
139 b[i] = 2.0 * (d[i-1] + d[i]);
140 c[i+1] = (y[i+1] - y[i]) / d[i];
141 c[i] = c[i+1] - c[i];
152 c[0] = c[2] / (x[3] - x[1]) - c[1] / (x[2] - x[0]);
153 c[nm1] = c[n-2] / (x[nm1] - x[n-3]) - c[n-3] / (x[n-2] - x[n-4]);
154 c[0] = c[0] * d[0] * d[0] / (x[3] - x[0]);
155 c[nm1] = -c[nm1] * d[n-2] * d[n-2] / (x[nm1] - x[n-4]);
160 b[0] = 2.0 * (x[1] - x[0]);
161 c[0] = (y[1] - y[0]) / (x[1] - x[0]) - slope1;
164 b[nm1] = 2.0 * (x[nm1] - x[n-2]);
165 c[nm1] = slope2 - (y[nm1] - y[n-2]) / (x[nm1] - x[n-2]);
169 for (i = 1; i < n; ++i) {
171 b[i] = b[i] - t * d[i-1];
172 c[i] = c[i] - t * c[i-1];
176 c[nm1] = c[nm1] / b[nm1];
177 for (ib = 0; ib < nm1; ++ib) {
179 c[i] = (c[i] - d[i] * c[i+1]) / b[i];
185 b[nm1] = (y[nm1] - y[n-2]) / d[n-2] + d[n-2] * (c[n-2] + 2.0 * c[nm1]);
186 for (i = 0; i < nm1; ++i) {
187 b[i] = (y[i+1] - y[i]) / d[i] - d[i] * (c[i+1] + 2.0 * c[i]);
188 d[i] = (c[i+1] - c[i]) / d[i];
191 c[nm1] = 3.0 * c[nm1];
196 b[0] = (y[1] - y[0]) / (x[1] - x[0]);
209inline double seval (
int n,
double u,
210 double x[],
double y[],
211 double b[],
double c[],
double d[],
258 if ((x[i] > u) || (x[i+1] < u)) {
274 w = y[i] + w * (b[i] + w * (c[i] + w * d[i]));
280inline double deriv (
int n,
double u,
282 double b[],
double c[],
double d[],
329 if ((x[i] > u) || (x[i+1] < u)) {
345 w = b[i] + w * (2.0 * c[i] + w * 3.0 * d[i]);
353inline double sinteg (
int n,
double u,
354 double x[],
double y[],
355 double b[],
double c[],
double d[],
404 if ((x[i] > u) || (x[i+1] < u)) {
420 for (j = 0; j < i; ++j) {
425 (c[j] / 3.0 + dx * 0.25 * d[j])));
433 (c[i] / 3.0 + dx * 0.25 * d[i])));
440inline double deriv2 (
int n,
double u,
442 double b[],
double c[],
double d[],
492 if ((x[i] > u) || (x[i+1] < u)) {
508 w = 2.0 * c[i] + w * 6.0 * d[i];