#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. Итак, чтобы построить его, вам также нужно сократить время на один элемент. И если ваша проблема решена проблемой, пожалуйста, примите решение и отметьте свой вопрос как ответ.