Построение цветовой карты. Ошибка при использовании функции surf (). Размеры данных должны совпадать.

Я пытаюсь создать график цветовой карты, используя следующий код:

[x,z] = meshgrid(0:100:600,0:100:600);
mm = size(z);
for z2 = 1:3
    for x2 = 1:3
        E(z2,x2) = (x(x2))^2 + (z(z2))^2;
    end  
end

figure;
surf(x,z,E,'EdgeColor','None');
view(2);
xlabel('x','fontsize',20);
ylabel('z','fontsize',20);
colormap jet;  

Я использовал z2 и x2 в цикле for, потому что я хочу использовать только элементы с первого по третий в сетке, что означает 0,100,200 для x и z, но Matlab возвращает мне ошибку:

Ошибка при использовании серфинга (строка 74) Размеры данных должны совпадать.

Ошибка в тестовом графе (строка 10) surf (x, z, E, 'EdgeColor', 'None');

Но если я установлю z2 = 3: 7 и x2 = 3: 7, тогда он сможет построить график без ошибок, но я не знаю, почему это так, и как я могу достичь того, что я хочу построить?


person Lin Qiao    schedule 23.09.2016    source источник
comment
Surf требует, чтобы форма всех трех элементов была одинаковой. Форма E оказывается правильной, если вы выбрали z2 = 3: 7 и x2 = 3: 7,   -  person jfish003    schedule 23.09.2016
comment
Если я правильно понимаю, что вы хотите, вам нужно сначала инициализировать E. Итак, перед началом цикла добавьте строку E = zeros (size (x)), тогда вы сможете сделать 1: 3, которое хотите, в каждом цикле   -  person jfish003    schedule 23.09.2016


Ответы (1)


Размеры матриц не совпадают. Поскольку вы создали матрицу meshgrid 7 на 7, матрица результатов E должна быть матрицей 7 на 7.

Пожалуйста, попробуйте код ниже.

[x,z] = meshgrid(0:100:600,0:100:600);
mm = size(z);

E=zeros(7,7); %initializing result matrix E

for z2 = 1:3
    for x2 = 1:3
        E(z2,x2) = (x(x2))^2 + (z(z2))^2;
    end  
end

figure;
surf(x,z,E,'EdgeColor','None');
view(2);
xlabel('x','fontsize',20);
ylabel('z','fontsize',20);
colormap jet;  

В случае 3: 7, поскольку матрица результатов E является матрицей 7 на 7, вы можете избежать ошибки размерности матрицы.

person KKS    schedule 23.09.2016