首页资讯科技 阿基米德分牛问题的解析与答案

阿基米德分牛问题的解析与答案

王德贵“群牛问题”在古希腊科学家阿基米德的研究课题中比较特别,是以诗句的形式出现在给埃拉托塞尼的一封信中。虽然其真实性有待考证,因为“群牛问题”大概很早以前就已存在,阿基米德只是重新研究而已,但历史上对这个问题的研究,却丰富了初等数论的内容…

阿基米德分牛问题的解析与答案

汪德贵

“牛群问题”是古希腊科学家阿基米德研究课题中的一个特殊问题。它以一首诗的形式出现在给厄拉多塞的信中。虽然其真实性有待考证,因为“羊群问题”很可能在很久以前就存在了,阿基米德只是重新研究了一下,但是历史上对这个问题的研究丰富了初等数论的内容。

我们也来分析一下羊群问题,用Python验证一下。一群牛

太阳神有一群牛,有白的,黑的,花的,棕的。

公牛中,白牛数量多于褐牛,多出的数量等于黑牛数量的1/2+1/3;黑牛数量多于褐牛,多出的数量等于花牛数量的1/4+1/5;花的数量比褐牛多,多出来的数量等于白牛数量的1/6+1/7。

奶牛中,白奶牛的数量是所有黑奶牛的1/3+1/4;黑牛数量为花牛总数的1/4+1/5;花的数量是所有褐牛的1/5+1/6;褐牛的数量是所有白牛的1/6+1/7。

这个兽群是怎么组成的?创造性来源

通过了解解决众所周知的数学问题的思路,并将其应用到Python编程中,可以提高自己的数学和编程水平。我搜索“100道数学题”的第一道题是“羊群问题”。经过分析和研究,我觉得颇有收获。

这是一个解不定方程的问题。有8个未知数,7个方程,无数个解。我们可以找到最小的正整数解。这个解值较大,即使用Python也不容易找到最小的正整数解。(3)设计理念

根据编程求解方程的惯性思想,可以用枚举法求解方程的解。结果Python程序运行时,没有输出结果(后面给出所有程序)。原因是解的数值太大,必须寻求更好的求解方法。(D)方案编制过程

1.枚举法

最常见的想法,不用过多考虑,就是用枚举的方式一个一个测试(图1)。

测试10000个数字的时间复杂度是10的12次方,运行需要30多个小时。搜索已知的最小正整数的解的值很大,枚举法求结果耗时太长,需要寻找更简单的方法。2.验证已知答案时出错。

(1)验证解错。

在网上找到了羊群问题的一组正整数解,代入方程直接验证。最后四个运行结果都是“假的”(图2)。

True表示解决方案不满足原始主题的这个条件(图3)。

(2)用n验证另一组解也有误差。

搜索的另一组解是N,当它被代入方程以验证结果时就更奇怪了(图4)。

当n=1时,有两个“假”(图5)。

当n=5时,有1个“假”(图6)。

为什么我无法验证我找到的答案?有什么问题?为什么不同的溶液中“假”的数量不同?

在分析这些问题产生原因的过程中,我发现了一个库函数Sympy,可以帮我解决问题!3.SymPy库函数

(1)介绍1)SymPy库

SymPy库函数是一个用于符号计算的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁,易于理解和扩展。它完全是用Python编写的,不依赖于外部库。SymPy支持符号计算、高精度计算、模式匹配、绘图、解方程、微积分、组合数学、离散数学、几何、概率统计、物理等功能。

这里不介绍SymPy的安装和使用。我只分析它的解方程方法,SymPy.solve()。Solve()是一个数学术语,主要用于求解代数方程(多项式方程)的符号解析解。

(2)解方程:先看一个简单的例子(图7)。可以通过运行直接找到方程{x:-1,y: 4}的解。你感受到Python的强大了吗?

(3)求解牛群问题的方程。

根据题目设置8个未知数,代入7个方程(图8)。

操作结果(图9)

呃?为什么结果不是整数?原来等式里出现了除法运算。在Python中,除法运算的结果都是浮点数,而计算出的(1/2+1/3)和(1/3+1/4)导致与实际结果相差甚远。将分母除以一般点,得到下面的程序(图10)。

运行结果。程序的结果显示了8个未知数之间的关系。因为是7个方程8个未知数,所以是有无数组解的齐次不定方程(图11)。

经过分析,我们发现所有的分母都是“604357”的倍数。而且牛的个数必须全是整数,所以s必须是604357*9的倍数,这样s=5439213,就可以得到最小的正整数解。

白公牛数量:10366482

黑牛数量:7460514

公牛数量:7358060头

棕色公牛数量:4149387

白色奶牛数量:7206360头

黑奶牛数量:4893246

花牛数量:3515820

棕色奶牛数量:54392134。确认

我们将计算结果代入原方程,以验证其是否正确。下面我们来验证一下(图12)。

结果还是“假”的!仔细分析问题的原因和解方程的问题是一样的,都是因为在Python中,分数计算结果用浮点数保存,会产生错误,导致验证失败。将浮点运算改为除法运算,这样运算中就没有小数了。虽然公式比较麻烦,但是验证结果都是真的(图13)。5.结论

通过对“羊群问题”结果的验证,我们已经知道,在Python中遇到类似“1/3”这样的分数时,浮点小数的精度会导致计算结果的偏差。要提高数值精度,必须避免类似“1/3”的运算。(5)改进和经验

通过分析计算,我们可以得到如下关系:

gb=10366482*n

ge=7460514*n

ga=7358060*n

gz=4149387*n

mb=7206360*n

me=4893246*n

ma=3515820*n

mz=5439213*n

然后修改验证码的第二行,n=int(input ("input正整数:")),就可以得到通式,最小正整数解是n=1时。

另外,最后七个公式的分母可以去掉,变成代数表达式来验证。

本文的分析过程就是我研究这个问题的真实过程。我花了一个多月的时间才找到问题,直到最后解决并验证。在研究的过程中,我也想过放弃。后来参考了一些资料,不断产生新的想法,不断发现新的方法,终于解决了问题。我觉得这是一个学习和提高的过程。

在学习Python的过程中,我有三种感受:抄、改、创。

临摹:也就是刚开始学的时候,先临摹一下,了解一下基础知识。

改变:当理解的深度提高了,我想把原来的程序修改一下,变成想要的效果。

庄:在前两个的基础上,你可以自己创造一个新的程序。

一点经验,如有不妥,请不吝赐教!

本文来自网络,不代表管理窝立场。转载请注明出处: https://www.guanliwo.com/a/zx/63807.html
上一篇几何画板蝴蝶曲线过程的制作
下一篇 电脑怎么遥控手机
管理窝

作者: 管理窝

这里可以再内容模板定义一些文字和说明,也可以调用对应作者的简介!或者做一些网站的描述之类的文字或者HTML!

为您推荐

评论列表()

    联系我们

    联系我们

    0898-88888888

    在线咨询: QQ交谈

    邮箱: email@wangzhan.com

    工作时间:周一至周五,9:00-17:30,节假日休息

    关注微信
    微信扫一扫关注我们

    微信扫一扫关注我们

    关注微博
    返回顶部