Exemple de code Python pour résoudre le système masse-énergie à double ressort en physique

黄舟
Libérer: 2017-10-03 05:46:18
original
1771 Les gens l'ont consulté

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);
Copier après la connexion

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)
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal