利用python求解物理學(xué)中的雙彈簧質(zhì)能系統(tǒng)詳解
前言
本文主要給大家介紹了關(guān)于利用python求解物理學(xué)中雙彈簧質(zhì)能系統(tǒng)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
物理的模型如下:

在這個(gè)系統(tǒng)里有兩個(gè)物體,它們的質(zhì)量分別是m1和m2,被兩個(gè)彈簧連接在一起,伸縮系統(tǒng)為k1和k2,左端固定。假定沒有外力時(shí),兩個(gè)彈簧的長度為L1和L2。
由于兩物體有重力,那么在平面上形成摩擦力,那么摩擦系數(shù)分別為b1和b2。所以可以把微分方程寫成這樣:

這是一個(gè)二階的微分方程,為了使用python來求解,需要把它轉(zhuǎn)換為一階微分方程。所以引入下面兩個(gè)變量:

這兩個(gè)相當(dāng)于運(yùn)動(dòng)的速度。通過運(yùn)算可以改為這樣:

這時(shí)可以線性方程改為向量數(shù)組的方式,就可以使用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);
在這里把結(jié)果輸出到文件two_springs.dat,接著寫一個(gè)程序來把數(shù)據(jù)顯示成圖片,就可以發(fā)表論文了,代碼如下:
# 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圖片如下:

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Python實(shí)現(xiàn)3行代碼解簡(jiǎn)單的一元一次方程
- Python編程實(shí)現(xiàn)數(shù)學(xué)運(yùn)算求一元二次方程的實(shí)根算法示例
- python計(jì)算方程式根的方法
- Python基于高斯消元法計(jì)算線性方程組示例
- 使用Python求解最大公約數(shù)的實(shí)現(xiàn)方法
- python求解水仙花數(shù)的方法
- Python求解平方根的方法
- Python實(shí)現(xiàn)高效求解素?cái)?shù)代碼實(shí)例
- python使用分治法實(shí)現(xiàn)求解最大值的方法
- Python編程求解二叉樹中和為某一值的路徑代碼示例
- Python實(shí)現(xiàn)簡(jiǎn)單的四則運(yùn)算計(jì)算器
- Python線性方程組求解運(yùn)算示例
相關(guān)文章
解決python3中自定義wsgi函數(shù),make_server函數(shù)報(bào)錯(cuò)的問題
下面小編就為大家分享一篇解決python3中自定義wsgi函數(shù),make_server函數(shù)報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11
python網(wǎng)絡(luò)爬蟲精解之pyquery的使用說明
PyQuery是一個(gè)類似于jQuery的解析網(wǎng)頁工具,使用lxml操作xml和html文檔,它的語法和jQuery很像。和XPATH,Beautiful Soup比起來,PyQuery更加靈活,提供增加節(jié)點(diǎn)的class信息,移除某個(gè)節(jié)點(diǎn),提取文本信息等功能2021-09-09
python使用正則表達(dá)式匹配txt特定字符串(有換行)
這篇文章主要給大家介紹了關(guān)于python使用正則表達(dá)式匹配txt特定字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python關(guān)鍵字之global與nonlocal
這篇文章主要為大家詳細(xì)介紹了Python關(guān)鍵字之global與nonlocal,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
pytorch無坑安裝CPU版小白教程(配gpu版鏈接、conda命令教程)
pip安裝無論是cpu還是gpu的pytorch安裝,其實(shí)官方給了很好的安裝流程,本文主要介紹了pytorch無坑安裝CPU版小白教程,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
在Django中實(shí)現(xiàn)定時(shí)任務(wù)的多種方法
在 Django 項(xiàng)目中實(shí)現(xiàn)定時(shí)任務(wù)可以幫助自動(dòng)化執(zhí)行一些后臺(tái)任務(wù),如數(shù)據(jù)清理、定期報(bào)告生成等,以下是幾種常見的實(shí)現(xiàn)方式,每種方法都有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景,感興趣的小伙伴跟著小編一起來看看吧2024-08-08

