状态空间建模
现代控制理论与传统方法的区别
现代控制方法
- 可以是多输入,多输出;这些输入输出可以是线性的、非线性的,时变的或者非时变的。
- 基本的时域频域分析法
传统控制方法
- 必须是单输入单输出,而且有一套复杂的频域分析方法。
状态
动态系统的状态定义是变量的最小集,但是却能够表征系统任意时刻的全部特征(也就是极大线性无关组)
状态变量
可理解为上述状态集合中的元素
关于状态变量的选择
状态变量的选择不是唯一的,“can be neither measurable nor observable“,这算是状态分析法的一个优点(自由选择组合)。
但是选择可以测量的特性是比较方便的,因为优化控制需要状态变量以合适的权重反馈回来。
状态向量
x = [ x 1 , x 2 , … , x n ] \boldsymbol x = [x_1,x_2,\dots,x_n] x=[x1,x2,…,xn]
状态空间
相当于把变量转化N维空间中的点(a point in state space)
状态空间等式
从积分器的角度出发,因为积分器具有记忆功能,所以可以把积分器的输出 x x x作为状态变量看待,他们决定了系统的内部特性,综合考量状态 x x x, 输入 u u u与输出 y y y, 结合积分特性,并对矩阵进行整体代换就得到我们常用的state equation与output equation.
x ˙ = A x + B u (1.1) \boldsymbol {\dot x}=\boldsymbol {Ax}+\boldsymbol {Bu} \tag{1.1} x˙=Ax+Bu(1.1)
y = C x + D u (1.2) \boldsymbol {y}=\boldsymbol {Cx}+\boldsymbol {Du} \tag{1.2} y=Cx+Du(1.2)
一个简单的例子
这个例子好的地方就在于他是自动控制原理传统方法(依靠传递函数进行分析)的部分经常做到的一类模型题,用传递函数来做这个题也并不难,这里直接贴图。
下边上重点
传递函数与状态空间之间的关系
根据公式1.1与1.2,我们对两边进行拉氏变换:
s X ( s ) − X ( 0 ) = A X ( s ) + B U ( s ) s\boldsymbol X(s)-\boldsymbol X(0)=\boldsymbol {AX}(s)+\boldsymbol {BU}(s) sX(s)−X(0)=AX(s)+BU(s)
Y ( s ) = C X ( s ) + D U ( s ) \boldsymbol Y(s)=\boldsymbol {CX}(s)+\boldsymbol {DU}(s) Y(s)=CX(s)+DU(s)
如果我们考虑初始值为0,那么:
Y ( s ) = [ C ( s I − A ) − 1 B + D ] U ( s ) \boldsymbol Y(s)=[\boldsymbol {C}(s\boldsymbol {I-A})^{-1}\boldsymbol B+\boldsymbol {D}]\boldsymbol U(s) Y(s)=[C(sI−A)−1B+D]U(s)
于是我们便得到了 G ( s ) G(s) G(s)的表达式。
G ( s ) G(s) G(s)的计算可以用伴随矩阵来实现:
G ( s ) = Q ( s ) ∣ s I − A ∣ (1.3) G(s)=\frac{Q(s)}{|s\boldsymbol {I-A}|} \tag{1.3} G(s)=∣sI−A∣Q(s)(1.3)
可是这个式子是怎么得到的呢?由于对于伴随矩阵的知识已经忘了个差不多,在Wikipedia上研究了一番,写在这里:
伴随矩阵(基础)
余子式
矩阵A关于第i行第j列的余子式,记为 M i j \boldsymbol M_{ij} Mij时矩阵A去掉下标指定的行与列后得到的 ( n − 1 ) × ( n − 1 ) (n-1) \times (n-1) (n−1)×(n−1)矩阵的行列式。
代数余子式
代数余子式只是在余子式的基础之上考虑了正负性,记为 C i j = ( − 1 ) i + j M i j \boldsymbol C_{ij}=(-1)^{i+j}\boldsymbol M_{ij} Cij=(−1)i+jMij.
余子矩阵
建立在上边两个概念之上, A \boldsymbol A A的余子矩阵 C \boldsymbol C C的第i行第j列的元素是 A \boldsymbol A A关于第i行第j列的代数余子式。(好像还有点拗口)
伴随矩阵
矩阵 A \boldsymbol A A的伴随矩阵是矩阵 A \boldsymbol A A的余子矩阵的转置矩阵:
a d j ( A ) = C T adj(\boldsymbol A)=\boldsymbol C^T adj(A)=CT
[ a d j ( A ) ] i j = C j i [adj(\boldsymbol A)]_{ij}=\boldsymbol C_{ji} [adj(A)]ij=Cji
关键推论
首先我们摆一个拉普拉斯公式(这是线性代数里的,直到看到他我才知道自己学过。。。)。
拉普拉斯展开:
∣ B ∣ = ∑ j = 1 n b i j C i j |\boldsymbol B|=\sum\limits_{j = 1}^n {
{b_{ij}}{C_{ij}}} ∣B∣=j=1∑nbijCij
这里b是元素,C是代数余子式。
我们把元素b与代数余子式C分别对应到矩阵A与伴随矩阵adj(A)中,进而考察 A a d j ( A ) \boldsymbol A adj(\boldsymbol A) Aadj(A),那么(用a代替b):
A a d j ( A ) \boldsymbol A adj(\boldsymbol A) Aadj(A)==第i行第i列(相当于i与j相等)==的系数就是 ∑ j = 1 n a i j C i j \sum\limits_{j = 1}^n {
{a_{ij}}{C_{ij}}} j=1∑naijCij
如果 i ≠ j i \ne j i=j, A a d j ( A ) \boldsymbol A adj(\boldsymbol A) Aadj(A)第i行第j列的系数为:
∑ k = 1 n a i k C j k \sum\limits_{k = 1}^n {
{a_{ik}}{C_{jk}}} k=1∑naikCjk
它的值是0(相当于把第j行元素换成第i行元素后求行列式,有两行相同,则 d e t ( A ) = 0 det(\boldsymbol A)=0 det(A)=0)。
于是,
A a d j ( A ) = d e t ( A ) I \boldsymbol A adj(\boldsymbol A)=det(\boldsymbol A)\boldsymbol I Aadj(A)=det(A)I
两边乘上A的逆矩阵,我们便得到(1.3)式的计算结果。
还是那个例子
话不多说直接贴图:
变换矩阵
这小节考虑的是多输入多输出的情况,在这里不单独列出,我们只要把原来的传递函数变成一个矩阵就可以了。
状态空间利用差分方程表示
n阶系统线性差分方程(强制输入无导数项)的状态方程表示:
y ( n ) + a 1 y ( n − 1 ) + … + a n − 1 y ˙ + a n y = u (1.4) \mathop y\limits^{(n)} + {a_1}\mathop y\limits^{(n - 1)} + \ldots + {a_{n - 1}}\dot y + {a_n}y = u\tag{1.4} y(n)+a1y(n−1)+…+an−1y˙+any=u(1.4)
我们可以看到y与u共同决定了 t ≥ 0 t\ge0 t≥0时的系统的所有行为。所以把左侧这n个值作为系统的n个状态变量。但是在实际应用中,可能会出现问题,因为高阶导数是不准确的,因为任何的实际应用中,都会有附加噪声的干扰。
这里主要的问题就是我们常用的状态方程系数的矩阵表示公式是怎么得出来的,上课老师在黑板上划来划去我是啥也没看懂,还是得自己看书。
因为y和他的1至n阶导数已经作为了状态变量,于是我们做如下定义: x 1 = y , x 2 = y ˙ , . . . , x n = y ( n − 1 ) x_1=y, x_2=\dot y, ..., x_n=\mathop y\limits^{(n-1)} x1=y,x2=y˙,...,xn=y(n−1).之后我们对这一系列的等式进行替换,把(1.4)中所有含有y的项都替换为x,即:
x ˙ 1 = x 2 x ˙ 2 = x 3 . . . x ˙ n − 1 = x n x ˙ n = − a n x 1 − … − a 1 x n + u \begin{array}{l} { {\dot x}_1} = {x_2}\\ { {\dot x}_2} = {x_3}\\ {\rm{ }}...\\ { {\dot x}_{n - 1}} = {x_n}\\ { {\dot x}_n} = - {a_n}{x_1} - \ldots - {a_1}{x_n} + u \end{array} x˙1=x2x˙2=x3...x˙n−1=xnx˙n=−