收藏 分享(赏)

基于优化递归算法的分子量分解问题.doc

上传人:精品资料 文档编号:9516540 上传时间:2019-08-12 格式:DOC 页数:16 大小:402.18KB
下载 相关 举报
基于优化递归算法的分子量分解问题.doc_第1页
第1页 / 共16页
基于优化递归算法的分子量分解问题.doc_第2页
第2页 / 共16页
基于优化递归算法的分子量分解问题.doc_第3页
第3页 / 共16页
基于优化递归算法的分子量分解问题.doc_第4页
第4页 / 共16页
基于优化递归算法的分子量分解问题.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、基于优化递归算法的分子量分解问题摘要:本文讨论的问题是:在实验室拥有或不拥有计算机的情况下,如何将已知分子量 x的蛋白质分解成 18 种已知分子量的氨基酸的问题,并满足蛋白质含氮量在 15%17%的物理性质。在实验室有计算机的情况下,本文首先考虑了穷举算法,该问题就等效为十八元一次方程求整数解的问题,表示为 18)(*i xirota每种氨基酸构成蛋白质数量 root(i)的上限为 +1,取 x 最大为 1000 时,有)(i种,运算量过大难以实现。160*854.2我们又考虑了递归算法,即从分子量最大的第 18 种氨基酸开始考虑,第 18 种氨基酸分子构成蛋白质的个数 ,对 root 进行分

2、类取值,在取值已知的)18(,0)(axrot情况下再考虑第 17 种氨基酸,此时分子量减去第 18 种氨基酸总分子质量,得到新的分子量,将大大减少计算量。抽象归纳为 的取值范围如下:)(irot )17,.2()(*)(018iiakxirotik该算法同样满足含氮量的约束条件。我们借助 C 语言编写程序并对程序进行优化,大大加快了运行速度。在实验室无计算机的情况下,由氨基酸的结构通式得出,每个氨基酸都存在结构,分子量为 56。本文将 18 种氨基酸的分子量都减去 56,得到 18 种COHN氨基酸 R 基的分子量。先将任一分子量除以 56 取整,得到构成该蛋白质的氨基酸数目的范围(即 ),

3、再根据 b 的取值进行分类讨论从而选择 R 基,后根据蛋白561xb质含氮量对结果进行验证,在人工的情况下,此方法相对于递归法大大地减少了计算量。关键词:分子量分解问题 递归优化法 含氮量 C 语言 结构通式1、问题重述生命蛋白质是由若干种氨基酸经不同的方式组合而成。在实验中,为了分析某个生命蛋白质的分子组成,通常用质谱实验测定其分子量 x (正整数),然后将分子量 x 分解为 n 个已知分子量 ai(i=1,.,n)氨基酸的和的形式。某实验室所研究的问题中:n=18, x 1000,ai(i=1,.,18) 分别为 57, 71, 87, 97, 99, 101, 103, 113, 114

4、, 115, 128, 129, 131, 137, 147, 156, 163, 186。要求针对该实验室拥有或不拥有计算机的情况,对如何分解分子量 x 作出解答,即针对任意一个分子量 x 具体给出由哪些 ai(i=1,.,n)氨基酸组成。 2、问题分析题目中给出 18 种氨基酸分子量,要求解出已知分子量的蛋白质由哪几种氨基酸组成。初步分析,这是十八元一次方程求整数解的问题,方程形式为 18)(*i xiba其中 为已知量, 为 18 种氨基酸分子量,未知数 为组x),.2)(ia )18,.2)(ib成蛋白质的每种氨基酸的个数。3、模型假设(1)假设氨基酸组合形成蛋白质时不脱水。(2)假设

5、蛋白质中肽键不存在多键或成环情况,两个氨基酸之间只形成一条肽键。(3)假设每种氨基酸出现的概率都相同。4、符号设定 第 种氨基酸的分子量;)(iai 第 种氨基酸的数量;rot 第 种氨基酸分子中氮原子的个数;)(_inumberNi 蛋白质分子量;x 第 种氨基酸 基的分子量;)(iriR 蛋白质中所含氨基酸的总数;b5、模型建立与求解5.1 实验室有计算机时的模型建立5.1.1 穷举法模型我们首先考虑用穷举算法求解方程,根据上文符号设定,该方程可以表示为 18)(*i xirota其中 且 为整数。利用穷举法,对每个 分别取 ,)(,0)(iaxirot)(rot )(irot01, ,找

6、出符合上述方程的每个 的取值,所得的每组解的集合即为最i )(irot终解。穷举算法利用 MATLAB 实现,程序代码见附录一。用上述算法,我们发现,如果 的取值太大,MATLAB 警告“busy ”,程序无法x运行。假如 ,求出每一个 的最大值,如表一所示:10x)(irot表一 最大值i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18a(i) 57 71 87 97 99 101 103 113 114 115 128 129 131 137 147 156 163 186root(i) 17 14 11 10 10 9 9 8 8 8 7 7 7

7、 7 6 6 6 5运算次数为 次, MATLAB 无法进行如此大数量级的运算,导致可求解160*854.2的 具有很大的局限性。所以我们建立下文中的新模型,从而减少运算次数,提高运x算速度,增强运算可行性。5.1.2 递归法模型为减少冗余次数,我们设计思路如下:从分子量最大的氨基酸开始考虑,初步确定第 18 种氨基酸分子个数后,对剩下 17 种氨基酸的确定,则不需要再用 作为衡量x标准,而可以将蛋白质中所含第 18 种氨基酸总分子质量减掉后,得到新的分子量,则剩下的 17 种氨基酸可以用新的分子量来确定。按照此思路分析, 的新取值范围)(irot如下: )17,.2()()*)(018iia

8、krotxirotik利用这种模型,可以有效减少运算次数,使程序可以顺利运行。5.1.3 结果筛选我们考虑通过查阅资料了解到测定蛋白质的常用指标是含氮量,一般蛋白质的含氮量在 15%17%左右 。所以我们设定限制条件1 %17*)(_*4%518xinumberNxi 利用此条件,可以把不符合蛋白质基本性质的结果筛选出去,剩下的解即为该问题的最终结果。根据题目中给出的 18 种氨基酸的分子量,我们可以查找出题目中 18 种氨基酸的种类、分子式,从而得到每种氨基酸分子中氮原子个数 ,如表二所示)(_inumberN(题目中按照氨基酸两端成键给出分子量,故在写分子式时也考虑为两端成键):表二 18

9、 种氨基酸信息一览表分子量 名称 分子式分子中含氮原子个数氨基酸含 N 量57 甘氨酸 ONHC321 0.2471 丙氨酸 51 0.1987 丝氨酸 231 0.1697 脯氨酸 751 0.1499 缬氨酸 ONHC91 0.14101 苏氨酸 2741 0.14103 半胱氨酸 S531 0.14113 亮氨酸/异亮氨酸 161 0.12114 天冬酰胺 24NOHC2 0.24115 天冬氨酸 351 0.12128 谷酰胺/赖氨酸 282 0.22129 谷氨酸 162 0.22131 蛋氨酸 NOHC3751 0.11137 组氨酸 S91 0.10147 苯丙氨酸 3763 0

10、.29156 精氨酸 91 0.09163 酪氨酸 4126ONHC4 0.34186 色氨酸 91 0.08根据 5.1.2 中的递归模型以及 5.1.3 中的筛选条件,我们利用 C 语言编程实现,程序代码见附录二。当 时,用此程序计算结果如表三所示:261x表三 当 时利用递归法求解结果261xi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18a(i) 57 71 87 97 99 101 103 113 114 115 128 129 131 137 147 156 163 186root1 1 0 0 0 0 1 1 0 0 0 0 0 0 0

11、 0 0 0 0root2 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0root3 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 05.1.4 优化递归算法在附录二的程序中,我们调用了递归函数求解,而层层调用递归函数往往会使预算速度变慢,不利于该方法的实际应用价值的发挥。所以,我们对程序进行优化,不再调用递归函数,而取一个数列 ,将上次运算后的结果储存在 的每一个格子temptemp中,这样可以避免多次调用递归函数导致的冗余运算,并将结果以 格式输出,不再x结果框中显示结果,从而大大加快程序运行速度,优化后程序见附录 3。当 时,10优化前运算时

12、间为 ,优化后运算时间不到 。s08.3s1.05.2 实验室无计算机时的模型建立氨基酸结构通式为 (两端成键, 为任意元素或基),不难得COHRNR出,每种氨基酸都存在基本结构 ,该基本结构分子量为 56,故可以得到 18 种氨基酸 基分子量。先将任一分子量除以 56 取整,得到构成该蛋白质的氨R基酸数目的范围(即 ),再根据 b 的取值进行分类讨论从而选择 R 基,后561xb根据蛋白质含氮量对结果进行验证, 基分子量如表四所示:R表四 18 种氨基酸 基分子量i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18a(i) 57 71 87 97 99

13、 101 103 113 114 115 128 129 131 137 147 156 163 186r(i) 1 15 31 41 43 45 47 57 58 59 72 73 75 81 91 100 107 130仍以 x=261 为例,因为 ,所以下面分 4 种情况进行分类讨论:45621(1)b=1 ,表示蛋白质由一个氨基酸构成,存在一个 R 基等于 261-56=205,=130,故该情况不成立。maxr(2)b=2 ,表示蛋白质由两个氨基酸构成,存在两个 R 基之和等于 261-56*2=149,58+91=149,即 261=114+147,含 N 量为 26%,不符合要求

14、。故该情况也不成立。(3)b=3, 表示蛋白质由三个氨基酸构成,存在三个 R 基之和等于 261-56*3=93:93 1 45 4793 15 31 4793 31 31 3193 1 1 91当 261=57+57+147 时,含氮量为 27%,此情况舍去。故存在三种情况:261 57 101 103261 71 87 103261 87 87 87(4)b=4 ,表示蛋白质由四个氨基酸构成,存在四个 R 基之和等于 261-56*4=37,不存在任一情况使之成立。6、模型分析在实验室有计算机的情况下,本文结合化学基本知识,采用递归算法,并用 C 语言编程。与此同时,我们对 C 语言程序进

15、行了优化,使得速度大大提升,方便用于实际计算与测量中。在实验室无计算机的情况下,本文找出了氨基酸的结构通式,明确了氨基酸基本结构,将问题从氨基酸组合转化为 基组合,使计算量大大减小。但当 x 较大时,人R工方法难以避免较大的计算量。7、模型推广在实际计算与测量中,蛋白质的物理性质和化学性质是不容忽视的。本文中只利用蛋白质含氮量这一个条件对结果进行筛选,但得出的结果未必全部满足蛋白质的其他性质,故在实际生产生活中,如想要准确测定某种蛋白质的组成,还需要借助其他专业仪器,从多方面着手。8、结论在实验室有计算机的情况下,本文建立递归算法模型,根据蛋白质含氮量在15%17%的物理性质,对所得结果进行筛

16、选。并利用 C 语言编程,优化了程序,形成“优化递归算法”,大大加快运行速度。在实验室无计算机的情况下,每个氨基酸都存在结构 ,分子量OHN为 56。所以本文得到 18 种氨基酸 R 基的分子量,再根据已知量 x,按照所含氨基酸个数进行分类讨论。此方法相对于递归法,大大地减少了计算量,方便在无计算机的情况下解出最终结果。9、参考文献1Mark M.Meerscharert, 数学建模方法与分析 ,北京:机械工业出版社,2005。附录 1:MATLAB 程序(穷举法)S=zeros(1,18);for a=0:fix(x/57)for b=0:fix(x/71)for c=0:fix(x/87)

17、for d=0:fix(x/97)for e=0:fix(x/99)for f=0:fix(x/101)for g=0:fix(x/103)for h=0:fix(x/113)for i=0:fix(x/114)for j=0:fix(x/115)for k=0:fix(x/128)for l=0:fix(x/129)for m=0:fix(x/131)for n=0:fix(x/137)for o=0:fix(x/147)for p=0:fix(x/156)for q=0:fix(x/163)for r=0:fix(x/186)if 57*a+71*b+87*c+97*d+99*e+101*

18、f+103*g+113*h+114*i+115*j+128*k+129*l+131*m+137*n+147*o+156*p+163*q+186*r=xS=S;a b c d e f g h i j k l m n o p q r;endendendendendendendendendendendendendendendendendendendS附录 2:C 程序(递归法)#include #include #include using namespace std;/global setting int weight18=57, 71, 87, 97, 99, 101, 103, 113, 11

19、4, 115, 128, 129, 131, 137, 147, 156, 163, 186; int root18=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; int N_number18=1,1,1,1,1,1,1,1,2,1,2,2,1,1,3,1,4,1;int K=0;double root_number=0;double root_number2=0;ofstream fout(“E:/TestDir/cfiletest.txt“);void Digui(int n,int x)int branch_number = x/weightn;/printf

20、(“%d“,branch_number);if(x= 0;i-)rootn = i;if( x-i*weight0 = 0)double N_content=0;int k=0;for(k=0;kK*0.15 i-)rootn = i;/printf(“x: %dn“,x-i*weightn);/printf(“n-1:%dn“,n-1);Digui(n-1,x-i*weightn);return; int main()int x;printf(“Please input K:“);scanf(“%d“,x=K;int i=0;printf(“weight:“);for(i=0;i/globa

21、l setting int weight18=57, 71, 87, 97, 99, 101, 103, 113, 114, 115, 128, 129, 131, 137, 147, 156, 163, 186; int root18=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; int x=0;double root_number=0;int temp18;int main()printf(“Please input x:“);scanf(“%d“,int i;int j18;for(j17=x/weight17;j17=0;j17-)temp17=x-weig

22、ht17*j17;for(j16=temp17/weight16;j16=0;j16-)temp16=temp17-weight16*j16;for(j15=temp16/weight15;j15=0;j15-)temp15=temp16-weight15*j15;for(j14=temp15/weight14;j14=0;j14-)temp14=temp15-weight14*j14;for(j13=temp14/weight13;j13=0;j13-)temp13=temp14-weight13*j13;for(j12=temp13/weight12;j12=0;j12-)temp12=t

23、emp13-weight12*j12;for(j11=temp12/weight11;j11=0;j11-)temp11=temp12-weight11*j11;for(j10=temp11/weight10;j10=0;j10-)temp10=temp11-weight10*j10;for(j9=temp10/weight9;j9=0;j9-)temp9=temp10-weight9*j9;for(j8=temp9/weight8;j8=0;j8-)temp8=temp9-weight8*j8;for(j7=temp8/weight7;j7=0;j7-)temp7=temp8-weight7

24、*j7;for(j6=temp7/weight6;j6=0;j6-)temp6=temp7-weight6*j6;for(j5=temp6/weight5;j5=0;j5-)temp5=temp6-weight5*j5;for(j4=temp5/weight4;j4=0;j4-)temp4=temp5-weight4*j4;for(j3=temp4/weight3;j3=0;j3-)temp3=temp4-weight3*j3;for(j2=temp3/weight2;j2=0;j2-)temp2=temp3-weight2*j2;for(j1=temp2/weight1;j1=0;j1-)temp1=temp2-weight1*j1;for(j0=temp1/weight0;j0=0;j0-)if(temp1-weight0*j0=0)root_number+;printf(“%fn“,root_number);return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报