我有一个矩阵,在其行中存储多个函数,每个函数根据间隔[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
答案 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))