Понимание кода Matlab - PullRequest
       10

Понимание кода Matlab

0 голосов
/ 06 декабря 2011

У меня есть какой-то код, и я пытаюсь внести в него небольшие изменения.Раньше он использовал fgets для загрузки одного символа из линии и использовал его для раскраски точек на трехмерном графике.Таким образом, он будет читать

a
p
p
n
c

, а затем использовать другие файлы данных, чтобы назначить, какие x, y, z баллы дать им.В результате получается очень симпатичный 3D-график.

Я отредактировал входной файл так, чтобы он читал

0
1
1
0
2
2
0

, и я хочу, чтобы он раскрашивал числа в один цвет.

Вот где я дошел до кода:

    function PlotCluster(mcStep)

   clear all

   filename = input('Please enter filename:   ', 's');

   disp('Loading hopping site coordinates ...')
   load x.dat
   load y.dat
   load z.dat
   temp = z;
   z = x;
   x = temp;
   n_sites = length(x);

       disp('Loading hopping site types ...')
   fp = fopen([filename]);
   data = load(filename);  %# Load the data

   % Plot the devices
   % ----------------

   disp('Plotting the sample surface ...')
   figure
   disp('Hello world!')

   ia = data == 0;
   in = data == 1;
   ip = data == 2;
   disp('Hello Again')

   plot3(x(ia),y(ia),z(ia),'b.') %,'MarkerSize',4)
   hold on
   plot3(x(ic),y(ic),z(ic),'b.') %,'MarkerSize',4)
   plot3(x(in),y(in),z(in),'g.') %,'MarkerSize',4)
   plot3(x(ip),y(ip),z(ip),'r.') %,'MarkerSize',4)
   daspect([1 1 1])
   set(gca,'Projection','Perspective')
   set(gca,'FontSize',16)   
   axis tight
   xlabel('z (nm)','FontSize',18)
   ylabel('y (nm)','FontSize',18)
   zlabel('x (nm)','FontSize',18)
   %title(['Metropolis Monte Carlo step ' num2str(mcStep)])

   view([126.5   23])

Моя проблема в том, что я получаю эту ошибку

Index exceeds matrix dimensions.

Error in PlotCluster (line 34)
   plot3(x(ia),y(ia),z(ia),'b.') %,'MarkerSize',4)

И я не понимаюне понимаю, почему ia выходит за пределы массива x.Это связано с изменением оператора fgets на оператор load?Это был единственный способ заставить его читать правильные числа (а не 49 и 50, что было очень странно).

Основные биты, которые меня цепляют, - это эти строки (где число использовалось, чтобы соответствовать 'a',' n ',' p 'и т. д.)

   ia = data == 0;
   in = data == 1;
   ip = data == 2;

Они выглядят как подразумеваемые if операторы с присваиванием от data до ia и т. д., где ia становится массивом.Но я не уверен.

Любая помощь в понимании этого будет принята с благодарностью.

1 Ответ

0 голосов
/ 07 декабря 2011

Я исправил проблему, я не обновил свои данные правильно. Чтобы прояснить это для любого, кто придет к этому вопросу: ia = data == 0 означает «Создайте массив того же размера, что и данные, и заполните его 1 или 0 в зависимости от того, является ли логика (data == 0) истинной или ложь '

...