利用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实现批量重命名文件的代码
May 25 Python
使用python实现baidu hi自动登录的代码
Feb 10 Python
python标准算法实现数组全排列的方法
Mar 17 Python
python 爬取微信文章
Jan 30 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
python中sys模块是做什么用的
Aug 16 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下过滤HTML代码的函数
2007/12/10 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
python返回昨天日期的方法
2015/05/13 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
Python实现12306火车票抢票系统
2019/07/04 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
工会换届选举方案
2014/05/21 职场文书
会计毕业生自荐书
2014/06/12 职场文书
六年级小学生评语
2014/12/26 职场文书
商场广播稿范文
2015/08/19 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server