【问题标题】:Getting strange results from signal.lsim when t[0] != 0当 t[0] != 0 时从 signal.lsim 得到奇怪的结果
【发布时间】:2019-01-29 00:02:49
【问题描述】:

我正在运行 LTI 状态空间模型的模拟,我需要在不同时间使用不同的输入运行它。也就是说,从 t0 = 0 模拟到 t1=1 秒,根据 t1 的结果对系统的输入进行更改,然后从 t1= 1 秒继续到 t2= 2 秒。

我已尝试在 t[0] 处以初始条件 X0=array([0,0]) 运行,然后将 xout1 的最后一个元素作为下一次运行的初始条件,并为其提供一个新的时间序列开始于 t[0] = 1

import numpy as np
import scipy.signal as sig
import matplotlib.pyplot as plt

r_wh = 60e-3 / 2.0              # m
m_v = 20                        # kg
R_m = 21.2                      # Ohms
L_m = 1.37e-3                   # Henries
K_t = 21.2e-3                   # Nm.A^-1
K_v = 60 / (450 * 2 * np.pi)    # V.rad^-1.s^-1
I_m = 4.2e-7                    # kg.m^2
I_gb = 0.4e-7                   # kg.m^2
I_wh = 65275e-9                 # kg.m^2
gr = 1.0/19.0

I_eq = ((I_m + I_gb) / gr) + (gr  * (I_wh + 0.25 * m_v * r_wh ** 2))

A = np.array([[-R_m/L_m, (-K_v/L_m) / gr],[K_t/I_eq, 0]])
B = np.array([[1/L_m,0],[0,-1/I_eq]])
C = np.array([[0,0],[0,1]])
D = np.zeros((2,2))

SS = sig.StateSpace(A,B,C,D)


T1 = np.arange(0,1,0.01)
T2 = np.arange(1,2,0.01)

U1 = np.array([12*np.ones_like(T1),np.zeros_like(T1)]).transpose()
U2 = np.array([12*np.ones_like(T2),np.zeros_like(T2)]).transpose()

tout1, yout1, xout1 = sig.lsim(SS,U1,T1)
tout2, yout2, xout2 = sig.lsim(SS,U2,T2,X0=xout1[-1])

plt.plot(T1,xout1[:,1],T2,xout2[:,1])

您希望状态向量输出数组“xout2”中的第一个元素与 X0 条件匹配,但事实并非如此。这个函数“lsim”是否要求第一个时间点为0?

【问题讨论】:

    标签: python scipy state-space


    【解决方案1】:

    lsim 假定 X0 是时间 0 的状态,而不是时间 T[0]。您可以通过使用获得(几乎)预期的行为

    tout2, yout2, xout2 = sig.lsim(SS, U2, T2 - T2[0], X0=xout1[-1])
    

    我说“几乎”,因为在从xout1xout2 的过渡中,情节中仍然会有一个小的差距。这是因为T1 中的值是[0., 0.01, 0.02, ..., 0.98, 0.99]。请注意1.0 不在T1 中。所以xout1 中的最后一个值是 t=0.99 时的状态,而不是 t=1.0。解决此问题的一种方法是将最终的 t 值包含在 T1T2 中,例如使用 np.linspace 而不是 np.arange

    T1 = np.linspace(0, 1, 101)
    T2 = np.linspace(1, 2, 101)    
    

    【讨论】:

    • 谢谢沃伦。我试过了,它可以满足我现在的需要。至少现在我知道我没有做错什么。我倾向于挂断这些细节
    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2020-10-08
    相关资源
    最近更新 更多