Python - 颂歌上的奇怪情节点

时间:2018-04-26 15:20:24

标签: python matplotlib ode

我目前正在为车辆开发动态模型,作为我的硕士论文的一部分。

我正在使用python附带的ode解算器,我得到的结果看起来不错。 但我注意到一些情节存在问题。

我的部分代码如下:

 f = [#0 - x_ctr     
            dx_ctrdt,
        #1 - dx_ctrdt
            (flx_car1_A + flx_car1_B + flx_car2_A + flx_car2_B)/M_car + (x_ctr)*(V_tr**2)/R_curve/R_ctr - F_drag/M_car,
        #2 - y_ctr     
            dy_ctrdt,
        #3 - dy_ctrdt
            (fly_car1_A + fly_car1_B + fly_car2_A + fly_car2_B)/ M_car + (R_curve + y_ctr)*(V_tr**2)/R_curve/R_ctr - 9.8*np.sin(beta),
        #4 - omega_1
            -(flx_car1_A + flx_car1_B)*r/Inertia_1 - 0.5*F_rr*r/Inertia_1 + F_motor_1*r/Inertia_1,
        #5 - omega_2
            -(flx_car2_A + flx_car2_B)*r/Inertia_2 - 0.5*F_rr*r/Inertia_2 + F_motor_2*r/Inertia_2,
        #6 - alpha
            dalphadt,  
        #7 - dalphadt
            (mz_car_1  + mz_car_2 ) / Inertia_car,                            
        #8 - x_1A
            v_1A*cos_theta_1 - (V_tr/R_curve)*R_1A*cos_psi_1A,
        #9 - y_1A
            v_1A*sin_theta_1 - (V_tr/R_curve)*R_1A*sin_psi_1A,
        #10 - x_1B
            v_1B*cos_theta_1 - (V_tr/R_curve)*R_1B*cos_psi_1B,
        #11 - y_1B
            v_1B*sin_theta_1 - (V_tr/R_curve)*R_1B*sin_psi_1B,
        #12 - x_2A
            v_2A*cos_theta_2 - (V_tr/R_curve)*R_2A*cos_psi_2A,
        #13 - y_2A
            v_2A*sin_theta_2 - (V_tr/R_curve)*R_2A*sin_psi_2A,
        #14 - x_2B
            v_2B*cos_theta_2 - (V_tr/R_curve)*R_2B*cos_psi_2B,
        #15- y_2B
            v_2B*sin_theta_2 - (V_tr/R_curve)*R_2B*sin_psi_2B,
        ]

当我绘制f的解决方案时,我得到了一个平滑的情节。

dif_var_initial = [0.000, 0.000,    y_ctr_0,  -0.000, 140.0027, 140.0027, 0.000 ,  0.000,  x_1A_0, y_1A_0,  x_1B_0,  y_1B_0,  x_2A_0,  y_2A_0, x_2B_0, y_2B_0]

def dif_eqts(dif_var, t, kx1, ky1, cy1, M_car):
    global v_ax_1, v_ax_2,R_ctr,psi_ctr,Lamb_tk, A_tk, Time_max, delta_t, y_track_1_vector ,y_track_2_vector,R_curve, dRdt,z,j,v_1A,v_1B,v_2A,v_2B,P

    x_ctr, dx_ctrdt, y_ctr, dy_ctrdt, omega_1, omega_2, alpha, dalphadt, x_1A, y_1A, x_1B, y_1B, x_2A, y_2A, x_2B, y_2B = dif_var 

    #   Track disturbances
    eps_ax_1 = A_tk * np.sin(2.*np.pi*(V_tr/Lamb_tk)*t)
    eps_ax_1_tracker.append(eps_ax_1)
    .
    .
    .

但是,当我使用例如eps_ax_1_tracker创建一个图形时,我会得到一些不平滑的奇怪的图形。(该程序显然不止于此但我不想让您阅读许多代码行。)

例如:

enter image description here

更接近:

enter image description here

这种行为是正常的吗? 我搜索过类似的问题,但没有找到任何可以帮助我的东西。

我希望你有一些建议,为什么会这样,非常感谢你的帮助。

修改(1)

我得到x_ctr的输出如下: x_ctr

和力量: forces

振荡行为是轨道中的不规则性。 我希望这有帮助。

1 个答案:

答案 0 :(得分:0)

数值解算器在接近但不在解决方案轨迹上的状态下使用“探测”值。松散地说,这会对轨迹周​​围的方向场进行采样,以便下一步的计算值可以更准确。使用记录的路径获取输出,在scipy.integrate.ode中使用sol_out或类似的密集输出,参见Using adaptive step sizes with scipy.integrate.odescipy.integrate.odeint使用时间列表输入参数来定义输出中报告的采样点。