Matlab:单步执行数组并从一个值递增到下一个值

时间:2012-12-13 06:55:54

标签: arrays matlab increment

我有一个数组:

step1 = [0,0;
         0,1;
         1,1;
         2,3;
         3,4;
         3,5;
         3,6;
         3,7;
         4,7;
         5,7;
         6,7;
         6,6;
         6,5;
         6,4;
         6,3;
         6,2;
         5,1];

我想逐步执行此数组并为行和列创建新数组,从一行到另一行递增0.1。这就是我所做的:

z=1;
u=length(step1);
step_b4X = zeros(u,1);
step_b4Y = zeros(u,1);
while z <= length(step1)
    step_b4X = step_presentX;
    step_presentX(z,1) = step1(z,1);
    step_b4Y = step_presentX;
    step_presentY(z,1) = step1(z,2);
    pathX = step_b4X:0.1:step_presentX;
    pathY = step_b4Y:0.1:step_presentY;
    z = z+1;
end

我得到了零。 我想要pathX = 0:0.1:0 .... pathY = 0:0.1:1 next pathX = 0:0.1:1 .... pathY = 1:0.1:1 ......等等

1 个答案:

答案 0 :(得分:3)

如果你这样做

start:increment:end

其中start == end,你会得到一个等于start的标量(这是合乎逻辑的)。

如果您希望pathXpathY在每次迭代时具有相同的长度,则必须执行此操作:

z = 1;
while z <= length(step1)

    currentX = step(z,1);   nextX = step(z+1,1);
    currentY = step(z,2);   nextY = step(z+1,2);

    pathX = currentX : 0.1 : nextX;
    pathY = currentY : 0.1 : nextY;

    if numel(pathX) == 1
        pathX = repmat(pathX, numel(pathY),1); end
    if numel(pathY) == 1
        pathY = repmat(pathY, numel(pathX),1); end

    z = z+1;
end

现在,您将在每次迭代时拥有正确的数组,您将直接使用或保存在cell - 数组中以供日后使用。如果你想要一个大数组中的所有内容,请将其添加到循环的末尾:

    pathX_final = [pathX_final; pathX];
    pathY_final = [pathY_final; pathY];

并在循环之前将它们初始化为空。

或者(更清洁,可能更快),抛弃整个循环并使用interp1

x = step1(:,1);
y = step1(:,2);

xx = interp1(1:numel(x), x, 1:0.1:numel(x));
yy = interp1(1:numel(y), y, 1:0.1:numel(y));