void jacobnbndf(int n, int lw, int rw, float x[], float f[], float jac[], float (*di)(int), int (*funct)(int, int, int, float[], float[])) { float *allocate_real_vector(int, int); void free_real_vector(float *, int); int i,j,k,l,u,t,b,ll; float aid,stepi,*f1; l=1; u=lw+1; t=rw+1; b=lw+rw; for (i=1; i<=n; i++) { ll=l; f1=allocate_real_vector(ll,u); stepi=(*di)(i); aid=x[i]; x[i]=aid+stepi; (*funct)(n,l,u,x,f1); x[i]=aid; k = i+((i <= t) ? 0 : i-t)*b; for (j=l; j<=u; j++) { jac[k]=(f1[j]-f[j])/stepi; k += b; } if (i >= t) l++; if (u < n) u++; free_real_vector(f1,ll); } }