[問題] 一段覺得很怪的code已回收

看板MATLAB作者 (自知者明)時間15年前 (2010/05/20 13:42), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/2 (看更多)
dat為n*k的矩陣 n=length(dat(:,1)); (定義n) q=dat(:,qi); (定義q) % Sorted index of q % qs=0; (第一個迴圈的起始值) for i=1:length(q) (我覺得這行是多餘的) for i_=1:length(q) (第一個迴圈開始) temp=0; (第二個迴圈的起始值) for j=1:length(q) (第二個迴圈開始) if (q(i_)>q(j))|(i_>=j&q(i_)==q(j)) (?1) temp=temp+1; (第二個迴圈的規則) end; (第二個迴圈結束) end; if temp==i (?2) qs=[qs;i_]; (?3) end; end; end; qs=qs(2:length(qs)); (?4) q=q(qs); (?5) 因為本身是matlab新手,不太知道matlab的語法思考模式 也借了一些書來看,但總是無法用在實際的程式語法 若以for的迴圈來看 通常都是 s=1 for i=1:n a=3 b(s)=3*i s=s+1 end 而以if來看 a=1 b=5 if (a==4) b=10 end b 即可得到b=5 在書上看到for 和 if的迴圈例子似乎無法讓我理解最上面打出來的code 至於 qs=qs(2:length(qs)); (?4) q=q(qs); (?5) 這兩行我完全無法理解 qs應該是一開始迴圈在定義起始值的qs=0吧 怎麼這裡又把qs定義為qs(2:length(qs)) 而且這裡在小括弧( )的前面又放了一個qs,真的蠻怪的 而最後一行q=q(qs) 我也是完全不能接受 我翻遍了中英文的matlab參考書籍 完全找不到有人寫出q=q(qs)這類的表示方法 所以我不能理解這段到底可以產生什麼樣的結果 這些問題我大概困擾了一個月 因為翻書都翻不到 也找不到人可以詢問 感謝有前輩可以解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.138.153.12

05/20 14:32, , 1F
你可以跑這段程式看看 q=[1 2 3]; q=q(2)
05/20 14:32, 1F

05/20 14:32, , 2F
就是 原本q是當矩陣 q(1)=1 q(2)=2 q(3)=3
05/20 14:32, 2F

05/20 14:33, , 3F
他現在轉換q的型態 從矩陣變成單一變數值 q=2
05/20 14:33, 3F

05/20 14:34, , 4F
原程式的寫法這樣寫不太好 建議還是重設一個變數 以免搞混
05/20 14:34, 4F

05/22 08:10, , 5F
感謝您的解說
05/22 08:10, 5F
文章代碼(AID): #1BzCkla8 (MATLAB)
文章代碼(AID): #1BzCkla8 (MATLAB)