1

我有一个包含矩阵数据的数据文件。我想创建一个 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

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

我怎样才能解决这个问题?

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

并以某种方式遵循图()图()图()图()的顺序

4

2 回答 2

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

希望能帮助到你。

此致

于 2013-10-27T23:25:18.770 回答
0

我希望这有帮助 :

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

您还可以使用hold on命令在图表中查看所有这些:

clear all
load matdata.dat
[x y] = size(matdata);
figure;
for i=1:x
    plot(matdata(i,:));
    hold on;
end
于 2013-10-28T07:19:33.773 回答