是否可以在没有for循环的情况下绘制矩阵的行?

时间:2015-12-11 09:16:25

标签: matlab plot

我有一个矩阵,在其行中存储多个函数,每个函数根据间隔[0,20]进行评估。我正在通过for循环来输出它们。有没有更好的方法来实现这一点,或者这是在MATLAB中实现它的唯一方法吗?

h = 0.1;
xLine = 0:h:20;
nGrid = length(xLine);

nu = [ 1, 2, 3 ];
nNu = length(nu);

b = zeros(nNu,nGrid);
for i=1:nNu
    b(i:i,1:nGrid) = besselj(nu(i), xLine);
end

hFig = figure(1);
hold on
set(hFig, 'Position', [1000 600 800 500]);
for i=1:nNu
    plot(xLine, b(i:i,1:nGrid))
end

2 个答案:

答案 0 :(得分:4)

您可以使用plot矢量化。具体来说,您可以b直接提供plot,但需要确保b中两个维度中较大的一个与向量xLine中的元素总数相匹配。这就是你所拥有的,所以我们很好。因此,由于每个唯一信号占据矩阵中的一行,只需在b调用中提供plot并使用它一次。

hFig = figure(1);
hold on
set(hFig, 'Position', [1000 600 800 500]);
plot(xLine, b);

这会将每一行绘制为单独的颜色。如果你尝试这样做,你会发现这些图与for循环方法相比是相同的。

查看plot的文档了解详情:This answer

答案 1 :(得分:2)

将for循环替换为:

file_exists

注意:我无法完全回想起来,但是某些旧版本的Matlab可能会想要列中的所有内容,并且您想要转置矩阵:

plot(xLine, b(:,1:nGrid))