理解Matlab代码

时间:2011-12-06 12:37:17

标签: arrays matlab if-statement variable-assignment

我有一些代码,我一直试图对它做一些小调整。它曾经使用fgets从一行加载单个字符,并用它来对3D图中的点进行着色。所以它会读到

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声明有关?这是让它读取正确数字的唯一方法(不是49s和50s,非常奇怪。)

坚持我的主要部分是这些线(用于对应'a','n','p'等的数字)

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

它们看起来像隐含的if语句,从dataia等分配,其中ia成为一个数组。但我不确定。

非常感谢任何理解这一点的帮助。

1 个答案:

答案 0 :(得分:0)

我已修复此问题,我没有正确更新输入。要解决这个问题的任何人:ia = data == 0表示'使数组与数据大小相同,并用1或0填充它,具体取决于逻辑(数据== 0)是否为真或假'