作者mibmibx (Lin)
看板MATLAB
標題[討論] 數列排序與比較問題
時間Sun Apr 1 12:16:53 2018
各位前輩好,我是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
推 profyang: 看不太懂你想做什麼 你的原數列不管是什麼出來的數列不 04/01 14:56
→ profyang: 都是一樣的1010這樣的數列嗎?那還排什麼? 04/01 14:56
推 LiamIssac: ii只需要到999 04/01 15:00
不好意思沒寫清楚,我更新了上面程式碼的部分
我想做的事情是把「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
→ mibmibx: 目前我想到的是在ii=1000時補上新的數字,這樣就可以正常 04/01 20:56
→ mibmibx: 執行,不過還是想知道有沒有方法可以不用補的 04/01 20:57
推 sunev: for ii=1:999 04/02 12:43
→ sunev: if 那裡可改成 mode_org(ii+1) = 1-mode_org(ii) 04/02 12:43
→ sunev: 這樣就不用判斷mode_org(ii)是1還是0 04/02 12:44
→ mibmibx: 感謝指點 04/02 23:00