Matlab интерполяция 4D рассеянных данных
У нас есть 195x4 (двойная) матрица: A=[X Y Z temp]
, когда заговор с scatter3(A(:,1), A(:,2), A(:,3),30, A(:,4), 'filled' )
дает что-то вроде этого:
Теперь мы хотим сгенерировать "куб", окрашенный с помощью интерполяции temp=A(:,4)
векторные данные. Пока что мы попробовали interp3
% Base Grid
[Xm Ym Zm] = meshgrid(A(:,1), A(:,2), A(:,3));
% Grid Refinement
[Xq,Yq,Zq] = meshgrid(xmin:dx:xmax, ymin:dy:ymax, zmin:dz:zmax);
Aq = interp3(Xm,Ym,Zm,A(:,4),Xq,Yq,Zq);
Возвращает следующую ошибку:
Error using griddedInterpolant
The number of input coordinate arrays does not equal the number of dimensions
(NDIMS) of these arrays.
Error in interp3 (line 144)
F = griddedInterpolant(X, Y, Z, V, method,extrap);
Error in PDGEM_MT (line 112)
Aq = interp3(Xm,Ym,Zm,A(:,4),Xq,Yq,Zq);
Поэтому я думаю, что это может быть плохая реализация и / или неправильная интерпретация проблемы. Как сгенерировать "куб" из этого пространства, окрашенного с помощью интерполяции объема A(:,4)
?
Заранее спасибо.
1 ответ
У вас разбросанный набор данных.
interp3
работает только в том случае, если ваши точки данных находятся в формате сетки, прочитайте это. Краткое описание этой функции Interpolation for 3-D gridded data in meshgrid format
Вместо этого вы можете использовать griddata
который работает для разбросанных данных, прочитайте это. Краткое описание Interpolate 2-D or 3-D scattered data
,
Пример:
X = rand(100,1);
Y = rand(100,1);
Z = rand(100,1);
C = rand(100,1);
figure
scatter3(X, Y, Z,30, C, 'filled' )
[Xm, Ym, Zm] = meshgrid(min(X):.01:max(X), min(Y):.01:max(Y), min(Z):.01:max(Z));
Cm = griddata(X,Y,Z,C,Xm,Ym,Zm);
figure
scatter3(Xm(:), Ym(:), Zm(:), 30, Cm(:), 'filled' )