[討論] 數列排序與比較問題

看板MATLAB作者 (Lin)時間6年前 (2018/04/01 12:16), 6年前編輯推噓3(306)
留言9則, 4人參與, 6年前最新討論串1/1
各位前輩好,我是matlab的初學者 假設現在有一個長度為1000的數列由1和0組成「100101101100011.....」 我想要把這個數列整理成「101010101010101010.....」 目前我嘗試的方法是將數列a(ii+1)和a(ii)比較 若a(ii+1) == a(ii)且a(ii) = 1時,a(ii+1) = 0 a(ii) = 0時,a(ii+1) = 1 若a(ii+1)不等於a(ii),則數值不變 比較的方法,我是以一個for迴圈來判斷數值前後的差別 我的寫法如下 ------------------------------- function mode_org = SO(temp) filename = ['mode_' num2str(temp) '_K.txt']; filepath = sprintf(filename); fidw = fopen(filepath, 'w+'); filename2 = ['mode_' num2str(temp+1) '_K.txt']; if temp == 205 mode_org = textread('random_org.txt','%f'); elseif temp < 205 mode_org = textread(filename2, '%f'); end A = rand(1); Prob_T = tanh(1.4*sqrt((205/temp)-1)); mode_org(1) = 1; for ii = 1:1000 if mode_org(ii+1) == mode_org(ii) %------------------------------------------ if A <= Prob_T && mode_org(ii) == 1; mode_org(ii+1) = 0; elseif A <= Prob_T && mode_org(ii) ==0; mode_org(ii+1) = 1; end %------------------------------------------ else mode_org(ii+1) = mode_org(ii+1); end fprintf(fidw, '%.6f\r\n', mode_org(ii)); end fclose(fidw); end ------------------------------- 這邊讀取的txt檔是一個由1和0構成的隨機數列(共1000個數字) 這個寫法執行後會出現錯誤訊息 index out of bounds because numel(a)=1000 我想應該是在ii = 1000時,找不到a(1001)所以無法執行 除了刻意把讀入的txt檔多加個一數值外,目前我還想不到解法... 不過因為計算需要,不可以多加入一個數值給a數列 想請教該如何解決這個問題 感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 130.126.255.51 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1522556216.A.966.html

04/01 14:56, 6年前 , 1F
看不太懂你想做什麼 你的原數列不管是什麼出來的數列不
04/01 14:56, 1F

04/01 14:56, 6年前 , 2F
都是一樣的1010這樣的數列嗎?那還排什麼?
04/01 14:56, 2F

04/01 15:00, 6年前 , 3F
ii只需要到999
04/01 15:00, 3F
不好意思沒寫清楚,我更新了上面程式碼的部分 我想做的事情是把「100101010...」這個隨機的數列逐漸變成「1010101010....」 控制的方法是用一個隨temp變化的函數Prob_T 然後將「100101010...」這個數列隨著temp逐漸變小最終趨向「1010101010....」 我的作法是把最開始的數列的a(ii+1)和a(ii)比較,若a(ii+1)跟a(ii)不同則變化 然後輸出成一個新的txt檔,再重新對著個txt檔做一樣的事,輸出下一個檔案 ii設999僅能執行一次,後面的檔案似乎需要一次減少一個數值才能繼續 不曉得該如何解決 感謝前輩幫忙解惑 ※ 編輯: mibmibx (130.126.255.51), 04/01/2018 20:30:47

04/01 20:56, 6年前 , 4F
目前我想到的是在ii=1000時補上新的數字,這樣就可以正常
04/01 20:56, 4F

04/01 20:57, 6年前 , 5F
執行,不過還是想知道有沒有方法可以不用補的
04/01 20:57, 5F

04/02 12:43, 6年前 , 6F
for ii=1:999
04/02 12:43, 6F

04/02 12:43, 6年前 , 7F
if 那裡可改成 mode_org(ii+1) = 1-mode_org(ii)
04/02 12:43, 7F

04/02 12:44, 6年前 , 8F
這樣就不用判斷mode_org(ii)是1還是0
04/02 12:44, 8F

04/02 23:00, 6年前 , 9F
感謝指點
04/02 23:00, 9F
文章代碼(AID): #1Qm5qubc (MATLAB)