假设有两个小车m1和m2,中间靠一根弹簧连着。如果没有弹簧以及后面的m2的话,我们凭直觉可能会觉得我们可以通过控制u来控制x1, x1˙x_1, \ \dot{x_1}x1, x1˙。但是有了弹簧以及m2之后,我们还能通过控制u来控制x1, x1˙, x2, x2˙x_1, \ \dot{x_1}, \ x_2, \ \dot{x_2}x1, x1˙, x2, x2˙吗?也就是通过控制u来控制两辆车的速度和位置,有没有这种可能?
用数学一点的语言来说,就是一个系统的状态方程是x˙=Ax+Bu\dot{x} = Ax+Bux˙=Ax+Bu,是否存在一个u,使得t0t_0t0时的x0x_0x0状态在t1t_1t1时变成x1x_1x1状态。
可控性的推导
我们用一个离散型的状态来进行推导
xk+1=Axk+Bukx_{k+1} = Ax_k+Bu_kxk+1=Axk+Buk
我们令初始状态x0=0x_0=0x0=0,当
k=0, x1=Ax0+Bu0=Bu0k=0,\ x_1 = Ax_0+Bu_0 = Bu_0k=0, x1=Ax0+Bu0=Bu0
k=1, x2=Ax1+Bu1=ABu0+Bu1k=1,\ x_2 = Ax_1+Bu_1 = ABu_0+Bu_1k=1, x2=Ax1+Bu1=ABu0+Bu1
k=2, x3=Ax2+Bu2=A2Bu0+ABu1+Bu2k=2,\ x_3 = Ax_2+Bu_2 = A^2Bu_0+ABu_1+Bu_2k=2, x3=Ax2+Bu2=A2Bu0+ABu1+Bu2
.........
k=n−1, xn=Axn−1+Bun−1=An−1Bu0+...+ABun−2+Bun−1k=n-1,\ x_n = Ax_{n-1}+Bu_{n-1} = A^{n-1}Bu_0+...+ABu_{n-2}+Bu_{n-1}k=n−1, xn=Axn−1+Bun−1=An−1Bu0+...+ABun−2+Bun−1
如果我们用一个矩阵来表示xnx_nxn,就是下面这种形式
xn=[BAB...An−1B][un−1un−2...u0]=Co×Ux_n = [B \quad AB \quad ... \quad A^{n-1}B] \left[ \begin{matrix} u_{n-1} \\ u_{n-2} \\ ... \\ u_0 \end{matrix}\right] = Co \times Uxn=[BAB...An−1B]⎣⎢⎢⎡un−1un−2...u0⎦⎥⎥⎤=Co×U
经过n步之后,我们把系统的状态从x0x_0x0变成了xnx_nxn,如果我们想要UUU有解的话,则CoCoCo矩阵的秩Rank(Co)=nRank(Co)=nRank(Co)=n。对于连续系统,我们可以和离散系统做类似,若想系统可控的话,则CoCoCo矩阵必须是满秩的。
举例
假设一个系统的状态方程如下
x˙=[2011]x+[11]u\dot{x} = \left[ \begin{matrix} 2 & 0 \\ 1 & 1\end{matrix}\right]x +\left[ \begin{matrix} 1 \\ 1 \end{matrix}\right]ux˙=[2101]x+[11]u
这个系统的CoCoCo矩阵如下
Co=[BAB]=[1212]Co = [B \quad AB] = \left[ \begin{matrix} 1 & 2 \\ 1 & 2\end{matrix}\right]Co=[BAB]=[1122]
这个矩阵的行列式为0,秩为1,。是一个不可控的系统。
再来看一个系统
x˙=[0100]x+[01]u\dot{x} = \left[ \begin{matrix} 0 & 1 \\ 0 & 0\end{matrix}\right]x +\left[ \begin{matrix} 0 \\ 1 \end{matrix}\right]ux˙=[0010]x+[01]u
Co=[BAB]=[0110]Co = [B \quad AB] = \left[ \begin{matrix} 0 & 1 \\ 1 & 0\end{matrix}\right]Co=[BAB]=[0110]
这是一个可控的系统。它代表的物理意义就是我们上面所说的只有一个小车的情况,如果我们只对一个小车建模,不包括弹簧和第二个小车,根据牛顿第二定律,u=mx¨u = m\ddot{x}u=mx¨,我们令x1=x, x2=x˙x_1=x,\ x_2 = \dot{x}x1=x, x2=x˙,就能得到这个状态方程了。
这里还牵扯到一个问题,系统的可控性指的是点到点的可控还是轨迹的可控,我们可以看一个例子,下面这幅图横轴是位置,纵轴是速度,如果我们想让小车从A点到B点,我们是走AB这条路呢还是ACB这条路呢?
事实上,AB这条路是行不通的,我们不能在速度为正的时候位移却一直在往后,所以我们只能走ACB这条路,即速度先逐渐降低,然后反向,最后再把速度加上去。所以,系统的可控性指的是我们可以从一点到达另一点,却不能使系统按照我们想要的轨迹去走。
回到问题
我们对m2进行受力分析,m2x2¨=k(x1−x2)m_2\ddot{x_2}=k(x_1-x_2)m2x2¨=k(x1−x2),对m1进行受力分析,m1x1¨=u−k(x1−x2)m_1\ddot{x_1} = u-k(x_1-x_2)m1x1¨=u−k(x1−x2),我们稍微简化一下,m1=m2=1m_1=m_2=1m1=m2=1Kg,k=100,我们就能得到
x2¨=100x1−100x2\ddot{x_2} = 100x_1-100x_2x2¨=100x1−100x2
x1¨=u−100x1+100x2\ddot{x_1} = u-100x_1+100x_2x1¨=u−100x1+100x2
化成状态方程的形式,令z1=x1, z2=z1˙, z3=x2, z4=z3˙z_1=x_1, \ z_2 = \dot{z_1}, \ z_3=x_2, \ z_4 = \dot{z_3}z1=x1, z2=z1˙, z3=x2, z4=z3˙,就可以写成下面
ddt[z1z2z3z4]=[0100−1000100000011000−1000][z1z2z3z4]+[0100]u\frac{d}{dt} \left[ \begin{matrix} z_1 \\ z_2 \\ z_3 \\ z_4 \end{matrix}\right] = \left[ \begin{matrix} 0 & 1 & 0 & 0 \\ -100 & 0 & 100 & 0 \\ 0 & 0 & 0 & 1 \\ 100 & 0 & -100 & 0 \end{matrix}\right] \left[ \begin{matrix} z_1 \\ z_2 \\ z_3 \\ z_4 \end{matrix}\right] +\left[ \begin{matrix} 0 \\ 1 \\ 0 \\ 0 \end{matrix}\right]udtd⎣⎢⎢⎡z1z2z3z4⎦⎥⎥⎤=⎣⎢⎢⎡0−1000100100001000−1000010⎦⎥⎥⎤⎣⎢⎢⎡z1z2z3z4⎦⎥⎥⎤+⎣⎢⎢⎡0100⎦⎥⎥⎤u
我们用MATLAB来求解一下这个系统的可控性,MATLAB里面有Co = ctrb(A,B)这样一个函数,求一下Co矩阵的秩是4,也就是这个系统是可控的。也就是我们可以从一个小车上施加力,但会控制两个车的速度和位置。最后up主总结系统的可控是指理论上的可控,实际上的系统有各种的物理约束,不一定是可控的!