我有一个包含矩阵数据的数据文件。我想创建一个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
但问题是我最终得到了同样事物的四个图:所有四个都是矩阵最后一行的图。
我该如何解决这个问题?
也许通过提取矩阵的每一行并将其保存为唯一的行向量?
以某种方式遵循的顺序 数字() 情节() 数字() 情节()
答案 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