2015-06-02 3 views
1

Я сделал расчеты с помощью двух разных методов. Для этих расчетов я изменил 2 параметра: x и yMATLAB - Surf Структура данных участка

В конце концов, я рассчитал% ERROR между обоими методами для каждого варианта. Теперь я хочу, чтобы создать 3D поверхность участка из результатов:

x -> on x axis 
y -> on y axis 
Error -> on z axis 

Вот пример данных:

A = [ 
        -0.1111      1.267   9.45680081826912 
        -0.1111      2.6   212.361735695025 
        -0.25      1.533   40.5729362609655 
        -0.25      2.867   601.253624894196 
        -0.4286       1   0.12116749607863 
        -0.4286      3.4   79.6948438921078 
        -0.6667      2.067   33.3495544017519 
        -0.6667      3.667   141.774875517481 
         -1      2.6  -0.0399171449531781 
        0.09091      1.533   163.7083541414 ]; 

Но, когда я пытаюсь построить его с функцией прибоя:

x = A(:,1); 
y = A(:,2); 
z = A(:,3); 

surf(x,y,z) 

, я получаю сообщение об ошибке:

Error using surf (line 75) 
Z must be a matrix, not a scalar or vector 
Error in ddd (line 27) 
surf(x,y,z) 

Можете ли вы помочь мне с кодом, который может реструктурировать данные в формате, приемлемом для функции серфинга?

P.S. - В настоящее время я пытаюсь написать пример кода с моими первыми попытками. Я отправлю его, как только я доберусь где-нибудь.

ответ

7

Функция surf нуждается в сетке X,Y -значений в качестве входных данных. Однако ваши данные - это просто три вектора с некоторыми комбинациями, а не полная сетка. Как описано в документации, функция meshgrid часто помогает создавать такие сетчатые матрицы. Используйте функцию unique, чтобы выбрать все уникальные значения в x и y и создавать матрицы всех возможных комбинаций:

[X,Y] = meshgrid(unique(x),unique(y)); 

Чтобы создать Z матрицу, которая приспосабливает [X,Y] сетки, функция griddata полезно:

Z = griddata(x,y,z,X,Y); 

Теперь вы можете позвонить surf с матрицами сетки в качестве входных данных:

surf(X,Y,Z); 
+0

Отличная работа! Отлично и просто! – Trenera

0

создать сетку для первого и второго столбцов и вычислить Z, используя формулу. help meshgrid in MATLAB

+0

Это не сработает, так как есть отдельное программное обеспечение, которое выполняет вычисления и запускает его на несколько дней. Я не могу просто повторять вычисления. Мне нужно изменить порядок данных. – Trenera

+0

В этом случае, я думаю, что невозможно получить участок поверхности, поскольку ошибка зависит от обеих переменных x и y. Для поверхности требуется матрица вместо вектора. Другой вариант может быть disp3 или barplot. –

+0

Вы правы в том, что поверхностный участок нуждается в матрице, но я прошу различить, что это невозможно. Ответ @hbaderts объясняет это отлично. – rayryeng

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