22 void casadi_interpn_grad(T1* grad, casadi_int ndim,
const T1* grid,
const casadi_int* offset,
const T1* values,
const T1* x,
const casadi_int* lookup_mode, casadi_int m, casadi_int* iw, T1* w) {
23 T1 *alpha, *coeff, *v;
24 casadi_int *index, *corner;
32 index = iw; iw += ndim;
33 corner = iw; iw += ndim;
36 casadi_interpn_weights(ndim, grid, offset, x, alpha, index, lookup_mode);
38 casadi_clear_casadi_int(corner, ndim);
39 casadi_clear(grad, ndim*m);
44 casadi_interpn_interpolate(v, ndim, offset, values,
45 alpha, index, corner, coeff, m);
47 for (i=ndim-1; i>=0; --i) {
50 grad[i*m+j] += v[j]*coeff[i];
55 grad[i*m+j] -= v[j]*coeff[i];
60 }
while (casadi_flip(corner, ndim));
62 for (i=0; i<ndim; ++i) {
69 for (k=0;k<m;++k) grad[k] /= delta;