利用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合并两个字典的常用方法与效率比较
Jun 17 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
python下载图片实现方法(超简单)
Jul 21 Python
python实现彩票系统
Jun 28 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
python实现同一局域网下传输图片
Mar 20 Python
Python基于traceback模块获取异常信息
Jul 23 Python
python 基于opencv实现高斯平滑
Dec 18 Python
Django实现简单的分页功能
Feb 22 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
Python读写yaml文件
Mar 20 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php类中private属性继承问题分析
2012/11/01 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
vue-dialog的弹出层组件
2020/05/25 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python函数的5种参数详解
2017/02/24 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
Linux如何为某个操作添加别名
2015/02/05 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
行政专员岗位职责说明书
2014/09/01 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
观看建国大业观后感
2015/06/01 职场文书
治庸问责工作总结
2015/08/11 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis