2013-10-26 2 views
1

У меня есть следующая проблема. У меня есть таблица с экспериментальными данными, считанными в матрице А (а, б, в), как это:октавный 3d участок с сеткой из экспериментальных данных

4.00000 7.00000 0.09035 
4.00000 6.00000 0.02632 
4.00000 5.00000 0.01184 
4.00000 4.00000 0.30728 
4.00000 3.00000 0.16022 
4.00000 2.00000 0.01734 
3.00000 6.00000 0.05817 
3.00000 5.00000 0.02296 
3.00000 4.00000 0.00000 
3.00000 3.00000 0.22576 
3.00000 2.00000 0.08331 
3.00000 1.50000 0.00297 
2.00000 6.00000 0.00000 
2.00000 5.00000 0.05184 
2.00000 4.00000 0.01883 
2.00000 3.00000 0.00000 
2.00000 2.00000 0.10719 
2.00000 1.50000 0.06689 

Моя актуальная проблема в том, что я не знаю, как сделать 3d участок с сеткой. Wioth plot3d() я просто кривая, которая бесполезна для меня. Словно старше вопрос был дан ответ, решение должно быть таким:

X = reshape(A(:,1),m,n); 
Y = reshape(A(:,2),m,n); % might be reshape(data(:,2),n,m) 
Z = reshape(A(:,3),m,n); 
mesh(X,Y,Z); 

с объяснением: В этом случае предполагается, что у вас есть т уникальные значения в Y, а п уникальных значений в X. Вы возможно, придется перенести их в ваш вызов на сетку в виде сетки (X ', Y', Z) или что-то в этом роде.

Как я понял, объяснение m и n должно быть количеством точек сетки в направлениях x и y моего 3D-графика. Проблема в том, что, например, точки сетки в направлении y, соответствующие одной точке сетки в направлении x, могут меняться от точки к точке.

С

aa=unique(a) 
bb=unique(b) 
lengthaa=length(aa) 
lengthbb=length(bb) 

я получаю окончательный сетки масштаб моего 3d участка (п, т) = ((lengthaa), длина (бб)), но когда я хочу, чтобы изменить форму, как я написал выше, я получаю конечно сообщение об ошибке, как это:

octave:20> x = reshape (A(:,1),clength,dlength) 
error: reshape: can't reshape 36x1 array to 6x12 array 

И теперь я нахожусь в точке, где я даже не знаю, что искать. Не могли бы вы помочь? :)

Edit: Теперь я на шаг дальше: с

[aaa,bbb]=meshgrid(aa,bb) 

я имею право skaling моих осей. Теперь я должен заказать свои данные правильно.

Редактировать 2: Проблема в том, что у меня теперь есть точки сетки, для которых у меня нет данных. Это причина, почему изменение формы не работает. Любая помощь?

ответ

3

Чтобы создать недостающую точку, вы могли бы интерполировать данные. Я сделал быстрый тест, как у меня была аналогичная проблема:

# Test script for http://stackoverflow.com/questions/19604387/octave-3d-plot-with-mesh-out-of-experimental-data 
# Trygve Utstumo, 2013-10-28 

data = [ 
4.00000 7.00000 0.09035 
4.00000 6.00000 0.02632 
4.00000 5.00000 0.01184 
4.00000 4.00000 0.30728 
4.00000 3.00000 0.16022 
4.00000 2.00000 0.01734 
3.00000 6.00000 0.05817 
3.00000 5.00000 0.02296 
3.00000 4.00000 0.00000 
3.00000 3.00000 0.22576 
3.00000 2.00000 0.08331 
3.00000 1.50000 0.00297 
2.00000 6.00000 0.00000 
2.00000 5.00000 0.05184 
2.00000 4.00000 0.01883 
2.00000 3.00000 0.00000 
2.00000 2.00000 0.10719 
2.00000 1.50000 0.06689 
]; 

# Evenly spaced axis, hacked to this dataset 
xi = min(data(:,1)):max(data(:,1)); 
yi = min(data(:,2)):0.5:max(data(:,2)); 

zi = griddata(data(:,1),data(:,2),data(:,3),xi,yi); 

mesh(xi, yi, zi) 
print("figure.png") 
pause() 

Sample output, you may want to increase the interpolation resolution a bit

Смежные вопросы