第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是输出向量(比如侧向加速度)

我个人习惯用状态空间,原因有三:

  1. 可以处理多输入多输出系统(MIMO)
  2. 能直接考虑初始状态
  3. 便于计算机仿真和控制器设计

举个例子,一个简化的车辆横向动力学模型,状态空间可以写成:

状态变量: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∞范数。看看这两个范数分别反映了系统的什么特性。