[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: AW: 4D interpolation
From: |
Ben Abbott |
Subject: |
Re: AW: 4D interpolation |
Date: |
Tue, 27 May 2008 05:46:42 -0700 |
On Tuesday, May 27, 2008, at 07:35AM, "Hofstaetter, Michael: Mr.: (external)"
<address@hidden> wrote:
>-----Ursprüngliche Nachricht-----
>Von: Ben Abbott [mailto:address@hidden
>Gesendet: Dienstag, 27. Mai 2008 13:12
>An: Hofstaetter, Michael: Mr.: (external)
>Cc: address@hidden
>Betreff: Re: 4D interpolation
>
>
>On May 26, 2008, at 3:31 AM, thanatos187 wrote:
>
>>
>> Ben Abbott wrote:
>>>
>>> On May 20, 2008, at 3:52 AM, thanatos187 wrote:
>>>
>>>>
>>>> Hi
>>>> I want to interpolate my values with the spline method. I did it
>>>> with the
>>>> command:
>>>> vi = interpn(u,v,w,x,z,uu,vv,ww,xx,'spline');
>>>> where u,v,w,x are vectors of the same length defining the point with
>>>> the value z. uu,vv,ww,xx are creaed by the ndgrid command. i got the
>>>> error
>>>> message: "wrong number or incorrectly formatted input argument".
>>>>
>>>> thanks for any help
>>>> Thanatos
>>>
>>> Can you post a simple example? Does the problem occur for "nearest",
>>> "linear", or "cubic" interpolation?
>>>
>>> Ben
>>>
>>> It occurs for all methods. I want to use a spline interpolation. I
>>> have 1500 data points, so the length of the colum vectors are 1500.
>>> uu,vv,ww,xx, are matrixes of the size (10 10 10 10)
>>>
>>> thanatos
>
>I tried a 3D and 4D example.
>
>clear all
>
>v1 = 0:0.2:2;
>v2 = v1;
>v3 = v1;
>[x1,x2,x3] = ndgrid(v1,v2,v3);
>y = (x1.*x2 + x1.*x2.^2).*x3;
>z = interpn(x1,x2,x3,y,v1,v2,v3,'linear')
>
>v4 = v1;
>[x1,x2,x3,x4] = ndgrid(v1,v2,v3,v4);
>y = (x1.*x2 + x1.*x2.^2).*x3./(1+x4);
>z = interpn(x1,x2,x3,x4,y,v1,v2,v3,v4,'linear')
>
>Both of these work for me. Please verify they work for you as well.
>
>Ben
>
>
>Hi Ben
>
>Your examples also work for me, but i have the problem that my data
>coordinates are not equidistant in any direction. The coordinates are randomly
>generated. Additionally are the points not sorted, but this is not a problem.
>Probably i have to write a new function.
>
>Thanatos
>
Hi Thanatos,
Having non-equidistant points should not be a problem.
You can verify this by calculating v1 as
v1 =unique(2*rand([1,10]));
and using the same examples as before.
The "unique" function is used in the unlikely event that duplicates exist, and
to make sure the values are sorted.
You'll need to make sure your values are sorted, but this should not produce
the error you see.
Regarding your error, can you check the size of your variables corresponding to
x1, x2, x3, x4 and y?
octave:22> whos x1 x2 x2 x4 y
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
x1 10x10x10x10 80000 double
x2 10x10x10x10 80000 double
x2 10x10x10x10 80000 double
x4 10x10x10x10 80000 double
y 10x10x10x10 80000 double
Total is 50000 elements using 400000 bytes
You can place this command in your own script and verify that the inputs are
all correct. When I first tried my example I did not calculate y correctly and
encountered the same error as you.
Ben