Демпфирование кода гармонических колебаний с помощью python

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Я не знаю, как сделать код из трех графиков в модели затухающих гармонических колебаний, [X - t(time)], [V(velocity) - t(time)], [a(acceleration) - t(time)] график

я могу составить [X - t(time)] график, но я не знаю, как составить другие графики..

 import numpy as np

from matplotlib import pyplot as plt

# mx'' = - bx' - kx

x_0 = 3

v_0 = 0

y_0 = np.array([x_0,v_0])         # first array 


def Euler_Method(f,a,b,y0,step):

  t = np.linspace(a,b,step)

  h = t[1] - t[0]

  Y = [y0]

  N = len(t)

  n = 0

  y = y0

  for n in range(0,N-1) :

    y = y   h*f(y,t[n])

    Y.append(y)

    n = n 1  

  Y = np.array(Y)

  return Y, t




def harmonic(y,t) :

  k = 50

  m = 200

  b = 20  # drag coefficient

  a = (-1*k/m)*y[0] - (b/m)*y[1]   # x'' = a,  y[0] : first position

  v = y[1]                         # v = first velocity : y[1]

  f = np.array([v,a])

  return f

  


a = Euler_Method(harmonic, 0, 100, y_0, 100000)

X = a[0][:,0]

t = a[1]

plt.plot(t,X)

plt.show()
 

Ответ №1:

Почему вы не можете просто взять производную от X, чтобы получить V и A?

 V = np.diff(X)
A = np.diff(V)

fig, (ax1, ax2, ax3) = plt.subplots(3)
fig.suptitle('Vertically stacked subplots')
ax1.plot(t, X)
ax2.plot(t[1:], V)
ax3.plot(t[2:], A)
plt.show()
 

Дает,

введите описание изображения здесь

Комментарии:

1. Спасибо!!!! t know the function я не понимаю, почему вы принимаете V, A в t [1:], t[2:], но я изучаю ваш код. большое спасибо

2. Это необходимо сделать, потому что, когда вы берете diff массива, результирующий массив будет иметь на один элемент меньше, чем ваш исходный массив (поскольку вы выполняете вычитание каждого последовательного элемента). Таким образом, V будет иметь 99 элементов, если X имеет 100. Итак, чтобы построить его, вам также нужно сократить время на один элемент. И если ваша проблема решена проблемой, пожалуйста, примите решение и отметьте свой вопрос как ответ.