Home > Article > Backend Development > Python code example for solving double spring mass-energy system in physics
This article mainly introduces you to the relevant information on how to use python to solve the double spring mass-energy system in physics. The article introduces it in great detail through example code, which has certain reference learning value for everyone's study or work. , friends who need it, please follow the editor to learn together.
Preface
This article mainly introduces the relevant content about using python to solve the double spring mass-energy system in physics, and shares it for your reference. Please refer to it for reference and study. I won’t say much more below. Let’s take a look at the detailed introduction.
The physical model is as follows:
There are two objects in this system, their masses They are m1 and m2 respectively, connected together by two springs, the telescopic system is k1 and k2, and the left end is fixed. Assuming there is no external force, the lengths of the two springs are L1 and L2.
Since the two objects have gravity, friction is formed on the plane, and the friction coefficients are b1 and b2 respectively. So you can write the differential equation like this:
This is a second-order differential equation. In order to use python to solve it, you need to convert it into a first-order differential equation. Therefore, the following two variables are introduced:
# These two are equivalent to the speed of movement. Through operation, it can be changed to this:
At this time, the linear equation can be changed into a vector array, and python can be used to define
The code is as follows:
##
# 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);Output the results to the file two_springs.dat here, and then write a program to display the data as a picture, just The paper can be published. The code is as follows:
# 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)Finally, let’s check the output png image as follows:
Summarize
The above is the detailed content of Python code example for solving double spring mass-energy system in physics. For more information, please follow other related articles on the PHP Chinese website!