2016年03月05日
Mathematica
教程
行 添加评论
昨天同事在朋友圈里问了一个问题,
10块钱买啤酒,2块钱一瓶,2个空瓶或者4个瓶盖可以再换一瓶,问能买几瓶啤酒?
这个问题其实手算或者用Excel都挺容易的,不过这里用Mathematica来解决这个问题。代码很简单:
基本就是题目的翻版,输进去就能有答案:
明显不对嘛,很简单啊,你这个问题是求不动点问题啊,所以正确的答案应该是
如果到这就结束了那该多无聊,所以我们就开始研究了。兑换过程是这样的:
如果换成100个,答案是:
继续扩展,啤酒个数和钱数的关系是咋样的?
假设是30块钱以内:
你得到的是如下关系:
假设到10000块钱,那么将是:
其实大概你的啤酒数等于两倍的钱数,这个有解析解的啦,有兴趣去推导去,不过我不觉得能得到更多信息。
然后可以来看看你需要计算的次数,对于10块钱以内的情况是这样的:
增长到10000块的时候,情况是这样的:
次数显然和钱数大概是一个对数关系,不信你去推解析解啊,真的是近似对数的关系。所以你弄个Excel表格,迭代100次,对于正常的钱数,基本可以保证最后的结果已经收敛。最后祝大家玩得开心啦!
BTW,文章头上的图像是这个代码生成的: