The R Project SVN R

Rev

Rev 19500 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 19500 Rev 25962
Line 250... Line 250...
250
#define B	d
250
#define B	d
251
#define C	c
251
#define C	c
252
 
252
 
253
    B[1]  = x[2] - x[1];
253
    B[1]  = x[2] - x[1];
254
    B[nm1]= x[n] - x[nm1];
254
    B[nm1]= x[n] - x[nm1];
255
    A[1] = 2.0 * (B[1] + (x[nm1] - x[n-2]));
255
    A[1] = 2.0 * (B[1] + B[nm1]);
256
    C[1] = (y[2] - y[1])/B[1] - (y[n] - y[nm1])/B[nm1];
256
    C[1] = (y[2] - y[1])/B[1] - (y[n] - y[nm1])/B[nm1];
257
 
257
 
258
    for(i=2 ; i<n ; i++) {
258
    for(i = 2; i < n; i++) {
259
	B[i] = x[i+1] - x[i];
259
	B[i] = x[i+1] - x[i];
260
	A[i] = 2.0 * (B[i] + B[i-1]);
260
	A[i] = 2.0 * (B[i] + B[i-1]);
261
	C[i] = (y[i+1] - y[i])/B[i] - (y[i] - y[i-1])/B[i-1];
261
	C[i] = (y[i+1] - y[i])/B[i] - (y[i] - y[i-1])/B[i-1];
262
    }
262
    }
263
 
263
 
Line 268... Line 268...
268
#define E	e
268
#define E	e
269
 
269
 
270
    L[1] = sqrt(A[1]);
270
    L[1] = sqrt(A[1]);
271
    E[1] = (x[n] - x[nm1])/L[1];
271
    E[1] = (x[n] - x[nm1])/L[1];
272
    s = 0.0;
272
    s = 0.0;
273
    for(i=1 ; i<=nm1-2; i++) {
273
    for(i = 1; i <= nm1 - 2; i++) {
274
	M[i] = B[i]/L[i];
274
	M[i] = B[i]/L[i];
275
	if(i != 1) E[i] = -E[i-1] * M[i-1] / L[i];
275
	if(i != 1) E[i] = -E[i-1] * M[i-1] / L[i];
276
	L[i+1] = sqrt(A[i+1]-M[i]*M[i]);
276
	L[i+1] = sqrt(A[i+1]-M[i]*M[i]);
277
	s = s + E[i]*E[i];
277
	s = s + E[i] * E[i];
278
    }
278
    }
279
    M[nm1-1] = (B[nm1-1] - E[nm1-2] * M[nm1-2])/L[nm1-1];
279
    M[nm1-1] = (B[nm1-1] - E[nm1-2] * M[nm1-2])/L[nm1-1];
280
    L[nm1] = sqrt(A[nm1] - M[nm1-1]*M[nm1-1] - s);
280
    L[nm1] = sqrt(A[nm1] - M[nm1-1]*M[nm1-1] - s);
281
 
281
 
282
    /* Forward Elimination */
282
    /* Forward Elimination */
Line 292... Line 292...
292
    }
292
    }
293
    Y[nm1] = (D[nm1] - M[nm1-1] * Y[nm1-1] - s) / L[nm1];
293
    Y[nm1] = (D[nm1] - M[nm1-1] * Y[nm1-1] - s) / L[nm1];
294
 
294
 
295
#define X	c
295
#define X	c
296
 
296
 
297
    /*
-
 
298
      X[nm1] = -Y[nm1]/L[nm1];
-
 
299
      X[nm1-1] = -(Y[nm1-1] + M[nm1-1] * X[nm1])/L[nm1-1];
-
 
300
      for(i=nm1-2 ; i>=1 ; i--)
-
 
301
      X[i] = -(Y[i] + M[i] * X[i+1] + E[i] * X[nm1])/L[i];
-
 
302
    */
-
 
303
 
-
 
304
    X[nm1] = Y[nm1]/L[nm1];
297
    X[nm1] = Y[nm1]/L[nm1];
305
    X[nm1-1] = (Y[nm1-1] - M[nm1-1] * X[nm1])/L[nm1-1];
298
    X[nm1-1] = (Y[nm1-1] - M[nm1-1] * X[nm1])/L[nm1-1];
306
    for(i=nm1-2 ; i>=1 ; i--)
299
    for(i=nm1-2 ; i>=1 ; i--)
307
	X[i] = (Y[i] - M[i] * X[i+1] - E[i] * X[nm1])/L[i];
300
	X[i] = (Y[i] - M[i] * X[i+1] - E[i] * X[nm1])/L[i];
308
 
301
 
-
 
302
    /* Wrap around */
-
 
303
 
-
 
304
    X[n] = X[1];
-
 
305
 
309
    /* Compute polynomial coefficients */
306
    /* Compute polynomial coefficients */
310
 
307
 
311
    for(i=1 ; i<=nm1 ; i++) {
308
    for(i=1 ; i<=nm1 ; i++) {
312
	s = x[i+1] - x[i];
309
	s = x[i+1] - x[i];
313
	b[i] = (y[i+1]-y[i])/s - s*(c[i+1]+2.0*c[i]);
310
	b[i] = (y[i+1]-y[i])/s - s*(c[i+1]+2.0*c[i]);