Re: Can Mathematica interpolate non-uniform scatter data?
- To: mathgroup at smc.vnet.net
- Subject: [mg106969] Re: Can Mathematica interpolate non-uniform scatter data?
- From: JH <jlucio at ubu.es>
- Date: Fri, 29 Jan 2010 07:50:28 -0500 (EST)
- References: <hjmjgg$ee$1@smc.vnet.net> <hjon95$4ga$1@smc.vnet.net>
On 27 ene, 12:23, Lawrence Teo <lawrence... at yahoo.com> wrote:
> Hi DH,
>
> Did you miss out anything in your reply?
> How to do the interpolation with non-uniform scattered data (with
> holes)?
>
> On Jan 27, 2:42 pm, dh <d... at metrohm.com> wrote:
>
> > to do it. Anyway, here is it:
>
> > now we can do the interpolation:
>
> > Lawrence Teo wrote:
> > > Hi all,
>
> > > Can Mathematica interpolate non-uniform scatter data?
> > > Like ListInterpolation or Interpolation functions...
>
> > > z = {{0.`, 0.`, 0.`, 0.`, 0.`, 0.`, 0.`, 0.`, 0.`}, {0.`, ,
> > > 0.12467473338522769`, 0.18640329676226988`,
> > > 0.24740395925452294`, , 0.36627252908604757`,
> > > 0.42367625720393803`, 0.479425538604203`}, {0.`,
> > > 0.12467473338522769`, 0.24740395925452294`, 0.366272529086047=
57=
> `,
> > > 0.479425538604203`, 0.5850972729404622`, 0.6816387600233341`,=
,
> > > 0.8414709848078965`}, {0.`, 0.18640329676226988`,
> > > 0.36627252908604757`, 0.5333026735360201`, 0.6816387600233341=
`,
> > > 0.806081108260693`, 0.9022675940990952`, 0.9668265566961802`,
> > > 0.9974949866040544`}, {0.`, 0.24740395925452294`,
> > > 0.479425538604203`, 0.6816387600233341`, 0.8414709848078965`,
> > > 0.9489846193555862`, 0.9974949866040544`, 0.9839859468739369`=
,
> > > 0.9092974268256817`}};
> > > g = ListInterpolation[z, {{0, 1}, {0, 2}}];
> > > g[0.5, 0.5]
>
> > > However, the previous interpolation will give us a lot of NULL in the
> > > expression...
_______________________________________________________________________
Hello, Lawrence:
As far as I know, the answer is NOT YET (for more than one independent
variable). The subsequent question is obvious: WHY? (I don't know,
it's strange to me).
When dealing with data you know we have several options:
1. "Total" interpolation (look for a unique function --generally a
polynomial-- that passes thru all the points, as the Lagrange or
Hermite polynomials (1D) or generalizations for more dimensions, as
Shepard's. In Mathematica, for 1 indep. vble. we have
InterpolatingPolynomial[]).
2. "Local" or piecewise interpolation (as the Mathematica:
Interpolation[])
3. Fit (approximation of data). In Mathematica: Fit, FindFit, ...
For the first type, I have implemented some algorithms due to Shepard
(in 1968, not so modern!). Here I copy my implementation of one:
points= Table[xi = \[Pi] (2 Random[] - 1);yi = \[Pi] (2 Random[] - 1);
{xi, yi, Sin[xi] Cos[yi]},{9}]; note: few points, please
graphPoints = ListPointPlot3D[points, PlotStyle -> PointSize[0.04]];
Clear[n, vi, v];
n := Dimensions[points][[1]];
Array[vi, n];
Do[
vi[i] = (\!\(
\*UnderoverscriptBox[\(\[Product]\), \(j = 1\), \(i - 1\)]
\*SuperscriptBox[\((
\*SuperscriptBox[\((x - \(points[[j]]\)[[1]])\), \(2\)] +
\*SuperscriptBox[\((y - \(points[[j]]\)[[
2]])\), \(2\)])\), \(2\)]\)) (\!\(
\*UnderoverscriptBox[\(\[Product]\), \(j = i + 1\), \(n\)]
\*SuperscriptBox[\((
\*SuperscriptBox[\((x - \(points[[j]]\)[[1]])\), \(2\)] +
\*SuperscriptBox[\((y - \(points[[j]]\)[[
2]])\), \(2\)])\), \(2\)]\)), {i, 1, n}];
v = \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(n\)]\(vi[i]\)\);
funcionShepard2[xx_, yy_] := \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(i =
1\), \(n\)]\((\(points[[i]]\)[[3]]\
\*FractionBox[\(vi[i]\), \(v\)])\)\) /. {x -> xx, y -> yy}
graphSup =
Plot3D[funcionShepard2[xx,
yy], {xx, -\[Pi], \[Pi]}, {yy, -\[Pi], \[Pi]},
PlotRange -> {{-\[Pi], \[Pi]}, {-\[Pi], \[Pi]}, {-1, 1}},
ClippingStyle -> None]
Show[graphPoints, graphSup]
_____________________
For nD (n>1) Piecewise Interpolation of scattered (irregular) data,
one way is triangulation (in Mathematica we have DelaunayTriangulation
[], see Computational Geometry Package). But the interpolation
algorithm is not included in Mathem (I think).
_____________________
In a way, we can say Mathem. DOES HAVE (local) interpolation of
scattered data (2 indep. vbles), in List3DPlot[...], we can choose the
interpolation order, and Mathem. interpolates for a pretty drawing:
BUT THEY DON'T LET US USING THAT INTERPOLATION (Why???)
_____________________
I hope this has been useful for you.
JH