這篇文章主要給大家介紹了關於利用python如何求解物理學中的雙彈簧質能係統的相關資料,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
前言
本文主要介紹給大家介紹了利用python求解物理學中雙彈簧質能係統的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
物理的模型如下:
#在這個系統裡有兩個物體,它們的質量分別是m1和m2,被兩個彈簧連接在一起,伸縮系統為k1和k2,左端固定。假定沒有外力時,兩個彈簧的長度為L1和L2。
由於兩個物體有重力,那麼在平面上形成摩擦力,那麼摩擦係數分別為b1和b2。所以可以把微分方程寫成這樣:
這是二階的微分方程,為了用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求解物理學中的雙彈簧質能係統的程式碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!