【问题标题】:Understanding Matlab code理解 Matlab 代码
【发布时间】:2012-01-14 01:25:26
【问题描述】:

我有一些代码,我一直在尝试对其进行一些小的调整。它曾经使用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 语句有关?这是让它读取正确数字的唯一方法(不是 49 和 50,这很奇怪。)

让我印象深刻的主要是这些行(其中数字对应于'a'、'n'、'p'等)

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

它们看起来像是隐含的 if 语句,从 dataia 等赋值,其中 ia 变成了一个数组。但我不确定。

任何理解这一点的帮助将不胜感激。

【问题讨论】:

  • 我已经解决了这个问题,我没有正确更新我的输入。要为遇到此问题的任何人澄清这一点:ia = data ==0 表示“使数组与数据大小相同,并根据逻辑(数据 == 0)是真还是假而用 1 或 0 填充它”
  • 如果它解决了您的问题,请将其作为答案发布。
  • 很抱歉还是新的。会这样做!刚刚被告知声望低于 100 的用户在提问后 8 小时内无法回答自己的问题。您可以在 3 小时内自行回答。在此之前,请使用 cmets,或改为编辑您的问题。

标签: arrays matlab if-statement variable-assignment


【解决方案1】:

我已经解决了这个问题,我没有正确更新我的输入。为任何遇到此问题的人澄清这一点:ia = data ==0 表示'使数组与数据大小相同,并根据逻辑 (data == 0) 是否为真或用 1 或 0 填充它假的'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2015-02-25
    相关资源
    最近更新 更多