如何从循环中存储两个变量(X.Y)



我在循环中生成两个不同的坐标(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

它仅在第一个/最后一个迭代中运行。我需要获得9 x'和9 y's(取决于设置,可变(。

很难遵循哪种错误消息来自哪个尝试,但让我们看看。

我无法访问并行计算工具箱,这似乎是在分布式范围drange上使用for-loop所必需的,但是我假设,可以用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]存储在i -circleposition的第三行,即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的错误错误。被串联的矩阵尺寸不一致。(:我看不到,您完全使用垂直串联!?

听到是有效的代码:

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);,仅建议将内存分配速度,而不是少数元素的问题。

相关内容

  • 没有找到相关文章

最新更新