我試圖用0-46氫,0-20碳,0-13氧等方法對所有可能的分子進行索引。我有7個我感興趣的原子:H ,C,O,N,氯,氟和S.我寫了下面的for循環來展示我想實現:Matlab:通過置換構建分子庫
MassListIndex = []
%MassIndex = [h,c,o,n,cl,f,s]
for h = 0:46;
for c = 0:20;
for o = 0:13;
for n = 0:15;
for cl=0:5;
for f=0:5;
for s=0:5;
MassListIndex = [MassListIndex;[h,c,o,n,cl,f,s]];
end;
end;
end;
end;
end;
end;
end;
這令我非常低效;我不想等待2個月左右的時間。我已經嘗試過使用combinator.m腳本,但問題是隻有一個輸入集合的長度是'置換',即如果我想擁有多達46個氫,我還需要每個都有46個其他6個原子。這在計算上很重(46^7 = = 436億)。
有什麼辦法可以使這種計算更有效嗎?或者,我需要更多地考慮騎它的「廢話排列」縮水我的名單(據我所知,分子H40C2從未被觀察到的!)
感謝
你在找經驗公式嗎?因爲結構公式會變得更復雜 – 2014-10-06 21:53:25
如果你有足夠的RAM,定義'vectors = {0:46 0:20 0:13 0:15 0:20 0:20 0:13 0:15};'並應用[this] (http://stackoverflow.com/q/21895335/2586922)。或者爲了節省RAM,可以嘗試使用uint8數據類型:uint8 :5)uint8(0:5)}'。後者在我的計算機上只需要5秒鐘,併產生所需的47755008x7結果 – 2014-10-06 22:02:05
只有經驗公式對於質量很重要,所以如果你把你的47755008x7矩陣和'bsxfun'與來自[IUPAC]的原子質量值(http: //www.degruyter.com/view/j/pac.2013.85.issue-5/pac-rep-13-03-02/pac-rep-13-03-02.xml),你有自己的答案。 「無意義排列」的算法[作爲OP的練習](http://www.xkcd.com/1425/)。 – craigim 2014-10-06 23:21:03