Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

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

Search the Archive

Re: multivariate interpolation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg110931] Re: multivariate interpolation
  • From: "Ingolf Dahl" <ingolf.dahl at telia.com>
  • Date: Mon, 12 Jul 2010 01:04:55 -0400 (EDT)

Here is my suggestion:
Restructure the data matrix in two steps

data1 = Flatten[data, 1];

data2 = Table[{{data1[[i, 1]], data1[[i, 2]]}, {data1[[i, 3]], 
    data1[[i, 4]], data1[[i, 5]]}}, {i, Length[data1]}];

The list data2 can be used for interpolation

f[a_, b_, x_] := Simplify[Interpolation[data2][a, b]]

f[10.45, 0.065, x]

gives

{1000.67,8.09232*10^7,0.731501-22.7918 Sqrt[1/x]+151.976/x}

Was this what you were looking for?

I suggest that instead of working with large x, you should work with small
y, where x = 1/y^2. The limits will then be very small number instead of
very large. It seems plausible that linear interpolation should be more
exact for small numbers than for large.

x := 1/y^2

data3 = Table[{{data1[[i, 1]], 
     data1[[i, 2]]}, {Sqrt[1./data1[[i, 4]]], Sqrt[1./data1[[i, 3]]], 
     data1[[i, 5]]}}, {i, Length[data1]}] /. {Sqrt[y^2] -> y};

Instead of f we might define g. The first two elements in the result are
then the limits for y.

g[a_, b_, y_] := Expand[Simplify[Interpolation[data3][a, b]]]

g[9., 0.09, y]

gives

{0.000140028,0.031607,0.651531-21.3675 y+128.192 y^2}

I guess that g gives a "better" interpolation than f

Best regards

Ingolf Dahl
http://www.familydahl.se/mathematica 

> -----Original Message-----
> From: Silvio Abruzzo [mailto:silvio.abruzzo at gmail.com]
> Sent: den 11 juli 2010 12:20
> To: mathgroup at smc.vnet.net
> Subject: [mg110911] multivariate interpolation
> 
> Dear Group,
>   I have the following problem. I have a matrix of this form
> {{{9, 0.01, 1001, 269250000,
>    0.944218 - 12.6734 Sqrt[1/x] + 72.8455/x}, {10, 0.01, 1001,
>    269250000, 0.944134 - 13.1619 Sqrt[1/x] + 71.1457/x}, {11, 0.01,
>    1001, 269250000, 0.944054 - 13.6278 Sqrt[1/x] + 69.5111/x},....
> 
> where the first two numbers are parameters and the third and fourth
> number represent the bounds where the function in the last entries is
> usable. I would like to interpolate the first, second and last column
> in such a way that I have as result a function f[a_, b_, x_] were when
> a and b are fixed and corresponds to some value in the matrix above
> the function in the last column is used and when there is not the
> corresponding entry the interpolation is used. A method to achieve my
> goal is to calculate in some point between the min and the max the
> function in the last column in order that I have a tensor product
> structure and then to use the function Interpolation. Although this
> method should work enough well, I would like to know if there is a
> method to use all analytical information contained in the function in
> the last column in order to produce a better interpolation.
> 
> 
> Best regards,
> 
> Silvio



  • Prev by Date: Re: Pattern: x_List with conditions on elements
  • Next by Date: Re: Pattern: x_List with conditions on elements
  • Previous by thread: multivariate interpolation
  • Next by thread: Re: multivariate interpolation