【问题标题】:How to create a for loop that extracts each row of that matrix and prints it in a separate figure in MATLAB如何创建一个 for 循环来提取该矩阵的每一行并将其打印在 MATLAB 中的单独图形中
【发布时间】:2013-10-27 23:05:34
【问题描述】:

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

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

我该如何解决这个问题?

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

并以某种方式遵循 数字() 阴谋() 数字() 绘图()

【问题讨论】:

  • for 循环创建图形是没有用的——只有最后一个图形里面有任何东西。此外,您不想自己指定图形 id,让 MATLAB 分配它们。

标签: matlab graph vector matrix


【解决方案1】:

您似乎正在创建 n 个图形(其中 n 是矩阵的长度),但始终绘制在最后一个图形上并将 (n-1) 留空。

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

每次进入最外层的 for 循环时,都会创建与矩阵长度相等的数字(在最内层的循环中)。然后绘制矩阵的一行。

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

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

其次,正如我所说,您总共创建了 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

希望对你有帮助。

最好的问候

【讨论】:

  • 感谢 Ben Voigt 和 Catilho 帮助我了解我哪里出错了。我对编程有点陌生,感谢您的帮助。
【解决方案2】:

我希望这会有所帮助:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多