Почему решатель Рунге Кутта исключает коэффициент демпфирования? - PullRequest
0 голосов
/ 10 июля 2020

Добрый день. Я написал код для использования решателя Рунге-Кутта для анализа вибрационного движения подвески с 3 степенями свободы только в вертикальном направлении. Я не знаю почему, но решающая программа не учитывает эффект демпфирования в результате.

Для фона:

  1. ) ввод силы кодируется для имитации неровность дороги (Смещение дороги x жесткость шины).

  2. ) Я использую сначала фиктивные номера для силы, так как хочу сначала отладить решатель. Генератор дорожного усилия работает нормально.

  3. ) первая настройка уравнения - это движение тела

    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)

Я изменил коэффициент демпфирования, но на графиках ничего не меняется и все равно колеблется, как будто демпфирования нет. Пожалуйста, помогите

...