def set_values(self, x): from interpolation.splines.filter_cubic import filter_data, filter_mcoeffs x = np.array(x) if isinstance(self.exo_grid, UnstructuredGrid) and isinstance( self.endo_grid, CartesianGrid): min = self.endo_grid.min max = self.endo_grid.max n = self.endo_grid.n coeffs = filter_controls(min, max, n, x) self.coefficients = coeffs elif isinstance(self.exo_grid, UnstructuredGrid) and isinstance( self.endo_grid, SmolyakGrid): from scipy.linalg import lu_solve from numpy import linalg self.thetas = [lu_solve(self.sg.lu_fact, v) for v in x] elif isinstance(self.exo_grid, EmptyGrid) and isinstance( self.endo_grid, SmolyakGrid): from scipy.linalg import lu_solve from numpy import linalg self.thetas = lu_solve(self.sg.lu_fact, x[0]) elif isinstance(self.exo_grid, (EmptyGrid, CartesianGrid)) and isinstance( self.endo_grid, CartesianGrid): full_grid = self.full_grid min = full_grid.min max = full_grid.max n = full_grid.n coeffs = filter_mcoeffs(min, max, n, x) self.coefficients = coeffs else: raise Exception("Not implemented") self.n_x = x.shape[-1]
def filter_controls(a, b, ndims, controls): from interpolation.splines.filter_cubic import filter_data, filter_mcoeffs dinv = (b - a) / (ndims - 1) ndims = array(ndims) n_m, N, n_x = controls.shape coefs = zeros((n_m, ) + tuple(ndims + 2) + (n_x, )) for i_m in range(n_m): tt = filter_mcoeffs(a, b, ndims, controls[i_m, ...]) # for i_x in range(n_x): coefs[i_m, ...] = tt return coefs
def filter_controls(a,b,ndims,controls): from interpolation.splines.filter_cubic import filter_data, filter_mcoeffs dinv = (b-a)/(ndims-1) ndims = array(ndims) n_m, N, n_x = controls.shape coefs = zeros( (n_m,) + tuple(ndims + 2) + (n_x,)) for i_m in range(n_m): tt = filter_mcoeffs(a,b,ndims, controls[i_m,...]) # for i_x in range(n_x): coefs[i_m,...] = tt return coefs
def test_cubic_multi_spline(): from interpolation.splines.filter_cubic import filter_mcoeffs from interpolation.splines.eval_cubic import eval_cubic_splines, vec_eval_cubic_splines cc = filter_mcoeffs(a,b,orders,mvals) assert(tuple(cc.shape) == tuple([o+2 for o in orders]+[mvals.shape[1]])) ii = eval_cubic_splines(a, b, orders, cc, point) iii = vec_eval_cubic_splines(a, b, orders, cc, points) assert(ii.ndim==1) assert(iii.ndim==2)
def test_cubic_multi_spline(): from interpolation.splines.filter_cubic import filter_mcoeffs from interpolation.splines.eval_cubic import eval_cubic_splines, vec_eval_cubic_splines cc = filter_mcoeffs(a, b, orders, mvals) assert (tuple(cc.shape) == tuple([o + 2 for o in orders] + [mvals.shape[1]])) ii = eval_cubic_splines(a, b, orders, cc, point) iii = vec_eval_cubic_splines(a, b, orders, cc, points) assert (ii.ndim == 1) assert (iii.ndim == 2)