Maison > Article > développement back-end > Exemple de code Python pour résoudre le système masse-énergie à double ressort en physique
Cet article vous présente principalement les informations pertinentes sur la façon d'utiliser Python pour résoudre le système masse-énergie à double ressort en physique. L'article le présente de manière très détaillée à travers un exemple de code, qui a une certaine valeur d'apprentissage de référence pour l'étude de chacun ou. travail., amis qui en ont besoin, veuillez suivre l'éditeur pour apprendre ensemble.
Avant-propos
Cet article présente principalement le contenu pertinent sur l'utilisation de Python pour résoudre le système masse-énergie à double ressort en physique. tout le monde Veuillez vous y référer pour référence. Je n'en dirai pas beaucoup plus ci-dessous. Jetons un coup d'œil à l'introduction détaillée.
Le modèle physique est le suivant :
Dans ce système il y a deux objets, leurs masses Ils sont respectivement m1 et m2, reliés entre eux par deux ressorts, le système télescopique est k1 et k2, et l'extrémité gauche est fixe. En supposant qu’il n’y ait pas de force externe, les longueurs des deux ressorts sont L1 et L2.
Comme les deux objets ont de la gravité, un frottement se forme sur le plan et les coefficients de frottement sont respectivement b1 et b2. L'équation différentielle peut donc s'écrire comme ceci :
Il s'agit d'une équation différentielle du second ordre afin d'utiliser Python pour la résoudre, elle doit être convertie en une équation différentielle. équation différentielle du premier ordre. Par conséquent, les deux variables suivantes sont introduites :
Ces deux sont équivalentes à la vitesse de déplacement. Grâce à l'opération, elle peut être modifiée en ceci :
À ce stade, l'équation linéaire peut être transformée en un tableau vectoriel, et python peut être utilisé pour définir
Le code est le suivant :
# 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);
Sortez les résultats dans le fichier two_springs.dat ici, puis écrivez un programme pour afficher les données sous forme d'image, vous pouvez publier votre article. Le code est le suivant :
# 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)
Enfin, vérifions le résultat png. image comme suit :
Résumé
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!