scipy.signal.
状态空间#
- class scipy.signal.StateSpace(*system, **kwargs)[源代码][源代码]#
状态空间形式的线性时不变系统。
表示系统为连续时间的一阶微分方程 \(\dot{x} = A x + B u\) 或离散时间的差分方程 \(x[k+1] = A x[k] + B u[k]\)。
StateSpace
系统根据使用的系统表示,分别从lti
或dlti
类继承额外的功能。- 参数:
- *系统:参数
StateSpace
类可以用1个或4个参数实例化。以下给出了输入参数的数量及其解释:1:
lti
或dlti
系统: (StateSpace
,TransferFunction
或ZerosPolesGain
)4: 类似数组: (A, B, C, D)
- dt: float, 可选
离散时间系统的采样时间 [s]。默认为 None`(连续时间)。必须指定为关键字参数,例如,``dt=0.1`。
- 属性:
A
StateSpace
系统的 状态矩阵。B
StateSpace
系统的输入矩阵。C
StateSpace
系统的输出矩阵。D
StateSpace
系统的 Feedthrough 矩阵。dt
返回系统的采样时间,
lti
系统返回 None。poles
系统的极点。
zeros
系统的零点。
方法
__mul__
(other)后乘另一个系统或一个标量
to_ss
()返回当前
StateSpace
系统的副本。to_tf
(**kwargs)将系统表示转换为
TransferFunction
。to_zpk
(**kwargs)将系统表示转换为
ZerosPolesGain
。参见
注释
更改不属于
StateSpace
系统表示的属性(如 zeros 或 poles)的值效率非常低,并且可能导致数值不准确。最好先转换为特定的系统表示。例如,在访问/更改零点、极点或增益之前,调用sys = sys.to_zpk()
。示例
>>> from scipy import signal >>> import numpy as np >>> a = np.array([[0, 1], [0, 0]]) >>> b = np.array([[0], [1]]) >>> c = np.array([[1, 0]]) >>> d = np.array([[0]])
>>> sys = signal.StateSpace(a, b, c, d) >>> print(sys) StateSpaceContinuous( array([[0, 1], [0, 0]]), array([[0], [1]]), array([[1, 0]]), array([[0]]), dt: None )
>>> sys.to_discrete(0.1) StateSpaceDiscrete( array([[1. , 0.1], [0. , 1. ]]), array([[0.005], [0.1 ]]), array([[1, 0]]), array([[0]]), dt: 0.1 )
>>> a = np.array([[1, 0.1], [0, 1]]) >>> b = np.array([[0.005], [0.1]])
>>> signal.StateSpace(a, b, c, d, dt=0.1) StateSpaceDiscrete( array([[1. , 0.1], [0. , 1. ]]), array([[0.005], [0.1 ]]), array([[1, 0]]), array([[0]]), dt: 0.1 )