利用python求解物理学中的双弹簧质能系统详解


Posted in Python onSeptember 29, 2017

前言

本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

物理的模型如下:

利用python求解物理学中的双弹簧质能系统详解

在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。

由于两物体有重力,那么在平面上形成摩擦力,那么摩擦系数分别为b1和b2。所以可以把微分方程写成这样:

利用python求解物理学中的双弹簧质能系统详解

这是一个二阶的微分方程,为了使用python来求解,需要把它转换为一阶微分方程。所以引入下面两个变量:

利用python求解物理学中的双弹簧质能系统详解

这两个相当于运动的速度。通过运算可以改为这样:

利用python求解物理学中的双弹簧质能系统详解

这时可以线性方程改为向量数组的方式,就可以使用python定义了

代码如下:

# Use ODEINT to solve the differential equations defined by the vector field 
from scipy.integrate import odeint 
 
def vectorfield(w, t, p): 
 """ 
 Defines the differential equations for the coupled spring-mass system. 
 
 Arguments: 
  w : vector of the state variables: 
     w = [x1,y1,x2,y2] 
  t : time 
  p : vector of the parameters: 
     p = [m1,m2,k1,k2,L1,L2,b1,b2] 
 """ 
 x1, y1, x2, y2 = w 
 m1, m2, k1, k2, L1, L2, b1, b2 = p 
 
 # Create f = (x1',y1',x2',y2'): 
 f = [y1, 
   (-b1 * y1 - k1 * (x1 - L1) + k2 * (x2 - x1 - L2)) / m1, 
   y2, 
   (-b2 * y2 - k2 * (x2 - x1 - L2)) / m2] 
 return f 
 
# Parameter values 
# Masses: 
m1 = 1.0 
m2 = 1.5 
# Spring constants 
k1 = 8.0 
k2 = 40.0 
# Natural lengths 
L1 = 0.5 
L2 = 1.0 
# Friction coefficients 
b1 = 0.8 
b2 = 0.5 
 
# Initial conditions 
# x1 and x2 are the initial displacements; y1 and y2 are the initial velocities 
x1 = 0.5 
y1 = 0.0 
x2 = 2.25 
y2 = 0.0 
 
# ODE solver parameters 
abserr = 1.0e-8 
relerr = 1.0e-6 
stoptime = 10.0 
numpoints = 250 
 
# Create the time samples for the output of the ODE solver. 
# I use a large number of points, only because I want to make 
# a plot of the solution that looks nice. 
t = [stoptime * float(i) / (numpoints - 1) for i in range(numpoints)] 
 
# Pack up the parameters and initial conditions: 
p = [m1, m2, k1, k2, L1, L2, b1, b2] 
w0 = [x1, y1, x2, y2] 
 
# Call the ODE solver. 
wsol = odeint(vectorfield, w0, t, args=(p,), 
    atol=abserr, rtol=relerr) 
 
with open('two_springs.dat', 'w') as f: 
 # Print & save the solution. 
 for t1, w1 in zip(t, wsol):   
  out = '{0} {1} {2} {3} {4}\n'.format(t1, w1[0], w1[1], w1[2], w1[3]); 
  print(out) 
  f.write(out);

在这里把结果输出到文件two_springs.dat,接着写一个程序来把数据显示成图片,就可以发表论文了,代码如下:

# Plot the solution that was generated 
 
from numpy import loadtxt 
from pylab import figure, plot, xlabel, grid, hold, legend, title, savefig 
from matplotlib.font_manager import FontProperties 
 
t, x1, xy, x2, y2 = loadtxt('two_springs.dat', unpack=True) 
 
figure(1, figsize=(6, 4.5)) 
 
xlabel('t') 
grid(True) 
lw = 1 
 
plot(t, x1, 'b', linewidth=lw) 
plot(t, x2, 'g', linewidth=lw) 
 
legend((r'$x_1$', r'$x_2$'), prop=FontProperties(size=16)) 
title('Mass Displacements for the\nCoupled Spring-Mass System') 
savefig('two_springs.png', dpi=100)

最后来查看一下输出的png图片如下:

利用python求解物理学中的双弹簧质能系统详解

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python发腾讯微博代码分享
Jan 10 Python
python实现删除文件与目录的方法
Nov 10 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
python实现文件快照加密保护的方法
Jun 30 Python
用Python设计一个经典小游戏
May 15 Python
python远程连接服务器MySQL数据库
Jul 02 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
python中装饰器级连的使用方法示例
Sep 29 #Python
python中map()函数的使用方法示例
Sep 29 #Python
python中reduce()函数的使用方法示例
Sep 29 #Python
Django Admin 实现外键过滤的方法
Sep 29 #Python
python 调用c语言函数的方法
Sep 29 #Python
python文件名和文件路径操作实例
Sep 29 #Python
Python 实现简单的shell sed替换功能(实例讲解)
Sep 29 #Python
You might like
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
javascript关于继承解析
2016/05/10 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
JS实现小米轮播图
2020/09/21 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
Python 命令行非阻塞输入的小例子
2013/09/27 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python 实现数组相减示例
2019/12/27 Python
关于Django Models CharField 参数说明
2020/03/31 Python
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
毕业生自荐书
2014/02/03 职场文书
暑期培训随笔感言
2014/03/10 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书