作者x5825108 (花花)
看板MATLAB
標題[問題]有關for迴圈
時間Sun Jun 2 12:36:45 2013
爬了一下文仍然沒有頭緒
還請多多指教
for迴圈應該可以使用兩個index吧?
例如
X = zeros(5);
for i = 1:5 , j = 6:10;
X(i,j-5) = i + j;
end
原本我以為它的執行順序是
i = 1 和 j = 6 丟進敘述內,1+6=7
7這個值就會存進X(1,1)
然後跑完第一圈,接著繼續第二圈i = 2,j = 7
跑完迴圈後照理說X會變成這樣
7 0 0 0 0
0 9 0 0 0
0 0 11 0 0
0 0 0 13 0
0 0 0 0 15
可是實際執行後卻是
7 8 9 10 11
8 9 10 11 12
9 10 11 12 13
10 11 12 13 14
11 12 13 14 15
這不就變成跟以下巢狀迴圈一樣了嗎
X = zeros(5);
for i = 1:5
for j = 6:10
X(i,j-5) = i + j;
end
end
想請問問題出在哪呢
或者說
該怎麼寫才可以達成上面我想的邏輯呢
就是i和j一起增加
而不是像巢狀迴圈一樣一個index先跑完
隱約想得到可是就是沒辦法實際化
很少寫程式問題有點笨鞭小力一點ˊ口ˋ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.1.134
※ 編輯: x5825108 來自: 140.116.1.134 (06/02 12:42)
1F:推 profyang:你這樣其實只是一個index... 06/02 14:19
2F:→ profyang:i = 1:5 , j = 6:10; for k=1:5 06/02 14:20
3F:→ profyang:X(i(k),j(k)-5) = i(k) + j(k); 06/02 14:20
4F:→ prouno:兩個變數維度都一樣的話 diag(i+j) 就好了 06/02 16:59
5F:推 aramilcat:X = []; 06/02 17:58
6F:→ aramilcat:for i = [1:5;6:10] 06/02 17:59
7F:→ aramilcat: X = [ X sum(i)]; 06/02 17:59
8F:→ aramilcat:end 06/02 17:59
9F:→ aramilcat:diag(X) 06/02 17:59
10F:→ aramilcat:我這樣寫會不會很多餘...QQ 我也剛初學 06/02 18:01
11F:推 aramilcat:X = zeros(5) 06/02 18:31
12F:→ aramilcat:for i = [1:5;6:10] 06/02 18:31
13F:→ aramilcat: X(i(1),i(1)) = i(1) + i(2) 06/02 18:32
14F:→ aramilcat:end 06/02 18:32
15F:→ aramilcat:恩...這樣寫比較接近原po想要問的感覺? 06/02 18:32
16F:推 aramilcat:因為for迴圈是依序取用變數的行向量,所以寫成矩陣形式 06/02 19:12
17F:→ aramilcat:就可以做到你想要做的東西 06/02 19:12
18F:→ x5825108:我大概懂我原本code的問題了 06/02 19:30
19F:→ x5825108:我那樣寫的話 matlab 只會認第一個變數i 06/02 19:31
20F:→ x5825108:j就會變成另一個矩陣 然後跑進迴圈和每一個i 做運算 06/02 19:32
21F:→ x5825108:所以才會跑出那些我預期之外的數 06/02 19:32
22F:→ x5825108:其實我只是想確認matlab可不可以這樣用才舉這個例子哈哈 06/02 19:33
23F:→ x5825108:不過看了大家的回應我也大概懂了,感謝各位費心指導T_T 06/02 19:35