2013-11-19 3 views
1

У меня есть матрица Т с тремя столбцами х, у и г, содержащие радиус, угол и сигналов от моего моделирования соответственно:черчения поверхность матрицы в MATLAB

t = [ 
x y z 
10 0 -1 
10 2 -11 
10 3 -10 
20 5 -25 
20 7 -100 
20 20 -101 
20 3 -12 
30 12 -104 
. .  . 
. .  . 
. .  . 
] 

, как вы можете видеть, значения не имеют никакого порядка, а также первый столбец (x) имеет много повторяющихся значений. Я хочу сделать приятную поверхность, которая показывает флуктуации значений сигнала (столбец z) относительно значений радиуса и угла (столбцы x и y). Я много искал, и я пробовал почти все предложения на сайте, но всегда сталкивался с такими ошибками, как размеры данных. Может кто-нибудь помочь? заранее спасибо.

+0

Это, вероятно, хорошее начало, если вы преобразовать данные в декартовых координатах (см pol2cart) – bdecaf

ответ

1

Вы можете использовать доступные точки для получения интерполированных точек на регулярной сетке, а затем создать поверхность участка, как описано here:

xs = linspace(min(t(:,1)), max(t(:,1)), 50); 
ys = linspace(min(t(:,2)), max(t(:,2)), 50); 
[x, y] = meshgrid(xs, ys); 
f = scatteredInterpolant(t(:,1), t(:,2), t(:,3)); 
z = f(x, y); 
surf(x, y, z); 

Другой способ триангуляции ваши существующие точки и использовать trisurf:

tri = delaunay(t(:,1), t(:,2)); 
trisurf(tri, t(:,1), t(:,2), t(:,3)); 
+0

еще не раз. Я получаю ту же ошибку: ??? Ошибка при использовании ==> surf при 78 Размеры данных должны совпадать. Ошибка в ==> х в 8 прибое (X, Y, Z); – user3008019

0

Я считаю, что это то, что вам нужно:

M = [10, 0, -1 
10, 2, -11 
10, 3, -10 
20, 5 , -25 
20, 7 , -100 
20, 20, -101 
20, 3, -12 
30, 12, -104]; 


[xq,yq] = meshgrid(min(M(:,1)):1:max(M(:,1)), min(M(:,2)):1:max(M(:,2))); 
vq = griddata(M(:,1),M(:,2),M(:,3),xq,yq); 

surf(xq,yq,vq) 

Для того, чтобы построить поверхность, вам нужно решить, какое значение находится между используемыми точками. В этом случае я использовал griddata для интерполяции.

+0

Я получаю эту ошибку: – user3008019

+0

Я получаю эту ошибку: ??? Ошибка при использовании ==> griddata> linear at 164 Ошибка вычисления триангуляции Delaunay. Образцы данных могут быть коллинеарными. Ошибка в ==> GridData при 133 Zi = линейный (х, у, г, хи уг); Ошибка в ==> х при 4 VQ = GridData (т (:, 1), т (:, 2), т (:, 3), XQ, YQ); – user3008019

+0

У меня была старая строка в коде, но я не получаю вашу ошибку. Получаете ли вы это с этими данными или своими реальными данными? В противном случае я бы подумал, что может быть так, что одна xy-пара встречается больше, чем одна. Если это так, сначала вам нужно сделать очистку. –

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