Добрый день. Я написал код для использования решателя Рунге-Кутта для анализа вибрационного движения подвески с 3 степенями свободы только в вертикальном направлении. Я не знаю почему, но решающая программа не учитывает эффект демпфирования в результате.
Для фона:
) ввод силы кодируется для имитации неровность дороги (Смещение дороги x
жесткость шины).
) Я использую сначала фиктивные номера для силы, так как хочу сначала отладить решатель. Генератор дорожного усилия работает нормально.
) первая настройка уравнения - это движение тела
M*Z''+C_s*Z'+K_s*Z=C_s Z'_u+K_s*Z_u
, а второе уравнение - движение шины
m*Z''_u+C_s*Z'_u+(K_s+K_t)*Z=C_s Z'+K_s Z+K_t Z_r
.
import numpy as np
from numpy.linalg import inv
import matplotlib.pyplot as plt
#variables
Ks = 200
Kt = 1000
Cs = 0.5
M = 120
m = 20
Road_Amp = 1
Road_freq = 2
Hz_read = 1000
delta_t = 1/Hz_read
time_end = 10
time = np.linspace(0,time_end,time_end*Hz_read)
#force from road
def road_force(Ktire,Amp,freq,time_F,time_start_F,time_end_F,one_bump):
F = np.array([0.0,0.0])
if one_bump:
time_end_F = time_start_F + np.pi/freq
if (time_F >= time_start_F) and (time_F <= time_end_F):
Disp = Amp * np.cos(freq*time_F - np.pi/2)
else:
Disp = 0.0
F[0]= Disp * Kt
return F
def G(Y,time_function,force):
eq1 = inv_A.dot(C.dot(Y[1])-B.dot(Y[0])) #equation for the body
eq2 = inv_D.dot(H.dot(Y[0]) + force-E.dot(Y[1])) #equation for the wheel
return np.array([eq1,eq2])
def RK4_step(Y,time_RK,dt,force_RK):
k1 = dt * G(Y,time_RK,force_RK)
k2 = dt * G(Y + 0.5*k1,time_RK + 0.5*dt,force_RK)
k3 = dt * G(Y + 0.5*k2,time_RK + 0.5*dt,force_RK)
k4 = dt * G(Y + k3,time_RK + dt,force_RK)
return (k1 + k2*2 + k3*2 + k4)/6
#initial state
Y = np.array([[0,0],[0,0]])
A = np.array([[M,0],[0,1]])
B = np.array([[Cs,Ks],[-1,0]])
C = np.array([[Cs,Ks],[0,0]])
D = np.array([[m,0],[0,1]])
E = np.array([[Cs,(Ks+Kt)],[-1,0]])
H = np.array([[Cs,Ks],[0,0]])
inv_A = inv(A)
inv_D = inv(D)
#solution
for t in time:
Force = road_force(Kt,Road_Amp,Road_freq,t,0,5,True)
Y = Y + RK4_step(Y,t,delta_t,Force)
Я изменил коэффициент демпфирования, но на графиках ничего не меняется и все равно колеблется, как будто демпфирования нет. Пожалуйста, помогите