如何从循环中存储两个变量(x.y)?

How to store two variables (x.y) from a loop?

我在循环中生成两个不同的坐标 (x, y)。在我的代码中,我刚刚意识到它正在保存循环中的最后一个变量。但是,我正在尝试保存 setsize 变量中的所有迭代。我已经尝试使用类似的方法保存:

circleposition = [0:length(setsize) x(i),y(i)]; 

但是,我似乎没有正确执行,出现以下错误:

Subscript indices must either be real positive integers or logicals.- 
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

这是我的原始代码:

setsize = 9; 
r = 340;
cx = 500;
cy = 500;
anglesegment = 2 * pi/setsize;
circleposition = []; 

for i = drange (0:setsize)
    x = r * cos(i*anglesegment) + cx;
    y = r * sin(i*anglesegment) + cy;
    circleposition = [x,y];
end 

输出:

circleposition =
             0    1.0000
      840.0000  500.0000

它仅在 first/last 迭代中运行。我需要得到 9 x's 和 9 y's(取决于 setsize,变量)。

听说是有效的代码:

setsize = 9; 
r = 340;
cx = 500;
cy = 500;
anglesegment = 2 * pi/setsize;
circleposition = zeros(setsize + 1, 2); % Changed from circleposition = []

for i = drange (0:setsize)
    x = r * cos(i*anglesegment) + cx;
    y = r * sin(i*anglesegment) + cy;
    circleposition((i+1),:) = [x,y]; % Changed from circleposition = [x,y];
end

解释:

修复方法是将 circleposition = [x,y]; 更改为 circleposition((i+1),:) = [x,y]。如果没有 ((i+1),:),您将更改 circleposition 的数据,而不是添加到它。

不需要将 circleposition = []; 更改为 circleposition = zeros(setsize + 1, 2);,只是建议为速度分配内存,对于少量元素不是问题。

很难理解哪个错误消息来自哪个尝试,但让我们看看。

我无法访问 Parallel Computing Toolbox,这似乎是使用 for-loop over distributed range drange 所必需的,但我想,这个循环可以替换为 for i = 0:setsize 用于测试。

现在,当从 i = 0 开始时,您将尝试访问 x(0)y(0),这是不允许的(下标索引必须是正数整数或逻辑)。此外,正如您在问题中所述,您将获得 10 个值而不是 9 个值。那么,让我们从 i = 1.

开始吧

要存储所有 9 对 xy,您的 circleposition 应该是一个 9 x 2 数组 所以,初始化它,例如 circleposition = zeros(setsize, 2).

最后,您需要使用适当的索引将 [x, y] 存储在 circleposition 的第 i 行,即 circleposition(i, :).

因此,更正后的代码(注意被替换的 drange 部分)可能如下所示:

setsize = 9; 
r = 340;
cx = 500;
cy = 500;
anglesegment = 2 * pi/setsize;
circleposition = zeros(setsize, 2);     % Initialize circleposition appropriately

for i = 1:setsize                       % Start at i = 1
    x = r * cos(i*anglesegment) + cx;
    y = r * sin(i*anglesegment) + cy;
    circleposition(i, :) = [x, y];      % Correct indexing of the row
end 

circleposition                          % Output

输出将是:

circleposition =
   760.46   718.55
   559.04   834.83
   330.00   794.45
   180.50   616.29
   180.50   383.71
   330.00   205.55
   559.04   165.17
   760.46   281.45
   840.00   500.00

关于第二个错误(错误使用vertcat。连接矩阵的维数不一致。):我没看到,你在哪里使用了垂直连接完全没有!?