Рассмотрим систему ниже:
<img src="https://i.stack.imgur.com/CSKyf.png" width="500">
Fig.1 - Mass, spring, damper and Coulomb frction (image courtesy of <a href="https://commons.wikimedia.org/wiki/File:Mass-Spring-Damper.svg" rel="nofollow noreferrer">Wikimedia</a>).
с динамическим уравнением:
<img src="https://i.stack.imgur.com/MpA8Y.png" width="300">
, где Ff
- трение Амонтона-Колумба, определяемое как:
<img src="https://i.stack.imgur.com/TNroj.png" width="500">
и, следовательно, условие no-slip
определяется как
<img src="https://i.stack.imgur.com/Ty8iB.png" width="300">
Следуя этому примеру , я имею в виду неопределенный код, который не знаю, как выполнить:
from scipy.integrate import odeint
import numpy as np
m = 1.0
k = 2.0
c = 0.1
mus = 0.3
muk = 0.2
g = 9.8
vf = 0.01
def eq(X, t, Xi):
Ff = k * (Xi[0] - X[0]) + c * (Xi[1] - X[1]) # - m * dydt
if np.abs(X[1]) < vf and np.abs(Ff) < mus * m * g :
Ff = k * (Xi[0] - X[0]) + c * (Xi[1] - X[1]) # - m * dydt
else:
Ff = -np.sign(X[1]) * muk * m * g
pass
dxdt = X[1]
dydt = (k * (Xi[0] - X[0]) + c * (Xi[1] - X[1]) - Ff) / m
return [dxdt, dydt]
t = np.linspace(0, 10, 1000)
Xi0 = np.piecewise(t, [t < 1, t >= 1], [0, 1])
X0 = [0, 0]
sol = odeint(eq, X0, t)
, где Xi0
- шаговая функция.Моя главная проблема заключается в том, что когда я хочу определить Ff
, это зависит от dydt
, который будет определен позже в этой области!
Буду признателен, если вы поможете мне узнать, какой самый канонический способ численного решения этой системы.Заранее спасибо.