>  기사  >  백엔드 개발  >  물리학에서 이중 스프링 질량 에너지 시스템을 해결하기 위한 Python 코드 예제

물리학에서 이중 스프링 질량 에너지 시스템을 해결하기 위한 Python 코드 예제

黄舟
黄舟원래의
2017-10-03 05:46:181775검색

이 글은 물리학에서 이중 스프링 질량 에너지 시스템을 해결하기 위해 Python을 사용하는 방법에 대한 관련 정보를 주로 소개합니다. 이 글은 모든 사람의 학습이나 작업에 대한 특정 참고 학습 가치를 제공합니다. 친구가 필요하고, 편집자를 따라가서 함께 배워보세요.

머리말

이 글은 물리학에서 이중 스프링 질량 에너지 시스템을 해결하기 위해 Python을 사용하는 것과 관련된 내용을 주로 소개하며, 참고 및 연구를 위해 공유합니다. 아래에서는 많은 말을 하지 않겠습니다. , 세부 사항을 살펴 보겠습니다.

물리적 모델은 다음과 같습니다:

이 시스템에는 두 개의 물체가 있으며, 질량은 각각 m1과 m2이고 두 개의 스프링으로 서로 연결되어 있으며 망원경 시스템은 k1과 k2이며 왼쪽 끝입니다. 결정된. 외력이 없다고 가정하면 두 스프링의 길이는 L1과 L2입니다.

두 물체에는 중력이 있으므로 평면에 마찰이 생기고 마찰계수는 각각 b1과 b2가 됩니다. 따라서 다음과 같이 미분방정식을 작성할 수 있습니다.

이것은 2차 미분방정식입니다. 이를 Python을 사용하여 풀려면 1차 미분방정식으로 변환해야 합니다. 따라서 다음 두 가지 변수가 도입됩니다.

이 두 변수는 이동 속도와 동일합니다. 연산을 통해 이렇게 바꿀 수 있습니다:

이때 선형방정식을 벡터배열로 바꿀 수 있고, 파이썬을 이용해 정의할 수 있습니다.

코드는 다음과 같습니다.


# 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.