第2章:数学基础回顾
各位同学好,欢迎来到《鲁棒控制算法在汽车中的应用》的第二讲。说实话,每次讲到数学基础,总有人觉得枯燥。但我得说,这一章的内容,是咱们后续所有算法的根基。我自己做项目这么多年,踩过的坑十有八九都是因为基础没打牢。今天咱们就把线性代数、信号系统和范数理论这几个硬骨头啃一啃。
2.1 线性代数基础
线性代数在控制领域有多重要?我打个比方:它就像汽车的底盘。底盘不稳,再好的发动机也白搭。咱们重点看两个东西:矩阵范数和奇异值分解。
2.1.1 矩阵范数
矩阵范数,说白了就是衡量矩阵“大小”的一种方式。你可能会问:矩阵又不是数,怎么量大小?嗯,这里要注意,我们关心的是矩阵作为线性变换的“放大能力”。
常用的矩阵范数有几种:
- Frobenius范数:所有元素平方和再开方。我习惯叫它“矩阵的勾股定理”。
- 谱范数:最大奇异值。这个在鲁棒控制里用得最多。
- 1-范数:最大列和。
- ∞-范数:最大行和。
重点记忆:谱范数 = 最大奇异值。这是H∞控制的核心工具之一。
我在项目中遇到过一件事:有次做EPS(电动助力转向)的鲁棒控制器,模型降阶后系统失稳了。查了半天,原来是降阶时没注意谱范数的变化,导致模型误差被放大了。从那以后,我每次做模型降阶都会先算一下谱范数。
2.1.2 奇异值分解(SVD)
奇异值分解,英文叫Singular Value Decomposition,简称SVD。我个人觉得,这是线性代数里最优雅的定理之一。
它的核心思想很简单:任何一个矩阵A,都可以分解成三个矩阵的乘积:
A = U Σ V^T
其中:
- U和V是正交矩阵(可以理解为旋转)
- Σ是对角矩阵,对角线上的元素就是奇异值(可以理解为缩放)
你想想看,任何线性变换都可以拆成“旋转-缩放-旋转”三个步骤。是不是很直观?
实用技巧:在MATLAB里用svd(A)就能得到奇异值。我建议你拿到一个系统矩阵后,先看看它的奇异值分布。如果奇异值衰减很快,说明系统有冗余,可以考虑降阶。
我曾经用SVD做过一个车辆横向动力学模型的降阶。原模型有12阶,但奇异值分析后发现,前4个奇异值占了总能量的95%以上。果断降到4阶,仿真精度损失不到1%,但计算速度快了3倍。
2.2 信号与系统基础
信号与系统,是控制理论的另一条腿。咱们重点看两种描述方式:传递函数和状态空间。
2.2.1 传递函数
传递函数描述的是系统的输入输出关系。对于线性时不变系统,它是个有理函数:
G(s) = (b_m s^m + ... + b_0) / (a_n s^n + ... + a_0)
这里有个坑:传递函数只能描述零初始条件下的系统。如果你做的是非线性系统或者有初始状态,那就不太够用了。
避坑指南:我曾经在做一个主动悬架项目时,直接用传递函数设计控制器,结果实车测试时发现低频响应和仿真对不上。后来才发现,悬架的初始压缩状态没考虑进去。从那以后,我遇到有初始状态的问题,都会优先用状态空间。
2.2.2 状态空间
状态空间是现代控制理论的基础。它用一组一阶微分方程来描述系统:
ẋ = A x + B u
y = C x + D u
其中:
- x是状态向量(比如车速、横摆角速度)
- u是输入向量(比如方向盘转角、制动压力)
- y是输出向量(比如侧向加速度)
我个人习惯用状态空间,原因有三:
- 可以处理多输入多输出系统(MIMO)
- 能直接考虑初始状态
- 便于计算机仿真和控制器设计
举个例子,一个简化的车辆横向动力学模型,状态空间可以写成:
状态变量:x = [侧向速度, 横摆角速度]
输入:u = [前轮转角]
输出:y = [侧向加速度]
A = [-C_f/m -C_f*l_f/m;
-C_f*l_f/I_z -C_f*l_f^2/I_z]
B = [C_f/m; C_f*l_f/I_z]
C = [-C_f/m -C_f*l_f/m]
D = [C_f/m]
嗯,这里要注意,C_f是前轮侧偏刚度,m是质量,l_f是质心到前轴的距离,I_z是横摆转动惯量。这些参数在实际项目中都需要通过实验标定。
2.3 范数理论
范数理论是鲁棒控制的语言。没有它,你没法量化“系统有多稳定”或者“扰动有多大”。咱们重点看两个:H2范数和H∞范数。
2.3.1 H2范数
H2范数,可以理解为系统对单位白噪声输入的输出能量。说白了,就是系统在随机扰动下的平均响应大小。
数学定义:
||G||_2 = sqrt( (1/2π) ∫_{-∞}^{∞} trace(G(jω)^* G(jω)) dω )
看着复杂?其实在MATLAB里一行代码就搞定:
h2norm = norm(sys, 2);
应用场景:H2范数常用于LQR(线性二次型调节器)设计。我做过一个ACC(自适应巡航)项目,就用H2范数来优化跟车性能,目标是让车速波动最小。
2.3.2 H∞范数
H∞范数,是鲁棒控制的核心概念。它衡量的是系统在最坏情况下的增益——也就是系统对输入信号的“最大放大倍数”。
数学定义:
||G||_∞ = sup_ω σ_max(G(jω))
其中σ_max是最大奇异值。说白了,H∞范数就是系统频率响应的峰值。
你想想看,如果系统的H∞范数小于1,那就意味着任何输入信号经过系统后,输出能量都不会被放大。这就是小增益定理的基础。
实用技巧:在MATLAB里用hinfnorm(sys)或者norm(sys, inf)就能算H∞范数。我建议你设计完控制器后,先算一下闭环系统的H∞范数,如果大于1,说明系统可能不稳定。
我曾经在做一个线控制动系统的鲁棒控制器时,设计完的控制器仿真效果很好,但H∞范数算出来是1.2。我当时觉得问题不大,结果实车测试时,在某个特定频率下系统开始振荡。后来把控制器重新调参,让H∞范数降到0.85以下,问题才解决。嗯,这个教训我一直记着。
2.4 小结
这一章的内容比较多,但都是后续章节的基础。我建议你:
- 熟练掌握SVD,它是分析系统特性的利器
- 状态空间和传递函数都要会用,各有各的适用场景
- H2和H∞范数要理解其物理意义,而不仅仅是数学公式
下一章,咱们会讲鲁棒控制的基本框架,到时候这些数学工具就会派上用场了。有什么问题,欢迎课后交流。
课后练习:找一个你熟悉的车辆动力学模型(比如二自由度自行车模型),写出它的状态空间表达式,然后计算它的H2范数和H∞范数。看看这两个范数分别反映了系统的什么特性。