利用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多进程中的内存复制(实例讲解)
Jan 05 Python
用python打印菱形的实操方法和代码
Jun 25 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
安装python及pycharm的教程图解
Oct 10 Python
python 实现生成均匀分布的点
Dec 05 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
python实现串口通信的示例代码
Feb 10 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
Python如何实现FTP功能
May 28 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
python 如何区分return和yield
Sep 22 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
May 21 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/06/09 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
php显示页码分页类的封装
2017/06/08 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
Python for循环生成列表的实例
2018/06/15 Python
Python实现TCP通信的示例代码
2019/09/09 Python
Numpy 多维数据数组的实现
2020/06/18 Python
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
小学教师事迹材料
2014/01/13 职场文书
法定代表人身份证明书
2014/09/10 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书