Matlab中的repmat函数不能一致工作吗?

时间:2018-12-10 02:19:14

标签: matlab graphics2d

Matlab函数meshgrid和streamline不匹配。如何解决?

%% direction field plot
[x,y]=meshgrid(-4:.5:4,-4:.5:4);       
dx = 2*x +1*y;
dy = 1*x +2*y;
dxu = dx./sqrt(dx.^2+dy.^2);
dyu = dy./sqrt(dx.^2+dy.^2);
quiver(x,y,dxu,dyu)
hold on  

%% Trajectory Plot
startx = repmat([-4:.5:4], 0,2); 
starty = ones(size(startx));
streamline(x,y,dxu, dyu, startx, starty)
dxu = dx./sqrt(dx.^2+dy.^2);
dyu = dy./sqrt(dx.^2+dy.^2);

print('c:\data\DirectionField','-dmeta')
saveas(gcf, 'c:\data\streamline.emf')
hold off

错误消息如下:

Error using repmat!
Replication factors must be a row vector of integers or integer scalars.

当我在代码中添加7个轨迹图时,就会发生这种情况。当仅使用两个轨迹时,没有发生错误吗?这是怎么回事

MM

1 个答案:

答案 0 :(得分:1)

您的startxstarty矩阵当前为空。 repmat的最后两个参数应该是您要分别在垂直和水平方向上重复矩阵的次数。由于您的复制因子是02,因此结果是一个空矩阵。使用正整数作为复制因子。

我不确定您要做什么,但是如果您希望quiverstreamline的图保持一致,我认为您不应该使用repmat完全没有相反,我认为您应该这样做:

streamline(x, y, dxu, dyu, x, y); 

在OP评论后更新:

如果要绘制一组特定起点的轨迹,请使用下面的代码,其中startxy是一个m x 2矩阵,其中包含m个起点的坐标。< / p>

startxy = [0,2;
           1,-3;
           2,1]; %e.g. 3 starting points
streamline(x,y,dxu, dyu, startxy(:,1), startxy(:,2));