利用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进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
实例说明Python中比较运算符的使用
May 13 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
python实现随机梯度下降(SGD)
Mar 24 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
Python循环结构的应用场景详解
Jul 11 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
python内存管理机制原理详解
Aug 12 Python
Python连接mysql方法及常用参数
Sep 01 Python
Python自动化测试PO模型封装过程详解
Jun 22 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
深入apache host的配置详解
2013/06/09 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
深入解析Python中的urllib2模块
2015/11/13 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
个人银行贷款担保书
2014/04/01 职场文书
学校标语大全
2014/06/19 职场文书
物业消防安全责任书
2014/07/23 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
班级活动总结格式
2014/08/30 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js