本文是在学习B站up主DR_CAN博士之后的学习笔记以及一些个人的感悟。B站链接为https://space.bilibili.com/230105574/,感兴趣的可以去B站看视频。
本文针对的读者是大学里面学过自动控制或者现代控制的本科生或者研究生。
现代控制的基本问题
现代控制的基本问题可以用一句话来总结,我们希望一个系统的输出按照我们想要的方式去输出结果,举个例子:
我们希望一个热水器的水温保持在95
∘
^{\circ}
∘C。但是由于系统受到多种因素的影响,比如水的质量,水比热,空气温度,有些因素的影响是非常难计算的,比如空气温度,空气流动速度,所以我们很难直接通过完全了解一个系统来进行电功率的控制,为此,引入了基于误差的反馈控制系统。
我们可以将输出和输入进行做差,令
e
=
T
w
d
−
T
W
e=T_{wd}-T_W
e=Twd−TW,然后找到一个误差的函数
U
(
e
)
U(e)
U(e)作为系统的输入,只要有误差存在,这个函数就会发生作用,最终的目标是让误差
e
e
e趋近于0。这也是经典控制系统的主要理论,基本上都是围绕着误差来发展。
数学基础-矩阵特征值和特征向量
在数学中,特别是线性代数中,对于一个给定的线性变换 A A A,它的特征向量 v v v经过这个线性变换的作用之后,得到的新向量仍然与原来的 v v v保持在同一条直线上,但其长度或方向或许会发生改变。
A v = λ v (1) Av = \lambda v \tag{1} Av=λv(1)
其中
λ
\lambda
λ为标量,即特征向量的长度在该线性变换下缩放的比例,称为其特征值。
先来看一下线性变换,假设有一个矩阵
A
=
[
1
1
4
−
2
]
,
v
1
=
[
1
2
]
(2)
A =\left[ \begin{matrix} 1 & 1 \\ 4 & -2 \end{matrix} \right], v_1 = \left[ \begin{matrix} 1 \\ 2 \end{matrix} \right] \tag{2}
A=[141−2],v1=[12](2)
其所对应的向量是下图这种形式。
如果我们求
A
v
1
Av_1
Av1,
A
v
1
=
[
1
1
4
−
2
]
[
1
2
]
=
[
3
0
]
(3)
Av_1 = \left[ \begin{matrix} 1 & 1 \\ 4 & -2 \end{matrix} \right] \left[ \begin{matrix} 1 \\ 2 \end{matrix} \right] =\left[ \begin{matrix} 3 \\ 0 \end{matrix} \right] \tag{3}
Av1=[141−2][12]=[30](3)
我们可以看到向量的长度和方向都发生了变化。
我们再定义
v
2
=
[
1
1
]
v_2 = \left[ \begin{matrix} 1 \\ 1 \end{matrix} \right]
v2=[11]
A
v
2
=
[
1
1
4
−
2
]
[
1
1
]
=
[
2
2
]
=
2
v
2
Av_2 = \left[ \begin{matrix} 1 & 1 \\ 4 & -2 \end{matrix} \right] \left[ \begin{matrix} 1 \\ 1 \end{matrix} \right] =\left[ \begin{matrix} 2 \\ 2 \end{matrix} \right] =2 v_2
Av2=[141−2][11]=[22]=2v2
可以看出 A v 2 Av_2 Av2与 v 2 v_2 v2在一条直线上,2就是矩阵的特征值。
求解特征值和特征向量
根据定义,
A
v
=
λ
v
Av=\lambda v
Av=λv,得到
A
v
−
λ
v
=
0
Av-\lambda v=0
Av−λv=0,也就是
(
A
−
λ
I
)
v
=
0
(4)
(A-\lambda I)v=0\tag{4}
(A−λI)v=0(4)
为了使矩阵有非零解,矩阵的行列式
∣
A
−
λ
I
∣
=
0
|A-\lambda I|=0
∣A−λI∣=0。回到上面的矩阵,
A
=
[
1
1
4
−
2
]
A =\left[ \begin{matrix} 1 & 1 \\ 4 & -2 \end{matrix} \right]
A=[141−2]
则会得到
A
−
λ
I
=
[
1
−
λ
1
4
−
2
−
λ
]
A-\lambda I= \left[ \begin{matrix} 1-\lambda & 1 \\ 4 & -2-\lambda \end{matrix} \right]
A−λI=[1−λ41−2−λ]
令行列式
∣
A
−
λ
I
∣
=
0
|A-\lambda I| = 0
∣A−λI∣=0,我们会得到
∣
1
−
λ
1
4
−
2
−
λ
∣
=
0
\left| \begin{matrix} 1-\lambda & 1 \\ 4 & -2-\lambda \end{matrix} \right|=0
∣∣∣∣1−λ41−2−λ∣∣∣∣=0
也就是
(
1
−
λ
)
(
−
2
−
λ
)
−
1
×
4
=
0
(1-\lambda)(-2-\lambda)-1\times4=0
(1−λ)(−2−λ)−1×4=0,可以得到两个解,
λ
1
=
2
,
λ
2
=
−
3
\lambda_1=2, \lambda_2 = -3
λ1=2,λ2=−3,有了特征值之后,我们可以把特征值代入到公式
(
4
)
(4)
(4)中,当
λ
1
=
2
\lambda_1=2
λ1=2时,
[
1
−
2
1
4
−
2
−
2
]
v
1
=
0
(5)
\left[ \begin{matrix} 1-2 & 1 \\ 4 & -2-2 \end{matrix} \right]v_1 = 0 \tag{5}
[1−241−2−2]v1=0(5)
[
1
−
2
1
4
−
2
−
2
]
[
v
11
v
12
]
=
0
(6)
\left[ \begin{matrix} 1-2 & 1 \\ 4 & -2-2 \end{matrix} \right] \left[ \begin{matrix} v_{11} \\ v_{12} \end{matrix} \right] = 0 \tag{6}
[1−241−2−2][v11v12]=0(6)
最后得到这样的一个结果,
v
11
=
v
12
v_{11} = v_{12}
v11=v12,我们可以任意取值,比如
v
11
=
v
12
=
1
v_{11} = v_{12}=1
v11=v12=1,我们可以用同样的方法求得
λ
2
=
−
3
\lambda_2=-3
λ2=−3时的特征向量为
4
v
21
+
v
22
=
0
4v_{21}+v_{22}=0
4v21+v22=0,我们可以取
v
21
=
1
,
v
22
=
−
4
v_{21}=1,v_{22}=-4
v21=1,v22=−4作为
v
2
v_2
v2。
上面的一些关键数据先写下来,看看它的应用。
A
=
[
1
1
4
−
2
]
,
λ
1
=
2
,
λ
2
=
−
3
,
v
1
=
[
1
1
]
,
v
2
=
[
1
−
4
]
A =\left[ \begin{matrix} 1 & 1 \\ 4 & -2 \end{matrix} \right], \lambda_1 = 2, \lambda_2 = -3, v_1=\left[ \begin{matrix} 1 \\ 1 \end{matrix} \right] , v_2=\left[ \begin{matrix} 1 \\ -4 \end{matrix} \right]
A=[141−2],λ1=2,λ2=−3,v1=[11],v2=[1−4]
矩阵特征值的应用
应用–化成对角矩阵,解耦(decouple)。
我们设一个新的矩阵
P
=
[
v
1
v
2
]
P = [v_1 \ v_2]
P=[v1 v2],我们叫
P
P
P矩阵为coordinate transformation matrix(过渡矩阵),令
A
P
=
A
[
v
1
v
2
]
=
A
[
v
11
v
21
v
12
v
22
]
=
[
A
[
v
11
v
12
]
A
[
v
21
v
22
]
]
=
[
λ
1
[
v
11
v
12
]
λ
2
[
v
21
v
22
]
]
=
[
λ
1
v
11
λ
2
v
21
λ
2
v
12
λ
2
v
22
]
=
[
v
11
v
21
v
12
v
22
]
[
λ
1
0
0
λ
2
]
=
P
∧
AP = A[v_1 \ v_2] = A \left[ \begin{matrix} v_{11} & v_{21} \\ v_{12} & v_{22} \end{matrix}\right] = \left[ \begin{matrix} A\left[ \begin{matrix} v_{11} \\ v_{12} \end{matrix} \right] \ A \left[ \begin{matrix} v_{21} \\ v_{22} \end{matrix}\right] \end{matrix}\right] = \left[ \begin{matrix} \lambda_1 \left[ \begin{matrix} v_{11} \\ v_{12} \end{matrix}\right] \ \lambda_2 \left[ \begin{matrix} v_{21} \\ v_{22} \end{matrix}\right] \end{matrix}\right] = \left[ \begin{matrix} \lambda_1 v_{11} & \lambda_2 v_{21} \\ \lambda_2 v_{12} & \lambda_2 v_{22} \end{matrix}\right] = \left[ \begin{matrix} v_{11} & v_{21} \\ v_{12} & v_{22} \end{matrix}\right] \left[ \begin{matrix} \lambda_1 & 0 \\ 0 & \lambda_2 \end{matrix}\right] = P\wedge
AP=A[v1 v2]=A[v11v12v21v22]=[A[v11v12] A[v21v22]]=[λ1[v11v12] λ2[v21v22]]=[λ1v11λ2v12λ2v21λ2v22]=[v11v12v21v22][λ100λ2]=P∧
所以我们就得到了
A
P
=
P
∧
AP = P\wedge
AP=P∧,两边同时左乘
P
−
1
P^{-1}
P−1,我们就得到了
P
−
1
A
P
=
∧
P^{-1}AP = \wedge
P−1AP=∧。
接下来看看一个具体的例子,看看是如何来解耦的。
现代控制理论一般是用微分方程来表示。有这样一组方程
d x 1 d t = x 1 + x 2 \frac{dx_1}{dt} = x_1+x_2 dtdx1=x1+x2
d x 2 d t = 4 x 1 − 2 x 2 \frac{dx_2}{dt} = 4x_1-2x_2 dtdx2=4x1−2x2
两部分互相作用,直接求解比较难。上式可以表达成这种形式,
d
d
t
[
x
1
x
2
]
=
[
1
1
4
−
2
]
[
x
1
x
2
]
\frac{d}{dt}\left[ \begin{matrix} x_1 \\ x_2\end{matrix}\right] = \left[ \begin{matrix} 1 & 1 \\ 4 & -2\end{matrix}\right] \left[ \begin{matrix} x_1 \\ x_2\end{matrix}\right]
dtd[x1x2]=[141−2][x1x2]
用状态空间的表示方法就是 x ˙ = A x \dot{x}=Ax x˙=Ax,这个时候我们令 x = p y x = py x=py,那么 x ˙ = p y ˙ \dot{x} = p \dot{y} x˙=py˙,同时 A x = A p y Ax = Apy Ax=Apy,那么就会得到
x ˙ = p y ˙ = A p y \dot{x} = p\dot{y} = Apy x˙=py˙=Apy
上边的等式同时左乘 p − 1 p^{-1} p−1,就会得到
y ˙ = p − 1 A p y = ∧ y \dot{y} = p^{-1}Apy = \wedge y y˙=p−1Apy=∧y
y ˙ = [ 2 0 0 − 3 ] y \dot{y} =\left[ \begin{matrix} 2 & 0 \\ 0 & -3 \end{matrix}\right] y y˙=[200−3]y
这样就被解耦了,我们可以得到
y
1
˙
=
2
y
1
,
y
2
˙
=
−
3
y
2
\dot{y_1} = 2y_1,\ \dot{y_2} = -3y_2
y1˙=2y1, y2˙=−3y2
然后推出来
y 1 = c 1 e 2 t , y 2 = c 2 e − 3 t y_1 = c_1e^{2t},\ y_2 = c_2e^{-3t} y1=c1e2t, y2=c2e−3t
有了
y
y
y之后,我们可以返过去求
x
x
x
x
=
p
y
=
[
1
1
1
−
4
]
[
c
1
e
2
t
c
2
e
−
3
t
]
x = py = \left[ \begin{matrix} 1 & 1 \\ 1 & -4\end{matrix}\right] \left[ \begin{matrix} c_1e^{2t} \\ c_2e^{-3t} \end{matrix}\right]
x=py=[111−4][c1e2tc2e−3t]
数学基础-线性化-泰勒公式
首先看什么叫线性系统,线性系统应该符合叠加原理,也就是如果
x
˙
=
f
(
x
)
\dot{x} = f(x)
x˙=f(x),并且
x
1
,
x
2
x_1,x_2
x1,x2是这个问题的两个解,那么
x
3
=
k
1
x
1
+
k
2
x
2
(
k
1
,
k
2
是
常
数
)
x_3 = k_1x_1+k_2x_2(k_1,k_2是常数)
x3=k1x1+k2x2(k1,k2是常数)也是原问题的一个解,我们称这样的一个系统是一个线性的系统。
线性化要用到泰勒展开,让
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0处展开
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . . . . + f n ( x 0 ) n ! ( x − x 0 ) n f(x) = f(x_0)+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+......+\frac{f^n(x_0)}{n!}(x-x_0)^n f(x)=f(x0)+1!f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+......+n!fn(x0)(x−x0)n
如果 x − x 0 → 0 x-x_0\rightarrow 0 x−x0→0,那么 ( x − x 0 ) 2 (x-x_0)^2 (x−x0)2就会更加趋近于0,高阶项也会更加趋近于0,我们就可以舍弃后边的高阶项,所以我们会得到下边的近似的公式
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = k 1 + k 2 ( x − x 0 ) = k 2 x + k 1 − k 2 x 0 = k 2 x + b f(x) = f(x_0)+f'(x_0)(x-x_0) = k_1+k_2(x-x_0) = k_2x+k_1-k_2x_0 = k_2x+b f(x)=f(x0)+f′(x0)(x−x0)=k1+k2(x−x0)=k2x+k1−k2x0=k2x+b
这样,原来的系统就变成了一个线性化的系统。我们来举个例子。
原系统为 f ( x ) = s i n x f(x) = sinx f(x)=sinx,线性化之后
f ( x ) = s i n x 0 + c o s x 0 ( x − x 0 ) f(x) = sinx_0+cosx_0(x-x_0) f(x)=sinx0+cosx0(x−x0)
当x_0=0时,我们可以得到
f ( x ) = 0 + ( x − 0 ) = x f(x) = 0+(x-0)=x f(x)=0+(x−0)=x
也就是说, s i n x sinx sinx和 x x x在零点附近,两个函数值是近似相等的。
我们来验证一下, s i n π 6 = 0.5 sin\frac{\pi}{6} = 0.5 sin6π=0.5, π 6 = 3.14 6 = 0.52 \frac{\pi}{6} = \frac{3.14}{6}=0.52 6π=63.14=0.52,可以得到误差为 0.52 − 0.5 0.5 = 4 % \frac{0.52-0.5}{0.5} = 4\% 0.50.52−0.5=4%,再来看另外一个例子, s i n π 4 = 0.707 sin\frac{\pi}{4} = 0.707 sin4π=0.707, π 4 = 0.785 \frac{\pi}{4} = 0.785 4π=0.785,误差为 0.785 − 0.707 0.707 = 11 % \frac{0.785-0.707}{0.707} = 11\% 0.7070.785−0.707=11%,这是因为我们线性化的过程中,忽略了线性化的高阶项,所以我们做的是局部的线性化,而不是全局的线性化。