Я пытаюсь смоделировать колебательную систему с небольшой разницей: я хочу, чтобы она использовала конкретное c уравнение движения (ОДУ), когда тело движется вверх, и другое уравнение движения, когда тело двигаясь вниз. Чтобы решить эти уравнения, я использую ODEINT от Scypi.
Например, давайте рассмотрим систему масс-пружин classi c. Я пытался заставить систему работать с уравнением движения для внешних возбуждений на теле, когда оно движется вверх, и с простым уравнением, когда оно движется вниз.
def function (x,t):
F0 = 10.00
w = 1.00
m = 2.00
c = 1.00
k = 20.00
s = x[0]
dsdt = x[1]
if x[1] >= 0:
d2sdt2 = (F0*np.sin(w*t)-c*dsdt-k*s)/m
else:
d2sdt2 = (-c*dsdt-k*s)/m
result = [dsdt,d2sdt2]
return result
initial = [3.00,0.00]
t = np.linspace(0.00,10.00,101)
y = odeint(function, initial, t)
Полученные результаты показывают, что на тело воздействует только второе уравнение движения ( Полученные результаты ). Я ожидал более хаотического c паттерна движения, когда тело движется вверх, из-за внешней силы.
Есть ли лучший способ реализовать это?