数学建模-用数学方法翻模拟硬币(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用数学方法模拟翻硬币

问题背景:一摞硬币共m枚,每枚硬币均正面朝上,取最上面的1枚,将它翻面后放回原处,然后取最上面的2枚硬币,将它们一起翻面后再放回原处。再取3枚,4枚,…,直至整摞硬币都按上述方法处理过。接下来再从这摞硬币最上面的1枚开始,重复刚才的做法。这样一直做下去,直至这摞硬币中的每一个又都是正面朝上为止。问这种情形是否一定出现?如果出现,则一共需做多少次翻面?

问题分析:很明显,当完成这样的一组翻面后,只须每枚硬币的累计翻面次数为偶数,就可以使这一摞硬币中每一枚都是正面朝上。每当完成这样一组翻面时,翻面之前硬币的顺序被打乱,如果从一开始就将硬币从上至下依次标号为1,2,3,…,m,对硬币顺序的调整和一组翻面完成后对应标号硬币的翻面次数进行跟踪,那么就可以实现判断何时能出现这摞硬币中的每一个又都是正面朝上。

问题简化和假设:首先对这摞硬币从上至下依次标号为1,2,3,…,m,就构成一个行向量a=[1,2,3,…,m],题中翻面所引起的硬币顺序的调整可以简化为对这个列向量右乘一系列m阶初等矩阵(这里用到的初等矩阵均为交换m阶单位阵的某两行得到的),例如:当m=5时:

取1枚硬币翻面,顺序未变化;

取2枚硬币翻面,标号1和标号2的硬币顺序交换,则:对向量a右乘E12;

取3枚硬币翻面,标号1和标号3的硬币顺序交换,则:继续右乘E13;

取4枚硬币翻面,标号1和标号2的硬币顺序交换,则:继续右乘E14,E23;

取5枚硬币翻面,标号1和标号2的硬币顺序交换,则:继续右乘E15,E24;

故,最终得到的硬币顺序对应的行向量为:a*E12*E13*E14*E23*E15*E24

建立模型:当对一摞m个硬币进行一组翻面操作后,可以用归纳法得到:

从上至下,第i个硬币的翻面次数为m+1-i;

例如:第1个硬币共翻面m次;第2个硬币翻面m-1次;第m个硬币翻面1次;

换言之,在一组翻面中,翻面次数只与硬币的位置有关,那么就可以通过次数统计向量行向量sum与标号向量a做相同的变换,即右乘一系列初等矩阵,来实现向量sum和a的分量的一一对应,即标号为a(i)的硬币的累计翻面次数为:

sum(i)=sum(i)+(m+1-i)

硬币顺序的变换就用右乘一系列初等矩阵的方法,在编写计算机程序时通过循环和限定条件来实现。

Matlab编程:

编写函数check_1,计算m枚硬币全部正面朝上需要进行多少组翻面

function l=check_1(m)

for i=1:m

%对行向量a进行最初的赋值

a(i)=i;

%易知一定会进行一组翻面,计算对应标号的硬币的翻面次数 sum(i)=m+1-i;

end

for l=1:100

for j=1:m

for i=1:j

%构造所需的m阶初等矩阵

E=eye(m);

%判断所需要哪些初等矩阵,并由E交换对应行得到

if i

E(i,j+1-i)=E(j+1-i,j+1-i);

E(j+1-i,i)=E(i,i);

E(j+1-i,j+1-i)=0;

E(i,i)=0;

%将初等矩阵依次右乘行向量a

a=a*E;

%将初等矩阵依次右乘记录每个硬币翻面次数的向量sum

sum=sum*E;

end

end

end

k=0;

%经过一组翻面后,统计翻面次数为奇数的硬币数量

for j=1:m

if mod(sum(j),2)==1

k=k+1;

end

end

%若翻面次数为奇数的硬币数量为0,则停止翻面(循环)%否则,将对应硬币的翻面次数叠加,继续循环

if k==0

break

else

for i=1:m

sum(i)=sum(i)+m+1-i;

end

end

end

编写测试程序,给出一些示例:

m=input('请输入m=')

l=check_1(m)

if l<100

sum=l*m

end

编写测试程序,给出一些示例:m=input('请输入m=')

a=check_2(m)

同样,类比正面朝上,观察反面朝上时的排布,对于在1~10000内可以找到对应l的m=2,4,5,6,8,9的情况,a如下:

m=2,a=[1,2]

m=4,a=[1,2,3,4]

m=5,a=[1,2,3,4,5]

m=6,a=[1,2,3,4,5,6]

m=8,a=[1,2,3,4,5,6,7,8]

m=9,a=[1,2,3,4,5,6,7,8,9]

均与最初的顺序相同。

反思与总结:

在这次建模实验中,我最初是用代数的方法尝试能够计算出与m有关的l的解析式,没有成功,就试着用模拟的方式计算出给定的m对应的l,结果还算理想。

很遗憾没能得出最终的与m有关的l的解析式,不过在可计算的范围内,基本可以说明问题中情况能够出现,并对出现时硬币的排布进行计算,出现了很好的结果。同时,我考虑了反面朝上的情况,也得出了一些结论。

相关文档
最新文档