簡體   English   中英

如何從循環中存儲兩個變量(xy)?

[英]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

它僅在第一次/最后一次迭代時運行。 我需要得到9 x和9 y (取決於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 = []; circleposition = zeros(setsize + 1, 2); 不需要,只是建議分配內存以提高速度,這對於少量元素來說不是問題。

很難理解,哪個錯誤消息來自哪個嘗試,但是讓我們看一下。

我沒有訪問Parallel Computing Toolbox的權限,這似乎是在分布式范圍drange上使用for循環所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發生錯誤。要級聯的矩陣的尺寸不一致。 ):我不知道,您根本沒有在其中使用垂直級聯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM