#define Trace using System; using System.Diagnostics; public class cspline{ public static Func alloc(double[] x,double[] y){ int n=x.Length; var b = new double[n]; var c = new double[n-1]; var d = new double[n-1]; var D = new double[n]; var Q = new double[n-1]; var B = new double[n]; var h = new double[n-1]; var p = new double[n-1]; for(int i=0;i0);} for(int i=0;i=0;i--) b[i]=(B[i]-Q[i]*b[i+1])/D[i]; for(int i=0;i {/* evaluation of the spline at point z */ if(zx[n-1]) return double.NaN; int i=0, j=n-1;/* locate the interval for z by bisection */ while(j-i>1){ int mid=(i+j)/2; if(z>x[mid]) i=mid; else j=mid;} double dx=z-x[i];/* calculate the inerpolating spline : */ return y[i]+dx*(b[i]+dx*(c[i]+dx*d[i])); }; } }