《2022年数学建模实例可用》由会员分享,可在线阅读,更多相关《2022年数学建模实例可用(8页珍藏版)》请在金锄头文库上搜索。
1、数学建模动物繁殖问题摘要: 对题给问题给出了数学解决方法,并通过程序验证算法的正确性。关键词: 数学建模,动物繁殖,算法Abstract: Put forward a solution to the problem given, and verify the algorithm by programming. Key word: mathematics modeling, animal propagation, algorithm一、模型假设:为简化算法, 减少计算复杂度, 在不损失太大正确性的情况下对该问题作如下前提假设:假设一:动物年龄的初始分布是均匀的,即最开始每个年龄的动物分别为200
2、 头。故而,每个年龄组每年最大年龄的动物(5 岁, 10 岁,或 15 岁)以一定存活率成长入下一组或者死亡,而每组中年龄非最大的动物依次成长,不会死亡。说明:1.虽然各年龄均匀分布并不符合自然界的客观条件,但作为这一问题的初始条件,依然是可行的。随着计算过程不断迭代,其计算结果必将逐渐收敛于正确结果。所不同的是,不同初始条件所需收敛时间不同。2.在这里假设动物在5 岁、 10 岁和 15 岁时才发生死亡现象,而其他年龄不发生死亡现象,也是不符合自然界客观现实的。但这一假设却符合本题要求,而且,对简化计算有很大益处。假设二:动物存活率不影响其繁殖数目。即:先繁殖,后死亡对第二组动物而言,在每只
3、动物繁殖4 头后代之前,不会死亡。在4 头后代全部繁殖完成以后,再以1/4 的存活率进入第三组。说明:虽然这一假设并不符合自然界客观现实,而是为了简化解题而作的理想化假设。但损失极小计算准确性却换来计算的极大简便,这也是值得的。而且,题中说明“每头动物能繁殖多少头后代”本身也是一种理想化的估算。假设三:对第二、三组动物而言,分别在最大年龄(10 岁和 15 岁繁殖后代) ,其他年龄不繁殖后代。说明:虽然这一假设并不符合自然界客观现实,而是为了简化解题而作的理想化假设。但理论证明,假设每个动物在固定年龄具有概率“1”繁殖和假设它们在每个年龄具有均等概率“1/5”繁殖所得出的计算结果是一致的。名师
4、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 二、模型建立:(一)由假设一和假设三,得出算法一:模型建立以每1 年为一个时间段。对第一组动物,按照年龄从小到大,设动物数目分别为:X11、 X12、X13 、X14、X15。同理,第二组,第三组,动物数目分别为:X21、X22、X23、X24、X25、X31、X32、X33、X34、X35。则动物成长与死亡的流程图如下:X11 X12 X13 X14 X15 X21 X22 X23
5、X24 X25 X31 X32 X33 X34 X35 说明: (1)从 X11 到 X15,从 X21 到 X25,从 X31 到 X35 都是动物无死亡的成长,动物数目保持不变,只是年龄递增。(2)X15 中有 1/2 的动物存活,共计1/2*X15 头,进入 X21 中;X25 中有 1/4 的动物存活,共计1/4*X25 头,进入X31 中。(3)在 X25 和 X35 的动物成长或者死亡之前,分别以1:4 和 1:3 的比例繁殖后代,共计4*X25+3*X35头,进入X11 中。依据假设一,在本算法中初始状态为:200353433323120025242322212001514131
6、211XXXXXXXXXXXXXXX(二)由假设二和假设三得出算法二:模型建立以每5 年为一个时间段,分别考虑每组的输入和输出情况。(注意事件顺序不可颠倒)设第一组、第二组、第三组动物数目分别用X1、X2、X3 来表示。最初状态:100031000210001XXX1头产 3 头1头产 4 头1/2 存活率1/4 存活率名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 第一组动物输入和输出情况分别为:输出: 5 年后,第一组本身的
7、X1 头动物中有21X1 头成长入第二组,其余死亡。输入: 5 年中,第二组繁殖4*X2 头动物进入第一组,第三组繁殖3*X3 头动物进入第一组,但这些新生动物还未来得及成长入第二组。如下图:第二组动物输入和输出情况分别为:输出: 5 年中,第二组本身的X2 头动物繁殖4*X2 头进入第一组。5 年后,第二组本身的X2 头动物中有41X2 头成长入第三组,其余死亡。输入: 5 年后,第一组原有的X1 头动物中有21X1 头成长入第二组。如下图:第三组动物输入和输出情况分别为:输出: 5 年中,第三组本身的X3 头动物繁殖3*X3 头进入第一组。5 年后,第三组本身的X3 头动物全部衰老死亡。输
8、入: 5 年后,第二组原有的X2 头动物中有41X2 头成长入第三组。第一组(初始 X1=1000 )21X1 头成长进入第二组第二组繁殖4*X2 头进入第一组第三组繁殖3*X3 头进入第一组第二组(初始 X2=0 )41X2 成长进入第二组第一组21X1 头成长进入第二组繁殖 4*X2 头进入第一组名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 如下图:综上所述,得出如下模型:这个模型的一个循环过程(即计算过程)是这样的:第一
9、步: X1 中有 1/2,共计 1/2*X1 头,存活进入X2 中(但并不参与繁殖) ,其余死亡;第二步: X2 中原有的、可繁殖的每头动物产生4 个后代,共计4*X2 头,进入X1 中;第三步: X2 中有 1/4,共计 1/4*X2 头,存活进入X3 中,其余死亡;第四步: X3 中每头动物产生3 个后代,共计3*X3 头,进入X1 中;第五步: X3 原由的(不计入X2 成长来的)动物全部死亡。依此步骤循环进行三次,便可得到15 年后各年龄组中动物的数目。值得注意的是: (1)上述计算步骤要按顺序计算,否则就可能出现一些数据没有被计算,而另一些数据被重复多次计算的错误。(2)每一步中,
10、X1、X2 和 X3 都有可能发生改变,而不是一成不变。在计算中要及时使用更新的数值,而不能使用未经更新的数值。三、数学推导:依据上述模型,现在对本题结果进行数学推导:(一)依据模型一:将初始状态代入上述流程图中进行计算(由于篇幅冗长,在此省略计算的中间步骤) ,得出最终结果为:第二组X2 = X2 +21X1 第一组X1 = X1 + 4 * X2 + 3 * X3 第三组X3 = X3 + 41X2 4*X2 3*X3 第二组41X2 头成长进入第三组X3 头全部死亡繁殖 3*X3 头进入第一组第二组(初始 X2=0 )名师资料总结 - - -精品资料欢迎下载 - - - - - - -
11、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 第一组动物数目= X11 + X12 + X13 + X14 + X15 = 14375 第二组动物数目= X21 + X22 + X23 + X24 + X25 = 1375 第三组动物数目= X31 + X32 + X33 + X34 + X35 = 875(二)依据模型二 ,将题给 15 年分为 3 个时段, 现在依照事件发生顺序依次推导,计算结果如下:第一组初始值: 1000第二组初始值: 1000 第三组初始值: 1000第一时段1000
12、1000 = 01000 + 1/2 * 100010000 + 4 * 1000 = 40001000 + 500(不繁殖)1000 4000500(不繁殖)1000 + 1/4 * 1000 4000 + 3 * 1000 = 7000500 1000 + 250(不繁殖)7000 500250 第二时段7000 7000 = 0 500 + 1/2 * 7000250 0 + 4 * 500 = 2000500 + 3500(不繁殖)250 2000 3500 250 + 1/4 * 500 2000 + 3 * 250 = 27503500 250 + 125(不繁殖)2750 350
13、0 125 第三时段2750 2750 = 03500 + 1/2 * 2750 125 0 + 4 * 3500 = 140003500 + 1375(不繁殖)125 14000 1375 125 + 1/4 * 3500 14000 + 3 * 125 = 143751375 125 + 875(不繁殖)14375 1375 875 四、程序验证:下面分别对两种算法(两种模型)进行编程验证。其中,第一种模型计算的时间单元为1 年,第二种模型计算的时间单元为5 年( 1)模型一:#include #include main() int X11 = 200; int X12 = 200; 名师
14、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - int X13 = 200; int X14 = 200; int X15 = 200; int X21 = 200; int X22 = 200; int X23 = 200; int X24 = 200; int X25 = 200; int X31 = 200; int X32 = 200; int X33 = 200; int X34 = 200; int X35 = 200;
15、 int child; int i; for(i = 0; i 15; i +) child = (int) (4 * X25 + 3 * X35); X35 = X34; X34 = X33; X33 = X32; X32 = X31; X31 = (int) (1f/4 * X25); X25 = X24; X24 = X23; X23 = X22; X22 = X21; X21 = (int) (1f/2 * X15); X15 = X14; X14 = X13; X13 = X12; X12 = X11; X11 = child; child = 0; 名师资料总结 - - -精品资料
16、欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - printf(The number of the 1st group is: %dn, X11 + X12 + X13 + X14 + X15); printf(The number of the 2nd group is: %dn, X21 + X22 + X23 + X24 + X25); printf(The number of the 3rd group is: %dn, X31 + X32 + X33
17、+ X34 + X35); 上述源程序在Turbo C 2.0 中编译通过。结果显示:The number of the 1st group is: 14375The number of the 2nd group is: 1375The number of the 3rd group is: 875( 2)模型二:#include #include main() int X1 = 1000; int X2 = 1000; int X3 = 1000; int child; int i; for(i = 0; i 3; i +) child = 4 * X2 + 3 * X3 ; X3 = (
18、int) (1.0/4 * X2); X2 = (int) (1.0/2 * X1); X1 = child; child = 0; printf(The number of the 1st group is: %dn, X1); printf(The number of the 2nd group is: %dn, X2); printf(The number of the 3rd group is: %dn, X3); 上述源程序在Turbo C 2.0 中编译通过。结果显示:The number of the 1st group is: 14375The number of the 2n
19、d group is: 1375The number of the 3rd group is: 875名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 五、结果分析:两种计算结果都与数学推导相符合,从不同角度证明了算法的正确性。同时, 也证明了前提假设的正确性。在正式建立模型之前,为了思路更清晰,计算量更小, 曾作出了三个假设。当然, 这些假设的前提是不丧失计算的正确性。从计算结果看来,这些假设是成立的,是在保证计算正确性的前提下大大简化了计算。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -