**You are now following this question**

- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.

# 4-D Interpolation using interpn

2 views (last 30 days)

Show older comments

Hi,

I have 4 vectors as input and 1 vector as output. I want to do an interpolation following the instructions given here:

https://www.mathworks.com/help/matlab/ref/interpn.html --> Vq = interpn(X1,X2,X3,X4,V,Xq1,Xq2,Xq3,Xq4)

where Xq1, ..., Xq4 are scalars and equal to Xqi = Xi(1) (it is just a test).

However, I got the following error:

Interpolation requires at least two sample points for each grid dimension.

If I look at section 4-D Interpolation, it can be seen that 4D grids are constructed and after these points are passed through the function and a 4D structure is obtained for V.

In my case, I don't have a function. I just have a vector for the output V.

How I can make it work with my vector type of data?

##### 13 Comments

mary
on 26 Nov 2022

Jan,

X1,X2,X3,X4 are 4 input vectors and V the corresponding output. Xq2,Xq3,Xq4 are the query points. In the link, it is written:

"Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn) returns interpolated values of a function of n variables at specific query points using linear interpolation. The results always pass through the original sampling of the function. X1,X2,...,Xn contain the coordinates of the sample points. V contains the corresponding function values at each sample point. Xq1,Xq2,...,Xqn contain the coordinates of the query points."

For 1D application, they use: vq = interpn(x,v,xq,'cubic');

So, probably, we cannot apply it as Vq = interpn(X1,X2,X3,X4,V,Xq1,Xq2,Xq3,Xq4) for my case. That is why in the link, they use ngrid. But the problem is that in that link for a 4D interpolation there is a function f(x,y,z,t) that can give a value for any combination of x, y, z. In my case, I have an output vector for the specific values of 4 input vectors.

mary
on 26 Nov 2022

Ok, I see. So you mean that each time one parameter changes and the other 3 remain constants. Like the example given in that link and reported here, we see that in each row, X1 remains unchanged while X2 is changing.

[X1,X2] = ndgrid(-1:3,(1:4))

Otherwise, we cannot do the interpolation. Is it right?

Torsten
on 26 Nov 2022

Edited: Torsten
on 26 Nov 2022

Otherwise, we cannot do the interpolation. Is it right?

One can always interpolate somehow, but not with interpn.

Are your points (X1,X2,X3,X4) somehow regularly distributed in 4-dimensional space or wildly scattered ?

Maybe a fit for a, b, c and d with the equation

V = a*X1 + b*X2 + c*X3 + d*X4

can give satisfactory results.

Try "fun" as linear approximation function for V:

A = [X1,X2,X3,X4];

b = V;

sol = A\b;

fun = @(x1q,x2q,x3q,x4q) sol(1)*x1q+sol(2)*x2q+sol(3)*x3q+sol(4)*x4q

mary
on 26 Nov 2022

Edited: mary
on 26 Nov 2022

Torsten
on 27 Nov 2022

Matt J
on 27 Nov 2022

Edited: Matt J
on 27 Nov 2022

X1,X2,X3,X4 are 4 input vectors and V the corresponding output. Xq2,Xq3,Xq4 are the query points.

I suggest attaching them in a .mat file, so that we can run the interpolation ourselves.

The error message is complaining that one of X1,X2,X3,X4 is a scalar, rather than a 597x1 vector, as you expect it to be.

Torsten
on 27 Nov 2022

Yes, that is what I want to do.

Then why don't you call your function V(X1,X2,X3,X4) over a full grid as required by "interpn", save the results in an array V(x1,x2,x3,x4) and then use this V-array for a table-lookup by "interpn" ?

Something like

for i = 1:597

for j = 1:597

for k = 1:597

for l = 1:597

V(i,j,k,l) = function_for_V(X1(i),X2(j),X3(k),X4(l));

end

end

end

end

### Answers (0)

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!**An Error Occurred**

Unable to complete the action because of changes made to the page. Reload the page to see its updated state.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)

### Asia Pacific

- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)