Re: multiple outputs from compiled function

*To*: mathgroup at smc.vnet.net*Subject*: [mg114368] Re: multiple outputs from compiled function*From*: Daniel Lichtblau <danl at wolfram.com>*Date*: Thu, 2 Dec 2010 05:40:17 -0500 (EST)

Eric Michielssen wrote: > Thanks for the suggestion. > > I was thinking more about a routine that populates a huge sparse matrix, say > for finite element analysis. SparseArray does not work within Compile, and > that's understandable. > > So the next best thing would be to have a compiled function generate a long > list of positions ( pos = {pos1,pos2,pos3...} with posi = {n1,n2} ) and a > list of values ( val = {val1,val2,val3,...} ), and then construct the > SparseArray externally to a compiled function. > > But how do I get my compiled function to return both pos and val? Upon > reaching Return[{pos,val}], Mathematica reverts to the noncompiled function, > in essence starting over from scratch. (I can only think of a few not so > elegant solutions, none of which would apply in situations more complex than > the above). > > Eric Seems weird, but you might just do the setting via external variable(s). Here is a brief example. Notice that the list 'll' is not defined within Compile, but it is used in a Part assignment therein. In[1]:= ll = {2., 3., 4.}; In[2]:= c = Compile[{{x}, {y}}, ll[[1]] = x; y]; In[3]:= c[4.5, 5.6] Out[3]= 5.6 In[4]:= ll Out[4]= {4.5, 3., 4.} Daniel Lichtblau Wolfram Research