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!