[問題]有關for迴圈

看板MATLAB作者 (花花)時間12年前 (2013/06/02 12:36), 編輯推噓4(4019)
留言23則, 4人參與, 最新討論串1/1
爬了一下文仍然沒有頭緒 還請多多指教 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)

06/02 14:19, , 1F
你這樣其實只是一個index...
06/02 14:19, 1F

06/02 14:20, , 2F
i = 1:5 , j = 6:10; for k=1:5
06/02 14:20, 2F

06/02 14:20, , 3F
X(i(k),j(k)-5) = i(k) + j(k);
06/02 14:20, 3F

06/02 16:59, , 4F
兩個變數維度都一樣的話 diag(i+j) 就好了
06/02 16:59, 4F

06/02 17:58, , 5F
X = [];
06/02 17:58, 5F

06/02 17:59, , 6F
for i = [1:5;6:10]
06/02 17:59, 6F

06/02 17:59, , 7F
X = [ X sum(i)];
06/02 17:59, 7F

06/02 17:59, , 8F
end
06/02 17:59, 8F

06/02 17:59, , 9F
diag(X)
06/02 17:59, 9F

06/02 18:01, , 10F
我這樣寫會不會很多餘...QQ 我也剛初學
06/02 18:01, 10F

06/02 18:31, , 11F
X = zeros(5)
06/02 18:31, 11F

06/02 18:31, , 12F
for i = [1:5;6:10]
06/02 18:31, 12F

06/02 18:32, , 13F
X(i(1),i(1)) = i(1) + i(2)
06/02 18:32, 13F

06/02 18:32, , 14F
end
06/02 18:32, 14F

06/02 18:32, , 15F
恩...這樣寫比較接近原po想要問的感覺?
06/02 18:32, 15F

06/02 19:12, , 16F
因為for迴圈是依序取用變數的行向量,所以寫成矩陣形式
06/02 19:12, 16F

06/02 19:12, , 17F
就可以做到你想要做的東西
06/02 19:12, 17F

06/02 19:30, , 18F
我大概懂我原本code的問題了
06/02 19:30, 18F

06/02 19:31, , 19F
我那樣寫的話 matlab 只會認第一個變數i
06/02 19:31, 19F

06/02 19:32, , 20F
j就會變成另一個矩陣 然後跑進迴圈和每一個i 做運算
06/02 19:32, 20F

06/02 19:32, , 21F
所以才會跑出那些我預期之外的數
06/02 19:32, 21F

06/02 19:33, , 22F
其實我只是想確認matlab可不可以這樣用才舉這個例子哈哈
06/02 19:33, 22F

06/02 19:35, , 23F
不過看了大家的回應我也大概懂了,感謝各位費心指導T_T
06/02 19:35, 23F
文章代碼(AID): #1HgilVex (MATLAB)