Matlab интерполяция 4D рассеянных данных - PullRequest
0 голосов
/ 21 ноября 2018

У нас есть матрица 195x4 (двойная): A=[X Y Z temp], когда график с scatter3(A(:,1), A(:,2), A(:,3),30, A(:,4), 'filled' ) дает что-то вроде этого: enter image description here

Теперь мы хотим сгенерировать куб'окрашен с интерполяцией векторных данных 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 Ответ

0 голосов
/ 21 ноября 2018

У вас есть разбросанный набор данных.

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' )

Точки данных: data

Интерполированный: gridded

...