如何创建一个for循环,提取该矩阵的每一行并将其打印在MATLAB的单独图中

时间:2013-10-27 23:05:35

标签: matlab graph vector matrix

我有一个包含矩阵数据的数据文件。我想创建一个for循环,它提取该矩阵的每一行,并在MATLAB的单独图中打印出来。

我有以下矩阵

matdata =

   12.3000   18.3000   15.8000   19.9000
   43.6000   49.1000   28.4000   36.7000
   98.3000   88.4000   73.8000   63.2000
   33.2000   35.9000   44.5000   22.8000

我写了以下代码。

clear all
load matdata.dat
for x = 1: length (matdata)
for i = 1:length(matdata)
figure (i)
end
j = matdata(x,:)
plot (j)
end

但问题是我最终得到了同样事物的四个图:所有四个都是矩阵最后一行的图。

我该如何解决这个问题?

也许通过提取矩阵的每一行并将其保存为唯一的行向量?

以某种方式遵循的顺序     数字()     情节()     数字()     情节()

2 个答案:

答案 0 :(得分:1)

似乎你正在创建n个数字(其中n是矩阵的长度),但总是在最后一个上绘图并且将(n-1)留空。

逐步解释您的代码可以帮助您找出问题所在:

每次进入最外面的for循环时,都会创建一些等于矩阵长度的数字(在最里面的循环中)。然后你绘制矩阵的一行。

我发现这种方法存在两个大问题:

首先,您依赖于矩阵的最小维度是列数这一事实。如果您不确定矩阵的维度,则应使用函数length,而不是使用size。如果你是,那你就没事了。

其次,正如我所说,你总共创造了n个数字。活动的那个总是(在你的情况下)id等于4的那个(读你的代码,你能理解为什么会这样吗?)

实现您想要的正确方法将是以下(未经测试!)

clear all
load matdata.dat
[num_rows, num_cols] = size(matdata); # Make sure I'm getting the number of rows
for x = 1: num_rows
  figure; #creates a new figure, let MATLAB deal with the index, as noticed by Ben Voigt
  j = matdata(x,:);
  plot (j);
end

希望它有所帮助。

祝你好运

答案 1 :(得分:0)

我希望这会有所帮助:

load matdata.dat;  
[x y] = size(matdata);
for i=1:x
    figure;
    plot(matdata(i,:));
end

您还可以使用抓住命令查看图表中的所有内容:

clear all
load matdata.dat
[x y] = size(matdata);
figure;
for i=1:x
    plot(matdata(i,:));
    hold on;
end