利用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使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python多线程编程(四):使用Lock互斥锁
Apr 05 Python
Sublime开发python程序的示例代码
Jan 24 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
Django的Modelforms用法简介
Jul 27 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
Python序列化模块JSON与Pickle
Jun 05 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数组排序usort、uksort与sort函数用法
2014/11/17 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
php pdo操作数据库示例
2017/03/10 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
JS中的BOM应用
2018/02/02 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
工商管理自荐书
2014/07/06 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
异地恋情人节寄语
2015/02/28 职场文书
护士自荐信范文
2015/03/25 职场文书
上下班时间调整通知
2015/04/23 职场文书