# 双摆运动仿真 **Repository Path**: cgper/double-pendulum-motion-simulation ## Basic Information - **Project Name**: 双摆运动仿真 - **Description**: 使用js计算双摆的轨迹并绘制仿真动画。这是一个Matlab的移植项目。 - **Primary Language**: JavaScript - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 3 - **Created**: 2020-09-04 - **Last Updated**: 2023-02-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 双摆运动仿真 ### 介绍 使用js计算双摆的轨迹并绘制仿真动画。这是一个Matlab的移植项目。 ### 在线体验 [点击在线体验](http://cgper.gitee.io/double-pendulum-motion-simulation) 或者[点击下载Windows安装包](https://gitee.com/cgper/double-pendulum-motion-simulation-desktop/attach_files/473973/download) ### 截图 ![](https://images.gitee.com/uploads/images/2020/0906/142529_300caeac_2020534.gif "演示.gif") ### 使用说明 直接在线体验或者下载整个文件,然后双击index. htm在浏览器中运行。注意目前还需网络。 ### 注意 1 **由于目前我还无法完成加载动画的正确添加(不管我如何添加加载动画,它都会计算完成后再显示加载动画,这违背的加载动画的意 义),所以点击开始仿真按钮后请一定耐心等待一下,因为计算需要一定时间,尤其是仿真时长很长的情况下。另外,如果有大佬有好 的解决办法,望告知** 2 迭代步长不能太大,否则会导致计算失败。也不建议过小,会导致计算量太大而计算时间过长。个人建议最好在0.001到0.0001之 间。算了,由于容易出错,所以锁定了步长) ### 原理 双摆的运动微分方程: ![](https://images.gitee.com/uploads/images/2020/0904/200305_94d1c8cb_2020534.png "微分方程.png") 用四阶龙格-库塔算法进行迭代计算: ![](https://images.gitee.com/uploads/images/2020/0904/200348_f284bcc6_2020534.png "龙格库塔.png") 虽然这只是个小项目,但背后却蕴藏着一些物理和数学原理,需要用到理论力学和工程数学知识,有兴趣的可以看详细的解读:[双摆运动仿真背后的原理](https://www.jianshu.com/p/844287eb0b34?utm_campaign=shakespeare&utm_content=note&utm_medium=reader_share&utm_source=weixin) ### 精度 首先,要知道双摆是一种混沌运动。所谓的混沌就是运动轨迹是实实在在确定的,即在理论上可用数学计算出,可以提前预测的。但却在实际中,无法准确预测,因为混沌运动对初始条件极其敏感,注意,是极其。初始条件一点点的细微不同,会导致后期巨大的差异。 所以无论Matlab或js计算精度有多高,总会有细微误差。故均不能长期准确计算出双摆的理论轨迹。这也是为什么不能长期预测天气的原因。 虽然不能长期准确预测运动轨迹,但还是要简单对比一下js和Matlab的计算精度。毕竟仿真不是看动画做得多逼真多好看,而是与真实情况多接近。 自先来看看短期仿真对比,因为短期仿真与真实值接近: ![](https://images.gitee.com/uploads/images/2020/0904/201202_80a356a0_2020534.png "Snipaste_2020-09-04_19-56-08.png") 还是看得出有不小的区别的。这里不得不说Matlab在计算上还是很厉害,仅用0.1的迭代步长就可是算出比较稳定的数据。而上图JavaScript用的0.0001的迭代步长(即计算量比Matlab多1000倍),并且不同的步长算出的数据也不太稳定。当然,Matlab用的自带的算法,具体我也不知道用的啥算法,但我估计使用了修正算法。而此项目用的四阶龙格-库塔算法,大概没有修正,越到后越远离真实值。哎,被Matlab无情吊打。不过还是要说一下,由于混沌运动的特性,算到后面Matlab也不会很准确。 总结:此应用对双摆运动的仿真短期还行,时间长了精度较差,娱乐一下还行吧。 ### 致谢 [vue](https://cn.vuejs.org/) [Echarts](https://echarts.apache.org/zh/index.html) [Element](https://element.eleme.cn/#/zh-CN/)