#include "csi.h" /* csi(S, S, D, D); */ void csi(int n, float x[MAX], float y[MAX], float z[MAX]) { float h[MAX],b[MAX],u[MAX],v[MAX]; int i; for (i = 0; i<= n-1; i=i+1){ h[i] = x[i+1]-x[i]; b[i] = (6/h[i])*(y[i+1]-y[i]); } u[1] = 2*(h[0]+h[1]); v[1] = b[1]-b[0]; for (i = 2; i <= n-1; i=i+1){ u[i] = 2*(h[i]+h[i-1])-h[i-1]*h[i-1]/u[i-1]; v[i] = b[i]-b[i-1]-h[i-1]*v[i-1]/u[i-1]; } /* * Workaround to replace * z[n] = 0; * until E&R parameters work { int t; t = n+1; z[t-1] = 0; } */ z[n] = 0; i=n-1; if ( i>=1 ) do { z[i] = (v[i]-h[i]*z[i+1])/u[i]; i=i-1; } while ( i>=1 ); z[0] = 0; }