如何从循环中存储两个变量(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 对 x
和 y
,您的 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
。连接矩阵的维数不一致。):我没看到,你在哪里使用了垂直连接完全没有!?
我在循环中生成两个不同的坐标 (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 对 x
和 y
,您的 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
。连接矩阵的维数不一致。):我没看到,你在哪里使用了垂直连接完全没有!?