基于Python如何实现模拟三体运动


本文小编为大家详细介绍“基于Python如何实现模拟三体运动”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python如何实现模拟三体运动”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。此前所做的一切三体和太阳系的动画,都是基于牛顿力学的,而且直接对微分进行差分化,从而精度非常感人,用不了几年就得撞一起去。为了给三体人提供一个更加有价值的推导,这次通过求解拉格朗日方程的数值解来实现。首先假设三个质点的质量分别为m1, m2,m3,坐标为x1,x2,x3,质点速度可以表示为x .假设三体在二维平面上运动,则第i个质点的动能为引力势能为其中G为万有引力常量,rij为质点i,j之间的距离,则系统的拉格朗日量为有了拉格朗日量,将其带入拉格朗日方程就可以得到拉格朗日方程组。对于三体系统而言,总计有3个粒子,每个粒子有x,y两个自由度,也就是说最后会得到6组方程。考虑到公式推导过程中可能会出现错误,所以下面采用sympy来进行公式推导。首先定义符号变量接下来,需要构造系统的拉格朗日量L,其实质是系统的动能减去势能,对于上面构建的三体系统而言,动能和势能可分别表示为计算每个质点的动能和势能。动能是由速度决定的,而速度是由位置对时间的导数决定的。我们可以用 sympy 的 diff 函数来求导:势能是由万有引力决定的,而万有引力是由两个质点之间的距离决定的。我们可以用 sympy 的 sqrt 函数来求距离:有了动能和势能,就可以愉快地求拉格朗日量了,有了拉格朗日量,就可以列拉格朗日方程了三个粒子的每一个坐标维度,都可以列出一组拉格朗日方程,所以总共免费云主机域名有6个拉格朗日方程组记xij=xi−xj,yij=yi−yj,则接下来就要调用Python的odeint来计算这个微分方程组的数值解,odeint的调用方法大致为odeint(func, y, t, args),其中func是一个函数,这个函数必须为func(y,t,…),且返回值为dy/dt.为此,需要将上述方程组再行拆分,以消去其中的二次导数,以x1为例,令u1=dx1/dt,则此方程变为方程组由于三体系统中有3个粒子,共6个独立变量,所以要列12个方程。记则odeint输入的y的形式为从而func的具体形式为接下来就是见证奇迹的时刻,首先创建一个随机的起点,作为三体运动的初值,然后带入开整就完事儿了然后绘制一下这三颗星的轨迹光是看这个轨迹就十分惊险了有木有。如果把其中的第一颗星作为坐标原点,那么另外两颗星的轨迹大致为结果为最后,以中间这颗星为原点,绘制一下另外两颗星运动的动态过程读到这里,这篇“基于Python如何实现模拟三体运动”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: 微信小程序如何实现简单聊天室

这篇文章主要介绍了微信小程序如何实现简单聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何实现简单聊天室文章都会有所收获,下面我们一起来看看吧。cha.jschat.wxmlchat.css关于“微信小程序如何实现…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/20 19:39
下一篇 05/20 19:43

相关推荐