我试图用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