Re: weird interpolation issues
- To: mathgroup at smc.vnet.net
- Subject: [mg96642] Re: weird interpolation issues
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Wed, 18 Feb 2009 04:23:05 -0500 (EST)
On 2/17/09 at 6:24 AM, okty.gy.ned at gmail.com (Ned Lieb) wrote:
>I'm new to Mathematica and unfortunately am having some issues. I'm
>trying to construct a program to create an approximate symbolic
>function from a very large list of data points (6900 points, each
>with five associated variables). Mathematica is fritzing in two
>areas: first (this is probably trivial to fix), parallelization
>doesn't initialize; second, the lists of variables I'm extracting
>from my data table aren't being recognized as data points
>Mathematica can interpolate between. I've copied the plaintext of my
>source-code with comments explaining what each function is meant to
>do below.
>This is the Function I use to import my table. This seems to work
>correctly: I get a list of numbers which matches my data
>q[]=Import["C:\wfout2_k1_b1_s1_in.dat","FieldSeperators"->"
>","LineSeperators"->"/[NewLine]" ,"RepeatedSeperators"->"True"]
I very strongly suspect this is not doing what you think. I can
think of no reason to create a function with no arguments and
then define it to have a value equal to the data being read in.
That is what you are doing with q[]. I am almost certain you
would be better off using a simple variable, q, i.e.
q = Import["C ...
>This is a function I use to switch rows and columns, so that I have
>five lists of values coresponsing to my variables instead of a list
>of ~60000 points each carrying five values
>w[q]:=Transpose[q];
You want to use w = Transpose[q] here. Note you could do this in
one step by doing
w = Transpose@Import["C: ...
dispensing with any need for q.
>This defines the last two variables as the real and complex values
>of the function I'm trying to create by interpolation
>wf[r_,c_]:=r+I*c;
When using SetDelayed (:=) there is no need to terminate the
definition with a ;. The whole point of SetDelayed is to delay
evaluation. Consequently, there is no output returned when you
don't terminate the definition with a ;. Of course, using a ; to
terminate the definition causes no harm. It doesn't do anything
in this case.
>This is supposed to interpolate my imported values into a function
>DistributeDefinitions[w,wf,\[Psi],q];
I would define all of the functions before making a call to
DistributeDefinitions. The order you've done things may work. It
isn't clear to me whether it will or not from the documentation.
>\[Psi][x_,y_,z_,r_,c_]:=Interpolation[{x,y,z},Abs[wf[r,c]],{x,{w[[1]
>]}},{y,{ w[[2]]}},{z,{w[[3]]}},{r,{w[[4]]}},{c,{w[[5]]}}];
It isn't clear to me what this function is supposed to do. I
very much suspect you do not have it defined in a sensible
manner. Looking below, I see you are using x,y and z to be
scalars given values to be supplied by ContourPlot. That means
the first argument to Interpolation is a list of 3 elements, the
next is whatever is returned by wf, followed by arguments of the
form {number, {{number, number .... }}}. This doesn't look like
anything Interpolation is designed to accept. Look at the
documentation for Interpolation.
>This is supposed to make a graph of the function I made
>above with the function's values being shown by contour density
>ContourPlot3D[\[Psi],{x,0,20},{y,0,20},{z,0,20}]
This will be returned unevaluated by Mathematica. At the very
least this needs to be re-written as:
ContourPlot3D[\[Psi][x,y,z,r,c],{x,0,20},{y,0,20},{z,0,20}]
That is you need to call \[Psi] with the arguments you defined
it to require. Note, the way I've rewritten things it still
won't work since neither r nor c are defined.