首页 > 解决方案 > 为什么 Runge Kutta 求解器不包括阻尼系数?

问题描述

再会。我编写了一个代码来使用 Runge-Kutta 求解器来分析 3 DOF 悬架设置仅在垂直方向上的振动运动。我不知道为什么,但是求解器在结果中没有包含阻尼的影响。

背景:

  1. ) 对力输入进行编码以模拟道路上的颠簸(道路位移x轮胎刚度)。

  2. )我首先使用虚拟 nr 来表示想要首先调试求解器。道路力发生器工作正常。

  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)

我已经改变了阻尼系数,但图表中没有任何变化,并且仍然像没有阻尼一样振荡。请帮忙

标签: pythonvibrationrunge-kutta

解决方案


推荐阅读