作者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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1522556216.A.966.html
1F:推 profyang: 看不太懂你想做什麽 你的原数列不管是什麽出来的数列不 04/01 14:56
2F:→ profyang: 都是一样的1010这样的数列吗?那还排什麽? 04/01 14:56
3F:推 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
4F:→ mibmibx: 目前我想到的是在ii=1000时补上新的数字,这样就可以正常 04/01 20:56
5F:→ mibmibx: 执行,不过还是想知道有没有方法可以不用补的 04/01 20:57
6F:推 sunev: for ii=1:999 04/02 12:43
7F:→ sunev: if 那里可改成 mode_org(ii+1) = 1-mode_org(ii) 04/02 12:43
8F:→ sunev: 这样就不用判断mode_org(ii)是1还是0 04/02 12:44
9F:→ mibmibx: 感谢指点 04/02 23:00