Re: Question about interpolation and ListPlot3D
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1498] Re: [mg1460] Question about interpolation and ListPlot3D
- From: el at qua.crl.melco.co.jp (E. Lange)
- Date: Mon, 19 Jun 1995 02:16:13 -0400
> I have an array representing 3 dimensional points > in a form of their Eucledean coordinates: > arr = {{x1,y1,z1}, ... ,{xN,yN,zN}}; > (they were generated from a very smooth function). > > 1. I wish to generate a 3D plot of this surface (approximately), > but format of ListPlot3D does not permit it, since my points > {xi, yi} do not form a regular grid. > How I can draw the surface? > > 2. I would like to find value of this function at another point > {x, y}, the answer obviously depend on the way the function was > interpolated (extrapolated), but I am interested in any way, as > simple as possible. > How to extract the Interpolating Function's value at {x, y} ? > > Zvi Wiener > zwiener at lehman.com For a simple, crude approximation, you might want to have a look at the message included below: ----- Begin Included Message ----- >From mathgroup-adm at christensen.cybernetics.net Sun Mar 19 00:11:36 1995 >Date: Thu, 16 Mar 95 14:22:53 JST >From: el at qua.crl.melco.co.jp (E. Lange) ?To: mathgroup at christensen.cybernetics.net >Subject: [mg554] Re: [mg549] suggestions? >Content-Length: 1548 > There is a rectangular plot of land, several acres in size, which is > contaminated by a single hazardous waste. We have some chemical > measurements of the concentation of the waste in the soils at N randomly > spaced points -- these points are NOT on a grid. > > From other information about the deposition of the waste, we know that the > function > > concentration( x, y ) > > is well behaved and smoothly varying..... > > So, I want to use a 2D InterpolationFunction in Mma to model the You might try a simple interpolation using radial basis functions: data = Table[Random[], {10}, {3}] c = 5 Transpose[data][[3]] . # / Plus @@ # & [ E^(-c^2((x-#[[1]])^2 + (y-#[[2]])^2))& /@ data ] Plot3D[%, {x, 0, 1}, {y, 0, 1}] The parameter c adjusts the `stiffness' of the interpolation. For c = 0, the interpolation result is the average concentration of the waste. For c-->Infinity, the interpolation result is the concentration at the closest measurement point. You can also try to use other basis functions, such as 1/d^c instead of E^(-c^2 d), or incorporate knowledge about the physics of the problem. In readable notation: InterpolationRBF[data_, c_][x_, y_] := Module[{radial}, radial = Table[ E^(-c^2 ( (x - data[[i, 1]])^2 + (y - data[[i, 2]])^2) ), {i, Length[data]} ]; Transpose[data][[3]] . radial / Apply[Plus, radial] ] f = InterpolationRBF[data, c]; Show[ Plot3D[f[x, y], {x, 0, 1}, {y, 0, 1}], Graphics3D[Point /@ data] ] Eberhard Lange ----- End Included Message -----