2015-07-23 4 views
1

В принципе, я хочу построить трехмерное векторное поле с использованием конуса в Matlab. Моего сценарий выглядит следующим образом:Ошибка Matlab coneplot meshgrid MATLAB: griddedInterpolant: NdgridNotMeshgrid3DErrId/not plotting anythin

data=oommf2matlab('420x350x5-2_5-5.omf'); 
x=linspace(data.xmin,data.xmax,data.xnodes); 
y=linspace(data.ymin,data.ymax,data.ynodes); 
z=linspace(data.zmin,data.zmax,data.znodes); 
[X,Y,Z]=meshgrid(y,x,z); 
scale=4; 
angle = data.datay ./ data.datax; 
colors = angle; 
figure; 
coneplot(data.positionx,data.positiony,data.positionz,data.datax,data.datay,data.dataz,X,Y,Z,scale,colors); 

oommf2matlab функция для преобразования моих данных в MATLAB и возвращает структура, как это:

xmin: 0 
ymin: 0 
zmin: 0 
xmax: 4.2400e-07 
ymax: 3.5400e-07 
zmax: 1.2500e-08 
xnodes: 212 
ynodes: 177 
znodes: 5 
datax: [212x177x5 double] 
datay: [212x177x5 double] 
dataz: [212x177x5 double] 
positionx: [212x177x5 double] 
positiony: [212x177x5 double] 
positionz: [212x177x5 double] 

Запуск этого сценария дает мне ошибку

Ошибка при использовании interp3 (строка 146) Входная сетка не является допустимым MESHGRID.

Ошибка в конусе (строка 144) ui = interp3 (x, y, z, u, cx, cy, cz, метод);

Ошибка в omf2cone (строка 11) coneplot (data.positionx, data.positiony, data.positionz, data.datax, data.datay, data.dataz, X, Y, Z, масштаб, цвета);

Если проследить ошибку с помощью отладки в среде MATLAB: griddedInterpolant: NdgridNotMeshgrid3DErrId ошибка, которая выглядит следующим образом:

identifier: 
'MATLAB:griddedInterpolant:NdgridNotMeshgrid3DErrId' 

message: 
Data is in MESHGRID format, NDGRID format is required. 
Convert your data as follows: 
P = [2 1 3]; 
X = permute(X, P); 
Y = permute(Y, P); 
Z = permute(Z, P); 
V = permute(V, P); 
F = griddedInterpolant(X,Y,Z,V) 
cause: {0x1 cell} 
stack: [3x1 struct] 

Это странно для меня, потому что interp3 уже делает то, что ошибка говорит как исправить.

Кроме того, если я позволяю coneplot генерировать саму сетку с помощью:

coneplot(data.datax,data.datay,data.dataz,X,Y,Z,scale,colors); 

Там нет ошибки, однако нет никакого сюжета создается вообще, только ось фигуры.

+0

может быть ошибка в этой строке '[X, Y, Z] = meshgrid (y, x, z);' где вместо этого вы хотите '[X, Y, Z] = meshgrid (х, у, г); '? – bern

ответ

1

вместо того, чтобы использовать meshgrid вместо griddedInterpolant(), чтобы ваши данные были в формате, указанном в ошибке.

Также часть вашей ошибки может быть в этой строке [X,Y,Z]=meshgrid(y,x,z); где вместо этого вы хотите [X,Y,Z]=meshgrid(x,y,z);? Это может привести к синтаксической ошибке, которую вы описываете

+0

Можете ли вы объяснить, почему и как использовать griddedInterpolant() здесь, пожалуйста. В документации Matlab на coneplot предлагается использовать meshgrid. Также эта перестановка была предназначена для получения одинаковых размеров массива. [X, Y, Z] = meshgrid (x, y, z) дает массивы 177x212x5 для X, Y, Z , тогда как данные, очевидно, находятся в 212x177x5. – eldenbra

+0

, используя класс griddedInterpolant (используя такие функции, как interp3), интерполирует данные сетки сетки, которые вы предоставили, чтобы он стал равномерно распределенным и затем был в согласованном формате с постоянным интервалом, который Matlab предпочитает для некоторых графиков. в [mathworks] есть дополнительная информация (http://www.mathworks.com/help/matlab/math/interpolating-gridded-data.html). Отвечает ли это на ваш вопрос? – bern