|\^/| Maple 7 (IBM INTEL LINUX) ._|\| |/|_. Copyright (c) 2001 by Waterloo Maple Inc. \ MAPLE / All rights reserved. Maple is a registered trademark of <____ ____> Waterloo Maple Inc. | Type ? for help. # util.maple -- misc utility routines # $Header$ > # # fix_rationals - convert numbers to RATIONAL() calls # nonmatching_names - find names in a list which *don't* have a specified prefix # sprint_numeric_list - convert a numeric list to a valid C identifier suffix # print_name_list_dcl - print C declarations for a list of names # # hypercube_points - compute all (integer) points in an N-dimensional hypercube # # ftruncate - truncate a file to zero length # > ################################################################################ ################################################################################ ################################################################################ > # # This function converts all {integer, rational} subexpressions of its # input except integer exponents and -1 factors in products, into function # calls # RATIONAL(num,den) # This is useful in conjunction with the C() library function, since # # C( (1/3) * foo * bar ) # t0 = foo*bar/3; # # generates a (slow) division (and runs the risk of mixed-mode-arithmetic # problems), while # # C((1.0/3.0) * foo * bar); # t0 = 0.3333333333*foo*bar; # # suffers from roundoff error. With this function, # # fix_rationals((1/3) * foo * bar); # RATIONAL(1,3) foo bar # C(%); # t0 = RATIONAL(1.0,3.0)*foo*bar; # # which a C preprocessor macro can easily convert to the desired # # t0 = (1.0/3.0)*foo*bar; # # Additionally, this function can be told to leave certain types of # subexpressions unconverged. For example, # fix_rationals(expr, type, specfunc(integer, DATA)); # will leave all subexpressions of the form DATA(integer arguments) # unconverted. # # Arguments: # expr = (in) The expression to be converted. # inert_fn = (optional in) # If specified, this argument should be a Boolean procedure # or the name of a Boolean procedure. This procedure should # take one or more argument, and return true if and only if # the first argument should *not* be converted, i.e. if we # should leave this expression unchanged. See the last # example above. # ... = (optional in) # Any further arguments are passed as additional arguments to # the inert_fn procedure. # > fix_rationals := > proc( > expr::{ > algebraic, name = algebraic, > list({algebraic, name = algebraic}), > set ({algebraic, name = algebraic}) > }, > inert_fn::{name, procedure} > ) > local nn, k, > base, power, fbase, fpower, > fn, fn_args_list, > num, den, mult; > # do we want to convert this expression? > if ((nargs >= 2) and inert_fn(expr, args[3..nargs])) > then return expr; > end if; > # recurse over lists and sets > if (type(expr, {list,set})) > then return map(fix_rationals, expr, args[2..nargs]); > end if; > # recurse over equation right hand sides > if (type(expr, name = algebraic)) > then return ( lhs(expr) = fix_rationals(rhs(expr), args[2..nargs]) ); > end if; > # recurse over functions other than RATIONAL() > if (type(expr, function)) > then > fn := op(0, expr); > if (fn <> 'RATIONAL') > then > fn_args_list := [op(expr)]; > fn_args_list := map(fix_rationals, fn_args_list, args[2..nargs]); > fn; return '%'( op(fn_args_list) ); > end if; > end if; > > nn := nops(expr); > # recurse over sums > if (type(expr, `+`)) > then return sum('fix_rationals(op(k,expr), args[2..nargs])', 'k'=1..nn); > end if; > # recurse over products # ... leaving leading -1 factors intact, i.e. not converted to RATIONAL(-1,1) > if (type(expr, `*`)) > then > if (op(1, expr) = -1) > then return -1*fix_rationals(remove(type, expr, 'identical(-1)'), > args[2..nargs]); > else return product('fix_rationals(op(k,expr), args[2..nargs])', > 'k'=1..nn); > end if; > end if; > # recurse over powers # ... leaving integer exponents intact > if (type(expr, `^`)) > then > base := op(1, expr); > power := op(2, expr); > > fbase := fix_rationals(base, args[2..nargs]); > if (type(power, integer)) > then fpower := power; > else fpower := fix_rationals(power, args[2..nargs]); > end if; > return fbase ^ fpower; > end if; > # fix integers and fractions > if (type(expr, integer)) > then return 'RATIONAL'(expr, 1); > end if; > if (type(expr, fraction)) > then > num := op(1, expr); > den := op(2, expr); > > return 'RATIONAL'(num, den); > end if; > # turn Maple floating-point into integer fraction, then recursively fix that > if (type(expr, float)) > then > mult := op(1, expr); > power := op(2, expr); > return fix_rationals(mult * 10^power, args[2..nargs]); > end if; > # identity op on names > if (type(expr, name)) > then return expr; > end if; > # unknown type > error "%0", > "unknown type for expr!", > " whattype(expr) = ", whattype(expr), > " expr = ", expr; > end proc; fix_rationals := proc(expr::{algebraic, name = algebraic, list({algebraic, name = algebraic}), set({algebraic, name = algebraic})}, inert_fn::{procedure, name}) local nn, k, base, power, fbase, fpower, fn, fn_args_list, num, den, mult; if 2 <= nargs and inert_fn(expr, args[3 .. nargs]) then return expr end if; if type(expr, {set, list}) then return map(fix_rationals, expr, args[2 .. nargs]) end if; if type(expr, name = algebraic) then return lhs(expr) = fix_rationals(rhs(expr), args[2 .. nargs]) end if; if type(expr, function) then fn := op(0, expr); if fn <> 'RATIONAL' then fn_args_list := [op(expr)]; fn_args_list := map(fix_rationals, fn_args_list, args[2 .. nargs]); fn; return '%'(op(fn_args_list)) end if end if; nn := nops(expr); if type(expr, `+`) then return sum('fix_rationals(op(k, expr), args[2 .. nargs])', 'k' = 1 .. nn) end if; if type(expr, `*`) then if op(1, expr) = -1 then return -fix_rationals( remove(type, expr, 'identical(-1)'), args[2 .. nargs]) else return product('fix_rationals(op(k, expr), args[2 .. nargs])', 'k' = 1 .. nn) end if end if; if type(expr, `^`) then base := op(1, expr); power := op(2, expr); fbase := fix_rationals(base, args[2 .. nargs]); if type(power, integer) then fpower := power else fpower := fix_rationals(power, args[2 .. nargs]) end if; return fbase^fpower end if; if type(expr, integer) then return 'RATIONAL'(expr, 1) end if; if type(expr, fraction) then num := op(1, expr); den := op(2, expr); return 'RATIONAL'(num, den) end if; if type(expr, float) then mult := op(1, expr); power := op(2, expr); return fix_rationals(mult*10^power, args[2 .. nargs]) end if; if type(expr, name) then return expr end if; error "%0", "unknown type for expr!", " whattype(expr) = ", whattype(expr), " expr = ", expr end proc > ################################################################################ > # # This function finds names in a list which *don't* have a specified prefix. # # Arguments: # name_list = A list of the names. # prefix = The prefix we want to filter out. # # Results: # This function returns the subset list of names which don't have the # specified prefix. # > nonmatching_names := > proc( name_list::list({name,string}), prefix::{name,string} ) > > select( proc(n) > evalb(not StringTools[IsPrefix](prefix,n)); > end proc > , > name_list > ); > end proc; nonmatching_names := proc( name_list::list({name, string}), prefix::{name, string}) select(proc(n) evalb(not StringTools[IsPrefix](prefix, n)) end proc, name_list) end proc > ################################################################################ > # # This function converts a numeric list to a string which is a valid # C identifier suffix: elements are separated by "_", decimal points are # replaced by "x", and all nonzero values have explicit +/- signs, which # are replaced by "p"/"m". # # For example, [0,-3.5,+4] --> "0_m3x5_p4". # > sprint_numeric_list := > proc(nlist::list(numeric)) > # generate preliminary string, eg "+0_-3.5_+4" > map2(sprintf, "%+a", nlist); > ListTools[Join](%, "_"); > cat(op(%)); > # fixup bad characters > StringTools[SubstituteAll](%, "+0", "0"); > StringTools[CharacterMap](".+-", "xpm", %); > > return %; > end proc; sprint_numeric_list := proc(nlist::list(numeric)) map2(sprintf, "%+a", nlist); ListTools[Join](%, "_"); cat(op(%)); StringTools[SubstituteAll](%, "+0", "0"); StringTools[CharacterMap](".+-", "xpm", %); return % end proc > ################################################################################ > # # This function prints a sequence of C declarations for a list of names. # # Argument: # name_list = A list of the names. # type_name = The C type of the names, eg. "double". # file_name = The file name to write the declaration to. This is # truncated before writing. # > print_name_list_dcl := > proc( name_list::list({name,string}), > type_name::string, > file_name::string ) > local blanks, separator_string; > > ftruncate(file_name); > > map( > proc(var::{name,string}) > fprintf(file_name, > "%s %s;\n", > type_name, var); > end proc > , > name_list > ); > > fclose(file_name); > NULL; > end proc; print_name_list_dcl := proc( name_list::list({name, string}), type_name::string, file_name::string) local blanks, separator_string; ftruncate(file_name); map(proc(var::{name, string}) fprintf(file_name, "%s %s;\n", type_name, var) end proc, name_list); fclose(file_name); NULL end proc > ################################################################################ ################################################################################ ################################################################################ > # # This function computes a list of all the (integer) points in an # N-dimensional hypercube, in lexicographic order. The present # implementation requires N <= 4. # # Arguments: # cmin,cmax = N-element lists of cube minimum/maximum coordinates. # # Results: # The function returns a set of d-element lists giving the coordinates. # For example, # hypercube([0,0], [2,1] # returns # { [0,0], [0,1], [1,0], [1,1], [2,0], [2,1] } > hypercube_points := > proc(cmin::list(integer), cmax::list(integer)) > local N, i,j,k,l; > > N := nops(cmin); > if (nops(cmax) <> N) > then error > "must have same number of dimensions for min and max coordinates!"; > fi; > > if (N = 1) > then return [seq([i], i=cmin[1]..cmax[1])]; > elif (N = 2) > then return [ > seq( > seq([i,j], j=cmin[2]..cmax[2]), > i=cmin[1]..cmax[1]) > ]; > elif (N = 3) > then return [ > seq( > seq( > seq([i,j,k], k=cmin[3]..cmax[3]), > j=cmin[2]..cmax[2] ), > i=cmin[1]..cmax[1]) > ]; > elif (N = 4) > then return [ > seq( > seq( > seq( > seq([i,j,k,l], l=cmin[4]..cmax[4]), > k=cmin[3]..cmax[3] ), > j=cmin[2]..cmax[2]), > i=cmin[1]..cmax[1]) > ]; > else > error "implementation restriction: must have N <= 4, got %1!", N; > fi; > end proc; hypercube_points := proc(cmin::list(integer), cmax::list(integer)) local N, i, j, k, l; N := nops(cmin); if nops(cmax) <> N then error "must have same number of dimensions for min and max coordinates!" end if; if N = 1 then return [seq([i], i = cmin[1] .. cmax[1])] elif N = 2 then return [seq(seq([i, j], j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])] elif N = 3 then return [seq( seq(seq([i, j, k], k = cmin[3] .. cmax[3]), j = cmin[2] .. cmax[2]) , i = cmin[1] .. cmax[1])] elif N = 4 then return [seq(seq(seq( seq([i, j, k, l], l = cmin[4] .. cmax[4]), k = cmin[3] .. cmax[3]), j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])] else error "implementation restriction: must have N <= 4, got %1!", N end if end proc > ################################################################################ ################################################################################ ################################################################################ > # # This function truncates a file to 0 length if it exists, or creates # it at that length if it doesn't exist. # # Arguments: # file_name = (in) The name of the file. # > ftruncate := > proc(file_name::string) > fopen(file_name, 'WRITE'); > fclose(%); > NULL; > end proc; ftruncate := proc(file_name::string) fopen(file_name, 'WRITE'); fclose(%); NULL end proc # interpolate.maple -- compute interpolation formulas/coefficients # $Header$ > # # <<>> # Lagrange_polynomial_interpolant - compute Lagrange polynomial interpolant # Hermite_polynomial_interpolant - compute Hermite polynomial interpolant # coeffs_as_lc_of_data - coefficients of ... (linear combination of data) # # print_coeffs__lc_of_data - print C code to compute coefficients # print_fetch_data - print C code to fetch input array chunk into struct data # print_store_coeffs - print C code to store struct coeffs "somewhere" # print_interp_cmpt__lc_of_data - print C code for computation of interpolant # # coeff_name - name of coefficient of data at a given [m] coordinate # data_var_name - name of variable storing data value at a given [m] coordinate # > ################################################################################ > # # ***** representation of numbers, data values, etc ***** # # We use RATIONAL(p.0,q.0) to denote the rational number p/q. # # We use DATA(...) to represent the data values being interpolated at a # specified [m] coordinate, where the arguments are the [m] coordinates. # # We use COEFF(...) to represent the molecule coefficient at a specified # [m] coordinate, where the arguments are the [m] coordinates. # # For example, the usual 1-D centered 2nd order 1st derivative molecule # would be written # RATIONAL(-1.0,2.0)*DATA(-1) + RATIONA(1.0,2.0)*DATA(1) # and its coefficients as # COEFF(-1) = RATIONAL(-1.0,2.0) # COEFF(1) = RATIONAL(1.0,2.0) # > ################################################################################ ################################################################################ ################################################################################ > # # This function computes a Lagrange polynomial interpolant in any # number of dimensions. # # Arguments: # fn = The interpolation function. This should be a procedure in the # coordinates, having the coefficients as global variables. For # example, # proc(x,y) c00 + c10*x + c01*y end proc # coeff_list = A set of the interpolation coefficients (coefficients in # the interpolation function), for example [c00, c10, c01]. # coord_list = A list of the coordinates (independent variables in the # interpolation function), for example [x,y]. # posn_list = A list of positions (each a list of numeric values) where the # interpolant is to use data, for example hypercube([0,0], [1,1]). # Any positions may be used; if they're redundant (as in the # example) the least-squares interpolant is computed. # # Results: # This function returns the interpolating polynomial, in the form of # an algebraic expression in the coordinates and the data values. # > Lagrange_polynomial_interpolant := > proc( > fn::procedure, coeff_list::list(name), > coord_list::list(name), posn_list::list(list(numeric)) > ) > local posn, data_eqns, coeff_eqns; > # coefficients of interpolating polynomial > data_eqns := { seq( fn(op(posn))='DATA'(op(posn)) , posn=posn_list ) }; > coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)}); > if (has(coeff_eqns, '_t')) > then error "interpolation coefficients aren't uniquely determined!"; > end if; > # interpolant as a polynomial in the coordinates > return subs(coeff_eqns, eval(fn))(op(coord_list)); > end proc; Lagrange_polynomial_interpolant := proc(fn::procedure, coeff_list::list(name), coord_list::list(name), posn_list::list(list(numeric))) local posn, data_eqns, coeff_eqns; data_eqns := {seq(fn(op(posn)) = 'DATA'(op(posn)), posn = posn_list)}; coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)}); if has(coeff_eqns, '_t') then error "interpolation coefficients aren't uniquely determined!" end if; return subs(coeff_eqns, eval(fn))(op(coord_list)) end proc > ################################################################################ > # # This function computes a Hermite polynomial interpolant in any # number of dimensions. This is a polynomial which # * has values which match the given data DATA() at a specified set of # points, and # * has derivatives which match the specified finite-difference derivatives # of the given data DATA() at a specified set of points # # For the derivative matching, we actually match all possible products # of 1st derivatives, i.e. in 2-D we match dx, dy, and dxy, in 3-D we # match dx, dy, dz, dxy, dxz, dyz, and dxyz, etc etc. # # Arguments: # fn = The interpolation function. This should be a procedure in the # coordinates, having the coefficients as global variables. For # example, # proc(x,y) # + c03*y^3 + c13*x*y^3 + c23*x^2*y^3 + c33*x^3*y^3 # + c02*y^2 + c12*x*y^2 + c22*x^2*y^2 + c32*x^3*y^2 # + c01*y + c11*x*y + c21*x^2*y + c31*x^3*y # + c00 + c10*x + c20*x^2 + c30*x^3 # end proc; # coeff_set = A set of the interpolation coefficients (coefficients in # the interpolation function), for example # { # c03, c13, c23, c33, # c02, c12, c22, c32, # c01, c11, c21, c31, # c00, c10, c20, c30 # } # coord_list = A list of the coordinates (independent variables in the # interpolation function), for example [x,y]. # deriv_set = A set of equations of the form # {coords} = proc # giving the derivatives which are to be matched, and the # procedures to compute their finite-difference approximations. # Each procedure should take N_dims integer arguments specifying # an evaluation point, and return a suitable linear combination # of the DATA() for the derivative at that point. For example # { # {x} = proc(i::integer, j::integer) # - 1/2*DATA(i-1,j) + 1/2*DATA(i+1,j) # end proc # , # {y} = proc(i::integer, j::integer) # - 1/2*DATA(i,j-1) + 1/2*DATA(i,j+1) # end proc # , # {x,y} = proc(i::integer, j::integer) # - 1/4*DATA(i-1,j+1) + 1/4*DATA(i+1,j+1) # + 1/4*DATA(i-1,j-1) - 1/4*DATA(i+1,j-1) # end proc # } # fn_posn_set = A set of positions (each a list of numeric values) # where the interpolant is to match the given data DATA(), # for example # {[0,0], [0,1], [1,0], [1,1]} # deriv_posn_set = A list of positions (each a list of numeric values) # where the interpolant is to match the derivatives # specified by deriv_set , for example # {[0,0], [0,1], [1,0], [1,1]} # # Results: # This function returns the interpolating polynomial, in the form of # an algebraic expression in the coordinates and the data values. # > Hermite_polynomial_interpolant := > proc( > fn::procedure, > coeff_set::set(name), > coord_list::list(name), > deriv_set::set(set(name) = procedure), > fn_posn_set::set(list(numeric)), > deriv_posn_set::set(list(numeric)) > ) > local fn_eqnset, deriv_eqnset, coeff_eqns, subs_eqnset; > > # # compute a set of equations # {fn(posn) = DATA(posn)} # giving the function values to be matched # > fn_eqnset := map( > # return equation that fn(posn) = DATA(posn) > proc(posn::list(integer)) > fn(op(posn)) = 'DATA'(op(posn)); > end proc > , > fn_posn_set > ); > > # # compute a set of equations # { diff(fn,coords)(posn) = DERIV(coords)(posn) } # giving the derivative values to be matched, where DERIV(coords) # is a placeholder for the appropriate derivative # > map( > # return set of equations for this particular derivative > proc(deriv_coords::set(name)) > local deriv_fn; > fn(op(coord_list)); > diff(%, op(deriv_coords)); > deriv_fn := unapply(%, op(coord_list)); > map( > proc(posn::list(integer)) > deriv_fn(op(posn)) = 'DERIV'(op(deriv_coords))(op(posn)); > end proc > , > deriv_posn_set > ); > end proc > , > map(lhs, deriv_set) > ); > deriv_eqnset := `union`(op(%)); > > # # solve overall set of equations for coefficients # in terms of DATA() and DERIV() values # > coeff_eqns := solve[linear](fn_eqnset union deriv_eqnset, coeff_set); > if (indets(map(rhs,%)) <> {}) > then error "no unique solution for coefficients -- %1 eqns for %2 coeffs", > nops(fn_eqnset union deriv_eqnset), > nops(coeff_set); > fi; > > # # compute a set of substitution equations # {'DERIV'(coords) = procedure} # > subs_eqnset := map( > proc(eqn::set(name) = procedure) > 'DERIV'(op(lhs(eqn))) = rhs(eqn); > end proc > , > deriv_set > ); > > # # compute the coefficients in terms of the DATA() values # > subs(subs_eqnset, coeff_eqns); > eval(%); > # # compute the interpolant as a polynomial in the coordinates # > subs(%, fn(op(coord_list))); > end proc; Hermite_polynomial_interpolant := proc(fn::procedure, coeff_set::set(name), coord_list::list(name), deriv_set::set(set(name) = procedure), fn_posn_set::set(list(numeric)), deriv_posn_set::set(list(numeric))) local fn_eqnset, deriv_eqnset, coeff_eqns, subs_eqnset; fn_eqnset := map( proc(posn::list(integer)) fn(op(posn)) = 'DATA'(op(posn)) end proc, fn_posn_set); map(proc(deriv_coords::set(name)) local deriv_fn; fn(op(coord_list)); diff(%, op(deriv_coords)); deriv_fn := unapply(%, op(coord_list)); map(proc(posn::list(integer)) deriv_fn(op(posn)) = 'DERIV'(op(deriv_coords))(op(posn)) end proc, deriv_posn_set) end proc, map(lhs, deriv_set)); deriv_eqnset := `union`(op(%)); coeff_eqns := solve[linear](fn_eqnset union deriv_eqnset, coeff_set); if indets(map(rhs, %)) <> {} then error "no unique solution for coefficients -- %1 eqns for %2 coeffs", nops(fn_eqnset union deriv_eqnset), nops(coeff_set) end if; subs_eqnset := map(proc(eqn::(set(name) = procedure)) 'DERIV'(op(lhs(eqn))) = rhs(eqn) end proc, deriv_set); subs(subs_eqnset, coeff_eqns); eval(%); subs(%, fn(op(coord_list))) end proc > ################################################################################ > # # This function takes as input an interpolating polynomial, expresses # it as a linear combination of the data values, and returns the coefficeints # of that form. # # Arguments: # interpolant = The interpolating polynomial (an algebraic expression # in the coordinates and the data values). # posn_list = The same list of data positions used in the interpolant. # # Results: # This function returns the coefficients, as a list of equations of the # form COEFF(...) = value , where each value is a polynomial in the # coordinates. The order of the list matches that of posn_list. # > coeffs_as_lc_of_data := > proc( > interpolant::algebraic, > posn_list::list(list(numeric)) > ) > local data_list, interpolant_as_lc_of_data; > # interpolant as a linear combination of the data values > data_list := [ seq( 'DATA'(op(posn)) , posn=posn_list ) ]; > interpolant_as_lc_of_data := collect(interpolant, data_list); > # coefficients of the data values in the linear combination > return map( > proc(posn::list(numeric)) > coeff(interpolant_as_lc_of_data, DATA(op(posn))); > 'COEFF'(op(posn)) = %; > end proc > , > posn_list > ); > end proc; coeffs_as_lc_of_data := proc( interpolant::algebraic, posn_list::list(list(numeric))) local data_list, interpolant_as_lc_of_data; data_list := [seq('DATA'(op(posn)), posn = posn_list)]; interpolant_as_lc_of_data := collect(interpolant, data_list); return map(proc(posn::list(numeric)) coeff(interpolant_as_lc_of_data, DATA(op(posn))); 'COEFF'(op(posn)) = % end proc, posn_list) end proc > ################################################################################ ################################################################################ ################################################################################ > # # This function prints C expressions for the coefficients of an # interpolating polynomial. (The polynomial is expressed as linear # combinations of the data values with coefficients which are # RATIONAL(p,q) calls.) # # Arguments: # coeff_list = A list of the coefficients, as returned from # coeffs_as_lc_of_data() . # coeff_name_prefix = A prefix string for the coefficient names. # temp_name_type = The C type to be used for Maple-introduced temporary # names, eg. "double". # file_name = The file name to write the coefficients to. This is # truncated before writing. # > print_coeffs__lc_of_data := > proc( coeff_list::list(specfunc(numeric,COEFF) = algebraic), > coeff_name_prefix::string, > temp_name_type::string, > file_name::string ) > global `codegen/C/function/informed`; > local coeff_list2, cmpt_list, temp_name_list; > # convert LHS of each equation from a COEFF() call (eg COEFF(-1,+1)) # to a Maple/C variable name (eg coeff_I_m1_p1) > coeff_list2 := map( > proc(coeff_eqn::specfunc(numeric,COEFF) = algebraic) > local posn; > posn := [op(lhs(coeff_eqn))]; > coeff_name(posn,coeff_name_prefix); > convert(%, name); # codegen[C] wants LHS > # to be an actual Maple *name* > % = fix_rationals(rhs(coeff_eqn)); > end proc > , > coeff_list > ); > # # generate the C code # > # tell codegen[C] not to warn about unknown RATIONAL() and DATA() "fn calls" # via undocumented :( global table > `codegen/C/function/informed`['RATIONAL'] := true; > `codegen/C/function/informed`['DATA'] := true; > > ftruncate(file_name); > # optimized computation sequence for all the coefficients # (may use local variables t0,t1,t2,...) > cmpt_list := [codegen[optimize](coeff_list2, tryhard)]; > # list of the t0,t1,t2,... local variables > temp_name_list := nonmatching_names(map(lhs,cmpt_list), coeff_name_prefix); > # declare the t0,t1,t2,... local variables (if there are any) > if (nops(temp_name_list) > 0) > then print_name_list_dcl(%, temp_name_type, file_name); > fi; > # now print the optimized computation sequence > codegen[C](cmpt_list, filename=file_name); > > fclose(file_name); > > NULL; > end proc; print_coeffs__lc_of_data := proc( coeff_list::list(specfunc(numeric, COEFF) = algebraic), coeff_name_prefix::string, temp_name_type::string, file_name::string) local coeff_list2, cmpt_list, temp_name_list; global `codegen/C/function/informed`; coeff_list2 := map(proc( coeff_eqn::(specfunc(numeric, COEFF) = algebraic)) local posn; posn := [op(lhs(coeff_eqn))]; coeff_name(posn, coeff_name_prefix); convert(%, name); % = fix_rationals(rhs(coeff_eqn)) end proc, coeff_list); `codegen/C/function/informed`['RATIONAL'] := true; `codegen/C/function/informed`['DATA'] := true; ftruncate(file_name); cmpt_list := [codegen[optimize](coeff_list2, tryhard)]; temp_name_list := nonmatching_names(map(lhs, cmpt_list), coeff_name_prefix); if 0 < nops(temp_name_list) then print_name_list_dcl(%, temp_name_type, file_name) end if; codegen[C](cmpt_list, filename = file_name); fclose(file_name); NULL end proc > ################################################################################ > # # This function prints a sequence of C expression to assign the data-value # variables, eg # data->data_m1_p1 = DATA(-1,1); # # Arguments: # posn_list = The same list of positions as was used to compute the # interpolating polynomial. # data_var_name_prefix = A prefix string for the data variable names. # file_name = The file name to write the coefficients to. This is # truncated before writing. # > print_fetch_data := > proc( > posn_list::list(list(numeric)), > data_var_name_prefix::string, > file_name::string > ) > > ftruncate(file_name); > map( > proc(posn::list(numeric)) > fprintf(file_name, > "%s = %a;\n", > data_var_name(posn,data_var_name_prefix), > DATA(op(posn))); > end proc > , > posn_list > ); > fclose(file_name); > > NULL; > end proc; print_fetch_data := proc(posn_list::list(list(numeric)), data_var_name_prefix::string, file_name::string) ftruncate(file_name); map(proc(posn::list(numeric)) fprintf(file_name, "%s = %a;\n", data_var_name(posn, data_var_name_prefix), DATA(op(posn))) end proc, posn_list); fclose(file_name); NULL end proc > ################################################################################ > # # This function prints a sequence of C expression to store the interpolation # coefficients in COEFF(...) expressions, eg # COEFF(1,-1) = factor * coeffs->coeff_p1_m1; # # Arguments: # posn_list = The list of positions in the molecule. # coeff_name_prefix = A prefix string for the coefficient names, # eg "factor * coeffs->coeff_" # file_name = The file name to write the coefficients to. This is # truncated before writing. # > print_store_coeffs := > proc( > posn_list::list(list(numeric)), > coeff_name_prefix::string, > file_name::string > ) > > ftruncate(file_name); > map( > proc(posn::list(numeric)) > fprintf(file_name, > "%a = %s;\n", > 'COEFF'(op(posn)), > coeff_name(posn,coeff_name_prefix)); > end proc > , > posn_list > ); > fclose(file_name); > > NULL; > end proc; print_store_coeffs := proc(posn_list::list(list(numeric)), coeff_name_prefix::string, file_name::string) ftruncate(file_name); map(proc(posn::list(numeric)) fprintf(file_name, "%a = %s;\n", 'COEFF'(op(posn)), coeff_name(posn, coeff_name_prefix)) end proc, posn_list); fclose(file_name); NULL end proc > ################################################################################ > # # This function prints a C expression to evaluate a molecule, i.e. # to compute the molecule as a linear combination of the data values. # # Arguments: # posn_list = The list of positions in the molecule. # coeff_name_prefix = A prefix string for the coefficient names. # data_var_name_prefix = A prefix string for the data variable names. # file_name = The file name to write the coefficients to. This is # truncated before writing. # > print_evaluate_molecule := > proc( > posn_list::list(list(numeric)), > coeff_name_prefix::string, > data_var_name_prefix::string, > file_name::string > ) > > ftruncate(file_name); > # list of "coeff*data_var" terms > map( > proc(posn::list(numeric)) > sprintf("%s*%s", > coeff_name(posn,coeff_name_prefix), > data_var_name(posn,data_var_name_prefix)); > end proc > , > posn_list > ); > > ListTools[Join](%, "\n + "); > cat(op(%)); > fprintf(file_name, " %s;\n", %); > > fclose(file_name); > > NULL; > end proc; print_evaluate_molecule := proc(posn_list::list(list(numeric)), coeff_name_prefix::string, data_var_name_prefix::string, file_name::string) ftruncate(file_name); map(proc(posn::list(numeric)) sprintf("%s*%s", coeff_name(posn, coeff_name_prefix), data_var_name(posn, data_var_name_prefix)) end proc, posn_list); ListTools[Join](%, "\n + "); cat(op(%)); fprintf(file_name, " %s;\n", %); fclose(file_name); NULL end proc > ################################################################################ ################################################################################ ################################################################################ > # # This function computes the name of the coefficient of the data at a # given [m] position, i.e. it encapsulates our naming convention for this. # # Arguments: # posn = (in) The [m] coordinates. # name_prefix = A prefix string for the coefficient name. # # Results: # The function returns the coefficient, as a Maple string. # > coeff_name := > proc(posn::list(numeric), name_prefix::string) > cat(name_prefix, sprint_numeric_list(posn)); > end proc; coeff_name := proc(posn::list(numeric), name_prefix::string) cat(name_prefix, sprint_numeric_list(posn)) end proc > ################################################################################ > # # This function computes the name of the variable in which the C code # will store the input data at a given [m] position, i.e. it encapsulates # our naming convention for this. # # Arguments: # posn = (in) The [m] coordinates. # name_prefix = A prefix string for the variable name. # # Results: # The function returns the variable name, as a Maple string. # > data_var_name := > proc(posn::list(numeric), name_prefix::string) > cat(name_prefix, sprint_numeric_list(posn)); > end proc; data_var_name := proc(posn::list(numeric), name_prefix::string) cat(name_prefix, sprint_numeric_list(posn)) end proc # Maple code to compute lists of point positions in hypercube-shaped molecules # $Header$ > ################################################################################ > # # 1D interpolation points # > posn_list_1d_size2 := hypercube_points([ 0], [+1]); posn_list_1d_size2 := [[0], [1]] > posn_list_1d_size3 := hypercube_points([-1], [+1]); posn_list_1d_size3 := [[-1], [0], [1]] > posn_list_1d_size4 := hypercube_points([-1], [+2]); posn_list_1d_size4 := [[-1], [0], [1], [2]] > posn_list_1d_size5 := hypercube_points([-2], [+2]); posn_list_1d_size5 := [[-2], [-1], [0], [1], [2]] > posn_list_1d_size6 := hypercube_points([-2], [+3]); posn_list_1d_size6 := [[-2], [-1], [0], [1], [2], [3]] > posn_list_1d_size7 := hypercube_points([-3], [+3]); posn_list_1d_size7 := [[-3], [-2], [-1], [0], [1], [2], [3]] > ################################################################################ > # # 2D interpolation points (Fortran ordering) # > posn_list_2d_size2 := map(ListTools[Reverse], > hypercube_points([ 0, 0], [+1,+1])); posn_list_2d_size2 := [[0, 0], [1, 0], [0, 1], [1, 1]] > posn_list_2d_size3 := map(ListTools[Reverse], > hypercube_points([-1,-1], [+1,+1])); posn_list_2d_size3 := [[-1, -1], [0, -1], [1, -1], [-1, 0], [0, 0], [1, 0], [-1, 1], [0, 1], [1, 1]] > posn_list_2d_size4 := map(ListTools[Reverse], > hypercube_points([-1,-1], [+2,+2])); posn_list_2d_size4 := [[-1, -1], [0, -1], [1, -1], [2, -1], [-1, 0], [0, 0], [1, 0], [2, 0], [-1, 1], [0, 1], [1, 1], [2, 1], [-1, 2], [0, 2], [1, 2], [2, 2]] > posn_list_2d_size5 := map(ListTools[Reverse], > hypercube_points([-2,-2], [+2,+2])); posn_list_2d_size5 := [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [-2, -1], [-1, -1], [0, -1], [1, -1], [2, -1], [-2, 0], [-1, 0], [0, 0], [1, 0], [2, 0], [-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1], [-2, 2], [-1, 2], [0, 2], [1, 2], [2, 2]] > posn_list_2d_size6 := map(ListTools[Reverse], > hypercube_points([-2,-2], [+3,+3])); posn_list_2d_size6 := [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [-2, -1], [-1, -1], [0, -1], [1, -1], [2, -1], [3, -1], [-2, 0], [-1, 0], [0, 0], [1, 0], [2, 0], [3, 0], [-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1], [3, 1], [-2, 2], [-1, 2], [0, 2], [1, 2], [2, 2], [3, 2], [-2, 3], [-1, 3], [0, 3], [1, 3], [2, 3], [3, 3]] > ################################################################################ > # # 3D interpolation points (Fortran ordering) # > posn_list_3d_size2 := map(ListTools[Reverse], > hypercube_points([ 0, 0, 0], [+1,+1,+1])); posn_list_3d_size2 := [[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0], [0, 0, 1], [1, 0, 1], [0, 1, 1], [1, 1, 1]] > posn_list_3d_size3 := map(ListTools[Reverse], > hypercube_points([-1,-1,-1], [+1,+1,+1])); posn_list_3d_size3 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [-1, 0, -1], [0, 0, -1], [1, 0, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1], [-1, -1, 0], [0, -1, 0], [1, -1, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1]] > posn_list_3d_size4 := map(ListTools[Reverse], > hypercube_points([-1,-1,-1], [+2,+2,+2])); posn_list_3d_size4 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [2, -1, -1], [-1, 0, -1], [0, 0, -1], [1, 0, -1], [2, 0, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1], [2, 1, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1], [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [2, 0, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [-1, 2, 1], [0, 2, 1], [1, 2, 1], [2, 2, 1], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2]] > posn_list_3d_size5 := map(ListTools[Reverse], > hypercube_points([-2,-2,-2], [+2,+2,+2])); posn_list_3d_size5 := [[-2, -2, -2], [-1, -2, -2], [0, -2, -2], [1, -2, -2], [2, -2, -2], [-2, -1, -2], [-1, -1, -2], [0, -1, -2], [1, -1, -2], [2, -1, -2], [-2, 0, -2], [-1, 0, -2], [0, 0, -2], [1, 0, -2], [2, 0, -2], [-2, 1, -2], [-1, 1, -2], [0, 1, -2], [1, 1, -2], [2, 1, -2], [-2, 2, -2], [-1, 2, -2], [0, 2, -2], [1, 2, -2], [2, 2, -2], [-2, -2, -1], [-1, -2, -1], [0, -2, -1], [1, -2, -1], [2, -2, -1], [-2, -1, -1], [-1, -1, -1], [0, -1, -1], [1, -1, -1], [2, -1, -1], [-2, 0, -1], [-1, 0, -1], [0, 0, -1], [1, 0, -1], [2, 0, -1], [-2, 1, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1], [2, 1, -1], [-2, 2, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1], [-2, -2, 0], [-1, -2, 0], [0, -2, 0], [1, -2, 0], [2, -2, 0], [-2, -1, 0], [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-2, 0, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [2, 0, 0], [-2, 1, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], [-2, 2, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [-2, -2, 1], [-1, -2, 1], [0, -2, 1], [1, -2, 1], [2, -2, 1], [-2, -1, 1], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [-2, 0, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [-2, 1, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [-2, 2, 1], [-1, 2, 1], [0, 2, 1], [1, 2, 1], [2, 2, 1], [-2, -2, 2], [-1, -2, 2], [0, -2, 2], [1, -2, 2], [2, -2, 2], [-2, -1, 2], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2], [-2, 0, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-2, 1, 2], [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [-2, 2, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2]] > posn_list_3d_size6 := map(ListTools[Reverse], > hypercube_points([-2,-2,-2], [+3,+3,+3])); posn_list_3d_size6 := [[-2, -2, -2], [-1, -2, -2], [0, -2, -2], [1, -2, -2], [2, -2, -2], [3, -2, -2], [-2, -1, -2], [-1, -1, -2], [0, -1, -2], [1, -1, -2], [2, -1, -2], [3, -1, -2], [-2, 0, -2], [-1, 0, -2], [0, 0, -2], [1, 0, -2], [2, 0, -2], [3, 0, -2], [-2, 1, -2], [-1, 1, -2], [0, 1, -2], [1, 1, -2], [2, 1, -2], [3, 1, -2], [-2, 2, -2], [-1, 2, -2], [0, 2, -2], [1, 2, -2], [2, 2, -2], [3, 2, -2], [-2, 3, -2], [-1, 3, -2], [0, 3, -2], [1, 3, -2], [2, 3, -2], [3, 3, -2], [-2, -2, -1], [-1, -2, -1], [0, -2, -1], [1, -2, -1], [2, -2, -1], [3, -2, -1], [-2, -1, -1], [-1, -1, -1], [0, -1, -1], [1, -1, -1], [2, -1, -1], [3, -1, -1], [-2, 0, -1], [-1, 0, -1], [0, 0, -1], [1, 0, -1], [2, 0, -1], [3, 0, -1], [-2, 1, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1], [2, 1, -1], [3, 1, -1], [-2, 2, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1], [3, 2, -1], [-2, 3, -1], [-1, 3, -1], [0, 3, -1], [1, 3, -1], [2, 3, -1], [3, 3, -1], [-2, -2, 0], [-1, -2, 0], [0, -2, 0], [1, -2, 0], [2, -2, 0], [3, -2, 0], [-2, -1, 0], [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [3, -1, 0], [-2, 0, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [2, 0, 0], [3, 0, 0], [-2, 1, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], [3, 1, 0], [-2, 2, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [3, 2, 0], [-2, 3, 0], [-1, 3, 0], [0, 3, 0], [1, 3, 0], [2, 3, 0], [3, 3, 0], [-2, -2, 1], [-1, -2, 1], [0, -2, 1], [1, -2, 1], [2, -2, 1], [3, -2, 1], [-2, -1, 1], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [3, -1, 1], [-2, 0, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [3, 0, 1], [-2, 1, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [3, 1, 1], [-2, 2, 1], [-1, 2, 1], [0, 2, 1], [1, 2, 1], [2, 2, 1], [3, 2, 1], [-2, 3, 1], [-1, 3, 1], [0, 3, 1], [1, 3, 1], [2, 3, 1], [3, 3, 1], [-2, -2, 2], [-1, -2, 2], [0, -2, 2], [1, -2, 2], [2, -2, 2], [3, -2, 2], [-2, -1, 2], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2], [3, -1, 2], [-2, 0, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [3, 0, 2], [-2, 1, 2], [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [3, 1, 2], [-2, 2, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2], [3, 2, 2], [-2, 3, 2], [-1, 3, 2], [0, 3, 2], [1, 3, 2], [2, 3, 2], [3, 3, 2], [-2, -2, 3], [-1, -2, 3], [0, -2, 3], [1, -2, 3], [2, -2, 3], [3, -2, 3], [-2, -1, 3], [-1, -1, 3], [0, -1, 3], [1, -1, 3], [2, -1, 3], [3, -1, 3], [-2, 0, 3], [-1, 0, 3], [0, 0, 3], [1, 0, 3], [2, 0, 3], [3, 0, 3], [-2, 1, 3], [-1, 1, 3], [0, 1, 3], [1, 1, 3], [2, 1, 3], [3, 1, 3], [-2, 2, 3], [-1, 2, 3], [0, 2, 3], [1, 2, 3], [2, 2, 3], [3, 2, 3], [-2, 3, 3], [-1, 3, 3], [0, 3, 3], [1, 3, 3], [2, 3, 3], [3, 3, 3]] # Maple code to define Lagrange interpolating functions/coords/coeffs # $Header$ > ################################################################################ > # # 1-D interpolating functions # > > fn_1d_order1 := > proc(x) > + c0 + c1*x > end proc; fn_1d_order1 := proc(x) c0 + c1*x end proc > > fn_1d_order2 := > proc(x) > + c0 + c1*x + c2*x^2 > end proc; fn_1d_order2 := proc(x) c0 + c1*x + c2*x^2 end proc > > fn_1d_order3 := > proc(x) > + c0 + c1*x + c2*x^2 + c3*x^3 > end proc; fn_1d_order3 := proc(x) c0 + c1*x + c2*x^2 + c3*x^3 end proc > > fn_1d_order4 := > proc(x) > + c0 + c1*x + c2*x^2 + c3*x^3 + c4*x^4 > end; fn_1d_order4 := proc(x) c0 + c1*x + c2*x^2 + c3*x^3 + c4*x^4 end proc > > fn_1d_order5 := > proc(x) > + c0 + c1*x + c2*x^2 + c3*x^3 + c4*x^4 + c5*x^5 > end; fn_1d_order5 := proc(x) c0 + c1*x + c2*x^2 + c3*x^3 + c4*x^4 + c5*x^5 end proc > > fn_1d_order6 := > proc(x) > + c0 + c1*x + c2*x^2 + c3*x^3 + c4*x^4 + c5*x^5 + c6*x^6 > end; fn_1d_order6 := proc(x) c0 + c1*x + c2*x^2 + c3*x^3 + c4*x^4 + c5*x^5 + c6*x^6 end proc > ######################################## > # coordinates for 1-D interpolating functions > coords_list_1d := [x]; coords_list_1d := [x] > ######################################## > # # coefficients in 1-D interpolating functions # > > coeffs_list_1d_order1 := [c0, c1]; coeffs_list_1d_order1 := [c0, c1] > coeffs_list_1d_order2 := [c0, c1, c2]; coeffs_list_1d_order2 := [c0, c1, c2] > coeffs_list_1d_order3 := [c0, c1, c2, c3]; coeffs_list_1d_order3 := [c0, c1, c2, c3] > coeffs_list_1d_order4 := [c0, c1, c2, c3, c4]; coeffs_list_1d_order4 := [c0, c1, c2, c3, c4] > coeffs_list_1d_order5 := [c0, c1, c2, c3, c4, c5]; coeffs_list_1d_order5 := [c0, c1, c2, c3, c4, c5] > coeffs_list_1d_order6 := [c0, c1, c2, c3, c4, c5, c6]; coeffs_list_1d_order6 := [c0, c1, c2, c3, c4, c5, c6] > ################################################################################ > # # 2-D interpolating functions (tensor-product) # > > fn_2d_order1 := > proc(x,y) > + c01*y + c11*x*y > + c00 + c10*x > end proc; fn_2d_order1 := proc(x, y) c01*y + c11*x*y + c00 + c10*x end proc > > fn_2d_order2 := > proc(x,y) > + c02*y^2 + c12*x*y^2 + c22*x^2*y^2 > + c01*y + c11*x*y + c21*x^2*y > + c00 + c10*x + c20*x^2 > end proc; fn_2d_order2 := proc(x, y) c02*y^2 + c12*x*y^2 + c22*x^2*y^2 + c01*y + c11*x*y + c21*x^2*y + c00 + c10*x + c20*x^2 end proc > > fn_2d_order3 := > proc(x,y) > + c03*y^3 + c13*x*y^3 + c23*x^2*y^3 + c33*x^3*y^3 > + c02*y^2 + c12*x*y^2 + c22*x^2*y^2 + c32*x^3*y^2 > + c01*y + c11*x*y + c21*x^2*y + c31*x^3*y > + c00 + c10*x + c20*x^2 + c30*x^3 > end proc; fn_2d_order3 := proc(x, y) c03*y^3 + c13*x*y^3 + c23*x^2*y^3 + c33*x^3*y^3 + c02*y^2 + c12*x*y^2 + c22*x^2*y^2 + c32*x^3*y^2 + c01*y + c11*x*y + c21*x^2*y + c31*x^3*y + c00 + c10*x + c20*x^2 + c30*x^3 end proc > > fn_2d_order4 := > proc(x,y) > + c04*y^4 + c14*x*y^4 + c24*x^2*y^4 + c34*x^3*y^4 + c44*x^4*y^4 > + c03*y^3 + c13*x*y^3 + c23*x^2*y^3 + c33*x^3*y^3 + c43*x^4*y^3 > + c02*y^2 + c12*x*y^2 + c22*x^2*y^2 + c32*x^3*y^2 + c42*x^4*y^2 > + c01*y + c11*x*y + c21*x^2*y + c31*x^3*y + c41*x^4*y > + c00 + c10*x + c20*x^2 + c30*x^3 + c40*x^4 > end; fn_2d_order4 := proc(x, y) c34*x^3*y^4 + c01*y + c10*x + c02*y^2 + c20*x^2 + c03*y^3 + c30*x^3 + c04*y^4 + c40*x^4 + c11*x*y + c12*x*y^2 + c22*x^2*y^2 + c21*x^2*y + c13*x*y^3 + c23*x^2*y^3 + c33*x^3*y^3 + c32*x^3*y^2 + c31*x^3*y + c14*x*y^4 + c24*x^2*y^4 + c44*x^4*y^4 + c00 + c43*x^4*y^3 + c42*x^4*y^2 + c41*x^4*y end proc > ######################################## > # coordinates for 2-D interpolating functions > coords_list_2d := [x,y]; coords_list_2d := [x, y] > ######################################## > # # coefficients in 2-D interpolating functions (tensor-product) # > > coeffs_list_2d_order1 := [ > c01, c11, > c00, c10 > ]; coeffs_list_2d_order1 := [c01, c11, c00, c10] > coeffs_list_2d_order2 := [ > c02, c12, c22, > c01, c11, c21, > c00, c10, c20 > ]; coeffs_list_2d_order2 := [c02, c12, c22, c01, c11, c21, c00, c10, c20] > coeffs_list_2d_order3 := [ > c03, c13, c23, c33, > c02, c12, c22, c23, > c01, c11, c21, c13, > c00, c10, c20, c30 > ]; coeffs_list_2d_order3 := [c03, c13, c23, c33, c02, c12, c22, c23, c01, c11, c21, c13, c00, c10, c20, c30] > coeffs_list_2d_order4 := [ > c04, c14, c24, c34, c44, > c03, c13, c23, c33, c43, > c02, c12, c22, c32, c42, > c01, c11, c21, c31, c41, > c00, c10, c20, c30, c40 > ]; coeffs_list_2d_order4 := [c04, c14, c24, c34, c44, c03, c13, c23, c33, c43, c02, c12, c22, c32, c42, c01, c11, c21, c31, c41, c00, c10, c20, c30, c40] > ################################################################################ > # # 3-D interpolating functions (tensor-product) # > > fn_3d_order1 := > proc(x,y,z) # z^1 ------------------- > + c011 *y*z + c111*x*y*z > + c001 *z + c101*x *z # z^0 ------------------- > + c010 *y + c110*x*y > + c000 + c100*x > end proc; fn_3d_order1 := proc(x, y, z) c011*y*z + c111*x*y*z + c001*z + c101*x*z + c010*y + c110*x*y + c000 + c100*x end proc > > fn_3d_order2 := > proc(x,y,z) # z^2 -------------------------------------------------- > + c022 *y^2*z^2 + c122*x *y^2*z^2 + c222*x^2*y^2*z^2 > + c012 *y *z^2 + c112*x *y *z^2 + c212*x^2*y *z^2 > + c002 *z^2 + c102*x *z^2 + c202*x^2 *z^2 # z -------------------------------------------------- > + c021 *y^2*z + c121*x *y^2*z + c221*x^2*y^2*z > + c011 *y *z + c111*x *y *z + c211*x^2*y *z > + c001 *z + c101*x *z + c201*x^2 *z # z^0 ------------------------------------------------ > + c020 *y^2 + c120*x *y^2 + c220*x^2*y^2 > + c010 *y + c110*x *y + c210*x^2*y > + c000 + c100*x + c200*x^2 > end proc; fn_3d_order2 := proc(x, y, z) c111*x*y*z + c122*x*y^2*z^2 + c222*x^2*y^2*z^2 + c112*x*y*z^2 + c212*x^2*y*z^2 + c121*x*y^2*z + c221*x^2*y^2*z + c211*x^2*y*z + c011*y*z + c101*x*z + c110*x*y + c022*y^2*z^2 + c012*y*z^2 + c102*x*z^2 + c202*x^2*z^2 + c021*y^2*z + c201*x^2*z + c120*x*y^2 + c220*x^2*y^2 + c210*x^2*y + c001*z + c010*y + c000 + c100*x + c002*z^2 + c020*y^2 + c200*x^2 end proc > > fn_3d_order3 := > proc(x,y,z) # z^3 --------------------------------------------------------------------- > + c033 *y^3*z^3 + c133*x *y^3*z^3 + c233*x^2*y^3*z^3 + c333*x^3*y^3*z^3 > + c023 *y^2*z^3 + c123*x *y^2*z^3 + c223*x^2*y^2*z^3 + c323*x^3*y^2*z^3 > + c013 *y *z^3 + c113*x *y *z^3 + c213*x^2*y *z^3 + c313*x^3*y *z^3 > + c003 *z^3 + c103*x *z^3 + c203*x^2 *z^3 + c303*x^3 *z^3 # z^2 --------------------------------------------------------------------- > + c032 *y^3*z^2 + c132*x *y^3*z^2 + c232*x^2*y^3*z^2 + c332*x^3*y^3*z^2 > + c022 *y^2*z^2 + c122*x *y^2*z^2 + c222*x^2*y^2*z^2 + c322*x^3*y^2*z^2 > + c012 *y *z^2 + c112*x *y *z^2 + c212*x^2*y *z^2 + c312*x^3*y *z^2 > + c002 *z^2 + c102*x *z^2 + c202*x^2 *z^2 + c302*x^3 *z^2 # z --------------------------------------------------------------------- > + c031 *y^3*z + c131*x *y^3*z + c231*x^2*y^3*z + c331*x^3*y^3*z > + c021 *y^2*z + c121*x *y^2*z + c221*x^2*y^2*z + c321*x^3*y^2*z > + c011 *y *z + c111*x *y *z + c211*x^2*y *z + c311*x^3*y *z > + c001 *z + c101*x *z + c201*x^2 *z + c301*x^3 *z # z^0 --------------------------------------------------------------------- > + c030 *y^3 + c130*x *y^3 + c230*x^2*y^3 + c330*x^3*y^3 > + c020 *y^2 + c120*x *y^2 + c220*x^2*y^2 + c320*x^3*y^2 > + c010 *y + c110*x *y + c210*x^2*y + c310*x^3*y > + c000 + c100*x + c200*x^2 + c300*x^3 > end proc; fn_3d_order3 := proc(x, y, z) c330*x^3*y^3 + c031*y^3*z + c103*x*z^3 + c111*x*y*z + c122*x*y^2*z^2 + c222*x^2*y^2*z^2 + c112*x*y*z^2 + c212*x^2*y*z^2 + c121*x*y^2*z + c221*x^2*y^2*z + c211*x^2*y*z + c133*x*y^3*z^3 + c233*x^2*y^3*z^3 + c333*x^3*y^3*z^3 + c123*x*y^2*z^3 + c223*x^2*y^2*z^3 + c323*x^3*y^2*z^3 + c113*x*y*z^3 + c213*x^2*y*z^3 + c313*x^3*y*z^3 + c132*x*y^3*z^2 + c232*x^2*y^3*z^2 + c332*x^3*y^3*z^2 + c322*x^3*y^2*z^2 + c312*x^3*y*z^2 + c131*x*y^3*z + c231*x^2*y^3*z + c331*x^3*y^3*z + c321*x^3*y^2*z + c311*x^3*y*z + c011*y*z + c101*x*z + c110*x*y + c022*y^2*z^2 + c012*y*z^2 + c102*x*z^2 + c202*x^2*z^2 + c021*y^2*z + c201*x^2*z + c120*x*y^2 + c220*x^2*y^2 + c210*x^2*y + c033*y^3*z^3 + c023*y^2*z^3 + c013*y*z^3 + c203*x^2*z^3 + c303*x^3*z^3 + c032*y^3*z^2 + c302*x^3*z^2 + c301*x^3*z + c130*x*y^3 + c230*x^2*y^3 + c320*x^3*y^2 + c310*x^3*y + c001*z + c010*y + c000 + c100*x + c002*z^2 + c020*y^2 + c200*x^2 + c003*z^3 + c030*y^3 + c300*x^3 end proc > > fn_3d_order4 := > proc(x,y,z) # z^4 ---------------------------------------------------------------------------------------- > + c044 *y^4*z^4 + c144*x *y^4*z^4 + c244*x^2*y^4*z^4 + c344*x^3*y^4*z^4 + c444*x^4*y^4*z^4 > + c034 *y^3*z^4 + c134*x *y^3*z^4 + c234*x^2*y^3*z^4 + c334*x^3*y^3*z^4 + c434*x^4*y^3*z^4 > + c024 *y^2*z^4 + c124*x *y^2*z^4 + c224*x^2*y^2*z^4 + c324*x^3*y^2*z^4 + c424*x^4*y^2*z^4 > + c014 *y *z^4 + c114*x *y *z^4 + c214*x^2*y *z^4 + c314*x^3*y *z^4 + c414*x^4*y *z^4 > + c004 *z^4 + c104*x *z^4 + c204*x^2 *z^4 + c304*x^3 *z^4 + c404*x^4 *z^4 # z^3 ---------------------------------------------------------------------------------------- > + c043 *y^4*z^3 + c143*x *y^4*z^3 + c243*x^2*y^4*z^3 + c343*x^3*y^4*z^3 + c443*x^4*y^4*z^3 > + c033 *y^3*z^3 + c133*x *y^3*z^3 + c233*x^2*y^3*z^3 + c333*x^3*y^3*z^3 + c433*x^4*y^3*z^3 > + c023 *y^2*z^3 + c123*x *y^2*z^3 + c223*x^2*y^2*z^3 + c323*x^3*y^2*z^3 + c423*x^4*y^2*z^3 > + c013 *y *z^3 + c113*x *y *z^3 + c213*x^2*y *z^3 + c313*x^3*y *z^3 + c413*x^4*y *z^3 > + c003 *z^3 + c103*x *z^3 + c203*x^2 *z^3 + c303*x^3 *z^3 + c403*x^4 *z^3 # z^2 ---------------------------------------------------------------------------------------- > + c042 *y^4*z^2 + c142*x *y^4*z^2 + c242*x^2*y^4*z^2 + c342*x^3*y^4*z^2 + c442*x^4*y^4*z^2 > + c032 *y^3*z^2 + c132*x *y^3*z^2 + c232*x^2*y^3*z^2 + c332*x^3*y^3*z^2 + c432*x^4*y^3*z^2 > + c022 *y^2*z^2 + c122*x *y^2*z^2 + c222*x^2*y^2*z^2 + c322*x^3*y^2*z^2 + c422*x^4*y^2*z^2 > + c012 *y *z^2 + c112*x *y *z^2 + c212*x^2*y *z^2 + c312*x^3*y *z^2 + c412*x^4*y *z^2 > + c002 *z^2 + c102*x *z^2 + c202*x^2 *z^2 + c302*x^3 *z^2 + c402*x^4 *z^2 # z ---------------------------------------------------------------------------------------- > + c041 *y^4*z + c141*x *y^4*z + c241*x^2*y^4*z + c341*x^3*y^4*z + c441*x^4*y^4*z > + c031 *y^3*z + c131*x *y^3*z + c231*x^2*y^3*z + c331*x^3*y^3*z + c431*x^4*y^3*z > + c021 *y^2*z + c121*x *y^2*z + c221*x^2*y^2*z + c321*x^3*y^2*z + c421*x^4*y^2*z > + c011 *y *z + c111*x *y *z + c211*x^2*y *z + c311*x^3*y *z + c411*x^4*y *z > + c001 *z + c101*x *z + c201*x^2 *z + c301*x^3 *z + c401*x^4 *z # z^0 ---------------------------------------------------------------------------------------- > + c040 *y^4 + c140*x *y^4 + c240*x^2*y^4 + c340*x^3*y^4 + c440*x^4*y^4 > + c030 *y^3 + c130*x *y^3 + c230*x^2*y^3 + c330*x^3*y^3 + c430*x^4*y^3 > + c020 *y^2 + c120*x *y^2 + c220*x^2*y^2 + c320*x^3*y^2 + c420*x^4*y^2 > + c010 *y + c110*x *y + c210*x^2*y + c310*x^3*y + c410*x^4*y > + c000 + c100*x + c200*x^2 + c300*x^3 + c400*x^4 > end; fn_3d_order4 := proc(x, y, z) c104*x*z^4 + c330*x^3*y^3 + c042*y^4*z^2 + c031*y^3*z + c103*x*z^3 + c304*x^3*z^4 + c024*y^2*z^4 + c111*x*y*z + c122*x*y^2*z^2 + c222*x^2*y^2*z^2 + c112*x*y*z^2 + c212*x^2*y*z^2 + c121*x*y^2*z + c221*x^2*y^2*z + c211*x^2*y*z + c133*x*y^3*z^3 + c233*x^2*y^3*z^3 + c333*x^3*y^3*z^3 + c123*x*y^2*z^3 + c223*x^2*y^2*z^3 + c323*x^3*y^2*z^3 + c113*x*y*z^3 + c213*x^2*y*z^3 + c313*x^3*y*z^3 + c132*x*y^3*z^2 + c232*x^2*y^3*z^2 + c332*x^3*y^3*z^2 + c322*x^3*y^2*z^2 + c312*x^3*y*z^2 + c131*x*y^3*z + c231*x^2*y^3*z + c331*x^3*y^3*z + c321*x^3*y^2*z + c311*x^3*y*z + c144*x*y^4*z^4 + c244*x^2*y^4*z^4 + c344*x^3*y^4*z^4 + c444*x^4*y^4*z^4 + c134*x*y^3*z^4 + c234*x^2*y^3*z^4 + c334*x^3*y^3*z^4 + c434*x^4*y^3*z^4 + c124*x*y^2*z^4 + c224*x^2*y^2*z^4 + c324*x^3*y^2*z^4 + c424*x^4*y^2*z^4 + c114*x*y*z^4 + c214*x^2*y*z^4 + c314*x^3*y*z^4 + c414*x^4*y*z^4 + c143*x*y^4*z^3 + c243*x^2*y^4*z^3 + c343*x^3*y^4*z^3 + c443*x^4*y^4*z^3 + c433*x^4*y^3*z^3 + c423*x^4*y^2*z^3 + c413*x^4*y*z^3 + c142*x*y^4*z^2 + c242*x^2*y^4*z^2 + c011*y*z + c101*x*z + c110*x*y + c022*y^2*z^2 + c012*y*z^2 + c102*x*z^2 + c202*x^2*z^2 + c021*y^2*z + c201*x^2*z + c120*x*y^2 + c220*x^2*y^2 + c210*x^2*y + c033*y^3*z^3 + c023*y^2*z^3 + c013*y*z^3 + c203*x^2*z^3 + c303*x^3*z^3 + c032*y^3*z^2 + c302*x^3*z^2 + c301*x^3*z + c130*x*y^3 + c230*x^2*y^3 + c320*x^3*y^2 + c310*x^3*y + c001*z + c010*y + c000 + c100*x + c002*z^2 + c020*y^2 + c200*x^2 + c003*z^3 + c030*y^3 + c300*x^3 + c004*z^4 + c044*y^4*z^4 + c034*y^3*z^4 + c014*y*z^4 + c204*x^2*z^4 + c404*x^4*z^4 + c043*y^4*z^3 + c403*x^4*z^3 + c402*x^4*z^2 + c041*y^4*z + c401*x^4*z + c140*x*y^4 + c240*x^2*y^4 + c340*x^3*y^4 + c440*x^4*y^4 + c430*x^4*y^3 + c420*x^4*y^2 + c410*x^4*y + c342*x^3*y^4*z^2 + c442*x^4*y^4*z^2 + c432*x^4*y^3*z^2 + c422*x^4*y^2*z^2 + c412*x^4*y*z^2 + c141*x*y^4*z + c241*x^2*y^4*z + c341*x^3*y^4*z + c441*x^4*y^4*z + c431*x^4*y^3*z + c421*x^4*y^2*z + c411*x^4*y*z + c040*y^4 + c400*x^4 end proc > ######################################## > # coordinates for 3-D interpolating functions > coords_list_3d := [x,y,z]; coords_list_3d := [x, y, z] > ######################################## > # # coefficients in 3-D interpolating functions # > > coeffs_list_3d_order1 := [ > # z^1 ----- > c011, c111, > c001, c101, > # z^0 ----- > c010, c110, > c000, c100 > ]; coeffs_list_3d_order1 := [c011, c111, c001, c101, c010, c110, c000, c100] > coeffs_list_3d_order2 := [ > # z^2 ----------- > c022, c122, c222, > c012, c112, c212, > c002, c102, c202, > # z^1 ----------- > c021, c121, c221, > c011, c111, c211, > c001, c101, c201, > # z^0 ----------- > c020, c120, c220, > c010, c110, c210, > c000, c100, c200 > ]; coeffs_list_3d_order2 := [c022, c122, c222, c012, c112, c212, c002, c102, c202, c021, c121, c221, c011, c111, c211, c001, c101, c201, c020, c120, c220, c010, c110, c210, c000, c100, c200] > coeffs_list_3d_order3 := [ > # z^3 ----------------- > c033, c133, c233, c333, > c023, c123, c223, c323, > c013, c113, c213, c313, > c003, c103, c203, c303, > # z^2 ----------------- > c032, c132, c232, c332, > c022, c122, c222, c322, > c012, c112, c212, c312, > c002, c102, c202, c302, > # z^1 ----------------- > c031, c131, c231, c331, > c021, c121, c221, c321, > c011, c111, c211, c311, > c001, c101, c201, c301, > # z^0 ----------------- > c030, c130, c230, c330, > c020, c120, c220, c320, > c010, c110, c210, c310, > c000, c100, c200, c300 > ]; coeffs_list_3d_order3 := [c033, c133, c233, c333, c023, c123, c223, c323, c013, c113, c213, c313, c003, c103, c203, c303, c032, c132, c232, c332, c022, c122, c222, c322, c012, c112, c212, c312, c002, c102, c202, c302, c031, c131, c231, c331, c021, c121, c221, c321, c011, c111, c211, c311, c001, c101, c201, c301, c030, c130, c230, c330, c020, c120, c220, c320, c010, c110, c210, c310, c000, c100, c200, c300] > coeffs_list_3d_order4 := [ > # z^4 ----------------------- > c044, c144, c244, c344, c444, > c034, c134, c234, c334, c434, > c024, c124, c224, c324, c424, > c014, c114, c214, c314, c414, > c004, c104, c204, c304, c404, > # z^3 ----------------------- > c043, c143, c243, c343, c443, > c033, c133, c233, c333, c433, > c023, c123, c223, c323, c423, > c013, c113, c213, c313, c413, > c003, c103, c203, c303, c403, > # z^2 ----------------------- > c042, c142, c242, c342, c442, > c032, c132, c232, c332, c432, > c022, c122, c222, c322, c422, > c012, c112, c212, c312, c412, > c002, c102, c202, c302, c402, > # z^1 ----------------------- > c041, c141, c241, c341, c441, > c031, c131, c231, c331, c431, > c021, c121, c221, c321, c421, > c011, c111, c211, c311, c411, > c001, c101, c201, c301, c401, > # z^0 ----------------------- > c040, c140, c240, c340, c440, > c030, c130, c230, c330, c430, > c020, c120, c220, c320, c420, > c010, c110, c210, c310, c410, > c000, c100, c200, c300, c400 > ]; coeffs_list_3d_order4 := [c044, c144, c244, c344, c444, c034, c134, c234, c334, c434, c024, c124, c224, c324, c424, c014, c114, c214, c314, c414, c004, c104, c204, c304, c404, c043, c143, c243, c343, c443, c033, c133, c233, c333, c433, c023, c123, c223, c323, c423, c013, c113, c213, c313, c413, c003, c103, c203, c303, c403, c042, c142, c242, c342, c442, c032, c132, c232, c332, c432, c022, c122, c222, c322, c422, c012, c112, c212, c312, c412, c002, c102, c202, c302, c402, c041, c141, c241, c341, c441, c031, c131, c231, c331, c431, c021, c121, c221, c321, c421, c011, c111, c211, c311, c411, c001, c101, c201, c301, c401, c040, c140, c240, c340, c440, c030, c130, c230, c330, c430, c020, c120, c220, c320, c420, c010, c110, c210, c310, c410, c000, c100, c200, c300, c400] > ################################################################################ # 2d.maple -- compute Lagrange interpolation coefficients in 2-D # $Header$ > ################################################################################ > # # 2d, cube, order=1, smoothing=0 (size=2) # > # interpolating polynomial > interp_2d_cube_order1_smooth0 > := Lagrange_polynomial_interpolant(fn_2d_order1, coeffs_list_2d_order1, > coords_list_2d, posn_list_2d_size2); interp_2d_cube_order1_smooth0 := (-DATA(0, 0) + DATA(0, 1)) y + (-DATA(1, 0) + DATA(0, 0) + DATA(1, 1) - DATA(0, 1)) x y + DATA(0, 0) + (DATA(1, 0) - DATA(0, 0)) x > # I > coeffs_as_lc_of_data(%, posn_list_2d_size2); [COEFF(0, 0) = x y + 1 - y - x, COEFF(1, 0) = x - x y, COEFF(0, 1) = y - x y, COEFF(1, 1) = x y] > print_coeffs__lc_of_data(%, "coeffs_I->coeff_", "fp", > "2d.coeffs/2d.cube.order1.smooth0/coeffs-I.compute.c"); bytes used=1009312, alloc=917336, time=0.09 > # d/dx > simplify( diff(interp_2d_cube_order1_smooth0,x) ); -y DATA(1, 0) + y DATA(0, 0) + y DATA(1, 1) - y DATA(0, 1) + DATA(1, 0) - DATA(0, 0) > coeffs_as_lc_of_data(%, posn_list_2d_size2); [COEFF(0, 0) = y - 1, COEFF(1, 0) = -y + 1, COEFF(0, 1) = -y, COEFF(1, 1) = y] > print_coeffs__lc_of_data(%, "coeffs_dx->coeff_", "fp", > "2d.coeffs/2d.cube.order1.smooth0/coeffs-dx.compute.c"); > # d/dy > simplify( diff(interp_2d_cube_order1_smooth0,y) ); -DATA(0, 0) + DATA(0, 1) - x DATA(1, 0) + x DATA(0, 0) + x DATA(1, 1) - x DATA(0, 1) > coeffs_as_lc_of_data(%, posn_list_2d_size2); [COEFF(0, 0) = x - 1, COEFF(1, 0) = -x, COEFF(0, 1) = 1 - x, COEFF(1, 1) = x] > print_coeffs__lc_of_data(%, "coeffs_dy->coeff_", "fp", > "2d.coeffs/2d.cube.order1.smooth0/coeffs-dy.compute.c"); > ################################################################################ > # # 2d, cube, order=2, smoothing=0 (size=3) # > # interpolating polynomial > interp_2d_cube_order2_smooth0 > := Lagrange_polynomial_interpolant(fn_2d_order2, coeffs_list_2d_order2, > coords_list_2d, posn_list_2d_size3); bytes used=2009852, alloc=1376004, time=0.15 interp_2d_cube_order2_smooth0 := 2 (-DATA(0, 0) + 1/2 DATA(0, -1) + 1/2 DATA(0, 1)) y + (1/4 DATA(1, 1) - 1/4 DATA(-1, -1) + 1/4 DATA(1, -1) - 1/4 DATA(-1, 1) + 1/2 DATA(-1, 0) 2 - 1/2 DATA(1, 0)) x y + (1/4 DATA(-1, 1) - 1/2 DATA(-1, 0) - 1/2 DATA(1, 0) + DATA(0, 0) + 1/4 DATA(-1, -1) + 1/4 DATA(1, -1) 2 2 + 1/4 DATA(1, 1) - 1/2 DATA(0, -1) - 1/2 DATA(0, 1)) x y + (- 1/2 DATA(0, -1) + 1/2 DATA(0, 1)) y + (1/4 DATA(1, 1) + 1/4 DATA(-1, -1) - 1/4 DATA(1, -1) - 1/4 DATA(-1, 1)) x y + (1/4 DATA(1, 1) - 1/4 DATA(-1, -1) - 1/4 DATA(1, -1) + 1/4 DATA(-1, 1) 2 + 1/2 DATA(0, -1) - 1/2 DATA(0, 1)) x y + DATA(0, 0) + (- 1/2 DATA(-1, 0) + 1/2 DATA(1, 0)) x 2 + (1/2 DATA(-1, 0) + 1/2 DATA(1, 0) - DATA(0, 0)) x > # I > coeffs_as_lc_of_data(%, posn_list_2d_size3); 2 2 2 2 [COEFF(-1, -1) = - 1/4 x y - 1/4 x y + 1/4 x y + 1/4 x y , 2 2 2 2 COEFF(0, -1) = 1/2 y - 1/2 x y - 1/2 y + 1/2 x y, 2 2 2 2 COEFF(1, -1) = 1/4 x y - 1/4 x y + 1/4 x y - 1/4 x y, 2 2 2 2 COEFF(-1, 0) = 1/2 x y + 1/2 x - 1/2 x - 1/2 x y , 2 2 2 2 COEFF(0, 0) = -y + x y + 1 - x , 2 2 2 2 COEFF(1, 0) = 1/2 x - 1/2 x y + 1/2 x - 1/2 x y , 2 2 2 2 COEFF(-1, 1) = - 1/4 x y - 1/4 x y + 1/4 x y + 1/4 x y , 2 2 2 2 COEFF(0, 1) = 1/2 y - 1/2 x y - 1/2 x y + 1/2 y, 2 2 2 2 COEFF(1, 1) = 1/4 x y + 1/4 x y + 1/4 x y + 1/4 x y ] > print_coeffs__lc_of_data(%, "coeffs_I->coeff_", "fp", > "2d.coeffs/2d.cube.order2.smooth0/coeffs-I.compute.c"); bytes used=3010044, alloc=1638100, time=0.21 bytes used=4010200, alloc=1703624, time=0.29 > # d/dx > simplify( diff(interp_2d_cube_order2_smooth0,x) ); bytes used=5010460, alloc=1703624, time=0.36 2 1/2 DATA(1, 0) + 1/2 x y DATA(-1, -1) + 1/2 x y DATA(1, 1) - 1/2 x y DATA(-1, -1) - 1/2 x y DATA(1, -1) + 1/2 x y DATA(-1, 1) 2 + x y DATA(0, -1) - x y DATA(0, 1) + 1/2 x y DATA(-1, 1) 2 2 2 - x y DATA(-1, 0) - x y DATA(1, 0) + 2 x y DATA(0, 0) 2 2 2 + 1/2 x y DATA(1, -1) + 1/2 x y DATA(1, 1) - x y DATA(0, -1) 2 2 - x y DATA(0, 1) - 1/2 DATA(-1, 0) - 1/2 y DATA(1, 0) + 1/4 y DATA(-1, -1) - 1/4 y DATA(1, -1) - 1/4 y DATA(-1, 1) 2 2 + 1/4 y DATA(1, 1) + 1/4 y DATA(1, 1) - 1/4 y DATA(-1, -1) 2 2 2 + 1/4 y DATA(1, -1) - 1/4 y DATA(-1, 1) + 1/2 y DATA(-1, 0) + x DATA(-1, 0) - 2 x DATA(0, 0) + x DATA(1, 0) > coeffs_as_lc_of_data(%, posn_list_2d_size3); 2 2 2 [COEFF(-1, -1) = 1/4 y + 1/2 x y - 1/2 x y - 1/4 y , COEFF(0, -1) = x y - x y , 2 2 COEFF(1, -1) = 1/2 x y + 1/4 y - 1/2 x y - 1/4 y, 2 2 2 COEFF(-1, 0) = x + 1/2 y - x y - 1/2, COEFF(0, 0) = -2 x + 2 x y , 2 2 COEFF(1, 0) = - 1/2 y + x - x y + 1/2, 2 2 COEFF(-1, 1) = - 1/4 y + 1/2 x y - 1/4 y + 1/2 x y , 2 COEFF(0, 1) = -x y - x y , 2 2 COEFF(1, 1) = 1/2 x y + 1/2 x y + 1/4 y + 1/4 y] > print_coeffs__lc_of_data(%, "coeffs_dx->coeff_", "fp", > "2d.coeffs/2d.cube.order2.smooth0/coeffs-dx.compute.c"); bytes used=6011072, alloc=1769148, time=0.42 > # d/dy > simplify( diff(interp_2d_cube_order2_smooth0,y) ); bytes used=7011376, alloc=1769148, time=0.49 1/2 DATA(0, 1) + 1/2 x y DATA(1, 1) - 1/2 x y DATA(-1, -1) + 1/2 x y DATA(1, -1) - 1/2 x y DATA(-1, 1) - 1/2 DATA(0, -1) 2 2 2 - x y DATA(1, 0) + 1/2 x y DATA(1, 1) - x y DATA(0, 1) 2 - x y DATA(0, -1) - x y DATA(1, 0) + x y DATA(-1, 0) + 1/4 x DATA(1, 1) + 1/4 x DATA(-1, -1) - 1/4 x DATA(1, -1) - 1/4 x DATA(-1, 1) 2 2 2 + 1/4 x DATA(1, 1) - 1/4 x DATA(-1, -1) - 1/4 x DATA(1, -1) 2 2 2 + 1/4 x DATA(-1, 1) + 1/2 x DATA(0, -1) - 1/2 x DATA(0, 1) 2 - 2 y DATA(0, 0) + y DATA(0, -1) + y DATA(0, 1) + 2 x y DATA(0, 0) 2 2 2 + 1/2 x y DATA(-1, 1) + 1/2 x y DATA(1, -1) + 1/2 x y DATA(-1, -1) 2 - x y DATA(-1, 0) > coeffs_as_lc_of_data(%, posn_list_2d_size3); 2 2 [COEFF(-1, -1) = - 1/2 x y + 1/2 x y - 1/4 x + 1/4 x, 2 2 COEFF(0, -1) = -x y - 1/2 + 1/2 x + y, 2 2 COEFF(1, -1) = 1/2 x y + 1/2 x y - 1/4 x - 1/4 x, 2 2 COEFF(-1, 0) = x y - x y, COEFF(0, 0) = -2 y + 2 x y, 2 COEFF(1, 0) = -x y - x y, 2 2 COEFF(-1, 1) = 1/2 x y + 1/4 x - 1/2 x y - 1/4 x, 2 2 COEFF(0, 1) = 1/2 - 1/2 x - x y + y, 2 2 COEFF(1, 1) = 1/4 x + 1/2 x y + 1/2 x y + 1/4 x ] > print_coeffs__lc_of_data(%, "coeffs_dy->coeff_", "fp", > "2d.coeffs/2d.cube.order2.smooth0/coeffs-dy.compute.c"); bytes used=8011672, alloc=1769148, time=0.57 > # d^2/dx^2 > simplify( diff(interp_2d_cube_order2_smooth0,x,x) ); 2 2 2 2 1/2 y DATA(-1, 1) - y DATA(-1, 0) - y DATA(1, 0) + 2 y DATA(0, 0) 2 2 2 + 1/2 y DATA(-1, -1) + 1/2 y DATA(1, -1) + 1/2 y DATA(1, 1) 2 2 - y DATA(0, -1) - y DATA(0, 1) + 1/2 y DATA(1, 1) - 1/2 y DATA(-1, -1) - 1/2 y DATA(1, -1) + 1/2 y DATA(-1, 1) + y DATA(0, -1) - y DATA(0, 1) + DATA(-1, 0) + DATA(1, 0) - 2 DATA(0, 0) > coeffs_as_lc_of_data(%, posn_list_2d_size3); 2 2 [COEFF(-1, -1) = - 1/2 y + 1/2 y , COEFF(0, -1) = y - y , 2 2 COEFF(1, -1) = - 1/2 y + 1/2 y , COEFF(-1, 0) = -y + 1, 2 2 COEFF(0, 0) = 2 y - 2, COEFF(1, 0) = -y + 1, 2 2 COEFF(-1, 1) = 1/2 y + 1/2 y, COEFF(0, 1) = -y - y, 2 COEFF(1, 1) = 1/2 y + 1/2 y] > print_coeffs__lc_of_data(%, "coeffs_dxx->coeff_", "fp", > "2d.coeffs/2d.cube.order2.smooth0/coeffs-dxx.compute.c"); bytes used=9011872, alloc=1834672, time=0.66 > # d^2/dxdy > simplify( diff(interp_2d_cube_order2_smooth0,x,y) ); 1/4 DATA(1, 1) - 2 x y DATA(0, -1) - 2 x y DATA(0, 1) + x y DATA(-1, 1) - 2 x y DATA(-1, 0) - 2 x y DATA(1, 0) + 4 x y DATA(0, 0) + x y DATA(-1, -1) + x y DATA(1, -1) + x y DATA(1, 1) + 1/2 y DATA(1, 1) - 1/2 y DATA(-1, -1) + 1/2 y DATA(1, -1) - 1/2 y DATA(-1, 1) + 1/4 DATA(-1, -1) - 1/4 DATA(1, -1) - 1/4 DATA(-1, 1) + x DATA(0, -1) - x DATA(0, 1) + 1/2 x DATA(1, 1) - 1/2 x DATA(-1, -1) - 1/2 x DATA(1, -1) + 1/2 x DATA(-1, 1) + y DATA(-1, 0) - y DATA(1, 0) > coeffs_as_lc_of_data(%, posn_list_2d_size3); [COEFF(-1, -1) = - 1/2 y + x y - 1/2 x + 1/4, COEFF(0, -1) = -2 x y + x, COEFF(1, -1) = - 1/2 x - 1/4 + x y + 1/2 y, COEFF(-1, 0) = -2 x y + y, COEFF(0, 0) = 4 x y, COEFF(1, 0) = -y - 2 x y, COEFF(-1, 1) = x y - 1/2 y - 1/4 + 1/2 x, COEFF(0, 1) = -2 x y - x, COEFF(1, 1) = 1/4 + x y + 1/2 x + 1/2 y] > print_coeffs__lc_of_data(%, "coeffs_dxy->coeff_", "fp", > "2d.coeffs/2d.cube.order2.smooth0/coeffs-dxy.compute.c"); bytes used=10012088, alloc=1834672, time=0.74 > # d^2/dy^2 > simplify( diff(interp_2d_cube_order2_smooth0,y,y) ); -2 DATA(0, 0) + DATA(0, -1) + DATA(0, 1) + 1/2 x DATA(1, 1) - 1/2 x DATA(-1, -1) + 1/2 x DATA(1, -1) - 1/2 x DATA(-1, 1) 2 2 + x DATA(-1, 0) - x DATA(1, 0) + 1/2 x DATA(-1, 1) - x DATA(-1, 0) 2 2 2 - x DATA(1, 0) + 2 x DATA(0, 0) + 1/2 x DATA(-1, -1) 2 2 2 2 + 1/2 x DATA(1, -1) + 1/2 x DATA(1, 1) - x DATA(0, -1) - x DATA(0, 1) > coeffs_as_lc_of_data(%, posn_list_2d_size3); 2 2 [COEFF(-1, -1) = 1/2 x - 1/2 x, COEFF(0, -1) = 1 - x , 2 2 COEFF(1, -1) = 1/2 x + 1/2 x , COEFF(-1, 0) = -x + x, 2 2 COEFF(0, 0) = 2 x - 2, COEFF(1, 0) = -x - x , 2 2 COEFF(-1, 1) = 1/2 x - 1/2 x, COEFF(0, 1) = 1 - x , 2 COEFF(1, 1) = 1/2 x + 1/2 x ] > print_coeffs__lc_of_data(%, "coeffs_dyy->coeff_", "fp", > "2d.coeffs/2d.cube.order2.smooth0/coeffs-dyy.compute.c"); bytes used=11012264, alloc=1834672, time=0.82 > ################################################################################ > # # 2d, cube, order=3, smoothing=0 (size=4) # > # interpolating polynomial > interp_2d_cube_order3_smooth0 > := Lagrange_polynomial_interpolant(fn_2d_order3, coeffs_list_2d_order3, > coords_list_2d, posn_list_2d_size4); bytes used=12012452, alloc=1834672, time=0.88 bytes used=13012804, alloc=1900196, time=0.94 bytes used=14014276, alloc=1900196, time=0.99 bytes used=15014880, alloc=1965720, time=1.05 bytes used=16015128, alloc=1965720, time=1.12 bytes used=17015368, alloc=1965720, time=1.18 bytes used=18015556, alloc=1965720, time=1.25 bytes used=19016348, alloc=1965720, time=1.31 bytes used=20016508, alloc=1965720, time=1.38 bytes used=21016664, alloc=1965720, time=1.44 bytes used=22016880, alloc=1965720, time=1.51 bytes used=23019452, alloc=1965720, time=1.57 bytes used=24021724, alloc=1965720, time=1.63 bytes used=25022340, alloc=1965720, time=1.69 interp_2d_cube_order3_smooth0 := (1/8 DATA(2, 1) - 1/4 DATA(2, 0) + 1/8 DATA(2, -1) - 3/2 c32 + 1/4 DATA(0, 0) + 1/4 DATA(1, 0) - 1/8 DATA(0, 1) - 1/8 DATA(1, 1) + 1/8 DATA(-1, -1) - 1/8 DATA(0, -1) 2 2 / - 1/8 DATA(1, -1) - 1/4 DATA(-1, 0) + 1/8 DATA(-1, 1)) x y + | \ 11 - 1/120 DATA(2, 2) - 7/120 DATA(1, 2) + --- DATA(-1, 2) - 1/40 DATA(0, 2) 120 13 + 1/20 DATA(2, 1) - 1/40 DATA(2, 0) - 1/60 DATA(2, -1) - -- c31 10 - 3/40 DATA(0, 0) - 7/40 DATA(1, 0) + 3/20 DATA(0, 1) + 7/20 DATA(1, 1) 11 11 + -- DATA(-1, -1) - 1/20 DATA(0, -1) - 7/60 DATA(1, -1) + -- DATA(-1, 0) 60 40 11 \ - -- DATA(-1, 1)| x y + (- 1/24 DATA(2, 2) + 1/24 DATA(1, 2) 20 / - 1/24 DATA(-1, 2) + 1/24 DATA(0, 2) + 1/4 DATA(2, 1) - 1/8 DATA(2, 0) - 1/12 DATA(2, -1) - 3/2 c31 + 1/8 DATA(0, 0) + 1/8 DATA(1, 0) - 1/4 DATA(0, 1) - 1/4 DATA(1, 1) - 1/12 DATA(-1, -1) + 1/12 DATA(0, -1) 2 + 1/12 DATA(1, -1) - 1/8 DATA(-1, 0) + 1/4 DATA(-1, 1)) x y + 3/2000 DATA(2, 2) - 9/2000 DATA(1, 2) - 3/2000 DATA(-1, 2) 87 201 111 + 9/2000 DATA(0, 2) + ---- DATA(2, 1) - ---- DATA(2, 0) + ---- DATA(2, -1) 2000 2000 2000 3 3 2 / 53 409 + c31 x y + c32 x y + |- ---- DATA(2, 2) + ---- DATA(1, 2) \ 3000 3000 197 53 31 101 - ---- DATA(-1, 2) - ---- DATA(0, 2) - ---- DATA(2, 1) + ---- DATA(2, 0) 3000 1000 1500 3000 13 91 101 + 7/1500 DATA(2, -1) + -- c32 + --- c31 + ---- DATA(0, 0) 25 250 1000 149 31 47 59 + ---- DATA(1, 0) - --- DATA(0, 1) - --- DATA(1, 1) + --- DATA(-1, -1) 1000 500 250 750 73 851 203 + 7/500 DATA(0, -1) - --- DATA(1, -1) - ---- DATA(-1, 0) + --- DATA(-1, 1) 750 3000 750 \ 3 / 29 43 | x y + |7/600 DATA(2, 2) + --- DATA(1, 2) + --- DATA(-1, 2) / \ 600 600 79 27 - --- DATA(0, 2) - 3/25 DATA(2, 1) + --- DATA(2, 0) - 2/75 DATA(2, -1) 600 200 21 19 31 + 3/5 c32 + -- c31 - --- DATA(0, 0) - --- DATA(1, 0) + 7/50 DATA(0, 1) 50 200 200 11 17 13 + --- DATA(1, 1) - --- DATA(-1, -1) + --- DATA(0, -1) - 1/300 DATA(1, -1) 100 300 150 23 13 \ 2 3 + --- DATA(-1, 0) - --- DATA(-1, 1)| x y + (1/50 DATA(2, 2) 200 100 / - 3/50 DATA(1, 2) - 1/50 DATA(-1, 2) + 3/50 DATA(0, 2) - 1/300 DATA(2, 1) - 1/150 DATA(2, 0) - 1/100 DATA(2, -1) - 2/5 c32 - 7/25 c31 - 1/50 DATA(0, 0) + 1/50 DATA(1, 0) - 1/100 DATA(0, 1) + 1/100 DATA(1, 1) + 1/100 DATA(-1, -1) - 3/100 DATA(0, -1) + 3/100 DATA(1, -1) 3 3 / + 1/150 DATA(-1, 0) + 1/300 DATA(-1, 1)) x y + |1/40 DATA(2, 1) \ 13 - 1/20 DATA(2, 0) + 1/40 DATA(2, -1) - -- c32 - 3/20 DATA(0, 0) 10 11 - 7/20 DATA(1, 0) + 3/40 DATA(0, 1) + 7/40 DATA(1, 1) - -- DATA(-1, -1) 40 11 11 \ + 3/40 DATA(0, -1) + 7/40 DATA(1, -1) + -- DATA(-1, 0) - -- DATA(-1, 1)| x 20 40 / 2 63 27 1397 603 y - --- c32 + --- c31 + ---- DATA(0, 0) + ---- DATA(1, 0) 100 500 2000 2000 261 261 / + ---- DATA(0, 1) - ---- DATA(1, 1) + |- 1/400 DATA(2, 2) 2000 2000 \ 29 + 3/400 DATA(1, 2) + 1/400 DATA(-1, 2) - 3/400 DATA(0, 2) - --- DATA(2, 1) 400 67 37 21 199 + --- DATA(2, 0) - --- DATA(2, -1) + -- c32 - 9/100 c31 - --- DATA(0, 0) 400 400 20 400 87 87 37 - 1/400 DATA(1, 0) - --- DATA(0, 1) + --- DATA(1, 1) + --- DATA(-1, -1) 400 400 400 111 111 133 29 \ - --- DATA(0, -1) + --- DATA(1, -1) + --- DATA(-1, 0) + --- DATA(-1, 1)| 400 400 400 400 / 2 / x + |1/600 DATA(2, 2) - 1/200 DATA(1, 2) - 1/600 DATA(-1, 2) \ 29 11 37 + 1/200 DATA(0, 2) + --- DATA(2, 1) + --- DATA(2, 0) + --- DATA(2, -1) 600 200 600 33 33 29 - 7/10 c32 + 3/50 c31 + --- DATA(0, 0) - --- DATA(1, 0) + --- DATA(0, 1) 200 200 200 29 37 37 37 - --- DATA(1, 1) - --- DATA(-1, -1) + --- DATA(0, -1) - --- DATA(1, -1) 200 600 200 200 11 29 \ 3 / - --- DATA(-1, 0) - --- DATA(-1, 1)| x + |- 3/40 DATA(2, 1) 200 600 / \ 11 + 3/20 DATA(2, 0) - 3/40 DATA(2, -1) + 9/10 c32 - -- DATA(0, 0) 20 11 - 9/20 DATA(1, 0) + -- DATA(0, 1) + 9/40 DATA(1, 1) + 3/40 DATA(-1, -1) 40 11 \ + -- DATA(0, -1) + 9/40 DATA(1, -1) - 3/20 DATA(-1, 0) + 3/40 DATA(-1, 1)| 40 / 2 / 21 y + |- 7/1000 DATA(2, 2) + ---- DATA(1, 2) + 7/1000 DATA(-1, 2) \ 1000 437 81 + ---- DATA(0, 2) + 9/125 DATA(2, 1) - ---- DATA(2, 0) + 2/125 DATA(2, -1) 3000 1000 63 257 243 71 - 9/25 c32 - --- c31 + ---- DATA(0, 0) + ---- DATA(1, 0) - --- DATA(0, 1) 250 1000 1000 250 27 89 - --- DATA(1, 1) - 2/125 DATA(-1, -1) - --- DATA(0, -1) 125 750 81 \ 3 / - 6/125 DATA(1, -1) + ---- DATA(-1, 0) - 9/125 DATA(-1, 1)| y + | 1000 / \ 13 13 13 13 - ---- DATA(2, 2) + ---- DATA(1, 2) + ---- DATA(-1, 2) - ---- DATA(0, 2) 6000 2000 6000 2000 377 43 481 91 39 - ---- DATA(2, 1) - ---- DATA(2, 0) - ---- DATA(2, -1) + --- c32 - --- c31 6000 2000 6000 100 500 129 1129 377 377 - ---- DATA(0, 0) + ---- DATA(1, 0) - ---- DATA(0, 1) + ---- DATA(1, 1) 2000 2000 2000 2000 481 481 481 + ---- DATA(-1, -1) - ---- DATA(0, -1) + ---- DATA(1, -1) 6000 2000 2000 957 377 \ / - ---- DATA(-1, 0) + ---- DATA(-1, 1)| x + |1/40 DATA(2, 2) 2000 6000 / \ 11 - 3/40 DATA(1, 2) - 1/40 DATA(-1, 2) - --- DATA(0, 2) - 3/20 DATA(2, 1) 120 11 + 3/40 DATA(2, 0) + 1/20 DATA(2, -1) + 9/10 c31 - -- DATA(0, 0) 40 11 - 9/40 DATA(1, 0) + -- DATA(0, 1) + 9/20 DATA(1, 1) - 1/20 DATA(-1, -1) 20 11 \ - -- DATA(0, -1) - 3/20 DATA(1, -1) - 3/40 DATA(-1, 0) + 3/20 DATA(-1, 1)| 60 / 111 333 333 y - ---- DATA(-1, -1) + ---- DATA(0, -1) - ---- DATA(1, -1) 2000 2000 2000 201 87 + ---- DATA(-1, 0) - ---- DATA(-1, 1) 2000 2000 > # I > coeffs_as_lc_of_data(%, posn_list_2d_size4); bytes used=26023908, alloc=1965720, time=1.75 59 3 37 2 2 37 3 11 [COEFF(-1, -1) = --- x y + --- x - 1/12 x y - --- x + -- x y - 1/20 y 750 400 600 60 481 3 3 3 2 2 2 11 2 111 + ---- x + 1/100 x y - 2/125 y + 1/8 x y + 3/40 y - -- x y - ---- 6000 40 2000 17 2 3 13 2 3 2 3 333 - --- x y , COEFF(0, -1) = --- x y + 1/12 x y + 7/500 x y + ---- 300 150 2000 2 2 2 481 111 2 11 37 3 3 3 + 3/40 x y - 1/8 x y - ---- x - --- x - -- y + --- x - 3/100 x y 2000 400 60 200 11 2 89 3 2 2 2 333 + -- y - 1/20 x y - --- y , COEFF(1, -1) = 1/12 x y - 1/8 x y - ---- 40 750 2000 2 3 2 3 3 111 2 73 3 - 1/300 x y + 7/40 x y + 3/100 x y + --- x - 7/60 x y - --- x y 400 750 3 2 481 37 3 - 6/125 y - 3/20 y + 9/40 y + ---- x - --- x , COEFF(2, -1) = - 1/60 x y 2000 200 3 3 2 481 3 37 2 - 1/100 x y + 1/40 x y - ---- x + 1/20 y + 7/1500 x y - --- x 6000 400 2 3 2 3 2 111 37 3 2 2 - 1/12 x y + 2/125 y - 2/75 x y - 3/40 y + ---- + --- x + 1/8 x y , 2000 600 201 23 2 3 133 2 11 2 2 COEFF(-1, 0) = ---- + --- x y + --- x + -- x y - 3/40 y - 1/4 x y 2000 200 400 40 11 3 11 2 957 2 3 3 2 851 3 - --- x + -- x y - ---- x - 1/8 x y + 1/150 x y - 3/20 y - ---- x y 200 20 2000 3000 81 3 19 2 3 3 3 11 2 + ---- y , COEFF(0, 0) = - --- x y - 1/50 x y - 3/40 x y - -- y 1000 200 20 257 3 11 129 101 3 33 3 2 199 2 + ---- y - -- y - ---- x + ---- x y + --- x + 1/8 x y - --- x 1000 40 2000 1000 200 400 2 2 2 1397 2 2 1129 + 1/4 x y - 3/20 x y + ----, COEFF(1, 0) = 1/4 x y + ---- x 2000 2000 149 3 2 3 3 2 - 7/40 x y + ---- x y - 1/400 x + 1/50 x y - 9/40 y - 7/20 x y 1000 2 603 243 3 33 3 2 31 2 3 - 9/20 y + ---- + ---- y - --- x + 1/8 x y - --- x y , COEFF(2, 0) = 2000 1000 200 200 2 2 101 3 11 3 3 3 2 - 1/4 x y + ---- x y + --- x - 1/150 x y - 1/8 x y + 3/40 y 3000 200 67 2 2 2 201 81 3 43 - 1/40 x y + --- x - 1/20 x y + 3/20 y - ---- - ---- y - ---- x 400 2000 1000 2000 27 2 3 11 2 2 2 29 3 11 + --- x y , COEFF(-1, 1) = - -- x y + 1/8 x y - --- x - -- x y 200 40 600 20 377 203 3 13 2 3 29 2 87 2 + ---- x + --- x y + 3/20 y - --- x y + --- x - ---- + 1/4 x y 6000 750 100 400 2000 3 3 3 2 261 2 3 + 1/300 x y - 9/125 y + 3/40 y , COEFF(0, 1) = ---- + 7/50 x y 2000 2 71 3 2 2 2 11 2 87 2 - 1/4 x y - --- y + 3/40 x y - 1/8 x y + 3/20 x y + -- y - --- x 250 40 400 3 3 31 3 377 11 29 3 87 2 - 1/100 x y - --- x y - ---- x + -- y + --- x , COEFF(1, 1) = --- x 500 2000 20 200 400 2 27 3 2 3 3 11 2 3 + 9/40 y + 9/20 y - --- y - 1/4 x y + 1/100 x y + --- x y 125 100 47 3 2 377 261 29 3 2 2 - --- x y + 7/40 x y + ---- x - ---- - --- x + 7/20 x y - 1/8 x y , 250 2000 2000 200 87 29 2 2 31 3 2 2 3 COEFF(2, 1) = ---- - --- x + 1/4 x y - ---- x y - 3/40 y - 3/25 x y 2000 400 1500 377 3 29 3 2 3 3 - 3/20 y - ---- x + 9/125 y + --- x + 1/40 x y + 1/20 x y - 1/300 x y 6000 600 2 2 2 3 3 3 + 1/8 x y , COEFF(-1, 2) = 1/400 x - 1/40 y - 1/50 x y + 7/1000 y 11 13 2 197 3 3 43 2 3 + --- x y + ---- x - 1/24 x y - 3/2000 - ---- x y - 1/600 x + --- x y 120 6000 3000 600 2 11 53 3 2 , COEFF(0, 2) = - 3/400 x - --- y - 1/40 x y - ---- x y + 1/24 x y 120 1000 13 3 3 3 437 3 79 2 3 - ---- x + 9/2000 + 3/50 x y + 1/200 x + ---- y - --- x y , 2000 3000 600 2 3 3 409 3 3 COEFF(1, 2) = 3/400 x - 3/40 y - 3/50 x y + ---- x y - 1/200 x 3000 21 3 2 29 2 3 13 + ---- y + 1/24 x y + --- x y - 7/120 x y - 9/2000 + ---- x, 1000 600 2000 2 53 3 3 COEFF(2, 2) = - 1/400 x + 3/2000 + 1/40 y - ---- x y - 7/1000 y 3000 3 3 13 2 2 3 3 + 1/50 x y - ---- x - 1/24 x y + 7/600 x y - 1/120 x y + 1/600 x ] 6000 > print_coeffs__lc_of_data(%, "coeffs_I->coeff_", "fp", > "2d.coeffs/2d.cube.order3.smooth0/coeffs-I.compute.c"); bytes used=27024116, alloc=2031244, time=1.82 bytes used=28024396, alloc=2031244, time=1.90 bytes used=29025884, alloc=2162292, time=1.99 bytes used=30026144, alloc=2162292, time=2.06 bytes used=31027088, alloc=2162292, time=2.12 bytes used=32027348, alloc=2162292, time=2.18 bytes used=33027500, alloc=2162292, time=2.24 bytes used=34027920, alloc=2162292, time=2.30 bytes used=35028400, alloc=2162292, time=2.38 bytes used=36028584, alloc=2162292, time=2.46 bytes used=37028772, alloc=2162292, time=2.56 bytes used=38028952, alloc=2162292, time=2.67 bytes used=39029156, alloc=2162292, time=2.73 bytes used=40029332, alloc=2162292, time=2.80 bytes used=41029504, alloc=2162292, time=2.92 bytes used=42029680, alloc=2162292, time=2.99 bytes used=43029840, alloc=2162292, time=3.09 bytes used=44030180, alloc=2162292, time=3.20 bytes used=45030460, alloc=2162292, time=3.31 bytes used=46030800, alloc=2162292, time=3.38 bytes used=47030988, alloc=2162292, time=3.48 bytes used=48031208, alloc=2162292, time=3.62 bytes used=49031368, alloc=2162292, time=3.76 > # d/dx > simplify( diff(interp_2d_cube_order3_smooth0,x) ); bytes used=50031616, alloc=2162292, time=3.86 bytes used=51059256, alloc=2162292, time=3.92 bytes used=52059500, alloc=2162292, time=3.99 3 13 13 13 6/5 x y c32 - ---- DATA(2, 2) + ---- DATA(1, 2) + ---- DATA(-1, 2) 6000 2000 6000 13 377 43 481 - ---- DATA(0, 2) - ---- DATA(2, 1) - ---- DATA(2, 0) - ---- DATA(2, -1) 2000 6000 2000 6000 2 2 2 91 39 + 3 c32 x y + 3 c31 x y + 1/20 y DATA(2, 1) + --- c32 - --- c31 100 500 129 1129 377 377 - ---- DATA(0, 0) + ---- DATA(1, 0) - ---- DATA(0, 1) + ---- DATA(1, 1) 2000 2000 2000 2000 2 2 3 21 2 3 13 - 3 x y c32 - 6/5 x y c32 - -- x y c31 - 3 x y c31 - -- y c31 25 10 13 3 91 3 13 2 + -- y c32 + --- y c31 - -- y c32 - 1/60 y DATA(2, -1) 25 250 10 21 2 2 - 3/40 y DATA(0, 0) - 7/40 y DATA(1, 0) - -- x c32 + 9/50 x c31 10 2 3 2 3 + 9/100 x y DATA(1, -1) + 1/50 x y DATA(-1, 0) 2 3 + 1/100 x y DATA(-1, 1) - 1/12 x y DATA(2, 2) + 1/12 x y DATA(1, 2) - 1/12 x y DATA(-1, 2) + 1/12 x y DATA(0, 2) + 1/2 x y DATA(2, 1) - 1/4 x y DATA(2, 0) - 1/6 x y DATA(2, -1) + 1/4 x y DATA(0, 0) 2 + 1/4 x y DATA(1, 0) - 1/2 x y DATA(0, 1) + 1/4 x y DATA(2, 1) 3 - 1/150 x y DATA(1, -1) - 1/2 x y DATA(1, 1) - 1/6 x y DATA(-1, -1) + 1/6 x y DATA(0, -1) + 1/6 x y DATA(1, -1) - 1/4 x y DATA(-1, 0) 11 + 3/20 y DATA(0, 1) + 7/20 y DATA(1, 1) + -- y DATA(-1, -1) 60 11 - 1/20 y DATA(0, -1) - 7/60 y DATA(1, -1) + -- y DATA(-1, 0) 40 11 53 3 - -- y DATA(-1, 1) - 1/40 y DATA(2, 0) - ---- y DATA(2, 2) 20 3000 409 3 197 3 53 3 + ---- y DATA(1, 2) - ---- y DATA(-1, 2) - ---- y DATA(0, 2) 3000 3000 1000 31 3 101 3 3 - ---- y DATA(2, 1) + ---- y DATA(2, 0) + 7/1500 y DATA(2, -1) 1500 3000 101 3 149 3 31 3 + ---- y DATA(0, 0) + ---- y DATA(1, 0) - --- y DATA(0, 1) 1000 1000 500 47 3 59 3 3 - --- y DATA(1, 1) + --- y DATA(-1, -1) + 7/500 y DATA(0, -1) 250 750 73 3 851 3 203 3 - --- y DATA(1, -1) - ---- y DATA(-1, 0) + --- y DATA(-1, 1) 750 3000 750 11 - 1/120 y DATA(2, 2) - 7/120 y DATA(1, 2) + --- y DATA(-1, 2) 120 2 2 - 1/40 y DATA(0, 2) + 1/40 y DATA(2, 1) - 1/20 y DATA(2, 0) 2 2 2 + 1/40 y DATA(2, -1) - 3/20 y DATA(0, 0) - 7/20 y DATA(1, 0) 3 2 3 + 7/300 x y DATA(2, 2) + 1/2 x y DATA(0, 0) - 4/75 x y DATA(2, -1) 79 3 2 3 2 - --- x y DATA(0, 2) - 3/50 x y DATA(-1, 2) - 1/4 x y DATA(1, 1) 300 31 3 3 2 - --- x y DATA(1, 0) + 7/25 x y DATA(0, 1) - 1/4 x y DATA(0, -1) 100 2 3 3 2 3 - 3/100 x y DATA(2, -1) - 6/25 x y DATA(2, 1) - 9/50 x y DATA(1, 2) 2 2 3 11 3 + 1/2 x y DATA(1, 0) - 1/100 x y DATA(2, 1) + -- x y DATA(1, 1) 50 19 3 21 2 - --- x y DATA(0, 0) + -- x c32 - 9/50 x c31 + 1/4 x y DATA(-1, 1) 100 10 2 2 - 1/2 x y DATA(2, 0) + 1/2 x y DATA(-1, 1) - 1/4 x y DATA(1, -1) 23 3 2 3 2 3 + --- x y DATA(-1, 0) - 1/50 x y DATA(2, 0) - 3/100 x y DATA(0, 1) 100 2 3 2 3 13 3 + 9/50 x y DATA(0, 2) - 3/50 x y DATA(0, 0) + -- x y DATA(0, -1) 75 2 2 29 3 + 1/4 x y DATA(2, -1) + 1/4 x y DATA(-1, -1) + --- x y DATA(1, 2) 300 2 2 3 2 3 - 1/4 x y DATA(0, 1) + 3/50 x y DATA(1, 0) + 3/50 x y DATA(2, 2) 17 3 13 3 43 3 - --- x y DATA(-1, -1) - -- x y DATA(-1, 1) + --- x y DATA(-1, 2) 150 50 300 27 3 2 2 + --- x y DATA(2, 0) - 1/2 x y DATA(-1, 0) + 3/40 y DATA(0, 1) 100 11 2 2 2 - -- y DATA(-1, -1) + 3/40 y DATA(0, -1) + 7/40 y DATA(1, -1) 40 11 2 11 2 2 + -- y DATA(-1, 0) - -- y DATA(-1, 1) + 1/200 x DATA(2, 2) 20 40 2 2 2 - 3/200 x DATA(1, 2) - 1/200 x DATA(-1, 2) + 3/200 x DATA(0, 2) 29 2 33 2 37 2 + --- x DATA(2, 1) + --- x DATA(2, 0) + --- x DATA(2, -1) 200 200 200 99 2 99 2 87 2 + --- x DATA(0, 0) - --- x DATA(1, 0) + --- x DATA(0, 1) 200 200 200 87 2 37 2 111 2 - --- x DATA(1, 1) - --- x DATA(-1, -1) + --- x DATA(0, -1) 200 200 200 111 2 33 2 29 2 - --- x DATA(1, -1) - --- x DATA(-1, 0) - --- x DATA(-1, 1) 200 200 200 2 - 1/200 x DATA(2, 2) + 3/200 x DATA(1, 2) + 7/40 y DATA(1, 1) 29 + 1/200 x DATA(-1, 2) - 3/200 x DATA(0, 2) - --- x DATA(2, 1) 200 67 37 199 + --- x DATA(2, 0) - --- x DATA(2, -1) - --- x DATA(0, 0) 200 200 200 87 87 - 1/200 x DATA(1, 0) - --- x DATA(0, 1) + --- x DATA(1, 1) 200 200 37 111 111 + --- x DATA(-1, -1) - --- x DATA(0, -1) + --- x DATA(1, -1) 200 200 200 133 29 21 3 481 + --- x DATA(-1, 0) + --- x DATA(-1, 1) + -- x y c31 + ---- DATA(-1, -1) 200 200 25 6000 481 481 957 - ---- DATA(0, -1) + ---- DATA(1, -1) - ---- DATA(-1, 0) 2000 2000 2000 377 2 3 2 3 + ---- DATA(-1, 1) + 3/100 x y DATA(1, 1) + 3/100 x y DATA(-1, -1) 6000 2 3 - 9/100 x y DATA(0, -1) > coeffs_as_lc_of_data(%, posn_list_2d_size4); bytes used=53061376, alloc=2162292, time=4.05 37 2 2 481 17 3 37 11 2 11 [COEFF(-1, -1) = - --- x + 1/4 x y + ---- - --- x y + --- x - -- y + -- y 200 6000 150 200 40 60 2 3 59 3 3 2 - 1/6 x y + 3/100 x y + --- y , COEFF(0, -1) = 7/500 y + 3/40 y 750 13 3 111 2 111 2 481 + -- x y + 1/6 x y + --- x - --- x - 1/4 x y - 1/20 y - ---- 75 200 200 2000 2 3 73 3 2 3 3 - 9/100 x y , COEFF(1, -1) = - --- y + 9/100 x y - 1/150 x y - 7/60 y 750 2 111 481 111 2 2 + 1/6 x y + 7/40 y + --- x + ---- - --- x - 1/4 x y , COEFF(2, -1) = 200 2000 200 3 2 3 3 2 37 2 - 4/75 x y - 1/6 x y - 3/100 x y - 1/60 y + 7/1500 y + 1/40 y + --- x 200 2 37 481 33 2 11 851 3 + 1/4 x y - --- x - ----, COEFF(-1, 0) = - --- x + -- y - ---- y 200 6000 200 40 3000 2 3 11 2 957 23 3 133 2 - 1/4 x y + 1/50 x y + -- y - ---- + --- x y + --- x - 1/2 x y , 20 2000 100 200 129 2 3 101 3 19 3 2 COEFF(0, 0) = - 3/40 y - ---- - 3/50 x y + ---- y - --- x y + 1/2 x y 2000 1000 100 2 199 99 2 31 3 - 3/20 y + 1/4 x y - --- x + --- x , COEFF(1, 0) = - --- x y 200 200 100 2 3 1129 2 2 99 2 149 3 + 3/50 x y + ---- + 1/2 x y - 7/40 y - 7/20 y - --- x + ---- y 2000 200 1000 2 33 2 2 - 1/200 x + 1/4 x y, COEFF(2, 0) = - 1/40 y - 1/20 y + --- x - 1/2 x y 200 27 3 101 3 2 3 43 67 + --- x y + ---- y - 1/50 x y - 1/4 x y - ---- + --- x, COEFF(-1, 1) 100 3000 2000 200 13 3 11 2 2 377 2 3 203 3 29 = - -- x y - -- y + 1/4 x y + ---- + 1/100 x y + --- y + --- x 50 40 6000 750 200 29 2 11 2 3 2 87 2 - --- x - -- y + 1/2 x y, COEFF(0, 1) = - 3/100 x y - 1/4 x y + --- x 200 20 200 2 31 3 3 377 87 + 3/40 y - --- y + 7/25 x y + 3/20 y - ---- - --- x - 1/2 x y, 500 2000 200 47 3 2 87 2 377 COEFF(1, 1) = 7/20 y - --- y - 1/2 x y - 1/4 x y - --- x + ---- 250 200 2000 2 11 3 87 2 3 + 7/40 y + -- x y + --- x + 3/100 x y , COEFF(2, 1) = 1/20 y 50 200 2 3 31 3 3 2 2 377 29 2 - 1/100 x y - ---- y - 6/25 x y + 1/40 y + 1/4 x y - ---- + --- x 1500 6000 200 29 11 2 13 197 3 + 1/2 x y - --- x, COEFF(-1, 2) = --- y - 1/200 x + ---- - ---- y 200 120 6000 3000 43 3 2 3 53 3 + --- x y - 1/12 x y - 3/50 x y + 1/200 x, COEFF(0, 2) = - ---- y 300 1000 2 3 13 2 79 3 - 1/40 y + 9/50 x y - ---- + 3/200 x - --- x y + 1/12 x y - 3/200 x, 2000 300 409 3 2 COEFF(1, 2) = 1/12 x y + ---- y - 3/200 x - 7/120 y + 3/200 x 3000 2 3 13 29 3 53 3 - 9/50 x y + ---- + --- x y , COEFF(2, 2) = - ---- y - 1/120 y 2000 300 3000 2 13 2 3 3 + 1/200 x - ---- - 1/200 x + 3/50 x y + 7/300 x y - 1/12 x y] 6000 > print_coeffs__lc_of_data(%, "coeffs_dx->coeff_", "fp", > "2d.coeffs/2d.cube.order3.smooth0/coeffs-dx.compute.c"); bytes used=54061732, alloc=2162292, time=4.12 bytes used=55062064, alloc=2162292, time=4.20 bytes used=56062456, alloc=2162292, time=4.27 bytes used=57062648, alloc=2162292, time=4.36 bytes used=58062912, alloc=2162292, time=4.46 bytes used=59063180, alloc=2162292, time=4.57 bytes used=60063412, alloc=2162292, time=4.65 bytes used=61063624, alloc=2162292, time=4.75 bytes used=62064392, alloc=2162292, time=4.84 bytes used=63064556, alloc=2162292, time=4.95 > # d/dy > simplify( diff(interp_2d_cube_order3_smooth0,y) ); bytes used=64064736, alloc=2162292, time=5.12 bytes used=65064892, alloc=2162292, time=5.17 3 3 2 c32 x y + c31 x + 1/40 DATA(2, 2) - 3/40 DATA(1, 2) - 1/40 DATA(-1, 2) 11 - --- DATA(0, 2) - 3/20 DATA(2, 1) + 3/40 DATA(2, 0) + 1/20 DATA(2, -1) 120 2 2 3 2 + 9/5 c32 x y - 3/20 y DATA(2, 1) - 6/5 c32 x y + 9/10 c31 11 11 - -- DATA(0, 0) - 9/40 DATA(1, 0) + -- DATA(0, 1) + 9/20 DATA(1, 1) 40 20 39 2 27 2 11 + -- x y c32 - -- y c32 - 3/20 y DATA(2, -1) - -- y DATA(0, 0) 25 25 10 2 - 9/10 y DATA(1, 0) - 3/2 x c31 + 1/20 x y DATA(2, 1) - 1/10 x y DATA(2, 0) + 1/20 x y DATA(2, -1) - 3/10 x y DATA(0, 0) 31 2 - 7/10 x y DATA(1, 0) + 3/20 x y DATA(0, 1) - --- x y DATA(2, 1) 500 11 + 7/20 x y DATA(1, 1) - -- x y DATA(-1, -1) + 3/20 x y DATA(0, -1) 20 11 2 + 7/20 x y DATA(1, -1) + -- x y DATA(-1, 0) + 1/4 x y DATA(2, -1) 10 2 2 2 + 1/2 x y DATA(0, 0) + 1/2 x y DATA(1, 0) - 1/4 x y DATA(0, 1) 2 2 2 - 1/4 x y DATA(1, 1) + 1/4 x y DATA(-1, -1) - 1/4 x y DATA(0, -1) 2 2 2 - 1/4 x y DATA(1, -1) - 1/2 x y DATA(-1, 0) + 1/4 x y DATA(-1, 1) 3 2 3 2 3 2 - 9/50 x y DATA(1, 2) - 3/50 x y DATA(-1, 2) + 9/50 x y DATA(0, 2) 3 2 3 2 3 2 - 1/100 x y DATA(2, 1) - 1/50 x y DATA(2, 0) + 3/50 x y DATA(2, 2) 3 2 3 2 - 9/100 x y DATA(0, -1) - 3/100 x y DATA(2, -1) 3 2 3 2 93 2 2 - 3/50 x y DATA(0, 0) + 3/50 x y DATA(1, 0) - --- x y DATA(1, 0) 200 21 2 2 3 2 3 2 + -- x y DATA(0, 1) - 3/100 x y DATA(0, 1) + 3/100 x y DATA(1, 1) 50 3 2 2 2 81 2 2 + 3/100 x y DATA(-1, -1) - 9/25 x y DATA(2, 1) + --- x y DATA(2, 0) 200 2 2 57 2 2 3 2 - 2/25 x y DATA(2, -1) - --- x y DATA(0, 0) + 1/100 x y DATA(-1, 1) 200 29 2 2 43 2 2 79 2 2 + --- x y DATA(1, 2) + --- x y DATA(-1, 2) - --- x y DATA(0, 2) 200 200 200 2 2 33 2 2 13 2 2 + 7/200 x y DATA(2, 2) + --- x y DATA(1, 1) + -- x y DATA(0, -1) 100 50 2 2 69 2 2 17 2 2 - 1/100 x y DATA(1, -1) + --- x y DATA(-1, 0) - --- x y DATA(-1, -1) 200 100 3 2 3 2 53 2 + 9/100 x y DATA(1, -1) + 1/50 x y DATA(-1, 0) - ---- x y DATA(2, 2) 1000 39 2 2 409 2 197 2 - --- x y DATA(-1, 1) + ---- x y DATA(1, 2) - ---- x y DATA(-1, 2) 100 1000 1000 159 2 11 - ---- x y DATA(0, 2) + -- y DATA(0, 1) + 9/20 y DATA(1, 1) 1000 20 11 + 3/20 y DATA(-1, -1) + -- y DATA(0, -1) + 9/20 y DATA(1, -1) 20 - 3/10 y DATA(-1, 0) + 3/20 y DATA(-1, 1) + 3/10 y DATA(2, 0) 27 2 243 2 2 + --- y DATA(2, 1) - ---- y DATA(2, 0) + 6/125 y DATA(2, -1) 125 1000 771 2 729 2 21 2 + ---- y DATA(0, 0) + ---- y DATA(1, 0) - ---- y DATA(2, 2) 1000 1000 1000 63 2 21 2 437 2 + ---- y DATA(1, 2) + ---- y DATA(-1, 2) + ---- y DATA(0, 2) 1000 1000 1000 2 2 189 2 273 2 + 1/4 x y DATA(2, 1) - 1/2 x y DATA(2, 0) - --- y c31 + --- x y c31 250 250 63 2 2 21 3 2 303 2 + 9/5 y c32 + -- x y c31 - -- x y c31 + ---- x y DATA(0, 0) 50 25 1000 141 2 21 2 447 2 - --- x y DATA(1, 1) + --- x y DATA(0, -1) + ---- x y DATA(1, 0) 250 500 1000 13 2 203 2 - 13/5 x y c32 - -- x c31 - 3 x y c32 + --- x y DATA(-1, 1) 10 250 101 2 11 73 2 + ---- x y DATA(2, 0) - -- x y DATA(-1, 1) - --- x y DATA(1, -1) 1000 20 250 2 59 2 93 2 + 7/500 x y DATA(2, -1) + --- x y DATA(-1, -1) - --- x y DATA(0, 1) 250 500 851 2 213 2 2 - ---- x y DATA(-1, 0) - --- y DATA(0, 1) - 6/125 y DATA(-1, -1) 1000 250 89 2 18 2 243 2 - --- y DATA(0, -1) - --- y DATA(1, -1) + ---- y DATA(-1, 0) 250 125 1000 27 2 2 2 - --- y DATA(-1, 1) - 1/24 x DATA(2, 2) + 1/24 x DATA(1, 2) 125 2 2 2 - 1/24 x DATA(-1, 2) + 1/24 x DATA(0, 2) + 1/4 x DATA(2, 1) 2 2 2 - 1/8 x DATA(2, 0) - 1/12 x DATA(2, -1) + 1/8 x DATA(0, 0) 2 2 2 + 1/8 x DATA(1, 0) - 1/4 x DATA(0, 1) - 1/4 x DATA(1, 1) 2 2 2 - 1/12 x DATA(-1, -1) + 1/12 x DATA(0, -1) + 1/12 x DATA(1, -1) 2 2 - 1/8 x DATA(-1, 0) + 1/4 x DATA(-1, 1) - 1/120 x DATA(2, 2) 81 2 11 - 7/120 x DATA(1, 2) - --- y DATA(1, 1) + --- x DATA(-1, 2) 125 120 - 1/40 x DATA(0, 2) + 1/20 x DATA(2, 1) - 1/40 x DATA(2, 0) - 1/60 x DATA(2, -1) - 3/40 x DATA(0, 0) - 7/40 x DATA(1, 0) 11 + 3/20 x DATA(0, 1) + 7/20 x DATA(1, 1) + -- x DATA(-1, -1) 60 11 - 1/20 x DATA(0, -1) - 7/60 x DATA(1, -1) + -- x DATA(-1, 0) 40 11 11 - -- x DATA(-1, 1) - 1/20 DATA(-1, -1) - -- DATA(0, -1) - 3/20 DATA(1, -1) 20 60 - 3/40 DATA(-1, 0) + 3/20 DATA(-1, 1) > coeffs_as_lc_of_data(%, posn_list_2d_size4); bytes used=66073540, alloc=2162292, time=5.24 17 2 2 3 2 11 59 2 [COEFF(-1, -1) = - --- x y - 1/20 + 3/100 x y + -- x + --- x y + 3/20 y 100 60 250 2 2 2 11 2 - 6/125 y - 1/12 x + 1/4 x y - -- x y, COEFF(0, -1) = 1/12 x 20 2 13 2 2 11 21 2 11 - 1/4 x y - 1/20 x + -- x y + 3/20 x y + -- y + --- x y - -- 50 20 500 60 3 2 89 2 2 2 2 - 9/100 x y - --- y , COEFF(1, -1) = - 3/20 - 1/4 x y - 1/100 x y 250 18 2 2 3 2 73 2 + 9/20 y + 7/20 x y - --- y + 1/12 x - 7/60 x + 9/100 x y - --- x y , 125 250 2 2 2 3 2 COEFF(2, -1) = 1/4 x y - 1/60 x + 1/20 - 2/25 x y - 3/100 x y 2 2 2 + 7/500 x y + 1/20 x y + 6/125 y - 1/12 x - 3/20 y, COEFF(-1, 0) = 11 851 2 2 69 2 2 3 2 - 3/40 + -- x y - ---- x y - 1/2 x y - 3/10 y + --- x y + 1/50 x y 10 1000 200 11 2 243 2 2 303 2 11 + -- x - 1/8 x + ---- y , COEFF(0, 0) = 1/8 x + ---- x y - -- y 40 1000 1000 10 3 2 11 2 771 2 57 2 2 - 3/50 x y - -- + 1/2 x y - 3/40 x + ---- y - --- x y - 3/10 x y, 40 1000 200 93 2 2 3 2 2 COEFF(1, 0) = - --- x y + 3/50 x y - 7/10 x y - 9/10 y + 1/2 x y 200 447 2 2 729 2 + ---- x y + 1/8 x + ---- y - 7/40 x - 9/40, COEFF(2, 0) = 3/40 1000 1000 2 81 2 2 2 101 2 243 2 - 1/2 x y + --- x y - 1/40 x - 1/8 x + ---- x y - ---- y - 1/10 x y 200 1000 1000 3 2 39 2 2 2 27 2 + 3/10 y - 1/50 x y , COEFF(-1, 1) = - --- x y + 3/20 + 1/4 x - --- y 100 125 3 2 11 203 2 11 2 + 1/100 x y + 3/20 y - -- x + --- x y - -- x y + 1/4 x y, COEFF(0, 1) 20 250 20 213 2 11 11 21 2 2 93 2 3 2 = - --- y + -- + -- y + -- x y - --- x y - 3/100 x y + 3/20 x 250 20 20 50 500 2 2 2 33 2 2 - 1/4 x y - 1/4 x + 3/20 x y, COEFF(1, 1) = 9/20 y - 1/4 x + --- x y 100 81 2 2 141 2 3 2 - --- y + 7/20 x - 1/4 x y - --- x y + 9/20 + 7/20 x y + 3/100 x y , 125 250 3 2 COEFF(2, 1) = - 1/100 x y - 3/20 + 1/20 x + 1/20 x y - 3/20 y 2 2 31 2 2 2 27 2 - 9/25 x y - --- x y + 1/4 x + 1/4 x y + --- y , COEFF(-1, 2) = 500 125 2 197 2 11 3 2 43 2 2 21 2 - 1/40 - 1/24 x - ---- x y + --- x - 3/50 x y + --- x y + ---- y , 1000 120 200 1000 COEFF(0, 2) = 79 2 2 159 2 3 2 2 11 437 2 - --- x y - 1/40 x - ---- x y + 9/50 x y + 1/24 x - --- + ---- y , 200 1000 120 1000 COEFF(1, 2) = 29 2 2 3 2 2 63 2 409 2 - 3/40 + --- x y - 7/120 x - 9/50 x y + 1/24 x + ---- y + ---- x y , 200 1000 1000 COEFF(2, 2) = 21 2 2 2 2 3 2 53 2 1/40 - ---- y - 1/24 x + 7/200 x y - 1/120 x + 3/50 x y - ---- x y ] 1000 1000 > print_coeffs__lc_of_data(%, "coeffs_dy->coeff_", "fp", > "2d.coeffs/2d.cube.order3.smooth0/coeffs-dy.compute.c"); bytes used=67073904, alloc=2162292, time=5.31 bytes used=68074096, alloc=2162292, time=5.38 bytes used=69074392, alloc=2162292, time=5.48 bytes used=70074612, alloc=2162292, time=5.54 bytes used=71074776, alloc=2162292, time=5.66 bytes used=72075172, alloc=2162292, time=5.73 bytes used=73075452, alloc=2162292, time=5.83 bytes used=74076084, alloc=2162292, time=5.90 bytes used=75076284, alloc=2162292, time=6.00 bytes used=76076484, alloc=2162292, time=6.08 bytes used=77083384, alloc=2162292, time=6.19 bytes used=78083548, alloc=2162292, time=6.27 bytes used=79083664, alloc=2162292, time=6.41 bytes used=80083872, alloc=2162292, time=6.49 bytes used=81084148, alloc=2162292, time=6.63 bytes used=82084408, alloc=2162292, time=6.75 > # d^2/dx^2 > simplify( diff(interp_2d_cube_order3_smooth0,x,x) ); bytes used=83085440, alloc=2162292, time=6.83 6 c31 x y - 1/200 DATA(2, 2) + 3/200 DATA(1, 2) + 1/200 DATA(-1, 2) 29 67 37 - 3/200 DATA(0, 2) - --- DATA(2, 1) + --- DATA(2, 0) - --- DATA(2, -1) 200 200 200 29 3 3 + 1/2 y DATA(2, 1) + --- y DATA(1, 2) + 7/300 y DATA(2, 2) 300 11 3 3 21 + -- y DATA(1, 1) + 1/25 x y DATA(-1, 0) + -- c32 - 9/50 c31 50 10 199 87 87 - --- DATA(0, 0) - 1/200 DATA(1, 0) - --- DATA(0, 1) + --- DATA(1, 1) 200 200 200 2 2 + 6 x y c32 - 3 y c32 - 21/5 x c32 - 1/6 y DATA(2, -1) + 1/4 y DATA(0, 0) + 1/4 y DATA(1, 0) - 1/2 y DATA(0, 1) - 1/2 y DATA(1, 1) - 1/6 y DATA(-1, -1) + 1/6 y DATA(0, -1) + 1/6 y DATA(1, -1) - 1/4 y DATA(-1, 0) + 1/2 y DATA(-1, 1) 3 19 3 - 1/4 y DATA(2, 0) + 7/25 y DATA(0, 1) - --- y DATA(0, 0) 100 3 27 3 3 - 4/75 y DATA(2, -1) + --- y DATA(2, 0) - 6/25 y DATA(2, 1) 100 79 3 13 3 23 3 - --- y DATA(0, 2) - -- y DATA(-1, 1) + --- y DATA(-1, 0) 300 50 100 3 13 3 17 3 - 1/150 y DATA(1, -1) + -- y DATA(0, -1) - --- y DATA(-1, -1) 75 150 31 3 2 2 - --- y DATA(1, 0) + 1/4 y DATA(2, 1) - 1/2 y DATA(2, 0) 100 2 2 2 + 1/4 y DATA(2, -1) + 1/2 y DATA(0, 0) + 1/2 y DATA(1, 0) + 9/25 x c31 2 2 2 - 3 y c31 - 1/4 y DATA(0, 1) + 1/4 y DATA(-1, -1) - 1/4 y DATA(0, -1) 2 2 2 - 1/4 y DATA(1, -1) - 1/2 y DATA(-1, 0) + 1/4 y DATA(-1, 1) 2 + 1/100 x DATA(2, 2) - 3/100 x DATA(1, 2) - 1/4 y DATA(1, 1) 29 - 1/100 x DATA(-1, 2) + 3/100 x DATA(0, 2) + --- x DATA(2, 1) 100 33 37 99 + --- x DATA(2, 0) + --- x DATA(2, -1) + --- x DATA(0, 0) 100 100 100 99 87 87 - --- x DATA(1, 0) + --- x DATA(0, 1) - --- x DATA(1, 1) 100 100 100 37 111 111 - --- x DATA(-1, -1) + --- x DATA(0, -1) - --- x DATA(1, -1) 100 100 100 33 29 21 3 3 - --- x DATA(-1, 0) - --- x DATA(-1, 1) + -- y c31 + 6/5 y c32 100 100 25 37 111 111 133 + --- DATA(-1, -1) - --- DATA(0, -1) + --- DATA(1, -1) + --- DATA(-1, 0) 200 200 200 200 29 42 3 3 3 + --- DATA(-1, 1) - -- x y c31 - 12/5 x y c32 - 9/50 x y DATA(0, -1) 200 25 3 3 3 + 9/50 x y DATA(1, -1) + 1/50 x y DATA(-1, 1) + 3/25 x y DATA(2, 2) 3 3 3 - 9/25 x y DATA(1, 2) - 3/25 x y DATA(-1, 2) + 9/25 x y DATA(0, 2) 3 3 3 - 1/50 x y DATA(2, 1) - 1/25 x y DATA(2, 0) - 3/50 x y DATA(2, -1) 3 3 3 - 3/25 x y DATA(0, 0) + 3/25 x y DATA(1, 0) - 3/50 x y DATA(0, 1) 3 3 + 3/50 x y DATA(1, 1) + 3/50 x y DATA(-1, -1) - 1/12 y DATA(2, 2) + 1/12 y DATA(1, 2) - 1/12 y DATA(-1, 2) + 1/12 y DATA(0, 2) 43 3 + --- y DATA(-1, 2) 300 > coeffs_as_lc_of_data(%, posn_list_2d_size4); 37 2 17 3 3 37 [COEFF(-1, -1) = - --- x + 1/4 y - --- y + 3/50 x y - 1/6 y + ---, 100 150 200 111 2 13 3 3 111 COEFF(0, -1) = - --- - 1/4 y + 1/6 y + -- y - 9/50 x y + --- x, 200 75 100 3 111 111 2 3 COEFF(1, -1) = 9/50 x y + --- - --- x - 1/4 y - 1/150 y + 1/6 y, 200 100 37 2 3 3 37 COEFF(2, -1) = - --- + 1/4 y - 1/6 y - 4/75 y - 3/50 x y + --- x, 200 100 23 3 133 2 33 3 COEFF(-1, 0) = --- y + --- - 1/4 y - 1/2 y - --- x + 1/25 x y , 100 200 100 199 19 3 99 2 3 COEFF(0, 0) = 1/4 y - --- - --- y + --- x + 1/2 y - 3/25 x y , 200 100 100 2 3 99 31 3 COEFF(1, 0) = 1/4 y + 1/2 y + 3/25 x y - --- x - 1/200 - --- y , 100 100 33 67 3 2 27 3 COEFF(2, 0) = --- x + --- - 1/25 x y - 1/2 y - 1/4 y + --- y , 100 200 100 29 13 3 3 29 2 COEFF(-1, 1) = - --- x - -- y + 1/50 x y + --- + 1/4 y + 1/2 y, 100 50 200 2 87 3 87 3 COEFF(0, 1) = - 1/4 y - --- - 1/2 y - 3/50 x y + --- x + 7/25 y , 200 100 87 3 2 87 11 3 COEFF(1, 1) = - --- x + 3/50 x y - 1/4 y + --- - 1/2 y + -- y , 100 200 50 3 29 2 3 29 COEFF(2, 1) = - 6/25 y + --- x + 1/4 y - 1/50 x y - --- + 1/2 y, 100 200 43 3 3 COEFF(-1, 2) = --- y - 1/100 x - 3/25 x y - 1/12 y + 1/200, 300 79 3 3 COEFF(0, 2) = 3/100 x - --- y - 3/200 + 1/12 y + 9/25 x y , 300 29 3 3 COEFF(1, 2) = - 3/100 x + --- y + 3/200 - 9/25 x y + 1/12 y, 300 3 3 COEFF(2, 2) = 1/100 x - 1/200 + 3/25 x y + 7/300 y - 1/12 y] > print_coeffs__lc_of_data(%, "coeffs_dxx->coeff_", "fp", > "2d.coeffs/2d.cube.order3.smooth0/coeffs-dxx.compute.c"); bytes used=84085660, alloc=2162292, time=6.91 bytes used=85085812, alloc=2162292, time=6.99 bytes used=86086048, alloc=2162292, time=7.09 bytes used=87086364, alloc=2162292, time=7.18 bytes used=88086596, alloc=2162292, time=7.29 bytes used=89086816, alloc=2162292, time=7.43 > # d^2/dxdy > simplify( diff(interp_2d_cube_order3_smooth0,x,y) ); bytes used=90086976, alloc=2162292, time=7.50 2 2 11 3 c31 x + 6 c32 x y - 1/120 DATA(2, 2) - 7/120 DATA(1, 2) + --- DATA(-1, 2) 120 - 1/40 DATA(0, 2) + 1/20 DATA(2, 1) - 1/40 DATA(2, 0) - 1/60 DATA(2, -1) 13 + 1/20 y DATA(2, 1) - -- c31 - 3/40 DATA(0, 0) - 7/40 DATA(1, 0) 10 2 39 2 + 3/20 DATA(0, 1) + 7/20 DATA(1, 1) + 18/5 x y c32 + -- y c32 25 + 1/2 x y DATA(2, -1) + 1/20 y DATA(2, -1) - 3/10 y DATA(0, 0) - 7/10 y DATA(1, 0) + 3/20 y DATA(0, 1) + 7/20 y DATA(1, 1) 11 - -- y DATA(-1, -1) + 3/20 y DATA(0, -1) + 7/20 y DATA(1, -1) 20 11 11 + -- y DATA(-1, 0) - -- y DATA(-1, 1) - 1/10 y DATA(2, 0) 10 20 31 2 101 2 2 - --- y DATA(2, 1) + ---- y DATA(2, 0) + 7/500 y DATA(2, -1) 500 1000 303 2 447 2 93 2 + ---- y DATA(0, 0) + ---- y DATA(1, 0) - 3 x c31 - --- y DATA(0, 1) 1000 1000 500 59 2 21 2 73 2 + --- y DATA(-1, -1) + --- y DATA(0, -1) - --- y DATA(1, -1) 250 500 250 851 2 203 2 - ---- y DATA(-1, 0) + --- y DATA(-1, 1) - 1/12 x DATA(2, 2) 1000 250 141 2 + 1/12 x DATA(1, 2) - --- y DATA(1, 1) - 1/12 x DATA(-1, 2) 250 + 1/12 x DATA(0, 2) + 1/2 x DATA(2, 1) - 1/4 x DATA(2, 0) - 1/6 x DATA(2, -1) + 1/4 x DATA(0, 0) + 1/4 x DATA(1, 0) - 1/2 x DATA(0, 1) - 1/2 x DATA(1, 1) - 1/6 x DATA(-1, -1) + 1/6 x DATA(0, -1) + 1/6 x DATA(1, -1) - 1/4 x DATA(-1, 0) 2 2 2 2 + 1/2 x DATA(-1, 1) + 3/100 x y DATA(-1, 1) + 3/50 x y DATA(-1, 0) 27 2 2 2 2 2 + --- x y DATA(1, -1) + 7/100 x y DATA(2, 2) - 3/100 x y DATA(2, 1) 100 2 2 2 2 2 2 - 9/50 x y DATA(0, 0) + 9/100 x y DATA(1, 1) - 9/100 x y DATA(0, 1) 27 2 2 2 2 2 2 - --- x y DATA(0, -1) + 9/100 x y DATA(-1, -1) + 9/50 x y DATA(1, 0) 100 43 2 79 2 18 2 + --- x y DATA(-1, 2) - --- x y DATA(0, 2) - -- x y DATA(2, 1) 100 100 25 2 2 27 2 2 2 2 + 9/50 x y DATA(2, 2) + -- x y DATA(0, 2) - 9/50 x y DATA(-1, 2) 50 27 2 2 2 2 2 2 - -- x y DATA(1, 2) - 9/100 x y DATA(2, -1) - 3/50 x y DATA(2, 0) 50 13 2 81 2 2 + -- x y DATA(0, -1) + --- x y DATA(2, 0) - 4/25 x y DATA(2, -1) 25 100 57 2 29 2 2 - --- x y DATA(0, 0) + --- x y DATA(1, 2) - 1/50 x y DATA(1, -1) 100 100 69 2 39 2 + --- x y DATA(-1, 0) - -- x y DATA(-1, 1) + 1/2 x y DATA(2, 1) 100 50 93 2 21 2 - x y DATA(2, 0) - --- x y DATA(1, 0) + -- x y DATA(0, 1) 100 25 33 2 17 2 + -- x y DATA(1, 1) - -- x y DATA(-1, -1) + 1/2 x y DATA(-1, -1) 50 50 - 1/2 x y DATA(1, -1) - x y DATA(-1, 0) + 1/2 x y DATA(-1, 1) - 1/2 x y DATA(0, -1) + x y DATA(0, 0) + x y DATA(1, 0) 159 2 - 1/2 x y DATA(0, 1) - 1/2 x y DATA(1, 1) - ---- y DATA(0, 2) 1000 409 2 53 2 197 2 + ---- y DATA(1, 2) - ---- y DATA(2, 2) - ---- y DATA(-1, 2) 1000 1000 1000 63 2 273 2 2 2 11 - 6 x y c32 + -- x y c31 + --- y c31 - 18/5 c32 x y + -- DATA(-1, -1) 25 250 60 11 11 - 1/20 DATA(0, -1) - 7/60 DATA(1, -1) + -- DATA(-1, 0) - -- DATA(-1, 1) 40 20 63 2 2 - 13/5 y c32 - -- x y c31 25 > coeffs_as_lc_of_data(%, posn_list_2d_size4); 11 17 2 59 2 2 2 11 [COEFF(-1, -1) = - -- y - 1/6 x - -- x y + 1/2 x y + --- y + 9/100 x y + -- 20 50 250 60 , COEFF(0, -1) = 21 2 13 2 27 2 2 - 1/20 + 1/6 x - 1/2 x y + --- y + -- x y + 3/20 y - --- x y , 500 25 100 COEFF(1, -1) = 2 73 2 27 2 2 - 1/2 x y - 1/50 x y + 1/6 x - 7/60 - --- y + --- x y + 7/20 y, 250 100 COEFF(2, -1) = 2 2 2 2 1/2 x y + 1/20 y - 9/100 x y - 4/25 x y - 1/6 x - 1/60 + 7/500 y , 851 2 2 2 11 11 69 2 COEFF(-1, 0) = -x y - ---- y + 3/50 x y - 1/4 x + -- + -- y + --- x y , 1000 40 10 100 COEFF(0, 0) = 57 2 2 2 303 2 - --- x y - 9/50 x y + x y + ---- y + 1/4 x - 3/10 y - 3/40, 100 1000 447 2 93 2 2 2 COEFF(1, 0) = 1/4 x + ---- y - --- x y + 9/50 x y + x y - 7/10 y - 7/40 1000 100 , COEFF(2, 0) = 101 2 2 2 81 2 -x y + ---- y - 1/4 x - 1/40 - 3/50 x y + --- x y - 1/10 y, 1000 100 203 2 11 11 39 2 2 2 COEFF(-1, 1) = --- y - -- + 1/2 x - -- y - -- x y + 3/100 x y + 1/2 x y 250 20 20 50 , COEFF(0, 1) = 93 2 21 2 2 2 3/20 + 3/20 y - 1/2 x y - --- y + -- x y - 1/2 x - 9/100 x y , 500 25 COEFF(1, 1) = 33 2 141 2 2 2 - 1/2 x + -- x y - --- y + 7/20 - 1/2 x y + 7/20 y + 9/100 x y , 50 250 COEFF(2, 1) = 2 2 31 2 18 2 - 3/100 x y + 1/2 x y + 1/20 + 1/2 x - --- y + 1/20 y - -- x y , 500 25 197 2 43 2 11 2 2 COEFF(-1, 2) = - 1/12 x - ---- y + --- x y + --- - 9/50 x y , 1000 100 120 159 2 27 2 2 79 2 COEFF(0, 2) = - 1/40 - ---- y + -- x y + 1/12 x - --- x y , 1000 50 100 27 2 2 29 2 409 2 COEFF(1, 2) = 1/12 x - -- x y + --- x y + ---- y - 7/120, 50 100 1000 53 2 2 2 2 COEFF(2, 2) = - ---- y - 1/12 x - 1/120 + 9/50 x y + 7/100 x y ] 1000 > print_coeffs__lc_of_data(%, "coeffs_dxy->coeff_", "fp", > "2d.coeffs/2d.cube.order3.smooth0/coeffs-dxy.compute.c"); bytes used=91087448, alloc=2162292, time=7.56 bytes used=92087608, alloc=2162292, time=7.64 bytes used=93087776, alloc=2162292, time=7.70 bytes used=94088036, alloc=2162292, time=7.82 bytes used=95088216, alloc=2162292, time=7.92 bytes used=96088436, alloc=2162292, time=8.04 bytes used=97088696, alloc=2162292, time=8.16 > # d^2/dy^2 > simplify( diff(interp_2d_cube_order3_smooth0,y,y) ); bytes used=98091880, alloc=2162292, time=8.28 2 18/5 c32 x y - 3/20 DATA(2, 1) + 3/10 DATA(2, 0) - 3/20 DATA(2, -1) 3 54 42 3 3 - 12/5 c32 x y + --- y DATA(2, 1) - -- c31 x y + 2 c32 x + 9/5 c32 125 25 11 11 - -- DATA(0, 0) - 9/10 DATA(1, 0) + -- DATA(0, 1) + 9/20 DATA(1, 1) 10 20 63 2 273 189 2 - 13/5 x c32 + -- x y c31 + --- x y c31 - --- y c31 - 3 x c32 25 125 125 81 2 2 57 2 + --- x y DATA(2, 0) - 4/25 x y DATA(2, -1) - --- x y DATA(0, 0) 100 100 93 2 21 2 33 2 - --- x y DATA(1, 0) + -- x y DATA(0, 1) + -- x y DATA(1, 1) 100 25 50 17 2 13 2 2 - -- x y DATA(-1, -1) + -- x y DATA(0, -1) - 1/50 x y DATA(1, -1) 50 25 53 409 + 7/250 x y DATA(2, -1) - --- x y DATA(2, 2) + --- x y DATA(1, 2) 500 500 197 159 3 - --- x y DATA(-1, 2) - --- x y DATA(0, 2) + 3/25 x y DATA(2, 2) 500 500 3 3 3 - 9/25 x y DATA(1, 2) - 3/25 x y DATA(-1, 2) + 9/25 x y DATA(0, 2) 3 3 3 - 1/50 x y DATA(2, 1) - 1/25 x y DATA(2, 0) - 3/50 x y DATA(2, -1) 3 437 12 - 3/25 x y DATA(0, 0) + --- y DATA(0, 2) + --- y DATA(2, -1) 500 125 771 729 213 + --- y DATA(0, 0) + --- y DATA(1, 0) - --- y DATA(0, 1) 500 500 125 162 12 89 - --- y DATA(1, 1) - --- y DATA(-1, -1) - --- y DATA(0, -1) 125 125 125 36 243 54 - --- y DATA(1, -1) + --- y DATA(-1, 0) - --- y DATA(-1, 1) 125 500 125 243 3 3 - --- y DATA(2, 0) + 3/25 x y DATA(1, 0) - 3/50 x y DATA(0, 1) 500 3 3 3 + 3/50 x y DATA(1, 1) + 3/50 x y DATA(-1, -1) + 9/50 x y DATA(1, -1) 3 3 3 + 1/25 x y DATA(-1, 0) + 1/50 x y DATA(-1, 1) - 9/50 x y DATA(0, -1) 29 2 2 79 2 + --- x y DATA(1, 2) + 7/100 x y DATA(2, 2) - --- x y DATA(0, 2) 100 100 43 2 18 2 2 + --- x y DATA(-1, 2) - -- x y DATA(2, 1) + 1/4 x DATA(2, 1) 100 25 2 2 2 - 1/2 x DATA(2, 0) + 1/4 x DATA(2, -1) + 1/2 x DATA(0, 0) 2 2 2 + 1/2 x DATA(1, 0) - 1/4 x DATA(0, 1) - 1/4 x DATA(1, 1) 2 21 63 + 1/4 x DATA(-1, -1) - --- y DATA(2, 2) + --- y DATA(1, 2) 500 500 21 2 2 + --- y DATA(-1, 2) + 1/4 x DATA(-1, 1) - 1/4 x DATA(0, -1) 500 2 2 69 2 - 1/2 x DATA(-1, 0) - 1/4 x DATA(1, -1) + --- x y DATA(-1, 0) 100 39 2 - -- x y DATA(-1, 1) + 1/20 x DATA(2, 1) - 1/10 x DATA(2, 0) 50 + 1/20 x DATA(2, -1) - 3/10 x DATA(0, 0) - 7/10 x DATA(1, 0) 11 + 3/20 x DATA(0, 1) + 7/20 x DATA(1, 1) - -- x DATA(-1, -1) 20 11 + 3/20 x DATA(0, -1) + 7/20 x DATA(1, -1) + -- x DATA(-1, 0) 10 11 31 101 - -- x DATA(-1, 1) - --- x y DATA(2, 1) + --- x y DATA(2, 0) 20 250 500 59 73 851 + --- x y DATA(-1, -1) - --- x y DATA(1, -1) - --- x y DATA(-1, 0) 125 125 500 203 21 303 + --- x y DATA(-1, 1) + --- x y DATA(0, -1) + --- x y DATA(0, 0) 125 250 500 447 93 141 + --- x y DATA(1, 0) - --- x y DATA(0, 1) - --- x y DATA(1, 1) 500 250 125 78 11 + -- x y c32 + 3/20 DATA(-1, -1) + -- DATA(0, -1) + 9/20 DATA(1, -1) 25 20 54 - 3/10 DATA(-1, 0) + 3/20 DATA(-1, 1) - -- y c32 25 > coeffs_as_lc_of_data(%, posn_list_2d_size4); bytes used=99092352, alloc=2227816, time=8.34 2 12 3 59 11 17 2 [COEFF(-1, -1) = 1/4 x - --- y + 3/50 y x + --- x y - -- x + 3/20 - -- y x , 125 125 20 50 21 13 2 3 89 11 2 COEFF(0, -1) = --- x y + -- y x - 9/50 y x - --- y + -- + 3/20 x - 1/4 x 250 25 125 20 , COEFF(1, -1) = 73 2 36 2 3 7/20 x - --- x y - 1/50 y x - --- y - 1/4 x + 9/50 y x + 9/20, 125 125 COEFF(2, -1) = 12 2 2 3 - 3/20 + --- y + 1/4 x - 4/25 y x - 3/50 y x + 7/250 x y + 1/20 x, 125 COEFF(-1, 0) = 11 69 2 2 243 3 851 -- x + --- y x - 1/2 x + --- y + 1/25 y x - 3/10 - --- x y, COEFF(0, 0) 10 100 500 500 57 2 771 3 11 2 303 = - --- y x + --- y - 3/25 y x - -- + 1/2 x - 3/10 x + --- x y, 100 500 10 500 COEFF(1, 0) = 3 729 2 93 2 447 3/25 y x + --- y + 1/2 x - 9/10 - --- y x + --- x y - 7/10 x, 500 100 500 COEFF(2, 0) = 243 2 101 81 2 3 - --- y - 1/2 x + 3/10 + --- x y + --- y x - 1/10 x - 1/25 y x , 500 500 100 COEFF(-1, 1) = 11 203 3 54 2 39 2 - -- x + --- x y + 1/50 y x - --- y + 1/4 x + 3/20 - -- y x , 20 125 125 50 11 3 213 21 2 2 93 COEFF(0, 1) = -- - 3/50 y x - --- y + -- y x + 3/20 x - 1/4 x - --- x y, 20 125 25 250 COEFF(1, 1) = 141 3 33 2 2 162 9/20 + 7/20 x - --- x y + 3/50 y x + -- y x - 1/4 x - --- y, COEFF(2, 1) 125 50 125 54 2 18 2 31 3 = - 3/20 + --- y + 1/4 x - -- y x - --- x y - 1/50 y x + 1/20 x, 125 25 250 3 21 197 43 2 COEFF(-1, 2) = - 3/25 y x + --- y - --- x y + --- y x , 500 500 100 3 159 79 2 437 COEFF(0, 2) = 9/25 y x - --- x y - --- y x + --- y, 500 100 500 29 2 3 63 409 COEFF(1, 2) = --- y x - 9/25 y x + --- y + --- x y, 100 500 500 2 53 3 21 COEFF(2, 2) = 7/100 y x - --- x y + 3/25 y x - --- y] 500 500 > print_coeffs__lc_of_data(%, "coeffs_dyy->coeff_", "fp", > "2d.coeffs/2d.cube.order3.smooth0/coeffs-dyy.compute.c"); bytes used=100092548, alloc=2227816, time=8.41 bytes used=101092996, alloc=2227816, time=8.49 bytes used=102093148, alloc=2227816, time=8.61 bytes used=103093312, alloc=2227816, time=8.69 bytes used=104093644, alloc=2227816, time=8.84 bytes used=105093832, alloc=2227816, time=8.92 bytes used=106093996, alloc=2227816, time=9.05 > ################################################################################ > # # 2d, cube, order=4, smoothing=0 (size=5) # > # interpolating polynomial > interp_2d_cube_order4_smooth0 > := Lagrange_polynomial_interpolant(fn_2d_order4, coeffs_list_2d_order4, > coords_list_2d, posn_list_2d_size5); bytes used=107094420, alloc=2227816, time=9.13 bytes used=108095396, alloc=2227816, time=9.19 bytes used=109095660, alloc=2227816, time=9.25 bytes used=110095928, alloc=2227816, time=9.31 bytes used=111096132, alloc=2227816, time=9.36 bytes used=112096424, alloc=2227816, time=9.43 bytes used=113096732, alloc=2227816, time=9.50 bytes used=114097080, alloc=2227816, time=9.57 bytes used=115097268, alloc=2227816, time=9.64 bytes used=116097436, alloc=2227816, time=9.71 bytes used=117097712, alloc=2227816, time=9.77 bytes used=118100480, alloc=2227816, time=9.84 bytes used=119101300, alloc=2227816, time=9.90 bytes used=120101536, alloc=2227816, time=9.96 bytes used=121102272, alloc=2227816, time=10.03 bytes used=122103488, alloc=2227816, time=10.09 bytes used=123103664, alloc=2227816, time=10.14 bytes used=124103840, alloc=2227816, time=10.21 bytes used=125104372, alloc=2227816, time=10.28 interp_2d_cube_order4_smooth0 := (- 1/24 DATA(0, 2) - 5/4 DATA(0, 0) 2 + 2/3 DATA(0, 1) - 1/24 DATA(0, -2) + 2/3 DATA(0, -1)) y + DATA(0, 0) + ( - 1/576 DATA(2, 2) + 1/144 DATA(1, 2) + 1/144 DATA(-1, 2) - 1/96 DATA(0, 2) + 1/36 DATA(2, 1) - 5/96 DATA(2, 0) + 1/36 DATA(2, -1) - 5/16 DATA(0, 0) + 5/24 DATA(1, 0) + 1/6 DATA(0, 1) - 1/9 DATA(1, 1) - 1/576 DATA(-2, 2) + 1/36 DATA(-2, 1) - 5/96 DATA(-2, 0) + 1/36 DATA(-2, -1) - 1/576 DATA(2, -2) + 1/144 DATA(1, -2) - 1/96 DATA(0, -2) + 1/144 DATA(-1, -2) - 1/576 DATA(-2, -2) - 1/9 DATA(-1, -1) + 1/6 DATA(0, -1) - 1/9 DATA(1, -1) + 5/24 DATA(-1, 0) - 1/9 DATA(-1, 1)) 4 2 x y + (- 1/288 DATA(2, 2) + 1/72 DATA(1, 2) + 1/72 DATA(-1, 2) - 1/48 DATA(0, 2) + 1/36 DATA(2, 1) - 1/36 DATA(2, -1) + 1/6 DATA(0, 1) - 1/9 DATA(1, 1) - 1/288 DATA(-2, 2) + 1/36 DATA(-2, 1) - 1/36 DATA(-2, -1) + 1/288 DATA(2, -2) - 1/72 DATA(1, -2) + 1/48 DATA(0, -2) - 1/72 DATA(-1, -2) + 1/288 DATA(-2, -2) + 1/9 DATA(-1, -1) - 1/6 DATA(0, -1) + 1/9 DATA(1, -1) - 1/9 DATA(-1, 1)) 4 x y + (1/144 DATA(2, 2) - 1/72 DATA(1, 2) + 1/72 DATA(-1, 2) - 1/72 DATA(2, 1) + 1/72 DATA(2, -1) - 1/72 DATA(-2, -1) + 1/36 DATA(1, 1) - 1/144 DATA(-2, 2) + 1/72 DATA(-2, 1) + 1/144 DATA(-2, -2) - 1/144 DATA(2, -2) + 1/72 DATA(1, -2) - 1/72 DATA(-1, -2) 3 3 + 1/36 DATA(-1, -1) - 1/36 DATA(1, -1) - 1/36 DATA(-1, 1)) x y + ( - 1/288 DATA(2, 2) + 1/144 DATA(1, 2) - 1/144 DATA(-1, 2) + 1/18 DATA(2, 1) - 5/48 DATA(2, 0) + 1/18 DATA(2, -1) + 5/24 DATA(1, 0) - 1/9 DATA(1, 1) + 1/288 DATA(-2, 2) - 1/18 DATA(-2, 1) + 5/48 DATA(-2, 0) - 1/18 DATA(-2, -1) - 1/288 DATA(2, -2) + 1/144 DATA(1, -2) - 1/144 DATA(-1, -2) + 1/288 DATA(-2, -2) + 1/9 DATA(-1, -1) 3 2 - 1/9 DATA(1, -1) - 5/24 DATA(-1, 0) + 1/9 DATA(-1, 1)) x y + ( - 1/144 DATA(2, 2) + 1/72 DATA(1, 2) - 1/72 DATA(-1, 2) + 1/18 DATA(2, 1) - 1/18 DATA(2, -1) - 1/9 DATA(1, 1) + 1/144 DATA(-2, 2) - 1/18 DATA(-2, 1) + 1/18 DATA(-2, -1) + 1/144 DATA(2, -2) - 1/72 DATA(1, -2) + 1/72 DATA(-1, -2) - 1/144 DATA(-2, -2) - 1/9 DATA(-1, -1) 3 + 1/9 DATA(1, -1) + 1/9 DATA(-1, 1)) x y + (- 1/288 DATA(2, 2) + 1/36 DATA(1, 2) - 1/36 DATA(-1, 2) + 1/72 DATA(2, 1) - 1/48 DATA(2, 0) + 1/72 DATA(2, -1) + 1/6 DATA(1, 0) - 1/9 DATA(1, 1) + 1/288 DATA(-2, 2) - 1/72 DATA(-2, 1) + 1/48 DATA(-2, 0) - 1/72 DATA(-2, -1) - 1/288 DATA(2, -2) + 1/36 DATA(1, -2) - 1/36 DATA(-1, -2) + 1/288 DATA(-2, -2) + 1/9 DATA(-1, -1) - 1/9 DATA(1, -1) 4 - 1/6 DATA(-1, 0) + 1/9 DATA(-1, 1)) x y + (- 1/576 DATA(2, 2) + 1/36 DATA(1, 2) + 1/36 DATA(-1, 2) - 5/96 DATA(0, 2) + 1/144 DATA(2, 1) - 1/96 DATA(2, 0) + 1/144 DATA(2, -1) - 5/16 DATA(0, 0) + 1/6 DATA(1, 0) + 5/24 DATA(0, 1) - 1/9 DATA(1, 1) - 1/576 DATA(-2, 2) + 1/144 DATA(-2, 1) - 1/96 DATA(-2, 0) + 1/144 DATA(-2, -1) - 1/576 DATA(2, -2) + 1/36 DATA(1, -2) - 5/96 DATA(0, -2) + 1/36 DATA(-1, -2) - 1/576 DATA(-2, -2) - 1/9 DATA(-1, -1) + 5/24 DATA(0, -1) 2 4 - 1/9 DATA(1, -1) + 1/6 DATA(-1, 0) - 1/9 DATA(-1, 1)) x y + ( 1/576 DATA(2, 2) - 1/144 DATA(1, 2) - 1/144 DATA(-1, 2) + 1/96 DATA(0, 2) - 1/144 DATA(2, 1) + 1/96 DATA(2, 0) - 1/144 DATA(2, -1) + 1/16 DATA(0, 0) - 1/24 DATA(1, 0) - 1/24 DATA(0, 1) + 1/36 DATA(1, 1) + 1/576 DATA(-2, 2) - 1/144 DATA(-2, 1) + 1/96 DATA(-2, 0) - 1/144 DATA(-2, -1) + 1/576 DATA(2, -2) - 1/144 DATA(1, -2) + 1/96 DATA(0, -2) - 1/144 DATA(-1, -2) + 1/576 DATA(-2, -2) + 1/36 DATA(-1, -1) - 1/24 DATA(0, -1) + 1/36 DATA(1, -1) - 1/24 DATA(-1, 0) 4 4 + 1/36 DATA(-1, 1)) x y + (1/288 DATA(2, 2) - 1/144 DATA(1, 2) + 1/144 DATA(-1, 2) - 1/72 DATA(2, 1) + 1/48 DATA(2, 0) - 1/72 DATA(2, -1) + 1/24 DATA(-1, 0) - 1/24 DATA(1, 0) + 1/36 DATA(1, 1) - 1/288 DATA(-2, 2) + 1/72 DATA(-2, 1) - 1/48 DATA(-2, 0) + 1/72 DATA(-2, -1) + 1/288 DATA(2, -2) - 1/144 DATA(1, -2) + 1/144 DATA(-1, -2) - 1/288 DATA(-2, -2) - 1/36 DATA(-1, -1) + 1/36 DATA(1, -1) 3 4 - 1/36 DATA(-1, 1)) x y + (1/144 DATA(2, 2) - 1/18 DATA(1, 2) + 1/18 DATA(-1, 2) - 1/18 DATA(2, 1) + 1/18 DATA(2, -1) + 4/9 DATA(1, 1) - 1/144 DATA(-2, 2) + 1/18 DATA(-2, 1) - 1/18 DATA(-2, -1) - 1/144 DATA(2, -2) + 1/18 DATA(1, -2) - 1/18 DATA(-1, -2) + 1/144 DATA(-2, -2) + 4/9 DATA(-1, -1) - 4/9 DATA(1, -1) - 4/9 DATA(-1, 1)) x y + (1/288 DATA(2, 2) - 1/36 DATA(1, 2) + 1/36 DATA(-1, 2) - 1/18 DATA(2, 1) + 5/48 DATA(2, 0) - 1/18 DATA(2, -1) - 5/6 DATA(1, 0) + 4/9 DATA(1, 1) - 1/288 DATA(-2, 2) + 1/18 DATA(-2, 1) - 5/48 DATA(-2, 0) + 1/18 DATA(-2, -1) + 1/288 DATA(2, -2) - 1/36 DATA(1, -2) + 1/36 DATA(-1, -2) - 1/288 DATA(-2, -2) - 4/9 DATA(-1, -1) + 4/9 DATA(1, -1) + 5/6 DATA(-1, 0) - 4/9 DATA(-1, 1)) 2 / x y + |1/576 DATA(2, 2) - 1/36 DATA(1, 2) - 1/36 DATA(-1, 2) \ + 5/96 DATA(0, 2) - 1/36 DATA(2, 1) + 5/96 DATA(2, 0) - 1/36 DATA(2, -1) 25 + -- DATA(0, 0) - 5/6 DATA(1, 0) - 5/6 DATA(0, 1) + 4/9 DATA(1, 1) 16 + 1/576 DATA(-2, 2) - 1/36 DATA(-2, 1) + 5/96 DATA(-2, 0) - 1/36 DATA(-2, -1) + 1/576 DATA(2, -2) - 1/36 DATA(1, -2) + 5/96 DATA(0, -2) - 1/36 DATA(-1, -2) + 1/576 DATA(-2, -2) + 4/9 DATA(-1, -1) - 5/6 DATA(0, -1) + 4/9 DATA(1, -1) - 5/6 DATA(-1, 0) \ 2 2 + 4/9 DATA(-1, 1)| x y + (1/288 DATA(2, 2) - 1/18 DATA(1, 2) / - 1/18 DATA(-1, 2) + 5/48 DATA(0, 2) - 1/36 DATA(2, 1) + 1/36 DATA(2, -1) - 5/6 DATA(0, 1) + 4/9 DATA(1, 1) + 1/288 DATA(-2, 2) - 1/36 DATA(-2, 1) + 1/36 DATA(-2, -1) - 1/288 DATA(2, -2) + 1/18 DATA(1, -2) - 5/48 DATA(0, -2) + 1/18 DATA(-1, -2) - 1/288 DATA(-2, -2) - 4/9 DATA(-1, -1) + 5/6 DATA(0, -1) - 4/9 DATA(1, -1) + 4/9 DATA(-1, 1)) 2 x y + (1/288 DATA(2, 2) - 1/72 DATA(1, 2) - 1/72 DATA(-1, 2) + 1/48 DATA(0, 2) - 1/144 DATA(2, 1) + 1/144 DATA(2, -1) - 1/36 DATA(1, -1) - 1/24 DATA(0, 1) + 1/36 DATA(1, 1) + 1/288 DATA(-2, 2) - 1/144 DATA(-2, 1) + 1/144 DATA(-2, -1) - 1/288 DATA(2, -2) + 1/72 DATA(1, -2) - 1/48 DATA(0, -2) + 1/72 DATA(-1, -2) - 1/288 DATA(-2, -2) - 1/36 DATA(-1, -1) + 1/24 DATA(0, -1) 4 3 + 1/36 DATA(-1, 1)) x y + (1/24 DATA(0, 2) + 1/4 DATA(0, 0) 4 - 1/6 DATA(0, 1) + 1/24 DATA(0, -2) - 1/6 DATA(0, -1)) y + ( 1/24 DATA(2, 0) + 1/4 DATA(0, 0) - 1/6 DATA(1, 0) + 1/24 DATA(-2, 0) 4 - 1/6 DATA(-1, 0)) x + (- 1/12 DATA(2, 0) + 2/3 DATA(1, 0) + 1/12 DATA(-2, 0) - 2/3 DATA(-1, 0)) x + (- 1/24 DATA(2, 0) - 5/4 DATA(0, 0) + 2/3 DATA(1, 0) - 1/24 DATA(-2, 0) 2 + 2/3 DATA(-1, 0)) x + 3 (1/12 DATA(0, 2) - 1/6 DATA(0, 1) - 1/12 DATA(0, -2) + 1/6 DATA(0, -1)) y + (- 1/12 DATA(0, 2) + 2/3 DATA(0, 1) + 1/12 DATA(0, -2) - 2/3 DATA(0, -1)) y + (- 1/144 DATA(2, 2) + 1/18 DATA(1, 2) - 1/18 DATA(-1, 2) + 1/72 DATA(2, 1) - 1/72 DATA(2, -1) - 1/9 DATA(1, 1) + 1/144 DATA(-2, 2) - 1/72 DATA(-2, 1) + 1/72 DATA(-2, -1) + 1/144 DATA(2, -2) - 1/18 DATA(1, -2) + 1/18 DATA(-1, -2) - 1/144 DATA(-2, -2) 3 - 1/9 DATA(-1, -1) + 1/9 DATA(1, -1) + 1/9 DATA(-1, 1)) x y + ( - 1/288 DATA(2, 2) + 1/18 DATA(1, 2) + 1/18 DATA(-1, 2) - 5/48 DATA(0, 2) + 1/144 DATA(2, 1) - 1/144 DATA(2, -1) + 5/24 DATA(0, 1) - 1/9 DATA(1, 1) - 1/288 DATA(-2, 2) + 1/144 DATA(-2, 1) - 1/144 DATA(-2, -1) + 1/288 DATA(2, -2) - 1/18 DATA(1, -2) + 5/48 DATA(0, -2) - 1/18 DATA(-1, -2) + 1/288 DATA(-2, -2) + 1/9 DATA(-1, -1) 2 3 - 5/24 DATA(0, -1) + 1/9 DATA(1, -1) - 1/9 DATA(-1, 1)) x y + 3 (1/12 DATA(2, 0) - 1/6 DATA(1, 0) - 1/12 DATA(-2, 0) + 1/6 DATA(-1, 0)) x > # I > coeffs_as_lc_of_data(%, posn_list_2d_size5); bytes used=126126424, alloc=2227816, time=10.34 bytes used=127129732, alloc=2227816, time=10.40 4 2 3 3 2 [COEFF(-2, -2) = 1/288 x y + 1/288 x y - 1/144 x y - 1/288 y x 2 4 4 3 4 2 2 3 - 1/576 x y - 1/288 x y + 1/288 x y + 1/576 x y - 1/144 y x 2 3 2 3 3 3 4 - 1/288 x y + 1/288 x y + 1/144 x y + 1/144 x y - 1/288 x y 4 2 4 4 2 2 4 3 - 1/576 x y + 1/576 x y , COEFF(-1, -2) = - 1/36 x y + 1/72 x y 4 2 4 3 2 2 4 - 1/72 x y + 1/18 y x - 1/36 x y - 1/144 x y + 1/36 x y 4 2 4 4 3 3 4 2 3 + 1/144 x y - 1/144 x y + 1/18 x y + 1/144 x y - 1/18 x y 3 3 2 3 3 - 1/18 x y - 1/72 x y + 1/36 x y + 1/72 y x , COEFF(0, -2) = - 1/12 y 4 4 4 2 2 3 2 + 1/24 y + 1/48 x y - 1/96 x y + 5/48 x y + 1/12 y - 5/48 y x 2 4 4 3 4 4 2 2 2 - 5/96 x y - 1/48 x y + 1/96 x y + 5/96 x y - 1/24 y , 4 3 3 2 2 4 COEFF(1, -2) = 1/18 x y + 1/72 x y + 1/144 x y + 1/18 y x + 1/36 x y 4 2 3 4 3 3 4 4 + 1/144 x y - 1/72 y x - 1/72 x y + 1/72 x y - 1/144 x y 3 2 3 2 2 4 3 4 - 1/18 x y - 1/18 x y - 1/36 x y + 1/36 x y - 1/144 x y 2 2 2 4 2 2 3 - 1/36 x y , COEFF(2, -2) = - 1/576 x y - 1/288 y x + 1/288 x y 4 4 3 3 4 4 2 + 1/576 x y + 1/144 y x + 1/288 x y - 1/144 x y - 1/576 x y 4 3 2 3 2 3 4 - 1/288 x y + 1/288 x y - 1/288 x y + 1/144 x y - 1/288 x y 3 3 2 2 4 4 - 1/144 x y + 1/576 x y + 1/288 x y, COEFF(-2, -1) = - 1/36 x y 2 2 3 2 2 3 3 3 + 1/36 y x - 1/144 x y - 1/36 x y + 1/18 y x - 1/72 x y 2 4 3 4 2 4 3 + 1/144 x y + 1/72 x y - 1/18 x y + 1/36 x y + 1/144 x y 2 3 2 4 4 4 3 4 + 1/18 x y - 1/18 x y - 1/144 x y - 1/72 x y + 1/72 x y , 2 4 3 3 3 4 COEFF(-1, -1) = - 1/9 x y + 4/9 x y - 1/9 x y + 1/36 x y + 1/9 x y 2 2 4 2 3 2 2 2 4 4 + 4/9 x y - 1/9 x y + 1/9 x y - 4/9 x y - 4/9 y x + 1/36 x y 4 3 4 3 4 3 2 3 + 1/9 x y - 1/36 x y - 1/9 y x - 1/36 x y + 1/9 x y , COEFF(0, -1) 4 4 4 2 4 3 2 2 = - 1/24 x y + 1/6 x y - 1/6 y + 1/6 y + 5/6 y x - 2/3 y + 2/3 y 2 3 2 4 4 4 3 2 2 - 5/24 x y + 5/24 x y - 1/6 x y + 1/24 x y - 5/6 x y , 3 3 2 4 2 2 4 2 4 COEFF(1, -1) = - 1/36 x y - 1/9 x y + 4/9 x y - 1/9 x y + 1/9 x y 2 3 3 2 2 3 4 3 - 4/9 x y + 1/9 x y - 1/9 x y - 4/9 y x + 1/9 x y - 1/36 x y 2 4 4 3 4 4 3 + 4/9 x y + 1/36 x y + 1/36 x y - 1/9 x y + 1/9 y x , COEFF(2, -1) 4 4 4 4 2 4 2 2 = 1/18 x y - 1/144 x y - 1/36 x y + 1/36 x y + 1/72 x y - 1/36 x y 3 3 3 4 3 3 4 2 4 + 1/72 x y - 1/18 y x + 1/144 x y - 1/72 x y + 1/144 x y 2 2 3 2 3 3 2 - 1/18 x y + 1/36 y x - 1/72 x y - 1/144 x y + 1/18 x y , 4 2 3 3 4 2 2 4 COEFF(-2, 0) = - 5/96 x y - 1/12 x - 1/48 x y + 5/96 x y + 1/24 x 4 2 4 4 4 2 2 3 2 + 1/48 x y - 1/96 x y + 1/96 x y - 5/48 x y - 1/24 x + 5/48 x y 4 4 4 2 4 2 + 1/12 x, COEFF(-1, 0) = - 1/24 x y - 1/6 x y + 5/6 x y + 5/24 x y 3 4 3 2 2 3 4 2 2 + 1/24 x y - 5/24 x y + 2/3 x + 1/6 x - 1/6 x - 2/3 x - 5/6 x y 2 4 4 2 4 2 4 25 2 2 + 1/6 x y , COEFF(0, 0) = - 5/16 x y + 1/4 x - 5/16 x y + -- x y 16 4 4 4 2 2 2 2 + 1/16 x y + 1/4 y + 1 - 5/4 y - 5/4 x , COEFF(1, 0) = - 5/6 x y 2 4 2 4 4 4 4 3 4 + 1/6 x y + 2/3 x - 1/24 x y + 1/6 x y - 1/6 x - 1/24 x y + 2/3 x 3 2 2 3 4 2 4 + 5/24 x y - 5/6 x y - 1/6 x + 5/24 x y , COEFF(2, 0) = - 1/48 x y 4 2 4 4 2 4 4 2 + 1/24 x + 5/48 x y - 1/12 x + 1/96 x y - 1/96 x y - 5/96 x y 3 2 3 4 3 2 2 2 + 1/12 x - 1/24 x + 1/48 x y - 5/48 x y + 5/96 x y , COEFF(-2, 1) 3 4 2 3 2 3 2 = - 1/72 x y + 1/36 x y + 1/144 x y - 1/36 y x - 1/18 x y 2 4 4 3 3 3 3 4 + 1/18 x y + 1/144 x y - 1/144 x y + 1/72 x y + 1/72 x y 2 3 2 2 4 4 4 2 + 1/18 x y - 1/18 y x - 1/36 x y - 1/144 x y + 1/36 x y 4 3 3 3 3 4 2 - 1/72 x y , COEFF(-1, 1) = 1/9 x y - 1/36 x y + 1/9 y x - 1/9 x y 3 4 4 4 3 4 4 2 4 2 - 1/36 x y - 1/9 x y + 1/36 x y + 1/36 x y - 1/9 x y - 4/9 x y 2 2 2 2 3 3 2 4 + 4/9 y x + 4/9 x y - 1/9 x y + 1/9 x y - 4/9 x y + 1/9 x y , 4 2 2 3 2 4 4 4 COEFF(0, 1) = 1/6 x y + 5/24 x y + 2/3 y + 2/3 y - 1/24 x y - 1/6 y 4 4 3 2 2 2 2 4 3 + 1/6 x y - 1/24 x y - 5/6 x y - 5/6 y x + 5/24 x y - 1/6 y , 2 4 3 3 4 3 COEFF(1, 1) = 4/9 x y + 1/36 x y - 1/9 x y - 1/9 x y - 1/9 y x 3 2 3 3 2 2 2 4 4 4 - 1/9 x y + 1/36 x y + 4/9 x y - 1/9 x y + 1/36 x y + 4/9 x y 2 3 4 2 4 2 3 4 - 1/9 x y - 1/9 x y - 1/9 x y + 4/9 y x + 1/36 x y , COEFF(2, 1) = 4 2 3 4 3 2 2 3 1/36 x y - 1/18 x y + 1/18 y x + 1/36 x y + 1/18 x y + 1/144 x y 2 4 3 2 4 4 2 4 - 1/18 x y - 1/144 x y - 1/36 y x - 1/144 x y + 1/144 x y 3 4 3 2 2 3 3 4 - 1/72 x y + 1/72 x y - 1/36 x y - 1/72 x y + 1/72 x y , 4 2 4 4 2 4 COEFF(-2, 2) = - 1/288 x y + 1/288 y x + 1/576 x y - 1/576 x y 3 3 4 4 3 2 2 + 1/144 x y - 1/288 x y - 1/144 x y + 1/288 x y + 1/576 x y 2 3 2 4 2 4 3 3 - 1/288 x y - 1/288 x y - 1/576 x y + 1/288 x y - 1/144 x y 3 2 3 4 3 4 2 + 1/288 x y + 1/144 y x , COEFF(-1, 2) = - 1/72 x y + 1/144 x y 4 4 4 3 3 3 2 4 - 1/144 x y + 1/72 x y - 1/72 y x + 1/72 x y + 1/36 x y 2 2 2 3 2 3 2 2 - 1/36 x y + 1/18 x y + 1/18 x y - 1/18 y x - 1/144 x y + 1/36 x y 3 4 3 4 4 2 - 1/18 x y - 1/36 x y + 1/144 x y , COEFF(0, 2) = - 1/96 x y 2 4 3 2 4 4 2 - 1/24 y + 1/48 x y - 5/96 x y + 1/24 y + 5/48 y x - 1/12 y 4 4 2 2 3 4 2 3 + 1/96 x y + 5/96 x y + 1/12 y - 1/48 x y - 5/48 x y , COEFF(1, 2) 4 3 4 4 2 3 4 = - 1/72 x y - 1/144 x y - 1/36 x y - 1/144 x y - 1/18 x y 3 2 3 2 4 3 3 + 1/18 x y - 1/18 y x + 1/144 x y + 1/36 x y - 1/72 x y 2 4 2 3 4 2 2 2 4 + 1/36 x y + 1/18 x y + 1/144 x y - 1/36 x y + 1/72 x y 3 4 3 4 2 4 4 + 1/72 y x , COEFF(2, 2) = 1/288 x y - 1/576 x y + 1/576 x y 4 2 3 4 3 - 1/288 x y + 1/288 x y + 1/288 x y + 1/144 x y - 1/144 x y 2 3 2 4 3 3 2 4 + 1/288 y x - 1/288 x y - 1/288 x y + 1/144 x y - 1/576 x y 2 3 2 2 3 - 1/288 x y + 1/576 x y - 1/144 y x ] > print_coeffs__lc_of_data(%, "coeffs_I->coeff_", "fp", > "2d.coeffs/2d.cube.order4.smooth0/coeffs-I.compute.c"); bytes used=128130292, alloc=2227816, time=10.47 bytes used=129130448, alloc=2227816, time=10.54 bytes used=130130628, alloc=2227816, time=10.63 bytes used=131157976, alloc=2227816, time=10.72 bytes used=132170256, alloc=2227816, time=10.79 bytes used=133182936, alloc=2227816, time=10.85 bytes used=134184444, alloc=2227816, time=10.93 bytes used=135184740, alloc=2227816, time=11.04 bytes used=136185208, alloc=2227816, time=11.13 bytes used=137185504, alloc=2227816, time=11.19 bytes used=138185676, alloc=2227816, time=11.39 bytes used=139186008, alloc=2227816, time=11.46 bytes used=140186252, alloc=2227816, time=11.53 bytes used=141186616, alloc=2227816, time=11.59 bytes used=142186928, alloc=2227816, time=11.65 bytes used=143187140, alloc=2227816, time=11.71 bytes used=144187292, alloc=2227816, time=11.79 bytes used=145187476, alloc=2424388, time=11.88 bytes used=146187724, alloc=2424388, time=11.96 bytes used=147188072, alloc=2424388, time=12.05 bytes used=148188276, alloc=2424388, time=12.14 bytes used=149188548, alloc=2424388, time=12.24 bytes used=150189040, alloc=2424388, time=12.35 bytes used=151189584, alloc=2424388, time=12.44 bytes used=152189776, alloc=2424388, time=12.71 bytes used=153190128, alloc=2424388, time=12.86 bytes used=154190356, alloc=2424388, time=12.92 bytes used=155198184, alloc=2424388, time=13.02 bytes used=156199352, alloc=2424388, time=13.15 bytes used=157206092, alloc=2424388, time=13.34 bytes used=158206320, alloc=2424388, time=13.51 bytes used=159206528, alloc=2424388, time=13.63 bytes used=160206828, alloc=2424388, time=13.70 bytes used=161207036, alloc=2424388, time=13.81 bytes used=162207248, alloc=2424388, time=13.91 bytes used=163207460, alloc=2424388, time=14.15 bytes used=164207736, alloc=2424388, time=14.23 bytes used=165207896, alloc=2424388, time=14.31 bytes used=166208088, alloc=2424388, time=14.42 bytes used=167208332, alloc=2424388, time=14.63 bytes used=168208740, alloc=2424388, time=14.73 bytes used=169208984, alloc=2424388, time=14.80 bytes used=170209144, alloc=2424388, time=14.91 bytes used=171209480, alloc=2424388, time=15.13 bytes used=172209780, alloc=2424388, time=15.24 > # d/dx > simplify( diff(interp_2d_cube_order4_smooth0,x) ); bytes used=173210092, alloc=2424388, time=15.39 bytes used=174210336, alloc=2424388, time=15.44 bytes used=175210520, alloc=2424388, time=15.51 bytes used=176210708, alloc=2424388, time=15.57 bytes used=177210968, alloc=2489912, time=15.65 bytes used=178211200, alloc=2620960, time=15.71 - 1/12 DATA(2, 0) + 2/3 DATA(1, 0) + 1/12 DATA(-2, 0) - 2/3 DATA(-1, 0) 3 3 2 - 1/18 y DATA(-1, 2) - 1/72 y DATA(2, -1) + 8/9 x y DATA(-1, -1) 2 2 2 2 2 2 + 5/8 x y DATA(1, 0) - 1/3 x y DATA(1, 1) + 1/96 x y DATA(-2, 2) 3 3 3 - 1/9 y DATA(1, 1) + 1/144 y DATA(-2, 2) - 1/72 y DATA(-2, 1) 3 3 + 1/72 y DATA(2, 1) - 2/3 x DATA(-1, 0) - 1/12 x DATA(2, 0) - 5/2 x DATA(0, 0) + 4/3 x DATA(1, 0) - 1/12 x DATA(-2, 0) 3 3 + 4/3 x DATA(-1, 0) - 1/144 y DATA(2, 2) + 1/18 y DATA(1, 2) 3 3 3 + 1/72 y DATA(-2, -1) + 1/144 y DATA(2, -2) - 1/18 y DATA(1, -2) 2 2 2 2 - 1/96 x y DATA(2, -2) + 1/48 x y DATA(1, -2) 2 2 2 2 - 1/48 x y DATA(-1, -2) + 1/96 x y DATA(-2, -2) 2 2 2 2 2 2 + 1/3 x y DATA(-1, -1) - 1/3 x y DATA(1, -1) - 5/8 x y DATA(-1, 0) 2 2 2 2 + 1/3 x y DATA(-1, 1) + 1/24 y x DATA(1, 2) - 1/24 y x DATA(-1, 2) 2 2 2 2 2 + 1/6 y x DATA(2, 1) + 5/16 x y DATA(-2, 0) - 1/6 x y DATA(-2, -1) 2 2 2 - 1/24 y x DATA(1, -2) + 1/24 y x DATA(-1, -2) - 1/48 y x DATA(-2, -2) 2 2 2 - 1/48 y x DATA(2, 2) - 1/3 y x DATA(1, 1) + 1/48 y x DATA(-2, 2) 2 2 2 - 1/6 y x DATA(-2, 1) + 1/6 y x DATA(-2, -1) + 1/48 y x DATA(2, -2) 4 4 4 - 1/9 y DATA(1, -1) - 1/288 y DATA(2, 2) + 1/36 y DATA(1, 2) 4 4 4 - 1/36 y DATA(-1, 2) + 1/72 y DATA(2, 1) - 1/288 x y DATA(-2, 2) 4 4 4 - 2/9 x y DATA(-1, -1) + 5/12 x y DATA(0, -1) - 2/9 x y DATA(1, -1) 4 4 4 + 1/3 x y DATA(-1, 0) - 2/9 x y DATA(-1, 1) + 1/72 x y DATA(-2, -1) 4 4 4 - 1/288 x y DATA(2, -2) + 1/18 x y DATA(1, -2) - 1/288 x y DATA(-2, -2) 2 2 2 - 1/3 y x DATA(-1, -1) + 1/3 y x DATA(1, -1) + 1/3 y x DATA(-1, 1) 2 4 4 - 1/6 y x DATA(2, -1) + 1/18 x y DATA(1, 2) + 1/72 x y DATA(2, -1) 4 4 4 - 5/8 x y DATA(0, 0) + 1/3 x y DATA(1, 0) + 5/12 x y DATA(0, 1) 4 3 4 4 - 1/288 x y DATA(2, 2) + 1/144 x y DATA(-2, -2) - 5/48 x y DATA(0, -2) 4 4 4 + 1/18 x y DATA(-1, -2) - 2/9 x y DATA(1, 1) + 1/72 x y DATA(-2, 1) 4 4 4 - 1/48 x y DATA(-2, 0) - 1/6 y DATA(-1, 0) + 1/18 x y DATA(-1, 2) 4 4 4 - 5/48 x y DATA(0, 2) + 1/72 x y DATA(2, 1) - 1/48 x y DATA(2, 0) 4 3 4 3 4 + 1/9 y DATA(-1, 1) - 1/36 x y DATA(1, -2) - 1/36 x y DATA(-1, -2) 3 4 3 4 3 4 + 1/9 x y DATA(1, 1) - 1/36 x y DATA(-2, 1) - 1/36 x y DATA(-2, -1) 3 4 3 4 3 4 + 1/9 x y DATA(-1, -1) - 1/6 x y DATA(0, -1) + 1/9 x y DATA(1, -1) 3 4 3 4 3 4 - 1/6 x y DATA(-1, 0) + 1/24 x y DATA(0, -2) + 1/24 x y DATA(0, 2) 3 4 3 4 3 4 - 1/36 x y DATA(2, 1) + 1/24 x y DATA(2, 0) - 1/36 x y DATA(2, -1) 3 4 3 4 3 4 + 1/4 x y DATA(0, 0) - 1/6 x y DATA(1, 0) + 1/9 x y DATA(-1, 1) 3 4 2 4 + 1/144 x y DATA(2, -2) + 1/24 x y DATA(-2, -1) 2 4 3 4 3 4 + 1/96 x y DATA(2, 2) - 1/6 x y DATA(0, 1) + 1/144 x y DATA(2, 2) 2 4 2 4 2 4 - 1/48 x y DATA(1, 2) + 1/48 x y DATA(-1, 2) - 1/24 x y DATA(2, 1) 2 4 3 4 3 4 + 1/16 x y DATA(2, 0) + 1/24 x y DATA(-2, 0) + 1/144 x y DATA(-2, 2) 3 4 3 4 2 4 - 1/36 x y DATA(1, 2) - 1/36 x y DATA(-1, 2) + 1/96 x y DATA(2, -2) 2 4 2 4 2 4 - 1/24 x y DATA(2, -1) + 1/8 x y DATA(-1, 0) - 1/8 x y DATA(1, 0) 2 4 2 4 2 4 + 1/12 x y DATA(1, 1) - 1/96 x y DATA(-2, 2) + 1/24 x y DATA(-2, 1) 2 4 2 4 - 1/16 x y DATA(-2, 0) + 1/48 x y DATA(-1, -2) 2 4 2 4 - 1/96 x y DATA(-2, -2) - 1/12 x y DATA(-1, -1) 2 4 2 4 2 + 1/12 x y DATA(1, -1) - 1/12 x y DATA(-1, 1) + 8/9 x y DATA(1, -1) 2 2 2 - 5/3 x y DATA(-1, 0) + 8/9 x y DATA(-1, 1) - 1/18 x y DATA(-2, -1) 2 2 2 + 1/288 x y DATA(2, -2) - 1/18 x y DATA(1, -2) + 5/48 x y DATA(0, -2) 2 - 1/18 x y DATA(-1, -2) - 1/18 y DATA(2, 1) + 1/18 y DATA(2, -1) + 4/9 y DATA(1, 1) - 1/144 y DATA(-2, 2) + 1/144 y DATA(2, 2) 4 4 - 1/18 y DATA(1, 2) - 1/48 y DATA(2, 0) + 1/72 y DATA(2, -1) 4 4 4 + 1/6 y DATA(1, 0) - 1/9 y DATA(1, 1) + 1/288 y DATA(-2, 2) 4 4 4 - 1/72 y DATA(-2, 1) + 1/48 y DATA(-2, 0) - 1/72 y DATA(-2, -1) 4 4 4 - 1/288 y DATA(2, -2) + 1/36 y DATA(1, -2) - 1/36 y DATA(-1, -2) 4 4 2 + 1/288 y DATA(-2, -2) + 1/9 y DATA(-1, -1) - 5/3 x y DATA(0, -1) 2 - 5/6 y DATA(1, 0) + 1/18 y DATA(-2, 1) - 1/18 y DATA(-2, -1) - 1/144 y DATA(2, -2) + 1/18 y DATA(1, -2) - 1/18 y DATA(-1, -2) + 1/144 y DATA(-2, -2) + 4/9 y DATA(-1, -1) - 4/9 y DATA(1, -1) 2 2 - 4/9 y DATA(-1, 1) + 1/288 y DATA(2, 2) - 1/36 y DATA(1, 2) 2 2 + 1/18 y DATA(-1, 2) + 5/6 y DATA(-1, 0) + 1/36 y DATA(-1, 2) 2 2 2 - 1/18 y DATA(2, 1) + 5/48 y DATA(2, 0) - 1/18 y DATA(2, -1) 2 2 2 - 4/9 y DATA(-1, 1) + 4/9 y DATA(1, 1) - 1/288 y DATA(-2, 2) 2 2 2 + 1/18 y DATA(-2, 1) - 5/48 y DATA(-2, 0) + 1/18 y DATA(-2, -1) 2 2 2 + 1/288 y DATA(2, -2) - 1/36 y DATA(1, -2) + 1/36 y DATA(-1, -2) 2 2 2 - 1/288 y DATA(-2, -2) - 4/9 y DATA(-1, -1) + 4/9 y DATA(1, -1) 2 4 2 2 - 1/48 x y DATA(1, -2) - 1/18 x y DATA(1, 2) - 1/18 x y DATA(-1, 2) 2 2 2 + 5/48 x y DATA(0, 2) - 1/18 x y DATA(2, 1) + 5/48 x y DATA(2, 0) 2 + 1/288 x y DATA(-2, -2) - 1/9 x y DATA(1, 2) - 1/9 x y DATA(-1, 2) + 5/24 x y DATA(0, 2) - 1/18 x y DATA(2, 1) + 1/18 x y DATA(2, -1) - 5/3 x y DATA(0, 1) + 8/9 x y DATA(1, 1) + 1/144 x y DATA(-2, 2) - 1/18 x y DATA(-2, 1) + 1/18 x y DATA(-2, -1) - 1/144 x y DATA(2, -2) 2 2 2 + 8/9 x y DATA(1, 1) - 1/18 x y DATA(-2, 1) + 5/48 x y DATA(-2, 0) 2 2 2 + 1/288 x y DATA(-2, 2) - 1/18 x y DATA(2, -1) + 25/8 x y DATA(0, 0) 2 2 2 - 5/3 x y DATA(1, 0) - 5/3 x y DATA(0, 1) + 1/288 x y DATA(2, 2) 3 3 3 3 + 8/9 x y DATA(-1, 1) + 1/72 x y DATA(2, 2) - 1/18 x y DATA(1, 2) 3 3 3 3 3 3 - 1/18 x y DATA(-1, 2) + 1/12 x y DATA(0, 2) - 1/36 x y DATA(2, 1) 3 3 3 3 + 1/36 x y DATA(2, -1) - 1/9 x y DATA(1, -1) + 1/144 x y DATA(2, 2) 3 3 - 1/72 x y DATA(2, -2) + 1/9 x y DATA(1, -2) - 5/24 x y DATA(0, -2) + 1/9 x y DATA(-1, -2) - 1/144 x y DATA(-2, -2) - 8/9 x y DATA(-1, -1) 3 3 + 5/3 x y DATA(0, -1) - 8/9 x y DATA(1, -1) + 1/18 x y DATA(-1, -2) 3 3 3 3 3 3 - 1/72 x y DATA(-2, -2) - 1/9 x y DATA(-1, -1) + 1/6 x y DATA(0, -1) 3 3 3 3 3 + 1/9 x y DATA(-1, 1) - 1/144 x y DATA(2, 2) - 1/6 x y DATA(0, 1) 3 3 3 3 3 3 + 1/9 x y DATA(1, 1) + 1/72 x y DATA(-2, 2) - 1/36 x y DATA(-2, 1) 3 3 3 3 + 1/36 x y DATA(-2, -1) + 1/18 y DATA(-1, -2) - 1/144 y DATA(-2, -2) 3 3 3 - 1/9 y DATA(-1, -1) + 1/9 y DATA(1, -1) + 1/9 y DATA(-1, 1) 3 3 3 + 1/6 x DATA(2, 0) + x DATA(0, 0) - 2/3 x DATA(1, 0) 3 3 3 + 1/6 x DATA(-2, 0) - 1/72 x y DATA(2, -1) + 5/12 x y DATA(0, 1) 3 3 3 - 2/9 x y DATA(1, 1) - 1/144 x y DATA(-2, 2) + 1/72 x y DATA(-2, 1) 3 3 3 3 3 + 1/18 x y DATA(1, -2) - 1/12 x y DATA(0, -2) - 2/9 x y DATA(-1, 1) 3 3 3 + 1/9 x y DATA(1, 2) + 1/9 x y DATA(-1, 2) - 5/24 x y DATA(0, 2) 3 3 2 3 + 1/72 x y DATA(2, 1) - 4/9 x y DATA(1, -1) - 1/72 x y DATA(-2, -1) 3 3 3 + 1/144 x y DATA(2, -2) - 1/9 x y DATA(1, -2) + 5/24 x y DATA(0, -2) 3 3 3 - 1/9 x y DATA(-1, -2) + 1/144 x y DATA(-2, -2) + 2/9 x y DATA(-1, -1) 3 3 3 2 - 5/12 x y DATA(0, -1) + 2/9 x y DATA(1, -1) + 5/6 x y DATA(1, 0) 3 2 3 2 3 + 2/3 x y DATA(0, 1) - 1/144 x y DATA(2, 2) - 1/72 y x DATA(2, 2) 3 2 3 2 3 2 + 5/6 x y DATA(-1, 0) - 4/9 x y DATA(-1, 1) + 1/9 x y DATA(-2, -1) 3 2 3 2 - 1/144 x y DATA(2, -2) + 1/36 x y DATA(1, -2) 3 2 3 2 - 1/24 x y DATA(0, -2) + 1/36 x y DATA(-1, -2) 3 2 3 2 - 1/144 x y DATA(-2, -2) - 4/9 x y DATA(-1, -1) 3 2 2 3 2 + 2/3 x y DATA(0, -1) + 1/4 x DATA(2, 0) - 1/24 x y DATA(0, 2) 3 2 3 2 3 2 + 1/9 x y DATA(2, 1) - 5/24 x y DATA(2, 0) + 1/9 x y DATA(2, -1) 3 2 2 3 - 5/4 x y DATA(0, 0) - 1/2 x DATA(1, 0) - 1/12 y x DATA(0, 2) 3 3 3 + 1/9 y x DATA(2, 1) - 1/9 y x DATA(2, -1) + 2/3 y x DATA(0, 1) 3 2 3 2 3 2 - 4/9 x y DATA(1, 1) + 1/9 x y DATA(-2, 1) - 5/24 x y DATA(-2, 0) 3 2 3 2 3 2 - 1/144 x y DATA(-2, 2) + 1/36 x y DATA(1, 2) + 1/36 x y DATA(-1, 2) 2 3 3 - 1/4 x DATA(-2, 0) - 2/3 y x DATA(0, -1) - 4/9 y x DATA(-1, 1) 3 3 3 - 4/9 y x DATA(1, 1) - 1/72 y x DATA(-2, 2) + 1/9 y x DATA(-2, 1) 3 3 3 - 1/9 y x DATA(-2, -1) + 1/72 y x DATA(2, -2) + 1/18 y x DATA(1, 2) 3 3 3 + 1/18 y x DATA(-1, 2) + 4/9 y x DATA(1, -1) - 1/18 y x DATA(1, -2) 3 3 3 - 1/18 y x DATA(-1, -2) + 1/72 y x DATA(-2, -2) + 4/9 y x DATA(-1, -1) 3 2 3 2 3 + 1/12 y x DATA(0, -2) + 1/24 x y DATA(-2, 1) + 1/48 x y DATA(-2, -2) 2 3 2 3 2 3 - 1/48 x y DATA(2, -2) + 1/24 x y DATA(1, -2) + 1/24 x y DATA(2, -1) 2 3 2 3 2 3 - 1/24 x y DATA(-2, -1) + 1/12 x y DATA(1, 1) - 1/48 x y DATA(-2, 2) 2 3 2 3 2 3 + 1/48 x y DATA(2, 2) - 1/24 x y DATA(1, 2) + 1/24 x y DATA(-1, 2) 2 3 2 2 2 - 1/24 x y DATA(2, 1) + 1/2 x DATA(-1, 0) - 1/6 x y DATA(-2, 1) 2 2 2 2 2 2 + 1/48 x y DATA(1, 2) - 1/48 x y DATA(-1, 2) + 1/6 x y DATA(2, 1) 2 2 2 2 2 2 - 5/16 x y DATA(2, 0) + 1/6 x y DATA(2, -1) - 1/96 x y DATA(2, 2) 2 3 2 3 - 1/24 x y DATA(-1, -2) + 1/12 x y DATA(-1, -1) 2 3 2 3 - 1/12 x y DATA(1, -1) - 1/12 x y DATA(-1, 1) > coeffs_as_lc_of_data(%, posn_list_2d_size5); bytes used=179213692, alloc=2620960, time=15.78 bytes used=180223192, alloc=2620960, time=15.84 2 2 2 4 [COEFF(-2, -2) = - 1/144 x y + 1/288 x y - 1/288 y + 1/144 y - 1/96 x y 3 2 2 3 4 3 3 + 1/72 y x + 1/96 x y + 1/144 x y + 1/144 x y - 1/144 y 2 3 2 4 3 2 4 + 1/48 x y - 1/48 y x - 1/288 x y - 1/144 x y + 1/288 y 3 3 2 4 3 4 3 2 - 1/72 x y , COEFF(-1, -2) = 1/48 x y - 1/36 x y + 1/36 x y 2 2 2 3 3 3 3 - 1/48 x y + 1/36 y + 1/18 x y - 1/9 x y + 1/18 y - 1/18 y 4 2 2 3 2 3 - 1/36 y + 1/24 y x - 1/18 x y - 1/18 y x - 1/24 x y + 1/9 x y 4 3 3 3 3 2 + 1/18 x y , COEFF(0, -2) = 1/12 y x - 1/12 x y - 1/24 x y 2 4 3 3 4 + 5/48 x y - 5/24 x y - 5/48 x y + 5/24 x y + 1/24 x y , COEFF(1, -2) 2 3 2 2 3 3 4 = - 1/18 x y - 1/18 y x - 1/24 y x + 1/24 x y - 1/36 x y + 1/18 y 3 2 2 3 3 2 4 3 2 2 + 1/36 x y - 1/36 y + 1/18 x y - 1/48 x y - 1/18 y + 1/48 x y 3 4 4 4 + 1/9 x y - 1/9 x y + 1/36 y + 1/18 x y , COEFF(2, -2) = - 1/288 y 2 3 3 2 3 4 + 1/288 x y - 1/72 x y - 1/48 x y - 1/288 x y - 1/144 x y - 1/144 y 2 4 2 3 4 3 2 3 + 1/96 x y + 1/48 y x + 1/144 x y - 1/144 x y + 1/144 x y 2 2 3 3 2 - 1/96 x y + 1/144 y + 1/72 y x + 1/288 y , COEFF(-2, -1) = 3 4 4 2 3 2 2 - 1/72 x y - 1/72 y + 1/72 x y - 1/24 x y + 1/18 y - 1/18 x y 3 4 2 4 2 3 3 - 1/36 x y + 1/24 x y + 1/6 y x + 1/18 x y + 1/36 x y - 1/18 y 3 3 2 3 2 2 2 3 - 1/9 y x + 1/9 x y + 1/72 y - 1/6 x y , COEFF(-1, -1) = 1/12 x y 2 2 4 3 3 3 4 - 4/9 y - 8/9 x y - 1/12 x y - 1/9 y + 2/9 x y + 4/9 y x + 1/9 y 3 3 3 4 2 2 2 3 2 - 1/9 x y + 4/9 y + 1/9 x y + 1/3 x y + 8/9 x y - 4/9 x y 2 4 3 3 3 3 4 - 1/3 y x - 2/9 x y , COEFF(0, -1) = 1/6 x y - 2/3 y x - 1/6 x y 3 2 2 3 4 + 2/3 x y - 5/3 x y + 5/3 x y - 5/12 x y + 5/12 x y , COEFF(1, -1) = 2 2 3 3 4 2 3 3 3 - 1/3 x y + 4/9 y x + 1/9 x y + 4/9 y + 2/9 x y - 1/9 x y 2 2 4 4 2 3 2 - 8/9 x y + 8/9 x y + 1/12 x y - 2/9 x y + 1/3 y x - 4/9 x y 3 4 2 3 2 2 + 1/9 y - 4/9 y - 1/9 y - 1/12 x y , COEFF(2, -1) = 1/6 x y 2 3 2 4 4 4 2 3 - 1/6 y x - 1/72 y - 1/24 x y + 1/72 y + 1/72 x y + 1/24 x y 3 2 2 3 4 2 3 3 + 1/9 x y - 1/18 y - 1/36 x y + 1/18 x y - 1/18 x y + 1/36 x y 3 3 3 2 + 1/18 y - 1/9 y x - 1/72 x y , COEFF(-2, 0) = 1/12 - 5/24 x y 4 2 4 2 2 3 4 3 + 1/48 y - 1/16 x y + 5/48 x y - 1/4 x + 1/24 x y + 1/6 x 2 2 4 2 4 + 5/16 x y - 1/48 x y - 5/48 y - 1/12 x, COEFF(-1, 0) = 1/3 x y - 2/3 2 2 4 3 2 2 3 4 2 - 5/3 x y + 1/8 x y + 5/6 x y + 1/2 x - 2/3 x - 1/6 y + 5/6 y 2 2 3 4 - 5/8 x y + 4/3 x - 1/6 x y , 2 3 3 4 4 3 2 COEFF(0, 0) = 25/8 x y + x + 1/4 x y - 5/2 x - 5/8 x y - 5/4 x y , 3 2 3 4 2 2 2 2 COEFF(1, 0) = 5/6 x y - 1/6 x y - 5/3 x y - 5/6 y + 2/3 + 5/8 x y 2 2 4 3 4 4 - 1/2 x - 1/8 x y - 2/3 x + 1/3 x y + 1/6 y + 4/3 x, COEFF(2, 0) = 2 2 3 2 3 4 - 1/12 x + 1/4 x + 5/48 x y - 5/24 x y + 1/6 x - 1/12 - 1/48 y 4 2 2 2 2 4 3 4 - 1/48 x y + 5/48 y - 5/16 x y + 1/16 x y + 1/24 x y , COEFF(-2, 1) 3 2 2 2 3 4 = - 1/72 y - 1/18 x y + 1/18 y - 1/6 y x + 1/18 y - 1/36 x y 2 4 4 3 3 3 2 2 2 + 1/24 x y - 1/72 y - 1/36 x y + 1/9 x y - 1/6 x y - 1/18 x y 3 4 2 3 3 4 + 1/9 y x + 1/72 x y + 1/24 x y + 1/72 x y , COEFF(-1, 1) = - 2/9 x y 2 3 3 3 2 2 3 + 8/9 x y - 4/9 y + 1/9 x y - 4/9 x y + 1/3 y x - 2/9 x y 3 2 4 4 3 4 2 2 2 - 4/9 y x - 1/12 x y + 1/9 y + 1/9 x y + 8/9 x y + 1/3 x y 3 2 3 2 + 1/9 y - 1/12 x y - 4/9 y, COEFF(0, 1) = - 5/3 x y - 5/3 x y 3 4 3 4 3 3 3 3 2 - 1/6 x y + 5/12 x y + 5/12 x y - 1/6 x y + 2/3 y x + 2/3 x y , 2 2 3 3 3 4 3 COEFF(1, 1) = - 1/3 y x + 1/12 x y + 1/9 x y - 2/9 x y - 2/9 x y 2 3 3 2 2 4 + 4/9 y - 1/9 y + 8/9 x y + 4/9 y - 4/9 y x - 1/3 x y - 1/9 y 3 4 2 4 3 2 2 2 + 1/9 x y + 1/12 x y - 4/9 x y + 8/9 x y , COEFF(2, 1) = 1/6 y x 4 3 2 3 2 4 2 + 1/72 x y + 1/72 x y - 1/18 y + 1/9 y x - 1/24 x y - 1/18 x y 3 4 3 2 2 2 3 - 1/36 x y + 1/9 x y + 1/6 x y + 1/72 y - 1/18 y - 1/18 x y 4 2 3 3 3 2 + 1/72 y - 1/24 x y - 1/36 x y , COEFF(-2, 2) = 1/144 x y + 1/48 y x 3 3 3 2 3 2 4 2 3 + 1/72 x y + 1/144 y + 1/288 x y - 1/144 x y + 1/288 y - 1/48 x y 2 2 2 3 4 3 4 - 1/144 y + 1/96 x y - 1/288 y - 1/144 x y - 1/288 x y + 1/144 x y 2 4 3 2 4 2 - 1/96 x y - 1/72 y x , COEFF(-1, 2) = 1/48 x y - 1/9 x y - 1/18 x y 3 3 2 2 2 3 4 2 3 - 1/18 x y + 1/36 y - 1/48 x y + 1/18 y - 1/36 x y + 1/24 x y 3 2 3 2 3 4 4 - 1/18 y - 1/24 y x + 1/36 x y + 1/18 y x + 1/18 x y - 1/36 y 3 2 3 3 3 2 + 1/9 x y , COEFF(0, 2) = 5/48 x y + 1/12 x y - 1/24 x y + 5/24 x y 4 3 4 3 3 - 5/48 x y + 1/24 x y - 1/12 y x - 5/24 x y , COEFF(1, 2) = 3 4 2 2 3 2 3 - 1/36 x y - 1/9 x y + 1/48 x y + 1/18 y x + 1/24 y x + 1/9 x y 4 2 4 2 3 2 3 2 2 + 1/18 x y - 1/48 x y - 1/24 x y - 1/36 y + 1/36 x y - 1/18 x y 3 3 4 3 3 - 1/18 y - 1/18 x y + 1/36 y + 1/18 y , COEFF(2, 2) = - 1/144 y 2 2 2 3 4 3 3 2 - 1/96 x y + 1/48 x y - 1/288 y + 1/72 x y + 1/288 x y 3 2 4 3 3 2 - 1/144 x y - 1/48 y x - 1/288 x y - 1/72 y x - 1/144 x y 3 4 2 4 2 + 1/144 x y + 1/96 x y + 1/144 y + 1/144 x y + 1/288 y ] > print_coeffs__lc_of_data(%, "coeffs_dx->coeff_", "fp", > "2d.coeffs/2d.cube.order4.smooth0/coeffs-dx.compute.c"); bytes used=181223344, alloc=2620960, time=15.90 bytes used=182223500, alloc=2620960, time=15.97 bytes used=183223664, alloc=2620960, time=16.07 bytes used=184244420, alloc=2620960, time=16.17 bytes used=185261976, alloc=2620960, time=16.24 bytes used=186262132, alloc=2620960, time=16.32 bytes used=187271400, alloc=2620960, time=16.41 bytes used=188271672, alloc=2620960, time=16.50 bytes used=189271940, alloc=2620960, time=16.57 bytes used=190272092, alloc=2620960, time=16.84 bytes used=191272872, alloc=2620960, time=16.90 bytes used=192273040, alloc=2620960, time=16.96 bytes used=193273564, alloc=2620960, time=17.03 bytes used=194283560, alloc=2620960, time=17.13 bytes used=195283924, alloc=2620960, time=17.24 bytes used=196288796, alloc=2620960, time=17.34 bytes used=197290992, alloc=2620960, time=17.43 bytes used=198291176, alloc=2620960, time=17.52 bytes used=199291660, alloc=2620960, time=17.61 bytes used=200292092, alloc=2620960, time=17.89 bytes used=201292244, alloc=2620960, time=18.05 bytes used=202292640, alloc=2620960, time=18.12 bytes used=203294780, alloc=2620960, time=18.22 bytes used=204295016, alloc=2620960, time=18.34 bytes used=205295216, alloc=2620960, time=18.44 bytes used=206305080, alloc=2620960, time=18.68 bytes used=207305332, alloc=2620960, time=18.84 bytes used=208305696, alloc=2620960, time=18.90 bytes used=209306900, alloc=2620960, time=19.00 bytes used=210308068, alloc=2620960, time=19.12 bytes used=211308248, alloc=2620960, time=19.34 bytes used=212308496, alloc=2620960, time=19.47 bytes used=213308676, alloc=2620960, time=19.54 bytes used=214312144, alloc=2620960, time=19.67 bytes used=215319752, alloc=2620960, time=19.92 bytes used=216319980, alloc=2620960, time=20.07 bytes used=217320236, alloc=2620960, time=20.15 bytes used=218320488, alloc=2620960, time=20.29 bytes used=219320656, alloc=2620960, time=20.59 bytes used=220320808, alloc=2620960, time=20.75 > # d/dy > simplify( diff(interp_2d_cube_order4_smooth0,y) ); bytes used=221321332, alloc=2620960, time=20.87 bytes used=222321548, alloc=2620960, time=20.93 bytes used=223321736, alloc=2620960, time=21.00 bytes used=224321912, alloc=2620960, time=21.06 4 2 4 2 - 1/12 DATA(0, 2) - 1/12 x y DATA(-1, -1) + 1/8 x y DATA(0, -1) 4 2 4 2 + 1/12 x y DATA(-1, 1) - 1/96 x y DATA(-2, -2) 4 2 3 3 - 1/48 x y DATA(-2, 1) + 1/6 y DATA(0, 2) + y DATA(0, 0) 3 3 3 - 2/3 y DATA(0, 1) + 1/6 y DATA(0, -2) - 2/3 y DATA(0, -1) 4 2 2 2 2 2 + 1/24 x y DATA(-1, -2) - 5/16 x y DATA(0, 2) + 5/16 x y DATA(0, -2) 2 2 3 2 2 + 5/8 x y DATA(0, 1) - 2/3 x y DATA(-1, 0) - 5/8 x y DATA(0, -1) 3 2 3 2 3 + 1/12 x y DATA(-2, 0) + 2/3 x y DATA(-1, 0) + 2/3 x y DATA(1, 0) 2 3 2 3 2 3 - 1/24 x y DATA(-2, 0) + 5/6 x y DATA(0, -1) - 1/24 x y DATA(2, 0) 2 3 4 3 4 3 - 5/24 x y DATA(0, 2) - 1/6 x y DATA(-1, 0) - 1/36 x y DATA(-2, -1) 4 3 4 3 + 1/144 x y DATA(2, -2) - 1/36 x y DATA(1, -2) 4 3 4 3 2 3 - 1/36 x y DATA(-1, -2) + 1/24 x y DATA(2, 0) + 5/6 x y DATA(0, 1) 2 3 4 3 - 5/24 x y DATA(0, -2) + 1/9 x y DATA(-1, 1) 4 3 4 3 2 3 + 1/144 x y DATA(-2, -2) + 1/9 x y DATA(-1, -1) - 5/4 x y DATA(0, 0) 4 3 + 1/9 x y DATA(1, -1) - 1/12 y DATA(0, 2) - 5/2 y DATA(0, 0) 4 3 + 4/3 y DATA(0, 1) - 1/12 y DATA(0, -2) + 1/144 x y DATA(2, 2) 4 3 4 3 4 3 - 1/36 x y DATA(-1, 2) - 1/6 x y DATA(0, 1) + 1/24 x y DATA(0, -2) 4 3 4 3 4 3 - 1/6 x y DATA(0, -1) + 1/24 x y DATA(0, 2) - 1/36 x y DATA(1, 2) 4 3 4 3 4 3 - 1/36 x y DATA(2, 1) - 1/6 x y DATA(1, 0) + 1/9 x y DATA(1, 1) 4 3 4 3 - 1/36 x y DATA(-2, 1) + 1/24 x y DATA(-2, 0) 4 3 4 3 + 1/144 x y DATA(-2, 2) - 1/36 x y DATA(2, -1) + 4/3 y DATA(0, -1) 2 2 2 - 1/4 y DATA(0, -2) + 1/2 y DATA(0, -1) - 1/2 y DATA(0, 1) 2 3 3 + 1/4 y DATA(0, 2) + 2/3 x y DATA(1, 0) - 1/12 x y DATA(2, 0) 3 3 3 - 5/12 y x DATA(-1, 0) + 5/24 y x DATA(-2, 0) - 5/24 y x DATA(2, 0) 3 3 3 + 5/12 y x DATA(1, 0) - 1/72 x DATA(-1, 2) + 1/72 x DATA(1, 2) 3 3 3 - 1/144 x DATA(2, 2) + 1/144 x DATA(2, -2) + 1/18 x DATA(-2, -1) 3 3 3 - 1/18 x DATA(-2, 1) + 1/144 x DATA(-2, 2) - 1/9 x DATA(1, 1) 3 3 4 - 1/18 x DATA(2, -1) + 1/18 x DATA(2, 1) + 1/18 x y DATA(2, 1) 4 4 4 + 1/72 x y DATA(-1, -2) + 1/72 x y DATA(1, -2) - 1/288 x y DATA(2, -2) 4 4 4 - 5/48 x y DATA(2, 0) - 5/8 x y DATA(0, 0) + 1/3 x y DATA(0, -1) 4 4 4 - 1/48 x y DATA(0, -2) + 1/3 x y DATA(0, 1) + 1/72 x y DATA(-1, 2) 4 4 4 + 1/72 x y DATA(1, 2) - 1/288 x y DATA(2, 2) - 1/288 x y DATA(-2, 2) 4 4 4 - 5/48 x y DATA(-2, 0) + 1/18 x y DATA(-2, 1) - 2/9 x y DATA(1, 1) 4 4 4 + 5/12 x y DATA(1, 0) + 1/18 x y DATA(2, -1) - 1/48 x y DATA(0, 2) 4 4 4 - 2/9 x y DATA(-1, 1) - 2/9 x y DATA(1, -1) - 2/9 x y DATA(-1, -1) 4 4 4 - 1/288 x y DATA(-2, -2) + 5/12 x y DATA(-1, 0) - 1/288 x DATA(-2, 2) 3 3 3 + 1/9 x DATA(-1, 1) + 1/9 x DATA(1, -1) - 1/9 x DATA(-1, -1) 3 3 3 - 1/144 x DATA(-2, -2) + 1/72 x DATA(-1, -2) - 1/72 x DATA(1, -2) 4 4 4 - 1/9 x DATA(1, 1) - 1/6 x DATA(0, -1) + 1/9 x DATA(-1, -1) 4 4 4 + 1/288 x DATA(-2, -2) - 1/72 x DATA(-1, -2) + 1/48 x DATA(0, -2) 4 4 4 - 1/72 x DATA(1, -2) + 1/288 x DATA(2, -2) - 1/36 x DATA(-2, -1) 4 4 + 1/36 x DATA(-2, 1) + 1/18 x DATA(2, -1) + 1/6 x DATA(0, 1) 4 4 4 - 1/36 x DATA(2, -1) + 1/36 x DATA(2, 1) - 1/48 x DATA(0, 2) 4 4 4 + 1/72 x DATA(-1, 2) + 1/72 x DATA(1, 2) - 1/288 x DATA(2, 2) 4 4 - 1/9 x DATA(-1, 1) + 1/9 x DATA(1, -1) + 5/24 x y DATA(2, 0) 4 3 3 3 - 5/3 x y DATA(1, 0) + 1/4 x y DATA(0, 0) + 1/12 x y DATA(2, 0) 3 3 3 3 4 + 1/6 x y DATA(-1, 0) - 1/6 x y DATA(1, 0) + 1/18 x y DATA(-2, -1) 3 3 2 2 - 1/12 x y DATA(-2, 0) + 1/36 x DATA(-2, -1) + 1/18 x DATA(1, -2) 2 2 2 - 5/48 x DATA(0, -2) + 1/18 x DATA(-1, -2) - 1/288 x DATA(-2, -2) - 4/9 x DATA(1, -1) - 4/9 x DATA(-1, 1) + 1/18 x DATA(-2, 1) - 1/144 x DATA(2, -2) + 1/18 x DATA(1, -2) - 1/18 x DATA(-1, -2) + 1/144 x DATA(-2, -2) + 4/9 x DATA(-1, -1) - 1/18 x DATA(-2, -1) + 4/9 x DATA(1, 1) - 1/144 x DATA(-2, 2) + 1/144 x DATA(2, 2) - 1/18 x DATA(1, 2) + 1/18 x DATA(-1, 2) - 1/18 x DATA(2, 1) 2 - 1/288 x DATA(2, -2) + 5/3 x y DATA(-1, 0) - 5/24 x y DATA(-2, 0) 2 2 2 + 5/48 y x DATA(-2, 0) - 5/3 y x DATA(-1, 0) - 5/3 y x DATA(0, 1) 2 2 2 + 5/48 y x DATA(0, -2) - 5/3 y x DATA(0, -1) + 5/48 y x DATA(0, 2) 2 4 2 4 2 + 25/8 y x DATA(0, 0) - 1/24 x y DATA(1, 2) - 1/24 x y DATA(-1, 2) 4 2 4 2 2 + 1/16 x y DATA(0, 2) - 1/48 x y DATA(2, 1) + 5/48 y x DATA(2, 0) 2 2 2 - 5/3 y x DATA(1, 0) + 5/6 x DATA(0, -1) - 4/9 x DATA(1, -1) 2 2 2 + 4/9 x DATA(-1, 1) + 1/288 x DATA(2, 2) - 1/18 x DATA(1, 2) 2 2 2 - 1/18 x DATA(-1, 2) + 5/48 x DATA(0, 2) - 1/36 x DATA(2, 1) 2 2 2 + 1/36 x DATA(2, -1) - 5/6 x DATA(0, 1) + 4/9 x DATA(1, 1) 2 2 4 2 + 1/288 x DATA(-2, 2) - 1/36 x DATA(-2, 1) + 1/12 x y DATA(1, 1) 4 2 4 2 4 2 + 1/96 x y DATA(-2, 2) - 1/12 x y DATA(1, -1) + 1/96 x y DATA(2, 2) 4 2 4 2 4 2 - 1/96 x y DATA(2, -2) + 1/24 x y DATA(1, -2) - 1/16 x y DATA(0, -2) 4 2 4 2 4 2 + 1/48 x y DATA(-2, -1) + 1/48 x y DATA(2, -1) - 1/8 x y DATA(0, 1) 2 - 4/9 x DATA(-1, -1) + 2/3 DATA(0, 1) + 1/12 DATA(0, -2) 2 2 2 - 2/3 DATA(0, -1) - 1/3 x y DATA(-1, -1) - 1/3 x y DATA(1, 1) 2 2 2 2 2 2 - 1/96 x y DATA(-2, 2) + 1/96 x y DATA(2, -2) - 1/6 x y DATA(1, -2) 2 2 2 2 - 1/6 x y DATA(-1, -2) + 1/96 x y DATA(-2, -2) 2 2 2 2 2 2 + 1/3 x y DATA(-1, -1) + 1/3 x y DATA(1, -1) - 1/3 x y DATA(-1, 1) 2 2 2 - 1/18 y x DATA(1, 2) - 1/18 y x DATA(-1, 2) - 1/18 y x DATA(2, 1) 2 2 2 2 - 1/48 x y DATA(-2, -1) - 1/18 y x DATA(1, -2) - 1/18 y x DATA(-1, -2) 2 2 2 + 1/288 y x DATA(-2, -2) + 1/288 y x DATA(2, 2) + 8/9 y x DATA(1, 1) 2 2 2 + 1/288 y x DATA(-2, 2) - 1/18 y x DATA(-2, 1) - 1/18 y x DATA(-2, -1) 2 2 2 + 1/288 y x DATA(2, -2) + 8/9 y x DATA(-1, -1) + 8/9 y x DATA(1, -1) 2 2 2 + 8/9 y x DATA(-1, 1) - 1/18 y x DATA(2, -1) + 1/3 x y DATA(1, -1) 2 2 2 + 1/3 x y DATA(-1, 1) + 1/24 x y DATA(-2, -1) + 1/48 x y DATA(2, -2) 2 2 2 - 1/6 x y DATA(1, -2) + 1/6 x y DATA(-1, -2) + 1/6 x y DATA(1, 2) 2 2 2 - 1/6 x y DATA(-1, 2) + 1/24 x y DATA(2, 1) - 1/48 x y DATA(-2, -2) - 1/18 x y DATA(1, 2) + 1/18 x y DATA(-1, 2) - 1/9 x y DATA(2, 1) - 1/9 x y DATA(2, -1) + 8/9 x y DATA(1, 1) - 1/144 x y DATA(-2, 2) + 1/9 x y DATA(-2, 1) + 1/9 x y DATA(-2, -1) + 1/144 x y DATA(2, -2) 2 2 2 - 1/3 x y DATA(1, 1) - 1/24 x y DATA(-2, 1) + 1/48 x y DATA(-2, 2) 2 2 - 1/24 x y DATA(2, -1) - 1/48 x y DATA(2, 2) - 8/9 x y DATA(-1, 1) 3 3 3 3 3 3 + 1/72 x y DATA(2, 2) - 1/36 x y DATA(1, 2) + 1/36 x y DATA(-1, 2) 3 3 3 3 3 3 - 1/18 x y DATA(2, 1) - 1/18 x y DATA(2, -1) + 1/9 x y DATA(1, -1) 3 3 + 1/144 x y DATA(2, 2) + 1/72 x y DATA(2, -2) - 1/18 x y DATA(1, -2) + 1/18 x y DATA(-1, -2) - 1/144 x y DATA(-2, -2) - 8/9 x y DATA(-1, -1) 3 3 3 3 + 8/9 x y DATA(1, -1) + 1/36 x y DATA(-1, -2) - 1/72 x y DATA(-2, -2) 3 3 3 3 3 - 1/9 x y DATA(-1, -1) - 1/9 x y DATA(-1, 1) - 1/72 x y DATA(2, 2) 3 3 3 3 3 3 + 1/9 x y DATA(1, 1) - 1/72 x y DATA(-2, 2) + 1/18 x y DATA(-2, 1) 3 3 3 3 + 1/18 x y DATA(-2, -1) + 1/18 x y DATA(2, -1) - 4/9 x y DATA(1, 1) 3 3 3 3 + 1/72 x y DATA(-2, 2) - 1/18 x y DATA(-2, 1) - 1/36 x y DATA(1, -2) 3 3 3 + 4/9 x y DATA(-1, 1) + 1/9 x y DATA(1, 2) - 1/9 x y DATA(-1, 2) 3 3 2 3 + 1/18 x y DATA(2, 1) - 1/12 x y DATA(1, -1) - 1/18 x y DATA(-2, -1) 3 3 3 - 1/72 x y DATA(2, -2) + 1/9 x y DATA(1, -2) - 1/9 x y DATA(-1, -2) 3 3 3 + 1/72 x y DATA(-2, -2) + 4/9 x y DATA(-1, -1) - 4/9 x y DATA(1, -1) 3 2 3 3 2 + 1/48 x y DATA(2, 2) - 1/144 y x DATA(2, 2) - 1/12 x y DATA(-1, 1) 3 2 3 2 - 1/24 x y DATA(-2, -1) - 1/48 x y DATA(2, -2) 3 2 3 2 + 1/24 x y DATA(1, -2) - 1/24 x y DATA(-1, -2) 3 2 3 2 + 1/48 x y DATA(-2, -2) + 1/12 x y DATA(-1, -1) 3 2 3 2 3 - 1/24 x y DATA(2, 1) + 1/24 x y DATA(2, -1) + 1/9 y x DATA(2, 1) 3 3 2 3 2 + 1/9 y x DATA(2, -1) + 1/12 x y DATA(1, 1) + 1/24 x y DATA(-2, 1) 3 2 3 2 3 2 - 1/48 x y DATA(-2, 2) - 1/24 x y DATA(1, 2) + 1/24 x y DATA(-1, 2) 3 3 3 + 2/9 y x DATA(-1, 1) - 2/9 y x DATA(1, 1) + 1/144 y x DATA(-2, 2) 3 3 3 - 1/9 y x DATA(-2, 1) - 1/9 y x DATA(-2, -1) - 1/144 y x DATA(2, -2) 3 3 3 + 1/72 y x DATA(1, 2) - 1/72 y x DATA(-1, 2) - 2/9 y x DATA(1, -1) 3 3 3 + 1/72 y x DATA(1, -2) - 1/72 y x DATA(-1, -2) + 1/144 y x DATA(-2, -2) 3 2 3 + 2/9 y x DATA(-1, -1) + 1/36 x y DATA(-2, 1) 2 3 2 3 - 1/144 x y DATA(-2, -2) - 1/144 x y DATA(2, -2) 2 3 2 3 2 3 + 1/9 x y DATA(1, -2) + 1/36 x y DATA(2, -1) + 1/36 x y DATA(-2, -1) 2 3 2 3 2 3 - 4/9 x y DATA(1, 1) - 1/144 x y DATA(-2, 2) - 1/144 x y DATA(2, 2) 2 3 2 3 2 3 + 1/9 x y DATA(1, 2) + 1/9 x y DATA(-1, 2) + 1/36 x y DATA(2, 1) 2 2 2 2 2 2 + 1/48 x y DATA(-2, 1) + 1/6 x y DATA(1, 2) + 1/6 x y DATA(-1, 2) 2 2 2 2 2 2 + 1/48 x y DATA(2, 1) - 1/48 x y DATA(2, -1) - 1/96 x y DATA(2, 2) 2 3 2 3 2 3 + 1/9 x y DATA(-1, -2) - 4/9 x y DATA(-1, -1) - 4/9 x y DATA(1, -1) 2 3 - 4/9 x y DATA(-1, 1) > coeffs_as_lc_of_data(%, posn_list_2d_size5); bytes used=225340376, alloc=2752008, time=21.13 bytes used=226340564, alloc=2752008, time=21.19 2 3 3 4 3 3 [COEFF(-2, -2) = - 1/288 x - 1/72 x y + 1/144 x + 1/144 x y - 1/144 x 2 3 3 2 2 3 2 4 2 - 1/144 x y + 1/72 x y + 1/96 x y + 1/48 x y - 1/96 x y 2 4 3 4 2 + 1/288 y x - 1/288 x y + 1/144 y x + 1/288 x - 1/144 x y - 1/48 x y , 2 4 3 3 2 2 COEFF(-1, -2) = 1/18 x - 1/36 x y - 1/72 y x - 1/18 y x + 1/6 x y 2 3 3 3 2 4 2 + 1/9 x y + 1/72 x - 1/24 x y + 1/24 x y - 1/18 x + 1/18 x y 4 3 3 3 4 2 2 - 1/72 x - 1/9 x y + 1/36 x y + 1/72 x y - 1/6 x y , COEFF(0, -2) = 4 2 2 4 2 3 - 1/48 x y - 5/48 x + 5/48 y x + 1/48 x + 1/12 - 1/12 y - 5/24 x y 3 2 2 2 4 3 4 2 + 1/6 y + 5/16 x y - 1/4 y + 1/24 x y - 1/16 x y , COEFF(1, -2) = 3 2 2 2 3 2 4 3 - 1/18 x y + 1/24 x y - 1/6 x y - 1/72 x - 1/6 x y - 1/36 x y 4 3 3 2 4 2 3 3 - 1/72 x + 1/9 x y + 1/72 y x + 1/18 x + 1/24 x y - 1/36 x y 2 3 2 4 3 + 1/9 x y - 1/18 y x + 1/18 x + 1/72 x y, COEFF(2, -2) = - 1/144 y x 2 4 3 2 2 2 + 1/288 y x + 1/144 x y + 1/96 x y + 1/144 x y - 1/144 x - 1/288 x 4 3 3 2 3 3 2 3 - 1/288 x y + 1/144 x - 1/48 x y + 1/72 x y + 1/48 x y - 1/72 x y 4 2 3 4 2 2 + 1/288 x - 1/144 x y - 1/96 x y , COEFF(-2, -1) = 1/24 x y 3 2 2 2 2 4 2 3 - 1/24 x y + 1/9 x y - 1/48 x y - 1/18 y x + 1/48 x y - 1/18 x y 4 2 3 4 3 3 3 2 + 1/18 x y + 1/36 x y - 1/36 x + 1/18 x y + 1/18 x + 1/36 x 3 4 3 3 2 - 1/18 x - 1/9 y x - 1/36 x y , COEFF(-1, -1) = 1/12 x y - 8/9 x y 3 3 3 2 4 4 3 2 2 + 4/9 x y - 1/9 x y - 4/9 x - 2/9 x y + 1/9 x y + 1/3 x y 4 2 3 2 3 2 4 2 + 1/9 x - 4/9 x y + 8/9 y x + 2/9 y x + 4/9 x - 1/3 x y - 1/12 x y 3 4 2 2 2 2 - 1/9 x , COEFF(0, -1) = 1/3 x y - 5/3 y x + 5/6 x - 2/3 - 5/8 x y 3 4 4 3 2 3 2 4 2 + 4/3 y - 2/3 y - 1/6 x - 1/6 x y + 5/6 x y + 1/2 y + 1/8 x y , 3 2 2 3 4 3 COEFF(1, -1) = 1/9 x + 8/9 x y + 1/3 x y - 4/9 x y + 1/9 x y 4 3 2 4 2 2 3 3 - 2/9 x y - 1/12 x y - 1/12 x y + 8/9 y x - 4/9 x + 1/9 x y 2 2 3 4 2 3 + 1/3 x y - 4/9 x - 2/9 y x + 1/9 x - 4/9 x y , COEFF(2, -1) = 4 3 2 3 3 2 2 4 2 - 1/36 x + 1/9 y x + 1/36 x - 1/18 x y - 1/48 x y + 1/48 x y 2 4 3 2 3 2 3 - 1/18 y x + 1/18 x - 1/36 x y - 1/24 x y + 1/24 x y + 1/18 x y 2 3 4 3 3 3 + 1/36 x y + 1/18 x y - 1/18 x - 1/9 x y, COEFF(-2, 0) = - 1/12 x y 4 2 2 3 3 3 - 5/48 x y + 5/48 y x - 1/24 x y + 5/24 y x + 1/12 x y - 5/24 x y 4 3 2 3 4 3 3 3 + 1/24 x y , COEFF(-1, 0) = 2/3 x y - 1/6 x y + 1/6 x y + 5/3 x y 3 2 4 3 - 5/12 y x - 5/3 y x + 5/12 x y - 2/3 x y , 2 3 4 2 3 4 3 COEFF(0, 0) = 25/8 y x + y - 5/8 x y - 5/4 x y + 1/4 x y - 5/2 y, 2 3 4 4 3 3 3 COEFF(1, 0) = 2/3 x y + 5/12 x y - 5/3 x y - 1/6 x y - 1/6 x y 2 3 3 3 3 - 5/3 y x + 5/12 y x + 2/3 x y , COEFF(2, 0) = 5/24 x y + 1/12 x y 4 3 2 2 3 3 3 4 + 1/24 x y + 5/48 y x - 1/24 x y - 1/12 x y - 5/24 y x - 5/48 x y, 3 3 2 4 3 4 2 COEFF(-2, 1) = - 1/18 x + 1/24 x y + 1/18 x y - 1/9 y x - 1/48 x y 3 3 2 4 3 2 2 + 1/9 x y + 1/18 x y - 1/24 x y + 1/36 x - 1/18 x y + 1/48 x y 2 3 4 3 2 2 + 1/36 x y + 1/18 x - 1/36 x y - 1/36 x - 1/18 y x , COEFF(-1, 1) = 3 3 4 3 2 2 2 3 4 3 - 1/9 x y - 1/9 x + 4/9 x y + 1/3 x y - 1/3 x y + 1/9 x + 1/9 x y 2 3 2 2 2 3 4 + 8/9 y x - 1/12 x y + 4/9 x - 4/9 x y - 4/9 x - 2/9 x y - 8/9 x y 4 2 3 4 4 2 2 + 1/12 x y + 2/9 y x , COEFF(0, 1) = 1/6 x - 1/8 x y - 1/2 y + 2/3 2 3 4 3 2 2 2 2 4 + 5/6 x y + 4/3 y - 1/6 x y - 5/6 x + 5/8 x y - 5/3 y x + 1/3 x y 3 2 3 4 2 4 - 2/3 y , COEFF(1, 1) = - 1/3 x y - 4/9 x y + 1/12 x y - 1/9 x 3 2 3 3 2 2 2 3 4 + 1/12 x y + 1/9 x y + 4/9 x - 1/3 x y - 2/9 y x - 2/9 x y 2 3 4 3 3 2 + 4/9 x + 8/9 x y - 4/9 x y + 1/9 x y - 1/9 x + 8/9 y x , COEFF(2, 1) 3 2 2 2 2 2 2 3 = 1/18 x y - 1/18 y x - 1/36 x + 1/48 x y + 1/24 x y + 1/36 x y 3 2 3 3 4 2 3 - 1/24 x y - 1/18 x y - 1/9 x y - 1/48 x y - 1/18 x + 1/9 y x 3 4 3 4 4 + 1/18 x - 1/36 x y + 1/36 x + 1/18 x y, COEFF(-2, 2) = - 1/144 x 2 2 4 2 4 2 2 3 + 1/288 y x + 1/288 x + 1/96 x y - 1/288 x - 1/96 x y + 1/72 x y 2 3 3 4 3 2 2 - 1/144 x y - 1/144 x y + 1/144 x - 1/288 x y - 1/48 x y + 1/48 x y 3 3 3 4 3 4 - 1/72 x y + 1/144 y x + 1/144 x y , COEFF(-1, 2) = 1/72 x 3 3 3 4 2 3 2 + 1/36 x y - 1/72 x - 1/24 x y + 1/18 x y - 1/72 y x - 1/18 x 3 2 2 3 2 2 2 2 3 + 1/24 x y + 1/9 x y + 1/6 x y - 1/6 x y - 1/18 y x - 1/9 x y 4 3 4 2 - 1/36 x y + 1/18 x + 1/72 x y, COEFF(0, 2) = - 1/12 - 1/12 y + 5/48 x 4 2 4 2 4 2 2 2 3 + 1/16 x y - 1/48 x + 5/48 y x - 1/48 x y - 5/16 x y - 5/24 x y 3 4 3 2 + 1/6 y + 1/24 x y + 1/4 y , COEFF(1, 2) = - 1/18 x - 1/18 x y 3 3 3 4 2 2 4 - 1/36 x y + 1/72 x + 1/72 x y + 1/6 x y - 1/18 y x + 1/72 x 2 3 2 3 4 2 2 3 2 2 - 1/18 x - 1/24 x y + 1/9 x y - 1/24 x y + 1/9 x y + 1/6 x y 3 4 3 3 4 2 + 1/72 y x - 1/36 x y , COEFF(2, 2) = 1/144 x y - 1/144 x + 1/96 x y 4 4 2 2 2 3 - 1/288 x + 1/144 x - 1/288 x y + 1/288 x - 1/96 x y - 1/72 x y 2 3 3 3 2 3 2 - 1/48 x y + 1/72 x y - 1/144 y x - 1/144 x y + 1/288 y x 4 3 3 2 + 1/144 x y + 1/48 x y ] > print_coeffs__lc_of_data(%, "coeffs_dy->coeff_", "fp", > "2d.coeffs/2d.cube.order4.smooth0/coeffs-dy.compute.c"); bytes used=227340944, alloc=2817532, time=21.27 bytes used=228341108, alloc=2817532, time=21.34 bytes used=229341284, alloc=2817532, time=21.43 bytes used=230364276, alloc=2817532, time=21.51 bytes used=231366896, alloc=2817532, time=21.59 bytes used=232387828, alloc=2817532, time=21.65 bytes used=233410164, alloc=2817532, time=21.73 bytes used=234411164, alloc=2817532, time=21.82 bytes used=235411816, alloc=2817532, time=21.89 bytes used=236412028, alloc=2817532, time=22.25 bytes used=237412372, alloc=2817532, time=22.32 bytes used=238412628, alloc=2817532, time=22.39 bytes used=239412864, alloc=2817532, time=22.45 bytes used=240413072, alloc=2817532, time=22.53 bytes used=241413260, alloc=2817532, time=22.64 bytes used=242415104, alloc=2817532, time=22.74 bytes used=243422528, alloc=2817532, time=22.84 bytes used=244422796, alloc=2817532, time=22.92 bytes used=245434308, alloc=2817532, time=23.25 bytes used=246434640, alloc=2817532, time=23.47 bytes used=247434804, alloc=2817532, time=23.55 bytes used=248445404, alloc=2817532, time=23.66 bytes used=249445736, alloc=2817532, time=23.79 bytes used=250454324, alloc=2817532, time=24.11 bytes used=251454648, alloc=2817532, time=24.31 bytes used=252454820, alloc=2817532, time=24.38 bytes used=253455412, alloc=2817532, time=24.47 bytes used=254455864, alloc=2817532, time=24.59 bytes used=255456212, alloc=2817532, time=24.96 bytes used=256456488, alloc=2817532, time=25.03 bytes used=257456656, alloc=2817532, time=25.12 bytes used=258456848, alloc=2817532, time=25.35 bytes used=259457064, alloc=2817532, time=25.61 bytes used=260457280, alloc=2817532, time=25.69 bytes used=261457952, alloc=2817532, time=25.80 bytes used=262458396, alloc=2817532, time=26.10 bytes used=263458644, alloc=2817532, time=26.17 > # d^2/dx^2 > simplify( diff(interp_2d_cube_order4_smooth0,x,x) ); bytes used=264458908, alloc=2817532, time=26.30 bytes used=265459400, alloc=2817532, time=26.38 bytes used=266459604, alloc=2817532, time=26.45 3 3 - 1/12 DATA(2, 0) - 5/24 y DATA(0, 2) + 5/12 y DATA(0, 1) 3 3 2 2 + 5/24 y DATA(0, -2) - 5/12 y DATA(0, -1) - 1/8 x y DATA(0, 2) 2 2 2 2 2 2 - 1/8 x y DATA(0, -2) + 2 x y DATA(0, 1) + 2 x y DATA(0, -1) 2 3 2 3 2 3 + 1/2 x y DATA(0, -1) + 1/4 x y DATA(0, 2) - 1/2 x y DATA(0, 1) 2 3 - 1/4 x y DATA(0, -2) + 5/24 y DATA(0, 2) - 5/3 y DATA(0, 1) 2 - 5/24 y DATA(0, -2) + 5/3 y DATA(0, -1) + 5/48 y DATA(0, -2) 2 2 2 - 5/3 y DATA(0, -1) - 5/3 y DATA(0, 1) + 5/48 y DATA(0, 2) 2 2 2 + 2 y x DATA(0, 1) + 1/4 y x DATA(0, -2) - 2 y x DATA(0, -1) 2 - 1/4 y x DATA(0, 2) - 5/2 DATA(0, 0) + 4/3 DATA(1, 0) - 1/12 DATA(-2, 0) 2 2 2 + 4/3 DATA(-1, 0) + 2/3 x y DATA(-1, -1) - 4/3 x y DATA(1, 1) 2 2 2 2 2 2 - 1/48 x y DATA(-2, 2) - 1/48 x y DATA(2, -2) + 1/12 x y DATA(1, -2) 2 2 2 2 + 1/12 x y DATA(-1, -2) - 1/48 x y DATA(-2, -2) 2 2 2 2 2 2 - 4/3 x y DATA(-1, -1) - 4/3 x y DATA(1, -1) - 4/3 x y DATA(-1, 1) 2 2 2 + 1/6 y x DATA(1, 2) + 1/6 y x DATA(-1, 2) + 1/3 y x DATA(2, 1) 2 2 2 2 + 1/3 x y DATA(-2, -1) - 1/6 y x DATA(1, -2) - 1/6 y x DATA(-1, -2) 2 2 2 + 1/24 y x DATA(-2, -2) - 1/24 y x DATA(2, 2) - 4/3 y x DATA(1, 1) 2 2 2 - 1/24 y x DATA(-2, 2) + 1/3 y x DATA(-2, 1) - 1/3 y x DATA(-2, -1) 2 2 2 + 1/24 y x DATA(2, -2) + 4/3 y x DATA(-1, -1) + 4/3 y x DATA(1, -1) 2 2 2 - 4/3 y x DATA(-1, 1) - 1/3 y x DATA(2, -1) - 2/3 x y DATA(1, -1) 2 2 2 + 2/3 x y DATA(-1, 1) - 1/3 x y DATA(-2, -1) - 1/48 x y DATA(2, -2) 2 2 2 + 1/24 x y DATA(1, -2) - 1/24 x y DATA(-1, -2) + 1/24 x y DATA(1, 2) 2 2 2 - 1/24 x y DATA(-1, 2) + 1/3 x y DATA(2, 1) + 1/48 x y DATA(-2, -2) + 1/12 x y DATA(1, 2) - 1/12 x y DATA(-1, 2) + 1/3 x y DATA(2, 1) - 1/3 x y DATA(2, -1) - 2/3 x y DATA(1, 1) + 1/24 x y DATA(-2, 2) - 1/3 x y DATA(-2, 1) + 1/3 x y DATA(-2, -1) + 1/24 x y DATA(2, -2) 2 2 2 - 2/3 x y DATA(1, 1) - 1/3 x y DATA(-2, 1) + 1/48 x y DATA(-2, 2) 2 2 + 1/3 x y DATA(2, -1) - 1/48 x y DATA(2, 2) + 2/3 x y DATA(-1, 1) - 1/24 x y DATA(2, 2) - 1/12 x y DATA(1, -2) + 1/12 x y DATA(-1, -2) - 1/24 x y DATA(-2, -2) - 2/3 x y DATA(-1, -1) + 2/3 x y DATA(1, -1) 3 3 3 + 1/24 x y DATA(2, 2) + 1/12 x y DATA(2, -1) + 1/6 x y DATA(1, 1) 3 3 3 - 1/24 x y DATA(-2, 2) + 1/12 x y DATA(-2, 1) - 1/6 x y DATA(-1, 1) 3 3 3 - 1/12 x y DATA(1, 2) + 1/12 x y DATA(-1, 2) - 1/12 x y DATA(2, 1) 3 3 3 - 1/12 x y DATA(-2, -1) - 1/24 x y DATA(2, -2) + 1/12 x y DATA(1, -2) 3 3 3 - 1/12 x y DATA(-1, -2) + 1/24 x y DATA(-2, -2) + 1/6 x y DATA(-1, -1) 3 2 3 2 3 - 1/6 x y DATA(1, -1) - 1/12 x y DATA(-2, 1) - 1/24 x y DATA(-2, -2) 2 3 2 3 2 3 - 1/24 x y DATA(2, -2) + 1/6 x y DATA(1, -2) + 1/12 x y DATA(2, -1) 2 3 2 3 2 3 + 1/12 x y DATA(-2, -1) + 1/3 x y DATA(1, 1) + 1/24 x y DATA(-2, 2) 2 3 2 3 2 3 + 1/24 x y DATA(2, 2) - 1/6 x y DATA(1, 2) - 1/6 x y DATA(-1, 2) 2 3 2 2 2 2 - 1/12 x y DATA(2, 1) + 1/3 x y DATA(-2, 1) + 1/12 x y DATA(1, 2) 2 2 2 2 2 2 + 1/12 x y DATA(-1, 2) + 1/3 x y DATA(2, 1) + 1/3 x y DATA(2, -1) 2 2 2 3 2 3 - 1/48 x y DATA(2, 2) + 1/6 x y DATA(-1, -2) - 1/3 x y DATA(-1, -1) 2 3 2 3 4 - 1/3 x y DATA(1, -1) + 1/3 x y DATA(-1, 1) - 1/8 x y DATA(-2, 0) 4 4 4 + 1/48 x y DATA(2, -2) - 1/24 x y DATA(1, -2) + 1/24 x y DATA(-1, -2) 4 4 4 - 1/48 x y DATA(-2, -2) - 1/6 x y DATA(-1, -1) + 1/6 x y DATA(1, -1) 3 3 2 - 1/9 y DATA(-1, -2) + 1/9 y DATA(-1, 2) + 1/2 x DATA(2, 0) 2 2 2 + 3 x DATA(0, 0) - 2 x DATA(1, 0) + 1/2 x DATA(-2, 0) 2 3 - 2 x DATA(-1, 0) - 1/144 y DATA(2, 2) - 1/18 y DATA(-2, 1) 2 2 + 1/18 y DATA(-2, -1) - 1/144 y DATA(2, -2) + 5/2 x y DATA(1, 0) 2 2 2 2 2 2 + 5/2 x y DATA(-1, 0) - 5/8 x y DATA(2, 0) - 15/4 x y DATA(0, 0) 2 2 2 3 - 5/8 x y DATA(-2, 0) - 5/8 x y DATA(2, 0) + 2/9 y DATA(1, -1) 3 - 2/9 y DATA(-1, 1) + 1/2 x DATA(2, 0) - x DATA(1, 0) - 1/2 x DATA(-2, 0) 3 3 3 + 2/9 y DATA(-1, -1) + 1/9 y DATA(1, 2) + 1/72 y DATA(2, 1) 3 3 3 - 1/72 y DATA(2, -1) - 2/9 y DATA(1, 1) - 1/144 y DATA(-2, 2) 3 3 3 + 1/72 y DATA(-2, 1) - 1/72 y DATA(-2, -1) + 1/144 y DATA(2, -2) 3 2 4 4 - 1/9 y DATA(1, -2) - 1/2 x y DATA(1, 0) + 1/18 y DATA(-1, 2) 4 4 4 - 1/288 y DATA(-2, -2) + 5/12 y DATA(0, -1) - 2/9 y DATA(1, -1) 4 4 4 + 1/3 y DATA(-1, 0) - 2/9 y DATA(-1, 1) - 2/9 y DATA(-1, -1) 4 4 4 + 5/12 y DATA(0, 1) - 1/288 y DATA(-2, 2) + 1/72 y DATA(-2, 1) 4 4 4 - 2/9 y DATA(1, 1) + 1/72 y DATA(-2, -1) - 1/288 y DATA(2, -2) 4 2 4 4 + 1/18 y DATA(1, -2) - 1/12 x y DATA(1, 2) - 5/48 y DATA(0, -2) 4 4 4 + 1/18 y DATA(-1, -2) - 1/48 y DATA(-2, 0) - 5/48 y DATA(0, 2) 4 4 4 + 1/72 y DATA(2, 1) - 1/48 y DATA(2, 0) + 1/72 y DATA(2, -1) 4 4 4 - 5/8 y DATA(0, 0) + 1/3 y DATA(1, 0) - 1/288 y DATA(2, 2) 4 2 4 2 4 + 1/18 y DATA(1, 2) - 1/12 x y DATA(-1, 2) - 1/2 x y DATA(0, -1) 2 4 2 4 2 4 + 1/3 x y DATA(1, -1) - 1/2 x y DATA(-1, 0) + 1/48 x y DATA(-2, -2) 2 4 2 4 2 4 + 1/48 x y DATA(2, 2) + 1/8 x y DATA(0, 2) - 1/12 x y DATA(2, 1) 2 4 2 4 2 4 + 1/8 x y DATA(2, 0) - 1/12 x y DATA(2, -1) - 1/12 x y DATA(-2, -1) 2 4 2 4 2 4 + 1/48 x y DATA(2, -2) - 1/12 x y DATA(1, -2) + 1/8 x y DATA(0, -2) 2 4 2 4 4 - 1/12 x y DATA(-1, -2) + 1/8 x y DATA(-2, 0) - 1/12 x y DATA(2, -1) 4 4 4 + 1/4 x y DATA(-1, 0) - 1/4 x y DATA(1, 0) + 1/6 x y DATA(1, 1) 4 4 2 4 - 1/48 x y DATA(-2, 2) + 1/12 x y DATA(-2, 1) + 3/4 x y DATA(0, 0) 2 4 2 4 4 + 1/3 x y DATA(-1, 1) + 1/3 x y DATA(-1, -1) - 1/6 x y DATA(-1, 1) 4 4 4 + 1/12 x y DATA(-2, -1) - 1/24 x y DATA(1, 2) + 1/48 x y DATA(2, 2) 4 4 4 + 1/24 x y DATA(-1, 2) - 1/12 x y DATA(2, 1) + 1/8 x y DATA(2, 0) 2 2 2 - 1/18 y DATA(1, 2) - 1/18 y DATA(-1, 2) + 1/288 y DATA(-2, -2) 2 2 2 + 8/9 y DATA(1, -1) - 5/3 y DATA(-1, 0) + 8/9 y DATA(-1, 1) 2 2 2 + 8/9 y DATA(-1, -1) + 1/288 y DATA(-2, 2) - 1/18 y DATA(-2, 1) 2 2 2 + 8/9 y DATA(1, 1) - 1/18 y DATA(-2, -1) + 1/288 y DATA(2, -2) 2 2 + 1/288 y DATA(2, 2) + 1/144 y DATA(2, 2) - 1/18 y DATA(2, 1) 2 2 2 + 5/48 y DATA(2, 0) - 1/18 y DATA(2, -1) + 25/8 y DATA(0, 0) 2 - 5/3 y DATA(1, 0) - 1/9 y DATA(1, 2) - 1/9 y DATA(-1, 2) - 1/18 y DATA(2, 1) + 1/18 y DATA(2, -1) + 8/9 y DATA(1, 1) 2 2 + 1/144 y DATA(-2, 2) - 1/18 y DATA(1, -2) - 1/18 y DATA(-1, -2) 2 + 5/48 y DATA(-2, 0) + 1/9 y DATA(1, -2) + 1/9 y DATA(-1, -2) - 1/144 y DATA(-2, -2) - 8/9 y DATA(-1, -1) - 8/9 y DATA(1, -1) 2 4 2 4 + 8/9 y DATA(-1, 1) - 1/2 x y DATA(0, 1) + 1/48 x y DATA(-2, 2) 2 4 2 4 2 - 1/12 x y DATA(-2, 1) + 1/3 x y DATA(1, 1) - 5/4 x y DATA(-1, 0) 2 2 3 + 5/4 x y DATA(1, 0) + 5/8 x y DATA(-2, 0) + 1/144 y DATA(-2, -2) + x DATA(-1, 0) > coeffs_as_lc_of_data(%, posn_list_2d_size5); bytes used=267463800, alloc=2817532, time=26.51 2 4 2 2 4 2 2 [COEFF(-2, -2) = 1/48 x y + 1/48 x y + 1/288 y - 1/288 y - 1/48 x y 2 3 4 3 2 3 + 1/24 y x + 1/24 x y - 1/48 x y + 1/144 y - 1/144 y - 1/24 x y 4 2 2 2 - 1/24 x y, COEFF(-1, -2) = 1/24 x y + 1/12 x y - 1/24 x y + 1/12 x y 3 2 4 3 2 4 2 - 1/9 y + 1/9 y - 1/12 x y - 1/12 x y - 1/18 y + 1/18 y - 1/6 y x 2 3 2 2 3 + 1/6 x y , COEFF(0, -2) = - 5/24 y + 5/48 y + 1/4 y x + 5/24 y 2 2 2 3 4 2 4 2 - 1/8 x y - 1/4 x y - 5/48 y + 1/8 x y , COEFF(1, -2) = 1/24 x y 2 3 2 2 4 2 - 1/12 x y - 1/6 y x - 1/9 y + 1/12 x y + 1/18 y - 1/18 y 3 2 3 4 2 4 + 1/12 x y + 1/6 x y + 1/9 y - 1/24 x y - 1/12 x y , COEFF(2, -2) = 2 4 4 2 2 4 - 1/48 x y - 1/288 y + 1/48 x y + 1/24 y x + 1/24 x y + 1/48 x y 3 2 2 2 2 3 3 - 1/144 y + 1/144 y - 1/48 x y + 1/288 y - 1/24 x y - 1/24 x y , 2 2 3 2 2 3 COEFF(-2, -1) = 1/3 x y + 1/3 x y - 1/72 y - 1/18 y + 1/12 x y 4 3 2 4 2 2 + 1/18 y + 1/12 x y - 1/12 x y - 1/12 x y - 1/3 y x - 1/3 x y 4 4 2 2 4 + 1/72 y , COEFF(-1, -1) = - 1/6 x y + 2/3 x y - 8/9 y + 1/3 x y 2 2 2 2 3 3 4 2 3 + 8/9 y - 4/3 x y + 4/3 y x + 2/9 y + 1/6 x y - 2/9 y - 1/3 x y 2 3 2 2 4 2 - 2/3 x y, COEFF(0, -1) = 1/2 x y + 2 x y + 5/12 y - 5/3 y 2 4 2 3 2 4 - 1/2 x y - 2 y x - 5/12 y + 5/3 y, COEFF(1, -1) = 1/3 x y + 2/3 x y 4 3 2 2 2 4 2 3 + 1/6 x y + 2/9 y - 4/3 x y - 8/9 y - 2/3 x y - 2/9 y - 1/3 x y 3 2 2 2 2 4 - 1/6 x y + 8/9 y + 4/3 y x , COEFF(2, -1) = - 1/18 y - 1/12 x y 4 2 2 2 2 3 - 1/12 x y + 1/3 x y + 1/3 x y + 1/18 y - 1/3 x y + 1/12 x y 3 3 4 2 2 - 1/72 y + 1/12 x y + 1/72 y - 1/3 y x , COEFF(-2, 0) = 1/2 x 2 4 2 4 2 2 2 + 1/8 x y + 5/8 x y - 1/48 y - 1/12 + 5/48 y - 5/8 x y - 1/2 x 4 2 2 2 4 4 - 1/8 x y , COEFF(-1, 0) = 4/3 + 5/2 x y - 2 x + 1/4 x y + 1/3 y + x 2 4 2 2 - 1/2 x y - 5/4 x y - 5/3 y , 2 4 2 4 2 2 2 COEFF(0, 0) = 3 x - 5/8 y + 3/4 x y - 5/2 - 15/4 x y + 25/8 y , 4 2 2 2 2 2 4 COEFF(1, 0) = - 1/4 x y + 5/2 x y + 5/4 x y - 5/3 y - 2 x + 1/3 y 2 4 2 2 2 4 - 1/2 x y + 4/3 - x, COEFF(2, 0) = - 5/8 x y + 1/2 x + 1/8 x y 2 4 2 2 4 + 1/8 x y - 5/8 x y + 1/2 x - 1/12 + 5/48 y - 1/48 y , COEFF(-2, 1) = 4 2 2 2 2 2 4 - 1/18 y + 1/12 x y + 1/3 y x - 1/3 x y + 1/3 x y - 1/12 x y 3 3 2 4 2 3 + 1/12 x y + 1/72 y - 1/18 y + 1/72 y - 1/3 x y - 1/12 x y , 3 2 4 2 4 COEFF(-1, 1) = - 2/9 y - 4/3 y x - 1/6 x y + 2/3 x y + 1/3 x y 2 2 3 2 3 2 2 4 + 2/3 x y + 1/3 x y + 8/9 y - 1/6 x y - 4/3 x y + 8/9 y - 2/9 y , 3 2 2 2 2 4 4 COEFF(0, 1) = 5/12 y + 2 x y - 5/3 y - 1/2 x y - 5/3 y + 5/12 y 2 3 2 4 2 4 3 - 1/2 x y + 2 y x , COEFF(1, 1) = - 2/9 y + 1/3 x y + 1/6 x y 3 4 2 2 2 2 3 2 - 2/9 y + 8/9 y + 1/6 x y - 2/3 x y - 4/3 x y + 1/3 x y + 8/9 y 2 3 2 - 4/3 y x - 2/3 x y, COEFF(2, 1) = 1/3 x y - 1/18 y + 1/72 y + 1/3 x y 2 3 2 4 2 2 2 2 4 - 1/12 x y + 1/3 y x + 1/72 y + 1/3 x y - 1/18 y - 1/12 x y 4 3 2 2 3 - 1/12 x y - 1/12 x y , COEFF(-2, 2) = 1/48 x y - 1/24 y x - 1/24 x y 2 2 2 2 3 2 4 3 - 1/48 x y + 1/288 y + 1/144 y + 1/24 x y + 1/48 x y - 1/144 y 4 4 3 + 1/24 x y - 1/288 y - 1/48 x y , COEFF(-1, 2) = - 1/12 x y + 1/9 y 4 2 4 2 2 2 4 2 + 1/24 x y - 1/12 x y - 1/18 y + 1/12 x y + 1/18 y - 1/24 x y 2 2 3 3 2 + 1/6 y x - 1/6 x y - 1/9 y + 1/12 x y , COEFF(0, 2) = 5/48 y 2 2 3 4 2 4 2 3 - 1/8 x y - 5/24 y + 5/24 y - 5/48 y + 1/8 x y + 1/4 x y 2 4 2 - 1/4 y x , COEFF(1, 2) = 1/12 x y + 1/18 y + 1/24 x y - 1/9 y 2 2 3 2 2 2 4 2 4 + 1/6 y x - 1/6 x y + 1/12 x y - 1/18 y - 1/24 x y - 1/12 x y 3 3 4 4 2 2 - 1/12 x y + 1/9 y , COEFF(2, 2) = - 1/288 y + 1/48 x y - 1/48 x y 2 2 3 2 4 + 1/144 y + 1/288 y - 1/48 x y - 1/24 x y - 1/144 y + 1/48 x y 2 3 3 2 + 1/24 x y + 1/24 x y - 1/24 y x ] > print_coeffs__lc_of_data(%, "coeffs_dxx->coeff_", "fp", > "2d.coeffs/2d.cube.order4.smooth0/coeffs-dxx.compute.c"); bytes used=268463952, alloc=2817532, time=26.58 bytes used=269464108, alloc=2817532, time=26.64 bytes used=270464264, alloc=2817532, time=26.72 bytes used=271468824, alloc=2817532, time=26.79 bytes used=272470884, alloc=2817532, time=26.86 bytes used=273471272, alloc=2817532, time=26.94 bytes used=274471420, alloc=2817532, time=27.14 bytes used=275471752, alloc=2817532, time=27.42 bytes used=276472040, alloc=2817532, time=27.49 bytes used=277475512, alloc=2817532, time=27.55 bytes used=278475700, alloc=2817532, time=27.65 bytes used=279484180, alloc=2817532, time=27.75 bytes used=280484464, alloc=2817532, time=27.86 bytes used=281491584, alloc=2817532, time=28.19 bytes used=282491764, alloc=2817532, time=28.39 bytes used=283493688, alloc=2817532, time=28.47 bytes used=284493880, alloc=2817532, time=28.62 bytes used=285503016, alloc=2817532, time=28.93 bytes used=286503156, alloc=2817532, time=29.13 bytes used=287503572, alloc=2817532, time=29.21 bytes used=288504456, alloc=2817532, time=29.36 bytes used=289504572, alloc=2817532, time=29.68 bytes used=290504728, alloc=2817532, time=29.75 bytes used=291504932, alloc=2817532, time=30.12 bytes used=292505132, alloc=2817532, time=30.26 bytes used=293505260, alloc=2817532, time=30.36 bytes used=294505412, alloc=2817532, time=30.69 bytes used=295505644, alloc=2817532, time=30.79 > # d^2/dxdy > simplify( diff(interp_2d_cube_order4_smooth0,x,y) ); bytes used=296505980, alloc=2817532, time=30.89 bytes used=297506132, alloc=2817532, time=30.96 bytes used=298506352, alloc=2817532, time=31.03 1/144 DATA(2, 2) - 1/18 DATA(1, 2) + 1/18 DATA(-1, 2) - 1/18 DATA(2, 1) + 1/18 DATA(2, -1) + 4/9 DATA(1, 1) - 1/144 DATA(-2, 2) + 1/18 DATA(-2, 1) - 1/18 DATA(-2, -1) - 1/144 DATA(2, -2) + 1/18 DATA(1, -2) - 1/18 DATA(-1, -2) + 1/144 DATA(-2, -2) + 4/9 DATA(-1, -1) 3 3 - 4/9 DATA(1, -1) - 4/9 DATA(-1, 1) - 2/3 x y DATA(1, 0) 3 3 3 3 3 3 + 1/6 x y DATA(-2, 0) - 2/3 x y DATA(-1, 0) + 4/9 x y DATA(-1, 1) 3 3 3 3 3 3 + x y DATA(0, 0) - 1/9 x y DATA(2, 1) - 1/9 x y DATA(2, -1) + 8/9 x DATA(-1, 1) + 5/24 y DATA(2, 0) - 5/3 y DATA(1, 0) - 8/9 x DATA(-1, -1) + 5/3 x DATA(0, -1) - 8/9 x DATA(1, -1) 3 3 + 5/3 y DATA(-1, 0) - 1/72 x DATA(2, 2) + 1/18 x DATA(1, 2) 3 3 3 + 1/18 x DATA(-1, 2) - 1/12 x DATA(0, 2) + 1/72 x DATA(2, -2) 3 3 3 - 1/18 x DATA(1, -2) + 1/12 x DATA(0, -2) - 1/18 x DATA(-1, -2) 3 3 3 + 1/9 x DATA(2, 1) - 1/9 x DATA(2, -1) + 2/3 x DATA(0, 1) 3 3 - 4/9 x DATA(1, 1) - 1/72 x DATA(-2, 2) - 5/24 y DATA(-2, 0) 3 3 3 3 3 3 - 2/3 x y DATA(0, 1) + 1/36 x y DATA(-2, 2) - 1/9 x y DATA(-2, 1) 3 3 3 3 3 3 + 4/9 x y DATA(1, 1) + 1/36 x y DATA(2, -2) - 1/9 x y DATA(1, -2) 3 3 3 3 3 3 + 1/6 x y DATA(0, -2) - 1/9 x y DATA(-1, -2) + 1/36 x y DATA(-2, -2) 2 2 2 2 2 + 2/3 x y DATA(-1, -1) + 1/4 x y DATA(1, 1) - 1/16 x y DATA(-2, 2) 3 3 3 3 3 3 - 1/9 x y DATA(1, 2) - 1/9 x y DATA(-1, 2) + 1/36 x y DATA(2, 2) 3 3 3 + 4/3 x y DATA(1, 0) - 1/12 x y DATA(-2, 0) + 4/3 x y DATA(-1, 0) 3 3 3 3 3 - 5/2 x y DATA(0, 0) + 1/6 x y DATA(2, 0) - 1/9 x y DATA(-2, -1) 3 3 3 + 1/72 x DATA(-2, -2) + 5/3 x y DATA(0, -1) - 5/12 x y DATA(0, 2) 3 3 3 3 + 5/3 x y DATA(0, 1) - 1/12 x y DATA(2, 0) + 4/9 x y DATA(-1, -1) 3 3 3 3 - 2/3 x y DATA(0, -1) - 5/12 x y DATA(0, -2) + 4/9 x DATA(-1, -1) 2 2 2 + 5/4 y x DATA(1, 0) + 5/8 y x DATA(-2, 0) - 5/8 y x DATA(2, 0) 2 3 3 - 5/4 y x DATA(-1, 0) - 5/2 y x DATA(0, 0) - 5/12 y x DATA(2, 0) 3 3 3 + 2/9 y x DATA(-2, 1) + 2/9 y x DATA(-2, -1) - 1/72 y x DATA(2, -2) 3 3 3 - 8/9 y x DATA(1, -1) + 5/3 y x DATA(1, 0) - 5/12 y x DATA(-2, 0) 3 3 3 + 5/3 y x DATA(-1, 0) - 8/9 y x DATA(-1, 1) + 2/9 y x DATA(2, -1) 3 3 3 - 1/12 y x DATA(0, 2) + 4/3 y x DATA(0, 1) - 8/9 y x DATA(1, 1) 3 3 3 - 1/72 y x DATA(-2, 2) - 1/72 y x DATA(-2, -2) - 8/9 y x DATA(-1, -1) 3 3 3 + 4/3 y x DATA(0, -1) + 1/18 y x DATA(1, 2) + 1/18 y x DATA(-1, 2) 3 3 2 - 1/72 y x DATA(2, 2) + 2/9 y x DATA(2, 1) - 1/6 x DATA(2, -1) 2 2 2 - 1/3 x DATA(1, 1) + 1/48 x DATA(-2, 2) - 1/6 x DATA(-2, 1) 2 2 2 + 1/6 x DATA(-2, -1) + 1/48 x DATA(2, -2) - 1/24 x DATA(1, -2) 2 2 2 + 1/24 x DATA(-1, -2) - 1/48 x DATA(-2, -2) - 1/3 x DATA(-1, -1) 2 2 2 + 1/3 x DATA(1, -1) + 1/24 x DATA(1, 2) - 1/24 x DATA(-1, 2) 2 2 3 + 1/6 x DATA(2, 1) - 1/48 x DATA(2, 2) - 2/3 x DATA(0, -1) 3 3 3 + 4/9 x DATA(1, -1) - 4/9 x DATA(-1, 1) + 1/9 x DATA(-2, 1) 3 - 1/9 x DATA(-2, -1) + 5/24 x DATA(0, 2) - 1/18 x DATA(2, 1) + 1/18 x DATA(2, -1) - 5/3 x DATA(0, 1) + 8/9 x DATA(1, 1) + 1/144 x DATA(-2, 2) - 1/18 x DATA(-2, 1) + 1/18 x DATA(-2, -1) - 1/144 x DATA(2, -2) + 1/9 x DATA(1, -2) - 5/24 x DATA(0, -2) 2 3 3 + 5/4 x y DATA(0, 1) + 1/18 y x DATA(1, -2) - 1/12 y x DATA(0, -2) 3 2 + 1/18 y x DATA(-1, -2) - 5/8 x y DATA(0, 2) + 1/9 x DATA(-1, -2) 3 2 3 2 3 2 - 1/2 x y DATA(0, 1) + 1/3 x y DATA(1, 1) + 1/24 x y DATA(-2, 2) 3 2 3 2 - 1/12 x y DATA(-2, 1) + 1/12 x y DATA(-2, -1) 3 2 2 2 - 1/24 x y DATA(2, -2) + 5/8 x y DATA(0, -2) - 5/4 x y DATA(0, -1) 3 2 3 2 - 1/144 x DATA(-2, -2) - 1/4 x y DATA(0, -2) + 1/24 x y DATA(2, 2) 3 2 3 2 3 2 - 1/6 x y DATA(1, 2) - 1/6 x y DATA(-1, 2) + 1/4 x y DATA(0, 2) 3 2 3 2 3 2 - 1/12 x y DATA(2, 1) + 1/12 x y DATA(2, -1) - 1/3 x y DATA(1, -1) 2 + 1/3 x DATA(-1, 1) + 5/24 x y DATA(-2, 0) - 10/3 x y DATA(-1, 0) 3 2 3 2 3 2 + 1/6 x y DATA(1, -2) + 1/6 x y DATA(-1, -2) - 1/24 x y DATA(-2, -2) 3 2 3 2 3 2 - 1/3 x y DATA(-1, -1) + 1/2 x y DATA(0, -1) + 1/3 x y DATA(-1, 1) + 5/24 x y DATA(2, 0) - 10/3 x y DATA(1, 0) + 1/144 x DATA(2, 2) + 25/4 x y DATA(0, 0) + 5/24 x y DATA(0, 2) - 10/3 x y DATA(0, 1) 2 3 + 5/24 x y DATA(0, -2) + 1/4 x y DATA(2, 0) - 10/3 x y DATA(0, -1) 2 3 2 3 3 + 1/2 x y DATA(-1, 0) - 1/2 x y DATA(1, 0) - 2/3 y DATA(-1, 0) 3 3 - 1/9 x DATA(1, 2) - 1/9 x DATA(-1, 2) + 1/6 x y DATA(0, 2) 2 3 3 3 - 1/4 x y DATA(-2, 0) - 1/12 y DATA(2, 0) + 2/3 y DATA(1, 0) 3 3 3 2 2 + 1/12 y DATA(-2, 0) + 4/9 x y DATA(1, -1) - 1/16 x y DATA(2, -2) 2 2 2 2 2 2 + 1/8 x y DATA(1, -2) - 1/8 x y DATA(-1, -2) + 1/16 x y DATA(-2, -2) 2 2 2 2 2 2 + 1/4 x y DATA(-1, -1) - 1/4 x y DATA(1, -1) - 1/4 x y DATA(-1, 1) 2 2 2 + 1/24 y x DATA(1, 2) - 1/24 y x DATA(-1, 2) + 1/3 y x DATA(2, 1) 2 2 2 2 - 1/8 x y DATA(-2, -1) + 1/24 y x DATA(1, -2) - 1/24 y x DATA(-1, -2) 2 2 2 + 1/48 y x DATA(-2, -2) - 1/48 y x DATA(2, 2) - 2/3 y x DATA(1, 1) 2 2 2 + 1/48 y x DATA(-2, 2) - 1/3 y x DATA(-2, 1) - 1/3 y x DATA(-2, -1) 2 2 2 - 1/48 y x DATA(2, -2) + 2/3 y x DATA(-1, -1) - 2/3 y x DATA(1, -1) 2 2 2 + 2/3 y x DATA(-1, 1) + 1/3 y x DATA(2, -1) + 2/3 x y DATA(1, -1) 2 2 2 - 2/3 x y DATA(-1, 1) - 1/24 x y DATA(-2, -1) + 1/48 x y DATA(2, -2) 2 2 2 - 1/3 x y DATA(1, -2) - 1/3 x y DATA(-1, -2) + 1/3 x y DATA(1, 2) 2 2 2 + 1/3 x y DATA(-1, 2) + 1/24 x y DATA(2, 1) + 1/48 x y DATA(-2, -2) - 1/9 x y DATA(1, 2) - 1/9 x y DATA(-1, 2) - 1/9 x y DATA(2, 1) - 1/9 x y DATA(2, -1) + 16/9 x y DATA(1, 1) + 1/144 x y DATA(-2, 2) - 1/9 x y DATA(-2, 1) - 1/9 x y DATA(-2, -1) + 1/144 x y DATA(2, -2) 2 2 2 - 2/3 x y DATA(1, 1) + 1/24 x y DATA(-2, 1) - 1/48 x y DATA(-2, 2) 2 2 - 1/24 x y DATA(2, -1) - 1/48 x y DATA(2, 2) + 16/9 x y DATA(-1, 1) + 1/144 x y DATA(2, 2) - 1/9 x y DATA(1, -2) - 1/9 x y DATA(-1, -2) + 1/144 x y DATA(-2, -2) + 16/9 x y DATA(-1, -1) + 16/9 x y DATA(1, -1) 3 3 3 - 1/72 x y DATA(2, 2) + 1/18 x y DATA(2, -1) - 8/9 x y DATA(1, 1) 3 3 3 - 1/72 x y DATA(-2, 2) + 1/18 x y DATA(-2, 1) - 8/9 x y DATA(-1, 1) 3 3 3 + 2/9 x y DATA(1, 2) + 2/9 x y DATA(-1, 2) + 1/18 x y DATA(2, 1) 3 3 3 + 1/18 x y DATA(-2, -1) - 1/72 x y DATA(2, -2) + 2/9 x y DATA(1, -2) 3 3 3 + 2/9 x y DATA(-1, -2) - 1/72 x y DATA(-2, -2) - 8/9 x y DATA(-1, -1) 3 2 3 2 3 - 8/9 x y DATA(1, -1) + 1/6 x y DATA(-2, 1) - 1/24 x y DATA(-2, -2) 2 3 2 3 2 3 + 1/24 x y DATA(2, -2) - 1/12 x y DATA(1, -2) - 1/6 x y DATA(2, -1) 2 3 2 3 2 3 + 1/6 x y DATA(-2, -1) + 1/3 x y DATA(1, 1) - 1/24 x y DATA(-2, 2) 2 3 2 3 2 3 + 1/24 x y DATA(2, 2) - 1/12 x y DATA(1, 2) + 1/12 x y DATA(-1, 2) 2 3 2 2 2 2 - 1/6 x y DATA(2, 1) + 1/8 x y DATA(-2, 1) - 1/8 x y DATA(1, 2) 2 2 2 2 2 2 + 1/8 x y DATA(-1, 2) - 1/8 x y DATA(2, 1) + 1/8 x y DATA(2, -1) 2 2 2 3 2 3 + 1/16 x y DATA(2, 2) + 1/12 x y DATA(-1, -2) - 1/3 x y DATA(-1, -1) 2 3 2 3 3 + 1/3 x y DATA(1, -1) - 1/3 x y DATA(-1, 1) - 1/9 y DATA(-1, -2) 3 3 - 1/9 y DATA(-1, 2) - 1/72 y DATA(2, 2) + 1/9 y DATA(-2, 1) 3 + 1/9 y DATA(-2, -1) + 1/144 y DATA(2, -2) - 4/9 y DATA(1, -1) 3 3 3 + 4/9 y DATA(-1, 1) + 4/9 y DATA(-1, -1) + 1/9 y DATA(1, 2) 3 3 3 + 1/18 y DATA(2, 1) + 1/18 y DATA(2, -1) - 4/9 y DATA(1, 1) 3 3 3 + 1/72 y DATA(-2, 2) - 1/18 y DATA(-2, 1) - 1/18 y DATA(-2, -1) 3 3 2 - 1/72 y DATA(2, -2) + 1/9 y DATA(1, -2) + 1/6 y DATA(1, 2) 2 2 2 - 1/6 y DATA(-1, 2) - 1/48 y DATA(-2, -2) + 1/3 y DATA(1, -1) 2 2 2 + 1/3 y DATA(-1, 1) - 1/3 y DATA(-1, -1) + 1/48 y DATA(-2, 2) 2 2 2 - 1/24 y DATA(-2, 1) - 1/3 y DATA(1, 1) + 1/24 y DATA(-2, -1) 2 2 + 1/48 y DATA(2, -2) - 1/48 y DATA(2, 2) + 1/144 y DATA(2, 2) 2 2 + 1/24 y DATA(2, 1) - 1/24 y DATA(2, -1) - 1/18 y DATA(1, 2) + 1/18 y DATA(-1, 2) - 1/9 y DATA(2, 1) - 1/9 y DATA(2, -1) 2 + 8/9 y DATA(1, 1) - 1/144 y DATA(-2, 2) - 1/6 y DATA(1, -2) 2 + 1/6 y DATA(-1, -2) - 1/18 y DATA(1, -2) + 1/18 y DATA(-1, -2) - 1/144 y DATA(-2, -2) - 8/9 y DATA(-1, -1) + 8/9 y DATA(1, -1) 3 - 8/9 y DATA(-1, 1) + 1/72 y DATA(-2, -2) > coeffs_as_lc_of_data(%, posn_list_2d_size5); bytes used=299534960, alloc=2817532, time=31.10 bytes used=300538760, alloc=2817532, time=31.17 3 3 2 2 2 3 [COEFF(-2, -2) = 1/36 x y - 1/144 y + 1/16 x y + 1/144 x y - 1/24 x y 2 2 3 2 3 3 + 1/48 x y + 1/48 y x - 1/24 x y + 1/72 y + 1/72 x - 1/144 x 2 3 3 2 - 1/48 y - 1/72 x y + 1/144 - 1/72 y x - 1/48 x , COEFF(-1, -2) = 2 3 2 2 3 3 1/24 x + 1/9 x + 1/6 x y + 1/18 y + 1/12 x y - 1/18 + 2/9 x y 2 2 2 2 3 3 3 - 1/24 y x - 1/9 x y - 1/8 x y - 1/3 x y - 1/9 y - 1/9 x y 3 2 3 2 3 - 1/18 x + 1/6 y + 1/18 y x , COEFF(0, -2) = 5/8 x y - 1/12 y x 3 3 3 3 2 3 - 5/12 x y + 5/24 x y + 1/6 x y - 5/24 x - 1/4 x y + 1/12 x , 2 3 2 2 COEFF(1, -2) = - 1/3 x y + 1/6 x y - 1/6 y - 1/18 y + 1/9 x 2 3 2 3 3 3 2 2 - 1/12 x y + 1/24 y x + 1/18 + 1/18 y x + 1/9 y - 1/18 x + 1/8 x y 3 3 2 3 2 2 - 1/9 x y - 1/24 x - 1/9 x y + 2/9 x y , COEFF(2, -2) = - 1/16 x y 3 2 3 2 2 - 1/72 x y + 1/48 x y + 1/144 x y - 1/24 x y - 1/48 y x - 1/144 x 3 2 3 2 3 3 3 - 1/72 y x + 1/24 x y + 1/48 y - 1/144 - 1/72 y + 1/36 x y 3 2 3 3 3 + 1/72 x + 1/144 y + 1/48 x , COEFF(-2, -1) = - 1/18 - 1/9 x y - 1/9 x 3 2 3 2 3 2 3 - 1/18 y + 1/6 x y + 1/6 x + 1/12 x y - 1/9 x y + 2/9 y x + 1/9 y 2 2 3 2 2 2 - 1/8 x y + 1/18 x y + 1/24 y - 1/24 x y + 1/18 x - 1/3 y x , 3 3 3 2 3 COEFF(-1, -1) = 4/9 x y - 8/9 y x + 16/9 x y + 4/9 - 1/3 x - 8/9 x y 3 2 2 3 2 2 - 1/3 x y - 8/9 x + 2/3 x y + 4/9 x - 8/9 y + 2/3 y x - 1/3 y 2 3 3 2 2 3 3 3 - 1/3 x y + 4/9 y + 1/4 x y , COEFF(0, -1) = - 2/3 x y + 4/3 y x 3 3 2 2 3 + 5/3 x y + 1/2 x y + 5/3 x - 5/4 x y - 10/3 x y - 2/3 x , 3 3 3 3 3 3 COEFF(1, -1) = - 4/9 y - 8/9 x y + 4/9 x - 8/9 x + 4/9 x y - 8/9 y x 2 3 2 2 3 2 2 2 + 1/3 x y + 16/9 x y - 1/4 x y - 1/3 x y + 1/3 y + 1/3 x + 8/9 y 2 2 2 3 2 - 2/3 y x - 4/9 + 2/3 x y , COEFF(2, -1) = 1/3 y x + 1/12 x y 3 3 2 2 3 3 + 2/9 y x + 1/18 y - 1/6 x - 1/9 x y + 1/18 x - 1/24 y - 1/9 x y 2 2 2 3 2 3 3 + 1/18 + 1/8 x y - 1/9 y - 1/6 x y - 1/24 x y + 1/18 x y - 1/9 x , 3 3 3 3 2 3 COEFF(-2, 0) = 1/6 x y - 5/24 y - 5/12 y x - 1/12 x y - 1/4 x y 2 3 2 2 3 + 5/24 x y + 5/8 y x + 1/12 y , COEFF(-1, 0) = - 5/4 y x + 1/2 x y 3 3 3 3 3 + 4/3 x y + 5/3 y x - 10/3 x y - 2/3 y - 2/3 x y + 5/3 y, 3 3 3 3 COEFF(0, 0) = 25/4 x y - 5/2 y x - 5/2 x y + x y , COEFF(1, 0) = 2 3 2 3 3 3 3 - 1/2 x y + 5/4 y x - 5/3 y - 2/3 x y + 5/3 y x + 2/3 y - 10/3 x y 3 3 3 2 3 + 4/3 x y , COEFF(2, 0) = 5/24 y + 1/6 x y + 5/24 x y + 1/4 x y 2 3 3 3 2 - 5/8 y x - 5/12 y x - 1/12 y - 1/12 x y , COEFF(-2, 1) = 1/24 x y 2 3 2 2 3 2 3 3 - 1/3 y x + 2/9 y x + 1/8 x y - 1/12 x y + 1/18 x y - 1/18 y 2 2 3 2 3 3 - 1/9 x y - 1/6 x + 1/18 + 1/6 x y - 1/24 y - 1/9 x y + 1/9 y 3 2 2 + 1/9 x - 1/18 x, COEFF(-1, 1) = 2/3 y x - 4/9 - 8/9 y - 2/3 x y 3 2 3 3 3 3 3 2 - 8/9 x y + 1/3 x + 4/9 y + 16/9 x y - 4/9 x + 4/9 x y + 1/3 x y 3 2 2 3 2 2 - 8/9 y x + 8/9 x + 1/3 y - 1/3 x y - 1/4 x y , COEFF(0, 1) = 3 3 2 3 3 3 3 4/3 y x - 1/2 x y + 5/3 x y - 2/3 x y - 10/3 x y - 5/3 x + 2/3 x 2 3 2 3 2 2 3 + 5/4 x y , COEFF(1, 1) = - 4/9 x + 1/3 x y + 1/4 x y - 4/9 y 2 2 3 2 3 - 1/3 y + 8/9 y - 1/3 x - 8/9 x y - 2/3 x y - 8/9 y x + 8/9 x 2 3 2 3 3 - 2/3 y x + 1/3 x y + 4/9 x y + 16/9 x y + 4/9, COEFF(2, 1) = - 1/18 3 2 3 2 3 2 2 + 1/9 x - 1/18 x + 1/24 y - 1/12 x y + 2/9 y x + 1/6 x + 1/24 x y 2 3 3 2 2 3 3 3 - 1/6 x y + 1/18 x y - 1/9 y - 1/8 x y - 1/9 x y + 1/18 y 2 2 2 2 - 1/9 x y + 1/3 y x , COEFF(-2, 2) = - 1/48 x y + 1/48 x + 1/48 y x 2 2 2 2 3 - 1/144 + 1/144 x y + 1/48 y - 1/16 x y - 1/24 x y + 1/144 x 3 3 3 3 3 3 2 - 1/72 x y - 1/144 y - 1/72 x - 1/72 y x + 1/36 x y + 1/24 x y 3 2 3 3 2 + 1/72 y , COEFF(-1, 2) = 1/3 x y - 1/9 y + 1/18 x - 1/24 y x + 1/18 2 2 3 2 2 3 2 3 3 - 1/24 x + 1/12 x y + 1/8 x y + 2/9 x y - 1/6 y - 1/9 x y 3 2 3 - 1/6 x y - 1/9 x y + 1/18 y - 1/9 x + 1/18 y x , COEFF(0, 2) = 5/24 x 2 3 2 3 3 3 3 - 5/8 x y + 5/24 x y + 1/4 x y + 1/6 x y - 5/12 x y - 1/12 y x 3 2 3 2 3 3 - 1/12 x , COEFF(1, 2) = - 1/12 x y - 1/18 + 1/24 x + 1/18 x + 1/9 y 2 3 2 3 2 2 + 1/6 y + 2/9 x y + 1/24 y x - 1/18 y + 1/18 y x - 1/8 x y - 1/9 x y 3 2 3 3 2 3 - 1/6 x y - 1/9 x y + 1/3 x y - 1/9 x, COEFF(2, 2) = - 1/72 y x 3 2 2 2 3 - 1/72 x - 1/48 x + 1/144 x y + 1/144 - 1/48 y + 1/144 x + 1/24 x y 2 3 2 2 2 3 2 3 - 1/48 y x - 1/72 x y + 1/16 x y - 1/48 x y + 1/24 x y - 1/72 y 3 3 + 1/36 x y + 1/144 y] > print_coeffs__lc_of_data(%, "coeffs_dxy->coeff_", "fp", > "2d.coeffs/2d.cube.order4.smooth0/coeffs-dxy.compute.c"); bytes used=301539208, alloc=2817532, time=31.25 bytes used=302539400, alloc=2817532, time=31.32 bytes used=303539592, alloc=2817532, time=31.40 bytes used=304557648, alloc=2817532, time=31.44 bytes used=305571464, alloc=2817532, time=31.54 bytes used=306581776, alloc=2817532, time=31.63 bytes used=307582028, alloc=2817532, time=31.71 bytes used=308582248, alloc=2817532, time=31.78 bytes used=309582476, alloc=2817532, time=32.18 bytes used=310582696, alloc=2817532, time=32.25 bytes used=311582884, alloc=2817532, time=32.32 bytes used=312583056, alloc=2817532, time=32.42 bytes used=313583260, alloc=2817532, time=32.51 bytes used=314583428, alloc=2817532, time=32.60 bytes used=315583596, alloc=2817532, time=32.70 bytes used=316593332, alloc=2817532, time=33.09 bytes used=317593536, alloc=2817532, time=33.32 bytes used=318593748, alloc=2817532, time=33.39 bytes used=319593964, alloc=2817532, time=33.51 bytes used=320594120, alloc=2817532, time=33.69 bytes used=321594408, alloc=2817532, time=34.06 bytes used=322594856, alloc=2817532, time=34.26 bytes used=323595080, alloc=2817532, time=34.33 bytes used=324595308, alloc=2817532, time=34.46 bytes used=325595460, alloc=2817532, time=34.65 bytes used=326595828, alloc=2817532, time=35.02 bytes used=327596080, alloc=2817532, time=35.09 bytes used=328596388, alloc=2817532, time=35.22 bytes used=329596548, alloc=2817532, time=35.63 bytes used=330596860, alloc=2817532, time=35.76 bytes used=331597036, alloc=2817532, time=35.86 bytes used=332597196, alloc=2817532, time=36.29 bytes used=333597480, alloc=2817532, time=36.41 > # d^2/dy^2 > simplify( diff(interp_2d_cube_order4_smooth0,y,y) ); bytes used=334597656, alloc=2817532, time=36.56 bytes used=335597820, alloc=2817532, time=36.64 bytes used=336597976, alloc=2817532, time=36.70 - 1/12 DATA(0, 2) - 5/2 DATA(0, 0) + 4/3 DATA(0, 1) - 1/12 DATA(0, -2) 3 4 4 + 5/12 x DATA(1, 0) - 5/8 x DATA(0, 0) + 5/12 x DATA(-1, 0) 4 4 4 - 5/48 x DATA(2, 0) + 5/12 x DATA(1, 0) + 1/72 x DATA(1, 2) 4 4 4 + 1/72 x DATA(-1, 2) + 1/18 x DATA(2, 1) - 1/48 x DATA(0, 2) 3 3 - 5/12 x DATA(-1, 0) + 5/24 x DATA(-2, 0) + 1/2 y DATA(0, 2) 4 4 4 + 1/3 x DATA(0, -1) - 1/48 x DATA(0, -2) + 1/3 x DATA(0, 1) 4 4 4 + 1/72 x DATA(1, -2) - 1/288 x DATA(2, -2) + 1/18 x DATA(-2, -1) 4 3 2 4 - 5/48 x DATA(-2, 0) - 5/24 x DATA(2, 0) - 1/2 y x DATA(0, -1) 2 4 2 4 2 4 - 1/2 y x DATA(0, 1) + 1/8 y x DATA(0, -2) + 1/48 y x DATA(2, -2) 2 4 2 4 2 4 - 1/12 y x DATA(-2, -1) + 1/8 y x DATA(-2, 0) - 1/12 y x DATA(1, -2) 3 2 3 2 + 1/4 x y DATA(2, 0) + 5/24 x DATA(2, 0) - 1/2 x y DATA(1, 0) 3 2 2 2 2 2 + 1/2 x y DATA(-1, 0) - 5/8 x y DATA(0, 2) - 5/8 x y DATA(0, -2) 2 2 2 2 2 2 - 15/4 x y DATA(0, 0) + 5/2 x y DATA(0, 1) - 1/8 x y DATA(-2, 0) 2 2 2 4 2 4 + 5/2 x y DATA(0, -1) + 1/3 y x DATA(-1, -1) - 1/12 y x DATA(-1, -2) 2 4 2 4 2 4 + 1/3 y x DATA(-1, 1) + 1/48 y x DATA(-2, -2) - 1/2 y x DATA(-1, 0) 2 4 2 4 2 4 + 1/3 y x DATA(1, -1) + 1/3 y x DATA(1, 1) - 1/2 y x DATA(1, 0) 2 4 2 4 2 4 + 1/8 y x DATA(2, 0) - 1/12 y x DATA(-2, 1) + 1/48 y x DATA(-2, 2) 2 2 4 2 4 - 2 x y DATA(-1, 0) + 1/48 y x DATA(2, 2) - 1/12 y x DATA(2, -1) 2 2 2 2 2 2 + 2 x y DATA(-1, 0) + 2 x y DATA(1, 0) - 1/8 x y DATA(2, 0) 2 - 5/3 x DATA(1, 0) + 4/3 DATA(0, -1) + 2 x y DATA(1, 0) 2 2 4 + 1/4 x y DATA(-2, 0) - 1/4 x y DATA(2, 0) - 2/9 x DATA(-1, -1) 2 4 4 - 5/4 y x DATA(0, -1) - 1/288 x DATA(2, 2) + 1/72 x DATA(-1, -2) 4 4 4 - 2/9 x DATA(1, -1) - 2/9 x DATA(-1, 1) - 2/9 x DATA(1, 1) 4 4 2 - 1/288 x DATA(-2, 2) - 1/288 x DATA(-2, -2) + 5/8 y x DATA(0, -2) 2 + 5/4 y x DATA(0, 1) - 1/2 y DATA(0, -2) - y DATA(0, 1) 2 2 - 5/8 y x DATA(0, 2) + y DATA(0, -1) + 1/2 y DATA(0, 2) 2 2 2 + 1/2 y DATA(0, -2) - 2 y DATA(0, 1) - 2 y DATA(0, -1) 4 4 4 + 1/6 y x DATA(-1, 1) + 1/12 y x DATA(-1, -2) - 1/8 y x DATA(0, -2) 2 2 2 + 3 y DATA(0, 0) - 5/3 x DATA(1, 0) + 5/48 x DATA(0, 2) 2 2 2 - 5/3 x DATA(0, -1) + 5/48 x DATA(0, -2) - 5/3 x DATA(0, 1) 2 4 4 + 25/8 x DATA(0, 0) - 1/6 y x DATA(-1, -1) - 1/48 y x DATA(-2, -2) 2 4 4 + 5/48 x DATA(-2, 0) + 1/48 y x DATA(-2, 2) + 1/6 y x DATA(1, 1) 4 4 4 + 1/4 y x DATA(0, -1) + 1/24 y x DATA(-2, -1) + 1/12 y x DATA(1, -2) 2 2 4 - 5/3 x DATA(-1, 0) + 5/48 x DATA(2, 0) - 1/48 y x DATA(2, -2) 4 3 2 - 1/24 y x DATA(-2, 1) - 1/4 x y DATA(-2, 0) - 5/24 x DATA(-2, 0) 4 4 4 + 1/48 y x DATA(2, 2) + 1/18 x DATA(-2, 1) + 1/18 x DATA(2, -1) 4 4 4 - 1/24 y x DATA(2, 1) + 1/8 y x DATA(0, 2) - 1/4 y x DATA(0, 1) 4 4 2 4 + 1/24 y x DATA(2, -1) - 1/6 y x DATA(1, -1) - 1/12 y x DATA(-1, 2) 2 4 2 4 - 1/12 y x DATA(1, 2) + 5/3 x DATA(-1, 0) + 3/4 y x DATA(0, 0) 2 4 2 4 4 + 1/8 y x DATA(0, 2) - 1/12 y x DATA(2, 1) - 1/12 y x DATA(-1, 2) 4 - 1/12 y x DATA(1, 2) - 8/9 x DATA(-1, 1) - 8/9 x DATA(-1, -1) 3 3 + 8/9 x DATA(1, -1) - 1/144 x DATA(2, 2) + 1/72 x DATA(1, 2) 3 3 3 - 1/72 x DATA(-1, 2) - 1/144 x DATA(2, -2) + 1/72 x DATA(1, -2) 3 3 3 - 1/72 x DATA(-1, -2) + 1/9 x DATA(2, 1) + 1/9 x DATA(2, -1) 3 3 2 - 2/9 x DATA(1, 1) + 1/144 x DATA(-2, 2) + 4/3 x y DATA(-1, -1) 2 2 2 2 3 - 4/3 x y DATA(1, 1) - 1/48 x y DATA(-2, 2) + 1/144 x DATA(-2, -2) 3 3 3 + 2/9 x DATA(-1, -1) + 1/12 y x DATA(-2, 1) - 1/12 y x DATA(-2, -1) 3 3 3 - 1/24 y x DATA(2, -2) - 1/6 y x DATA(1, -1) - 1/6 y x DATA(-1, 1) 3 3 3 + 1/12 y x DATA(2, -1) + 1/6 y x DATA(1, 1) - 1/24 y x DATA(-2, 2) 3 3 3 + 1/24 y x DATA(-2, -2) + 1/6 y x DATA(-1, -1) - 1/12 y x DATA(1, 2) 3 3 3 + 1/12 y x DATA(-1, 2) + 1/24 y x DATA(2, 2) - 1/12 y x DATA(2, 1) 2 2 2 - 1/18 x DATA(2, -1) + 8/9 x DATA(1, 1) + 1/288 x DATA(-2, 2) 2 2 2 - 1/18 x DATA(-2, 1) - 1/18 x DATA(-2, -1) + 1/288 x DATA(2, -2) 2 2 2 - 1/18 x DATA(1, -2) - 1/18 x DATA(-1, -2) + 1/288 x DATA(-2, -2) 2 2 2 + 8/9 x DATA(-1, -1) + 8/9 x DATA(1, -1) - 1/18 x DATA(1, 2) 2 2 2 - 1/18 x DATA(-1, 2) - 1/18 x DATA(2, 1) + 1/288 x DATA(2, 2) 3 3 3 - 2/9 x DATA(1, -1) + 2/9 x DATA(-1, 1) - 1/9 x DATA(-2, 1) 3 - 1/9 x DATA(-2, -1) - 1/9 x DATA(2, 1) - 1/9 x DATA(2, -1) + 8/9 x DATA(1, 1) - 1/144 x DATA(-2, 2) + 1/9 x DATA(-2, 1) + 1/9 x DATA(-2, -1) + 1/144 x DATA(2, -2) - 1/18 x DATA(1, -2) 3 3 + 1/12 y x DATA(1, -2) - 1/12 y x DATA(-1, -2) + 1/18 x DATA(-1, -2) 3 2 3 2 3 2 + 1/3 x y DATA(1, 1) - 1/24 x y DATA(-2, 2) + 1/6 x y DATA(-2, 1) 3 2 3 2 + 1/6 x y DATA(-2, -1) + 1/24 x y DATA(2, -2) - 1/144 x DATA(-2, -2) 3 2 3 2 3 2 + 1/24 x y DATA(2, 2) - 1/12 x y DATA(1, 2) + 1/12 x y DATA(-1, 2) 3 2 3 2 3 2 - 1/6 x y DATA(2, 1) - 1/6 x y DATA(2, -1) + 1/3 x y DATA(1, -1) 2 3 2 3 2 + 8/9 x DATA(-1, 1) - 1/12 x y DATA(1, -2) + 1/12 x y DATA(-1, -2) 3 2 3 2 3 2 - 1/24 x y DATA(-2, -2) - 1/3 x y DATA(-1, -1) - 1/3 x y DATA(-1, 1) + 1/144 x DATA(2, 2) - 1/18 x DATA(1, 2) + 1/18 x DATA(-1, 2) 2 2 2 2 2 2 - 1/48 x y DATA(2, -2) + 1/3 x y DATA(1, -2) + 1/3 x y DATA(-1, -2) 2 2 2 2 2 2 - 1/48 x y DATA(-2, -2) - 4/3 x y DATA(-1, -1) - 4/3 x y DATA(1, -1) 2 2 2 2 - 4/3 x y DATA(-1, 1) + 1/3 y x DATA(1, 2) + 1/3 y x DATA(-1, 2) 2 2 2 2 + 1/24 y x DATA(2, 1) + 1/12 x y DATA(-2, -1) - 1/3 y x DATA(1, -2) 2 2 2 - 1/3 y x DATA(-1, -2) + 1/48 y x DATA(-2, -2) - 1/48 y x DATA(2, 2) 2 2 2 - 2/3 y x DATA(1, 1) - 1/48 y x DATA(-2, 2) + 1/24 y x DATA(-2, 1) 2 2 2 - 1/24 y x DATA(-2, -1) + 1/48 y x DATA(2, -2) + 2/3 y x DATA(-1, -1) 2 2 2 + 2/3 y x DATA(1, -1) - 2/3 y x DATA(-1, 1) - 1/24 y x DATA(2, -1) 2 2 2 - 4/3 x y DATA(1, -1) + 4/3 x y DATA(-1, 1) - 1/6 x y DATA(-2, -1) 2 2 2 - 1/24 x y DATA(2, -2) + 1/3 x y DATA(1, -2) - 1/3 x y DATA(-1, -2) 2 2 2 + 1/3 x y DATA(1, 2) - 1/3 x y DATA(-1, 2) + 1/6 x y DATA(2, 1) 2 + 1/24 x y DATA(-2, -2) + 1/3 x y DATA(1, 2) - 1/3 x y DATA(-1, 2) + 1/12 x y DATA(2, 1) - 1/12 x y DATA(2, -1) - 2/3 x y DATA(1, 1) + 1/24 x y DATA(-2, 2) - 1/12 x y DATA(-2, 1) + 1/12 x y DATA(-2, -1) 2 2 + 1/24 x y DATA(2, -2) - 4/3 x y DATA(1, 1) - 1/6 x y DATA(-2, 1) 2 2 2 + 1/24 x y DATA(-2, 2) + 1/6 x y DATA(2, -1) - 1/24 x y DATA(2, 2) + 2/3 x y DATA(-1, 1) - 1/24 x y DATA(2, 2) - 1/3 x y DATA(1, -2) + 1/3 x y DATA(-1, -2) - 1/24 x y DATA(-2, -2) - 2/3 x y DATA(-1, -1) 2 2 2 2 + 2/3 x y DATA(1, -1) + 1/12 x y DATA(-2, 1) + 1/3 x y DATA(1, 2) 2 2 2 2 2 2 + 1/3 x y DATA(-1, 2) + 1/12 x y DATA(2, 1) + 1/12 x y DATA(2, -1) 2 2 - 1/48 x y DATA(2, 2) > coeffs_as_lc_of_data(%, posn_list_2d_size5); bytes used=337598236, alloc=2817532, time=36.76 bytes used=338598536, alloc=2817532, time=36.83 3 2 2 4 [COEFF(-2, -2) = 1/144 x - 1/48 x y - 1/24 x y - 1/144 x - 1/48 y x 2 2 3 2 2 2 4 3 + 1/48 y x + 1/288 x - 1/24 x y + 1/24 x y + 1/48 y x + 1/24 y x 4 3 2 4 2 2 - 1/288 x , COEFF(-1, -2) = - 1/72 x - 1/3 y x + 1/72 x + 1/3 x y 3 2 2 3 2 2 4 - 1/12 y x - 1/18 x + 1/3 x y - 1/3 x y + 1/12 x y - 1/12 y x 4 2 2 4 4 + 1/18 x + 1/12 y x , COEFF(0, -2) = 5/8 y x + 1/8 y x - 1/8 y x 4 2 2 2 2 - 1/48 x + 5/48 x + 1/2 y - 5/8 x y - 1/12 - 1/2 y, COEFF(1, -2) = 2 4 2 2 3 3 - 1/18 x + 1/72 x + 1/3 x y - 1/3 x y + 1/12 y x - 1/18 x + 1/72 x 2 4 2 3 2 2 4 - 1/12 y x - 1/3 y x - 1/12 x y + 1/3 x y + 1/12 y x , COEFF(2, -2) 2 4 2 2 2 = - 1/24 x y - 1/48 y x + 1/288 x + 1/144 x - 1/48 x y + 1/24 x y 3 3 2 3 2 2 4 4 - 1/144 x - 1/24 y x + 1/48 y x + 1/24 x y + 1/48 y x - 1/288 x , 4 3 2 2 2 COEFF(-2, -1) = 1/12 x y + 1/18 x - 1/9 x + 1/12 x y - 1/24 y x 4 2 4 2 3 3 2 + 1/24 y x - 1/12 y x - 1/18 x - 1/12 y x + 1/6 x y + 1/9 x 2 4 3 2 2 2 - 1/6 x y , COEFF(-1, -1) = - 2/9 x - 1/3 x y + 8/9 x + 2/3 y x 4 2 4 3 3 2 2 2 - 1/6 y x + 1/3 y x + 1/6 y x + 2/9 x - 4/3 x y - 8/9 x + 4/3 x y 2 4 2 2 2 - 2/3 x y, COEFF(0, -1) = 4/3 - 1/2 y x + y - 5/3 x - 5/4 y x - 2 y 4 4 2 2 4 4 + 1/4 y x + 1/3 x + 5/2 x y , COEFF(1, -1) = 8/9 x - 1/6 y x - 2/9 x 2 4 2 2 3 2 3 + 1/3 y x - 4/3 x y + 2/3 y x + 1/3 x y - 2/9 x + 2/3 x y 2 2 2 3 3 2 - 4/3 x y + 8/9 x - 1/6 y x , COEFF(2, -1) = 1/9 x + 1/6 x y - 1/9 x 2 3 4 2 2 3 2 - 1/18 x + 1/12 y x + 1/24 y x + 1/12 x y - 1/6 x y - 1/12 x y 4 2 4 2 2 2 3 2 + 1/18 x - 1/12 y x - 1/24 y x , COEFF(-2, 0) = - 1/8 x y - 1/4 x y 3 2 4 2 4 2 + 5/24 x + 1/8 y x + 1/4 x y - 5/48 x - 5/24 x + 5/48 x , 3 2 2 2 2 4 2 4 COEFF(-1, 0) = 1/2 x y + 2 x y + 5/3 x - 5/3 x + 5/12 x - 1/2 y x 3 2 - 5/12 x - 2 x y , 2 2 4 2 4 2 2 COEFF(0, 0) = 25/8 x - 5/2 + 3 y - 5/8 x + 3/4 y x - 15/4 x y , 2 4 2 2 2 2 3 2 3 COEFF(1, 0) = - 1/2 y x + 2 x y + 2 x y - 5/3 x - 1/2 x y + 5/12 x 4 4 3 2 2 4 + 5/12 x - 5/3 x, COEFF(2, 0) = - 5/48 x + 1/4 x y + 1/8 y x 2 2 2 2 3 - 1/8 x y - 1/4 x y + 5/48 x - 5/24 x + 5/24 x, COEFF(-2, 1) = 3 2 2 4 3 - 1/9 x + 1/12 x y - 1/12 x y + 1/9 x - 1/24 y x + 1/12 y x 2 2 2 4 2 4 3 2 + 1/24 y x - 1/18 x - 1/12 y x - 1/6 x y + 1/18 x + 1/6 x y , 4 2 3 4 COEFF(-1, 1) = 2/3 x y + 1/6 y x - 2/3 y x - 1/6 y x - 2/9 x 2 4 3 2 2 3 2 2 2 + 1/3 y x + 2/9 x + 8/9 x - 8/9 x + 4/3 x y - 1/3 x y - 4/3 x y , 2 2 4 2 4 4 COEFF(0, 1) = -2 y + 4/3 - 1/2 y x + 5/4 y x + 1/3 x - 1/4 y x - y 2 2 2 2 3 4 + 5/2 x y - 5/3 x , COEFF(1, 1) = - 2/3 y x - 2/3 x y - 2/9 x - 2/9 x 4 2 2 2 3 2 4 + 8/9 x + 1/6 y x - 4/3 x y - 4/3 x y + 1/6 y x + 1/3 y x 3 2 2 2 2 4 2 + 1/3 x y + 8/9 x , COEFF(2, 1) = 1/12 x y + 1/18 x - 1/18 x 2 4 2 4 3 3 2 - 1/12 y x + 1/6 x y - 1/24 y x + 1/12 x y + 1/9 x - 1/6 x y 3 2 2 2 - 1/9 x - 1/12 y x + 1/24 y x , COEFF(-2, 2) = 1/24 x y + 1/288 x 3 2 4 4 3 + 1/24 x y + 1/144 x + 1/48 y x - 1/144 x + 1/48 y x - 1/24 y x 4 2 2 2 3 2 - 1/288 x - 1/48 y x - 1/48 x y - 1/24 x y , COEFF(-1, 2) = - 1/3 x y 2 2 2 3 2 2 2 4 3 - 1/3 x y + 1/3 x y + 1/12 x y + 1/3 y x - 1/12 y x - 1/72 x 2 4 3 4 + 1/18 x - 1/18 x + 1/72 x + 1/12 y x - 1/12 y x , COEFF(0, 2) = 4 2 4 2 2 4 2 2 - 1/48 x - 5/8 y x + 1/2 y + 1/8 y x + 1/2 y + 1/8 y x - 5/8 x y 2 3 2 2 2 + 5/48 x - 1/12, COEFF(1, 2) = - 1/12 x y + 1/3 x y + 1/3 x y 2 4 4 3 3 2 + 1/3 x y + 1/72 x - 1/12 y x - 1/12 y x + 1/72 x - 1/18 x 2 2 4 3 + 1/3 y x - 1/18 x - 1/12 y x , COEFF(2, 2) = - 1/24 x y - 1/144 x 2 2 3 2 4 2 3 2 - 1/48 x y + 1/24 x y - 1/288 x - 1/48 y x + 1/24 y x + 1/288 x 4 2 2 4 + 1/48 y x + 1/144 x - 1/24 x y + 1/48 y x ] > print_coeffs__lc_of_data(%, "coeffs_dyy->coeff_", "fp", > "2d.coeffs/2d.cube.order4.smooth0/coeffs-dyy.compute.c"); bytes used=339598688, alloc=2817532, time=36.92 bytes used=340598856, alloc=2817532, time=36.99 bytes used=341599544, alloc=2817532, time=37.04 bytes used=342609588, alloc=2817532, time=37.12 bytes used=343617792, alloc=2817532, time=37.21 bytes used=344618020, alloc=2817532, time=37.30 bytes used=345618228, alloc=2817532, time=37.79 bytes used=346618720, alloc=2817532, time=37.87 bytes used=347618880, alloc=2817532, time=37.94 bytes used=348623292, alloc=2817532, time=38.03 bytes used=349623484, alloc=2817532, time=38.12 bytes used=350623648, alloc=2817532, time=38.22 bytes used=351625036, alloc=2817532, time=38.32 bytes used=352625232, alloc=2817532, time=38.73 bytes used=353625668, alloc=2817532, time=38.91 bytes used=354625832, alloc=2817532, time=38.99 bytes used=355626060, alloc=2817532, time=39.14 bytes used=356630912, alloc=2817532, time=39.56 bytes used=357631128, alloc=2817532, time=39.78 bytes used=358631348, alloc=2817532, time=39.86 bytes used=359632096, alloc=2817532, time=40.02 bytes used=360632268, alloc=2817532, time=40.42 bytes used=361632468, alloc=2817532, time=40.49 bytes used=362632652, alloc=2817532, time=40.71 bytes used=363633064, alloc=2817532, time=41.09 bytes used=364633244, alloc=2817532, time=41.18 bytes used=365633400, alloc=2817532, time=41.60 bytes used=366633640, alloc=2817532, time=41.81 > ################################################################################ > quit bytes used=367598444, alloc=2817532, time=41.95