0

如果我有以下代码:

for t=1:length(s)  % s is a struct with over 1000 entries
  if s(t).BOX==0
    a(t,:)=0;
    elseif s(t).BOX==1
    a(t,:)=100;
  end
  if s(t).BOX==2
    b(t,:)=150;
    elseif s(t).BOX==3
    b(t,:)=170;
  end
  .
  .
  .

end
plot(a)
plot(b)
plot(c)

我想要完成的事情:

for n=1:length(s)

Plot the data point of a(n) at t=0, t=1, t=2
then
Plot the data point of b(n) at t=3, t=4, t=5
.
.
.
etc

t所以基本上,在移动到下一个点之前 ,每个数据点将被绘制为 3 个值。

我怎样才能做到这一点?

编辑

像这样的东西:

在此处输入图像描述

4

1 回答 1

1

如果我正确理解你,并假设a是一个向量,你可以做类似的事情

% Your for loop comes before this

nVarsToPlot = 4;
nRepeatsPerPoint = 3;
t = repmat(linspace(1, nRepeatsPerPoint * length(s), nRepeatsPerPoint * length(s))', 1, nVarsToPlot);
genMat = @(x)repmat(x(:)', nRepeatsPerPoint, 1);
aMat = genMat(a); bMat = genMat(b); cMat = genMat(c); dMat = genMat(d);
abcPlot = [aMat(:) bMat(:) cMat(:) dMat(:)];
plot(t, abcPlot);

我有点不清楚您希望t包含哪些值,但您基本上需要一个 3 倍长度的向量s。然后,您可以通过将[Nx1]向量 ( a, b, c, etc.) 复制 3 次(将它们转换为行向量之后)并将全部堆叠到矩阵中,然后将其转换为(:)应该以正确顺序出现的向量来生成正确的数据矩阵只要因为矩阵构造正确。

于 2013-04-06T16:34:54.050 回答