MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to use the multiple varible Interpolation?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg26298] Re: [mg26169] How to use the multiple varible Interpolation?
  • From: Tomas Garza <tgarza01 at prodigy.net.mx>
  • Date: Sun, 10 Dec 2000 00:20:08 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

I notice you haven't had an answer from the group yet, so I thought I 
might venture a possible approach. First, when you say you have "many" 
points, I expect they are many more than those in your example "tab". 
The trouble with "tab" is that you have a very incomplete grid in the 
x-y plane.  The thing is, for y = 0 you have the x- values {-5, -4, 
-3, 0, 3, 4, 5} , whereas for y = 2 you have only the x-values {-3, 
-2, 0, 2, 3}. This makes it very awkward to work with.
Anyway, my approach would be to get an interpolation function for each y 
value and using it, complete your observations for all values of x = 
{-4, -3, -2, -1, 0, 1, 2, 3, 4} (I omit x = -5 and 5 in order to avoid 
too many negative z-values). You would then have 27 points on a regular 
grid. Then you may use ListInterpolation to estimate the value at any 
x,y point.

To illustrate the point, I obtain an "augmented tab", say tabAug , with 
two-dimensional interpolated values at all the original missing points:

In[61}:=
tabAug
Out[61]=
{{{-4, 0, 1.}, {-3, 0, 2.}, {-2, 0, 3.}, {-1, 0, 4.}, {0, 0, 5.}, {1, 0, 

      4.}, {2, 0, 3.}, {3, 0, 2.}, {4, 0, 1.}}, {{-4, 1, 0.}, {-3, 1,
      1.}, {-2, 1, 2.19048}, {-1, 1, 3.28571}, {0, 1, 4.}, {1, 1,
      3.28571}, {2, 1, 2.19048}, {3, 1, 1.}, {4, 1, 0.}}, {{-4, 2, 
-0.6}, {-3,
       2, 0.}, {-2, 2, 0.8}, {-1, 2, 1.8}, {0, 2, 3.}, {1, 2, 1.8}, {2, 
2,
      0.8}, {3, 2, 0.}, {4, 2, -0.6}}}

which you may compare with your original tab. Then I use 
ListInterpolation on tabAug:

In[62]:=
vals = Transpose[Partition[Flatten[tabAug], 3]
Out[62]=
{1., 2., 3., 4., 5., 4., 3., 2., 1., 0., 1., 2.19048, 3.28571, 4., 
3.28571, 2.19048, 1., 0., -0.6, 0., 0.8, 1.8, 3., 1.8, 0.8, 0., -0.6};

In[63}:=
h = ListInterpolation[Partition[vals, 9], {{0, 2}, {-4, 4}}]
ListInterpolation::"inhr": "Requested order is too high; order has been
reduced to {2, 3}"
Out[63]=
InterpolatingFunction[{{0., 2.}, {-4., 4.}}, "<>"]

We check the quality of the 3-dimensional interpolation:

In[64]:=
Table[h[i, j], {i, 0, 2}, {j, -4, 4}]
Out[64]=
{{1., 2., 3., 4., 5., 4., 3., 2., 1.}, {0., 1., 2.19048, 3.28571, 4., 
3.28571,
     2.19048, 1., 0.}, {-0.6, 0., 0.8, 1.8, 3., 1.8, 0.8, 0., -0.6}}

which is obviously very good in comparison with "vals" above.


In[65]:=
h[1.5, 3.5]
Out[65]=
0.034375

I'm sure that a more decent set of observations "tab" will get you very 
reasonable results.

Tomas Garza
Mexico City





"liwen liwen" <gzgear at yahoo.com> wrote:

>              Now I have many points which are on a 3D
> surface.
> for
> example,tab={{-5,0,0},{-4,0,1},{-3,0,2},{0,0,5},{3,0,2},
> {4,0,1},{5,0,0},
> {-4,1,0},{-3,1,1},{0,1,4},{3,1,1},{4,1,0},
> {-3,2,0},{-2,2,0.8},{0,2,3},{2,2,0.8},{3,2,0}};
> I want to find the z value of (x=3.5,y=1.5) by the
> method
> of Interpolation,what should I do?
> Is there any other method to solve those problem like
> this?



  • Prev by Date: Re: TeXSave undefined control sequences
  • Next by Date: Re: Re: Re: embedding Mathematica equations in MS Word part 2
  • Previous by thread: Re: Graphics3D[Plot3D[]] vs. ParametricPlot3D[]
  • Next by thread: "?" to find symbols