114 for (
int i = 0; i < size; i++ ) { y2.push_back( 0.0 ); }
118 double p, qn, sig, un;
129 y2.push_back( -0.5 );
130 u[0] = ( 3.0 / ( vx[1] - vx[0] ) ) * ( ( vy[1] - vy[0] ) / ( vx[1] - vx[0] ) - yp1 );
132 for ( i = 1; i <
n - 1; i++ )
134 sig = ( vx[i] - vx[i - 1] ) / ( vx[i + 1] - vx[i - 1] );
135 p = sig * y2[i - 1] + 2.0;
136 double yy2 = ( sig - 1.0 ) / p;
138 u[i] = ( vy[i + 1] - vy[i] ) / ( vx[i + 1] - vx[i] ) -
139 ( vy[i] - vy[i - 1] ) / ( vx[i] - vx[i - 1] );
140 u[i] = ( 6.0 * u[i] / ( vx[i + 1] - vx[i - 1] ) - sig * u[i - 1] ) / p;
142 if ( ypn > 0.99e30 ) qn = un = 0.0;
146 un = ( 3.0 / ( vx[
n - 1] - vx[
n - 2] ) ) *
147 ( ypn - ( vy[
n - 1] - vy[
n - 2] ) / ( vx[
n - 1] - vx[
n - 2] ) );
149 y2[
n - 1] = ( un - qn * u[
n - 2] ) / ( qn * y2[
n - 2] + 1.0 );
150 for ( k =
n - 2; k >= 0; k-- ) y2[k] = y2[k] * y2[k + 1] + u[k];
155 vector<double> y2a =
spline();
163 while ( khi - klo > 1 )
165 k = ( khi + klo ) >> 1;
166 if ( vx[k] > xx ) khi = k;
169 h = vx[khi] - vx[klo];
170 if ( h == 0.0 ) std::cout <<
"Bad xa input to routine splint" << std::endl;
171 a = ( vx[khi] - xx ) / h;
172 b = ( xx - vx[klo] ) / h;
173 y = a * vy[klo] + b * vy[khi] +
174 ( ( a * a * a - a ) * y2a[klo] + ( b * b * b - b ) * y2a[khi] ) * ( h * h ) / 6.0;