但是这种方法还没有考虑以下条件:clc
clear
i=1;
file=importdata('FTICR1.txt');
C=12.0107;H=1.00794;O=15.9994;N=14.0067;P=30.973762;S=32.065;
fid=fopen('FT1.txt', 'w');
for i=1:length(file)
minfun=abs(C*5+H*5-file(i)-H);
for x1=5:50
for x2=5:100
for x3=0:30
for x4=0:8
for x5=0:2
for x6=0:2
fun=abs(C*x1+H*x2+O*x3+N*x4+P*x5+S*x6-file(i)-H);
if fun<minfun
minfun=fun;
a=x1;
b=x2;
c=x3;
d=x4;
e=x5;
f=x6;
end
end
end
end
end
end
end
fprintf(fid,'C%dH%dO%dN%dP%dS%d\n',a,b,c,d,e,f);%或者final=[a,b,c,d,e,f,minfun]
i=i+1;
end
fclose(fid);
![matlab 分子式 - Mr.Cat - Mr.Cats blog](http://img0.ph.126.net/PHC-tqYHEe5RCEcvdydzkg==/6632618077094281596.png)
rem()用于求余数,mod()用于模求余数clc
clear
i=1;
file=importdata('4796.txt');
C=12.0107;H=1.00794;O=15.9994;N=14.0067;P=30.973762;S=32.065;
fid=fopen('4796test1.txt', 'w');#打开(没有则新建)名为4796test1.txt的文件
for i=1:length(file)
minfun=abs(C*5+H*5-file(i)-H);
for x1=5:50
for x2=5:100
for x3=0:30
for x4=0:8
for x5=0:2
for x6=0:2
if(x1-3*x2<=0)&&(-2*x1+x2-x4<=2)&&((-x1+x4<=0)||(-x1+x3)<=0)&&(rem((x2+x4),2)==0)
fun=abs(C*x1+H*x2+O*x3+N*x4+P*x5+S*x6-file(i)-H);
if fun<minfun
minfun=fun;
a=x1;
b=x2;
c=x3;
d=x4;
e=x5;
f=x6;
end
end
end
end
end
end
end
end
fprintf(fid,'%d\t%d\t%d\t%d\t%d\t%d\t%d\n',a,b,c,d,e,f,minfun);%fpintf(fid,'C%dH%dO%dN%dP%dS%d\n',a,b,c,d,e,f)以分子式形式输出
i=i+1;
end
fclose(fid);