利用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 代码效率的方法
Jul 03 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python实现的简单排列组合算法示例
Jul 04 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
python plotly绘制直方图实例详解
Jul 22 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
python 通过exifread读取照片信息
Dec 24 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遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
python中global用法实例分析
2015/04/30 Python
python进行TCP端口扫描的实现
2018/12/21 Python
python求最大值最小值方法总结
2019/06/25 Python
python输出决策树图形的例子
2019/08/09 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
python线性插值解析
2020/07/05 Python
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
生物技术专业毕业生求职信范文
2013/12/14 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
超市工作总结范文2014
2014/12/19 职场文书
班级管理经验交流材料
2015/11/02 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
Python内置数据结构列表与元组示例详解
2021/08/04 Python