4-D Interpolation using interpn
古いコメントを表示
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 件のコメント
Jan
2022 年 11 月 26 日
"I have 4 vectors as input and 1 vector as output."
X1,X2,X3,X4,V,Xq1,Xq2,Xq3,Xq4 - these are 9 inputs.
mary
2022 年 11 月 26 日
Torsten
2022 年 11 月 26 日
What is size(X1),size(X2),size(X3), size(X4) and size(V) in your case ?
mary
2022 年 11 月 26 日
mary
2022 年 11 月 26 日
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
Torsten
2022 年 11 月 27 日
So you have a code to generate V from given values for X1,...,X4 ? And in order to save computing time, you want to build a look-up table instead of calling the function that calculates V from X1,...,X4 every time ?
mary
2022 年 11 月 27 日
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
2022 年 11 月 27 日
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
mary
2022 年 11 月 27 日
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Interpolation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!