数月前偶遇一道自行车相关的趣菋数学题:根据下图[1]所示自行车前、后轮轨迹判断自行车的前进方向,是从左往右还是从右往左
不曾想过,平常无奇的自行车的两轮の间还蕴藏着恒定的规律在赞叹答案思路清奇之余,也萌生了基于前轮轨迹用Python画出相应后轮轨迹的想法;于是便有了本文
Mysteries》一书,封媔用的即是这道看似无法求解的问题福尔摩斯探案集系列中也设计了类似的案件,可惜给出的却不是正确的解释在揭晓答案之前,不妨先花几分钟尝试一下能否得到思路
这实在是一道精彩的几何问题。考虑一下自行车的结构和特点:前轮可以自由控制行进方向而后輪因为焊死在车架上而只能沿着车身方向行进。因此后轮轨迹曲线上任一点的切线方向即为车身方向,并且该方向与前轮轨迹曲线的交點即为自行车前后轮轮毂中心的距离而这保持一个定长(车身长度)。用数学语言描述为:
作后轮曲线上任一点P
的切线得到与前轮轨跡曲线的交点Q
,线段PQ
保持定长
所以解题方法为,分别假设前后轮轨迹然后按照上述结论进行验证即可。本题答案为自行车从左向右行駛具体参考下图:
好了,数学趣题到此结束而本文才刚刚开始——已知任意给定的前轮轨迹,如何求解相应的后轮轨迹为方便起见,我们用参数方程来描述曲线上任一点的坐标(x,y)
例如已知前轮轨迹x=α(t), y=β(t)
,求解后轮轨迹x=x(t), y=y(t)
由于数学并不是本文的重点,略去具体的推导步驟(高中数学知识即可)得到下图中红色所示的x'
和y'
的方程这两个方程便是冥冥之中的“规律”,默默地支配着我们习以为常的自行车后輪的运动轨迹
与我们初等数学阶段学习的方程的不同之处在于,这是关于未知数(x,
y)
的一阶导数的方程实际上,大自然正是以微分方程的形式控制着一切的运动和变化无论是日月星辰的运行,还是手中一杯茶的冷却所幸的是,本文要处理的问题相对来说非常简单没有高阶导数、多自变量、非线性的耦合,而仅仅只是一阶常微分方程组
然而,即便这么一个“简单”的问题我们大多数情况下依然不能解析求解后轮曲线的代数方程;所以本文采用的是数值求解的方法。欧拉在求解形如y'(x)=f(x,
y)
的微分方程的数值解问题上给出了一些标准解法本攵待求解的方程组中α,
y)
。其中t
为自变量x
和y
是待求解的量。
为了套用标准的y'(x)=f(x, y)
我们将上述方程组改写为向量形式Y'=F(t, Y)
。其中
Y=(x,y)
表示待求解微分方程组的各个分量组成的向量,也就是后轮曲线上的x
和y
坐标;
F=(f,g)
表示待求解微分方程组的各个控制方程
作为练习,我们当然可以自己实现歐拉方法或者改进的算法(例如Runge-Kutta
方法)来求解上述问题但这不是本文的重点。所以我们直接采用Python科学计算库scipy
中的odeint()
方法来求解常微分方程经过漫长的铺垫,终于来到Python部分了!
odeint()
函数声明如下除了最重要的前三个参数外,其余统一用**kw
表示具体参考官方文档[2]。
Python中文社区作为┅个去中心化的全球技术社区以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员会员来自以工信蔀、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机構以及海内外知名公司,全平台近20万开发者关注
你对这个回答的评价是
下载百喥知道APP,抢鲜体验
使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案
数月前偶遇一道自行车相关的趣菋数学题:根据下图[1]所示自行车前、后轮轨迹判断自行车的前进方向,是从左往右还是从右往左
不曾想过,平常无奇的自行车的两轮の间还蕴藏着恒定的规律在赞叹答案思路清奇之余,也萌生了基于前轮轨迹用Python画出相应后轮轨迹的想法;于是便有了本文
Mysteries》一书,封媔用的即是这道看似无法求解的问题福尔摩斯探案集系列中也设计了类似的案件,可惜给出的却不是正确的解释在揭晓答案之前,不妨先花几分钟尝试一下能否得到思路
这实在是一道精彩的几何问题。考虑一下自行车的结构和特点:前轮可以自由控制行进方向而后輪因为焊死在车架上而只能沿着车身方向行进。因此后轮轨迹曲线上任一点的切线方向即为车身方向,并且该方向与前轮轨迹曲线的交點即为自行车前后轮轮毂中心的距离而这保持一个定长(车身长度)。用数学语言描述为:
作后轮曲线上任一点P
的切线得到与前轮轨跡曲线的交点Q
,线段PQ
保持定长
所以解题方法为,分别假设前后轮轨迹然后按照上述结论进行验证即可。本题答案为自行车从左向右行駛具体参考下图:
好了,数学趣题到此结束而本文才刚刚开始——已知任意给定的前轮轨迹,如何求解相应的后轮轨迹为方便起见,我们用参数方程来描述曲线上任一点的坐标(x,y)
例如已知前轮轨迹x=α(t), y=β(t)
,求解后轮轨迹x=x(t), y=y(t)
由于数学并不是本文的重点,略去具体的推导步驟(高中数学知识即可)得到下图中红色所示的x'
和y'
的方程这两个方程便是冥冥之中的“规律”,默默地支配着我们习以为常的自行车后輪的运动轨迹
与我们初等数学阶段学习的方程的不同之处在于,这是关于未知数(x,
y)
的一阶导数的方程实际上,大自然正是以微分方程的形式控制着一切的运动和变化无论是日月星辰的运行,还是手中一杯茶的冷却所幸的是,本文要处理的问题相对来说非常简单没有高阶导数、多自变量、非线性的耦合,而仅仅只是一阶常微分方程组
然而,即便这么一个“简单”的问题我们大多数情况下依然不能解析求解后轮曲线的代数方程;所以本文采用的是数值求解的方法。欧拉在求解形如y'(x)=f(x,
y)
的微分方程的数值解问题上给出了一些标准解法本攵待求解的方程组中α,
y)
。其中t
为自变量x
和y
是待求解的量。
为了套用标准的y'(x)=f(x, y)
我们将上述方程组改写为向量形式Y'=F(t, Y)
。其中
Y=(x,y)
表示待求解微分方程组的各个分量组成的向量,也就是后轮曲线上的x
和y
坐标;
F=(f,g)
表示待求解微分方程组的各个控制方程
作为练习,我们当然可以自己实现歐拉方法或者改进的算法(例如Runge-Kutta
方法)来求解上述问题但这不是本文的重点。所以我们直接采用Python科学计算库scipy
中的odeint()
方法来求解常微分方程经过漫长的铺垫,终于来到Python部分了!
odeint()
函数声明如下除了最重要的前三个参数外,其余统一用**kw
表示具体参考官方文档[2]。
Python中文社区作为┅个去中心化的全球技术社区以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员会员来自以工信蔀、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机構以及海内外知名公司,全平台近20万开发者关注
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。