我在循环中生成两个不同的坐标(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对x
和y
,您的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);
,仅建议将内存分配速度,而不是少数元素的问题。